Merge pull request #1804 from esdrubal/processmodule
authorMarcos Henrich <marcoshenrich@gmail.com>
Tue, 16 Jun 2015 17:15:29 +0000 (18:15 +0100)
committerMarcos Henrich <marcoshenrich@gmail.com>
Tue, 16 Jun 2015 17:15:29 +0000 (18:15 +0100)
Adds managed assemblies to Process.Modules.

126 files changed:
.gitignore
.gitmodules
configure.ac
eglib/src/gmisc-unix.c
external/Lucene.Net [deleted submodule]
external/Lucene.Net.Light [new submodule]
mcs/class/System.Core/ReferenceSources/SR.cs
mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedFile.cs
mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedView.cs [new file with mode: 0644]
mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs [deleted file]
mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs [deleted file]
mcs/class/System.Core/Test/System.IO.MemoryMappedFiles/MemoryMappedFileTest.cs
mcs/class/System.Core/common_System.Core.dll.sources
mcs/class/System.IO.Compression/SharpCompress/Archive/AbstractWritableArchive.cs
mcs/class/System.IO.Compression/SharpCompress/Archive/Zip/ZipArchive.cs
mcs/class/System.IO.Compression/SharpCompress/Writer/Zip/ZipWriter.cs
mcs/class/System.IO.Compression/ZipArchive.cs
mcs/class/System.Net.Http/System.Net.Http.Headers/HeaderInfo.cs
mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs
mcs/class/System.Net.Http/System.Net.Http/HttpClientHandler.cs
mcs/class/System.Net.Http/System.Net.Http/HttpContent.cs
mcs/class/System.Net.Http/Test/System.Net.Http/MultipartContentTest.cs
mcs/class/System.Runtime.Serialization/System.Runtime.Serialization-net_4_5.csproj
mcs/class/System.ServiceModel.Web/System.ServiceModel.Web_test.dll.sources
mcs/class/System.ServiceModel.Web/Test/System.ServiceModel.Web/WebServiceHostTest.cs
mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/AsymmetricSecurityBindingElementTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/BinaryMessageEncodingBindingElementTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/CustomBindingTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/HttpTransportBindingElementTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/SecurityBindingElementTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/TcpTransportBindingElementTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/MetadataResolverTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceAuthorizationBehaviorTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceDebugBehaviorTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ServiceEndpointTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331Test.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/Bug652331_2Test.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/ChannelDispatcherTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Dispatcher/DispatchOperationTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Security/SecurityMessagePropertyTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/CallbackBehaviorAttributeTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ChannelFactory_1Test.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBaseTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientBase_InteractiveChannelInitializerTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ClientCredentialsSecurityTokenManagerTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/IntegratedConnectionTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/NetTcpBindingTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/OperationContextTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostBaseTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel/ServiceHostTest.cs
mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs
mcs/class/System.Web/System.Web-net_4_5.csproj
mcs/class/System.Web/System.Web-plainweb-net_4_5.csproj
mcs/class/System.Web/System.Web.Configuration_2.0/HttpRuntimeSection.cs
mcs/class/System.Web/System.Web.Hosting/HostingEnvironment.cs
mcs/class/System.Web/System.Web/DynamicModuleManager.cs [new file with mode: 0644]
mcs/class/System.Web/System.Web/HttpApplication.cs
mcs/class/System.Web/net_4_5_System.Web.dll.sources
mcs/class/System.Xaml/Assembly/AssemblyInfo.cs
mcs/class/System/System-bare-net_4_5.csproj
mcs/class/System/System-net_4_5.csproj
mcs/class/System/System-secxml-net_4_5.csproj
mcs/class/System/System.Net/HttpWebRequest.cs
mcs/class/System/Test/System.Net/HttpWebRequestTest.cs
mcs/class/System/Test/System.Net/HttpWebResponseTest.cs
mcs/class/System/Test/System.Net/WebClientTest.cs
mcs/class/WindowsBase/Assembly/AssemblyInfo.cs
mcs/class/corlib/corlib-net_4_5.csproj
mcs/class/monodoc/monodoc.dll.sources
mcs/class/test-helpers/NetworkHelpers.cs
mcs/mcs/generic.cs
mcs/mcs/property.cs
mcs/tests/gtest-631.cs [new file with mode: 0644]
mcs/tests/gtest-632.cs [new file with mode: 0644]
mcs/tests/test-926.cs [new file with mode: 0644]
mcs/tests/ver-il-net_4_5.xml
mono/io-layer/processes.c
mono/metadata/class-internals.h
mono/metadata/class.c
mono/metadata/culture-info-tables.h
mono/metadata/domain-internals.h
mono/metadata/file-mmap-posix.c
mono/metadata/icall.c
mono/metadata/loader.c
mono/metadata/metadata.c
mono/metadata/object-offsets.h
mono/mini/Makefile.am.in
mono/mini/TestDriver.cs
mono/mini/aot-compiler.c
mono/mini/aot-runtime.c
mono/mini/aot-tests.cs
mono/mini/cpu-arm.md
mono/mini/decompose.c
mono/mini/dwarfwriter.c
mono/mini/exceptions-x86.c
mono/mini/graph.c
mono/mini/helpers.c
mono/mini/ir-emit.h
mono/mini/jit-icalls.c
mono/mini/jit-icalls.h
mono/mini/method-to-ir.c
mono/mini/mini-amd64.c
mono/mini/mini-arm.h
mono/mini/mini-exceptions.c
mono/mini/mini-generic-sharing.c
mono/mini/mini-ppc.c
mono/mini/mini-ppc.h
mono/mini/mini-runtime.c
mono/mini/mini-trampolines.c
mono/mini/mini-x86.c
mono/mini/mini.c
mono/mini/mini.h
mono/mini/trace.c
mono/tests/Makefile.am
mono/tests/finalizer-exception.cs
mono/utils/mono-compiler.h
mono/utils/mono-dl-darwin.c
mono/utils/mono-dl-posix.c
mono/utils/mono-dl-windows.c
mono/utils/mono-dl.h
mono/utils/mono-semaphore.c
mono/utils/mono-threads.h
msvc/scripts/order.xml
tools/locale-builder/Driver.cs
winconfig.h

index e5b638b53e876f7e84a53986c778fa3d6f435fdf..65f1935f1ee1c0088bc93f5d0603994d70e61a98 100644 (file)
@@ -44,6 +44,8 @@ Ankh.NoLoad
 _ReSharper*/
 *.resharper
 [Tt]est[Rr]esult*
+*.orig
+*.rej
 
 # NuGet packages
 !.nuget/*
index 858838fc78f6b5a52e6602e3ee0fcf4723143f93..ee9a2ecdffda2721ce68ac538616e36d829f6b0a 100644 (file)
@@ -17,9 +17,6 @@
 [submodule "external/ikvm"]
        path = external/ikvm
        url = git://github.com/mono/ikvm-fork.git
-[submodule "external/Lucene.Net"]
-       path = external/Lucene.Net
-       url = git://github.com/mono/lucene.net.git
 [submodule "external/ikdasm"]
        path = external/ikdasm
        url = git://github.com/mono/ikdasm.git
@@ -30,3 +27,6 @@
 [submodule "external/reference-assemblies"]
        path = external/binary-reference-assemblies
        url = git://github.com/mono/reference-assemblies.git
+[submodule "external/Lucene.Net.Light"]
+       path = external/Lucene.Net.Light
+       url = git://github.com/mono/Lucene.Net.Light.git
index f02e6526f9e7966753e57442c62e01c3364c3ebe..9dc1c37d0228b83fdc2f17f9830b23217db4d0dc 100644 (file)
@@ -428,7 +428,7 @@ AC_PROG_LD_GNU
 
 AM_ICONV()
 
-AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h)
+AC_CHECK_HEADERS(sys/filio.h sys/sockio.h netdb.h utime.h sys/utime.h semaphore.h sys/un.h linux/rtc.h sys/syscall.h sys/mkdev.h sys/uio.h sys/param.h sys/sysctl.h libproc.h sys/prctl.h)
 AC_CHECK_HEADERS(sys/param.h sys/socket.h sys/ipc.h sys/sem.h sys/utsname.h alloca.h ucontext.h pwd.h sys/select.h netinet/tcp.h netinet/in.h unistd.h sys/types.h link.h asm/sigcontext.h sys/inotify.h arpa/inet.h complex.h)
 AC_CHECK_HEADERS([linux/netlink.h linux/rtnetlink.h],
                   [], [], [#include <stddef.h>
@@ -1176,6 +1176,7 @@ if test x$host_win32 = xno; then
        AC_CHECK_FUNCS(dladdr)
        AC_CHECK_FUNCS(sysconf)
        AC_CHECK_FUNCS(getrlimit)
+       AC_CHECK_FUNCS(prctl)
 
        AC_CHECK_FUNCS(sched_setaffinity)
        AC_CHECK_FUNCS(sched_getcpu)
@@ -2097,6 +2098,7 @@ if test x$host_win32 = xno; then
        AC_CHECK_FUNCS(fstatat mknodat readlinkat)
        AC_CHECK_FUNCS(readv writev preadv pwritev)
        AC_CHECK_FUNCS(setpgid)
+       AC_CHECK_FUNCS(system)
        AC_CHECK_SIZEOF(size_t)
        AC_CHECK_TYPES([blksize_t], [AC_DEFINE(HAVE_BLKSIZE_T)], , 
                [#include <sys/types.h>
@@ -3239,7 +3241,7 @@ case "$host" in
        X11="libX11.so.6"
        ;;
     *-*-*freebsd*)
-       LIBC="libc.so"
+       LIBC="libc.so.7"
        INTL="libintl.so"
        SQLITE="libsqlite.so"
        SQLITE3="libsqlite3.so"
index c7bd3f8e994c3beb2160b7a727e10aa3f84daa0a..273024871c5f890e01410f8a12094cf256cd33d8 100644 (file)
@@ -104,13 +104,15 @@ get_pw_data (void)
                                home_dir = g_strdup (pw.pw_dir);
                        if (user_name == NULL)
                                user_name = g_strdup (pw.pw_name);
-               } else {
-                       if (user_name == NULL)
-                               user_name = "somebody";
                }
        }
 #endif
 
+       if (user_name == NULL)
+               user_name = "somebody";
+       if (home_dir == NULL)
+               home_dir = "/";
+
        pthread_mutex_unlock (&pw_lock);
 }
 
diff --git a/external/Lucene.Net b/external/Lucene.Net
deleted file mode 160000 (submodule)
index 88fb67b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 88fb67b07621dfed054d8d75fd50672fb26349df
diff --git a/external/Lucene.Net.Light b/external/Lucene.Net.Light
new file mode 160000 (submodule)
index 0000000..85978b7
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 85978b7eb94738f516824341213d5e94060f5284
index 3c4d8e7ebcfcc3889a3320246c43c45121f4702a..c52050141f7f7d6a3b8e8200fdd77ff4d93adf22 100644 (file)
@@ -100,4 +100,8 @@ partial class SR
        public const string Cryptography_UnknownEllipticCurve = "Cryptography_UnknownEllipticCurve";
        public const string Cryptography_UnknownEllipticCurveAlgorithm = "Cryptography_UnknownEllipticCurveAlgorithm";
        public const string Cryptography_UnknownPaddingMode = "Cryptography_UnknownPaddingMode";
+
+       public const string InvalidOperation_ViewIsNull = "InvalidOperation_ViewIsNull";
+       public const string ObjectDisposed_ViewAccessorClosed = "ObjectDisposed_ViewAccessorClosed";
+       public const string NotSupported_MMViewStreamsFixedLength = "NotSupported_MMViewStreamsFixedLength";
 }
index 5bd03a9fe3b3b9e4ed5b3b679eaee3f1872b1692..5bba4d9209b21555441b2a1620e3efbd62864ca5 100644 (file)
@@ -298,7 +298,8 @@ namespace System.IO.MemoryMappedFiles
 
                public MemoryMappedViewStream CreateViewStream (long offset, long size, MemoryMappedFileAccess access)
                {
-                       return new MemoryMappedViewStream (handle, offset, size, access);
+                       var view = MemoryMappedView.Create (handle, offset, size, access);
+                       return new MemoryMappedViewStream (view);
                }
 
                public MemoryMappedViewAccessor CreateViewAccessor ()
@@ -313,7 +314,8 @@ namespace System.IO.MemoryMappedFiles
 
                public MemoryMappedViewAccessor CreateViewAccessor (long offset, long size, MemoryMappedFileAccess access)
                {
-                       return new MemoryMappedViewAccessor (handle, offset, size, access);
+                       var view = MemoryMappedView.Create (handle, offset, size, access);
+                       return new MemoryMappedViewAccessor (view);
                }
 
                MemoryMappedFile ()
@@ -358,6 +360,34 @@ namespace System.IO.MemoryMappedFiles
                                throw new NotImplementedException ();
                        }
                }
+
+               // This converts a MemoryMappedFileAccess to a FileAccess. MemoryMappedViewStream and
+               // MemoryMappedViewAccessor subclass UnmanagedMemoryStream and UnmanagedMemoryAccessor, which both use
+               // FileAccess to determine whether they are writable and/or readable.
+               internal static FileAccess GetFileAccess (MemoryMappedFileAccess access) {
+
+                       if (access == MemoryMappedFileAccess.Read) {
+                               return FileAccess.Read;
+                       }
+                       if (access == MemoryMappedFileAccess.Write) {
+                               return FileAccess.Write;
+                       }
+                       else if (access == MemoryMappedFileAccess.ReadWrite) {
+                               return FileAccess.ReadWrite;
+                       }
+                       else if (access == MemoryMappedFileAccess.CopyOnWrite) {
+                               return FileAccess.ReadWrite;
+                       }
+                       else if (access == MemoryMappedFileAccess.ReadExecute) {
+                               return FileAccess.Read;
+                       }
+                       else if (access == MemoryMappedFileAccess.ReadWriteExecute) {
+                               return FileAccess.ReadWrite;
+                       }
+
+                       // If we reached here, access was invalid.
+                       throw new ArgumentOutOfRangeException ("access");
+               }
        }
 }
 
diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedView.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedView.cs
new file mode 100644 (file)
index 0000000..9362f00
--- /dev/null
@@ -0,0 +1,118 @@
+//
+// MemoryMappedView.cs
+//
+// Authors:
+//     Marcos Henrich (marcos.henrich@gmail.com)
+//
+// Copyright (C) 2015, Xamarin, Inc
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Collections.Generic;
+using Microsoft.Win32.SafeHandles;
+
+namespace System.IO.MemoryMappedFiles
+{
+       internal class MemoryMappedView : IDisposable {
+               private SafeMemoryMappedViewHandle m_viewHandle;
+               private Int64 m_pointerOffset;
+               private Int64 m_size;
+               private MemoryMappedFileAccess m_access;
+
+               [System.Security.SecurityCritical]
+               private unsafe MemoryMappedView(SafeMemoryMappedViewHandle viewHandle, Int64 pointerOffset, 
+                                                                                       Int64 size, MemoryMappedFileAccess access) {
+
+                       m_viewHandle = viewHandle;
+                       m_pointerOffset = pointerOffset;
+                       m_size = size;
+                       m_access = access;
+               }
+
+               internal SafeMemoryMappedViewHandle ViewHandle {
+                       [System.Security.SecurityCritical]
+                       get {
+                               return m_viewHandle;
+                       }
+               }
+
+               internal Int64 PointerOffset {
+                       get {
+                               return m_pointerOffset;
+                       }
+               }
+
+               internal Int64 Size {
+                       get {
+                               return m_size;
+                       }
+               }
+
+               internal MemoryMappedFileAccess Access {
+                       get {
+                               return m_access;
+                       }
+               }
+
+               internal unsafe static MemoryMappedView Create (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
+               {
+                       IntPtr base_address;
+                       IntPtr mmap_handle;
+
+                       MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address);
+
+                       var safe_handle = new SafeMemoryMappedViewHandle (mmap_handle, base_address, size);
+
+                       // MemoryMapImpl.Map returns a base_address to the offset so MemoryMappedView is initiated
+                       // no offset.
+                       return new MemoryMappedView (safe_handle, 0, size, access);
+               }
+
+               public void Flush (IntPtr capacity)
+               {
+                       MemoryMapImpl.Flush (m_viewHandle.DangerousGetHandle ());
+               }
+               
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (m_viewHandle != null && !m_viewHandle.IsClosed) {
+                               m_viewHandle.Dispose ();
+                       }
+               }
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+               internal bool IsClosed {
+                       get {
+                               return (m_viewHandle == null || m_viewHandle.IsClosed);
+                       }
+               }
+       }
+}
+
diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs
deleted file mode 100644 (file)
index 8bb8fc3..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// MemoryMappedViewAccessor.cs
-//
-// Authors:
-//     Zoltan Varga (vargaz@gmail.com)
-//
-// Copyright (C) 2009, Novell, Inc (http://www.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.
-//
-
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-using Microsoft.Win32.SafeHandles;
-
-namespace System.IO.MemoryMappedFiles
-{
-       public sealed class MemoryMappedViewAccessor : UnmanagedMemoryAccessor, IDisposable {
-               IntPtr mmap_handle;
-               SafeMemoryMappedViewHandle safe_handle;
-               long pointerOffset;
-
-               internal MemoryMappedViewAccessor (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
-               {
-                       pointerOffset = offset;
-                       Create (handle, offset, size, access);
-               }
-
-               public long PointerOffset
-               {
-                       get { return pointerOffset; }
-               }
-
-               static FileAccess ToFileAccess (MemoryMappedFileAccess access)
-               {
-                       switch (access){
-                       case MemoryMappedFileAccess.CopyOnWrite:
-                       case MemoryMappedFileAccess.ReadWrite:
-                       case MemoryMappedFileAccess.ReadWriteExecute:
-                               return FileAccess.ReadWrite;
-                               
-                       case MemoryMappedFileAccess.Write:
-                               return FileAccess.Write;
-                               
-                       case MemoryMappedFileAccess.ReadExecute:
-                       case MemoryMappedFileAccess.Read:
-                       default:
-                               return FileAccess.Read;
-                       }
-               }
-               
-               unsafe void Create (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
-               {
-                       IntPtr base_address;
-
-                       MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address);
-                       safe_handle = new SafeMemoryMappedViewHandle (mmap_handle, base_address, size);
-
-                       Initialize (safe_handle, 0, size, ToFileAccess (access));
-               }
-
-               public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle {
-                       get {
-                               return safe_handle;
-                       }
-               }
-
-               protected override void Dispose (bool disposing)
-               {
-                       base.Dispose (disposing);
-               }
-
-               void IDisposable.Dispose () {
-                       Dispose (true);
-               }
-
-               public void Flush ()
-               {
-                       MemoryMapImpl.Flush (mmap_handle);
-               }
-       }
-}
-
diff --git a/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs b/mcs/class/System.Core/System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs
deleted file mode 100644 (file)
index 6fbaca6..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// MemoryMappedViewStream.cs
-//
-// Authors:
-//     Zoltan Varga (vargaz@gmail.com)
-//
-// Copyright (C) 2009, Novell, Inc (http://www.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.
-//
-
-
-using System;
-using System.IO;
-using Microsoft.Win32.SafeHandles;
-
-namespace System.IO.MemoryMappedFiles
-{
-       public sealed class MemoryMappedViewStream : UnmanagedMemoryStream {
-               IntPtr mmap_handle;
-               object monitor;
-               long pointerOffset;
-
-               internal MemoryMappedViewStream (IntPtr handle, long offset, long size, MemoryMappedFileAccess access) {
-                       pointerOffset = offset;
-                       monitor = new Object ();
-                       CreateStream (handle, offset, size, access);
-               }
-
-               public long PointerOffset
-               {
-                       get { return pointerOffset; }
-               }
-
-               public SafeMemoryMappedViewHandle SafeMemoryMappedViewHandle { 
-                       get {
-                               throw new NotImplementedException ();
-                       }
-               }
-
-               unsafe void CreateStream (IntPtr handle, long offset, long size, MemoryMappedFileAccess access)
-               {
-                       IntPtr base_address;
-
-                       MemoryMapImpl.Map (handle, offset, ref size, access, out mmap_handle, out base_address);
-
-                       FileAccess faccess;
-                       switch (access) {
-                       case MemoryMappedFileAccess.ReadWrite:
-                               faccess = FileAccess.ReadWrite;
-                               break;
-                       case MemoryMappedFileAccess.Read:
-                               faccess = FileAccess.Read;
-                               break;
-                       case MemoryMappedFileAccess.Write:
-                               faccess = FileAccess.Write;
-                               break;
-                       default:
-                               throw new NotImplementedException ("access mode " + access + " not supported.");
-                       }
-                       Initialize ((byte*)base_address, size, size, faccess);
-               }
-                
-               protected override void Dispose (bool disposing)
-               {
-                       base.Dispose (disposing);
-                       lock (monitor) {
-                               if (mmap_handle != (IntPtr)(-1)) {
-                                       MemoryMapImpl.Unmap (mmap_handle);
-                                       mmap_handle = (IntPtr)(-1);
-                               }
-                       }
-               }
-
-               public override void Flush ()
-               {
-                       MemoryMapImpl.Flush (mmap_handle);
-               }
-       }
-}
-
index c07666a29c6d97de26b9037c2e5d60e95c43f584..b241e651c3db5e9cdb49127685fd57cbe60de1c4 100644 (file)
@@ -221,7 +221,8 @@ namespace MonoTests.System.IO.MemoryMappedFiles {
                        var expected = "lo!";
 
                        using (var v = file.CreateViewAccessor (offset, expected.Length)) {
-                               Assert.AreEqual (offset, v.PointerOffset);
+                               // PointerOffset Mono implementation is always 0.
+                               // Assert.AreEqual (offset, v.PointerOffset);
 
                                var a = new byte [expected.Length];
                                var n = v.ReadArray (0, a, 0, expected.Length);
@@ -238,7 +239,8 @@ namespace MonoTests.System.IO.MemoryMappedFiles {
                        var expected = "lo!";
 
                        using (var v = file.CreateViewStream (offset, expected.Length)) {
-                               Assert.AreEqual (offset, v.PointerOffset);
+                               // PointerOffset Mono implementation is always 0.
+                               // Assert.AreEqual (offset, v.PointerOffset);
 
                                var a = new byte [expected.Length];
                                var n = v.Read (a, 0, expected.Length);
index a90d09f09b80542aa643045b2c713b10943c121d..c3524281a3f3cf21bf5834eae295f1c51533e3d1 100644 (file)
@@ -3,8 +3,7 @@
 Assembly/AssemblyInfo.cs
 System/Util.cs
 System.IO.MemoryMappedFiles/MemoryMappedFile.cs
-System.IO.MemoryMappedFiles/MemoryMappedViewStream.cs
-System.IO.MemoryMappedFiles/MemoryMappedViewAccessor.cs
+System.IO.MemoryMappedFiles/MemoryMappedView.cs
 Microsoft.Win32.SafeHandles/SafeMemoryMappedFileHandle.cs
 Microsoft.Win32.SafeHandles/SafeMemoryMappedViewHandle.cs
 
@@ -34,6 +33,8 @@ ReferenceSources/Strings.cs
 
 ../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/Enums.cs
 ../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedFileSecurity.cs
+../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedViewAccessor.cs
+../../../external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedViewStream.cs
 
 ../../../external/referencesource/System.Core/System/Linq/Enumerable.cs
 ../../../external/referencesource/System.Core/System/Linq/IQueryable.cs
index f0be3b0bc06132f34bd7b0794d5ca55acb467a1d..96af8c4131db2de4bf4b2d0d0b949f2ca6af6278 100644 (file)
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Text;
 using SharpCompress.Common;
 
 namespace SharpCompress.Archive
@@ -105,11 +106,11 @@ namespace SharpCompress.Archive
             return false;
         }
 
-        public void SaveTo(Stream stream, CompressionInfo compressionType)
+        public void SaveTo(Stream stream, CompressionInfo compressionType, Encoding encoding = null)
         {
             //reset streams of new entries
             newEntries.Cast<IWritableArchiveEntry>().ForEach(x => x.Stream.Seek(0, SeekOrigin.Begin));
-            SaveTo(stream, compressionType, OldEntries, newEntries);
+            SaveTo(stream, compressionType, encoding ?? ArchiveEncoding.Default, OldEntries, newEntries);
         }
 
         protected TEntry CreateEntry(string key, Stream source, long size, DateTime? modified,
@@ -125,7 +126,7 @@ namespace SharpCompress.Archive
         protected abstract TEntry CreateEntryInternal(string key, Stream source, long size, DateTime? modified,
                                               bool closeStream);
 
-        protected abstract void SaveTo(Stream stream, CompressionInfo compressionType,
+        protected abstract void SaveTo(Stream stream, CompressionInfo compressionType, Encoding encoding,
                                        IEnumerable<TEntry> oldEntries, IEnumerable<TEntry> newEntries);
 
         public override void Dispose()
index 5c96e8e55543ff9600024a7fdacc1caac6ed210c..e2782dad9ec3ed05163b7cb99bc5af52f02a1f54 100644 (file)
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Text;
 using SharpCompress.Common;
 using SharpCompress.Common.Zip;
 using SharpCompress.Common.Zip.Headers;
@@ -205,13 +206,13 @@ namespace SharpCompress.Archive.Zip
                     }
                 }
             }
-        }
+        }     
 
-        protected override void SaveTo(Stream stream, CompressionInfo compressionInfo,
+        protected override void SaveTo(Stream stream, CompressionInfo compressionInfo, Encoding encoding,
                                        IEnumerable<ZipArchiveEntry> oldEntries,
                                        IEnumerable<ZipArchiveEntry> newEntries)
         {
-            using (var writer = new ZipWriter(stream, compressionInfo, string.Empty))
+            using (var writer = new ZipWriter(stream, compressionInfo, string.Empty, encoding))
             {
                 foreach (var entry in oldEntries.Concat(newEntries)
                                                 .Where(x => !x.IsDirectory))
index 76a8853d0a05b03a39fdc4cec6eb4bb1e1a306ec..70a2eb7d8c4f103c144008895004176361d72d19 100644 (file)
@@ -30,16 +30,18 @@ namespace SharpCompress.Writer.Zip
 
         private readonly List<ZipCentralDirectoryEntry> entries = new List<ZipCentralDirectoryEntry>();
         private readonly string zipComment;
+        private readonly Encoding encoding;
         private long streamPosition;
 
 #if PPMd
         private readonly PpmdProperties ppmdProperties; // Caching properties to speed up PPMd.
 #endif
 
-        public ZipWriter(Stream destination, CompressionInfo compressionInfo, string zipComment)
+        public ZipWriter(Stream destination, CompressionInfo compressionInfo, string zipComment, Encoding encoding = null)
             : base(ArchiveType.Zip)
         {
             this.zipComment = zipComment ?? string.Empty;
+            this.encoding = encoding ?? ArchiveEncoding.Default;
 
             switch (compressionInfo.Type)
             {
@@ -137,11 +139,11 @@ namespace SharpCompress.Writer.Zip
 
         private int WriteHeader(string filename, DateTime? modificationTime)
         {
-            byte[] encodedFilename = Encoding.UTF8.GetBytes(filename);
+            byte[] encodedFilename = encoding.GetBytes(filename);
 
             OutputStream.Write(BitConverter.GetBytes(ZipHeaderFactory.ENTRY_HEADER_BYTES), 0, 4);
             OutputStream.Write(new byte[] {63, 0}, 0, 2); //version
-            HeaderFlags flags = HeaderFlags.UTF8;
+            HeaderFlags flags = encoding == Encoding.UTF8 ? HeaderFlags.UTF8 : (HeaderFlags)0;
             if (!OutputStream.CanSeek)
             {
                 flags |= HeaderFlags.UsePostDataDescriptor;
@@ -172,7 +174,7 @@ namespace SharpCompress.Writer.Zip
 
         private void WriteEndRecord(uint size)
         {
-            byte[] encodedComment = Encoding.UTF8.GetBytes(zipComment);
+            byte[] encodedComment = encoding.GetBytes(zipComment);
 
             OutputStream.Write(new byte[] {80, 75, 5, 6, 0, 0, 0, 0}, 0, 8);
             OutputStream.Write(BitConverter.GetBytes((ushort) entries.Count), 0, 2);
index feb5e1b705dec780327d9b62586094ac7bfc1faa..411aadc930f86c2c424f981fc12d0437a01862ca 100644 (file)
@@ -202,7 +202,7 @@ namespace System.IO.Compression
                private void Save()
                {
                        using (var newZip = new MemoryStream()) {
-                               zipFile.SaveTo(newZip, CompressionType.Deflate);
+                               zipFile.SaveTo(newZip, CompressionType.Deflate, entryNameEncoding ?? Encoding.UTF8);
 
                                stream.SetLength(0);
                                stream.Position = 0;
index ceddbfa125028204793ef5eb2a614c2e9a6d50ba..9ca277dbbcd3ed5f92ef9a04e09fa3b6b5cade31 100644 (file)
@@ -134,9 +134,11 @@ namespace System.Net.Http.Headers
                        this.HeaderKind = headerKind;
                }
 
-               public static HeaderInfo CreateSingle<T> (string name, TryParseDelegate<T> parser, HttpHeaderKind headerKind)
+               public static HeaderInfo CreateSingle<T> (string name, TryParseDelegate<T> parser, HttpHeaderKind headerKind, Func<object, string> toString = null)
                {
-                       return new HeaderTypeInfo<T, object> (name, parser, headerKind);
+                       return new HeaderTypeInfo<T, object> (name, parser, headerKind) {
+                               CustomToString = toString
+                       };
                }
 
                //
@@ -152,6 +154,10 @@ namespace System.Net.Http.Headers
                        return CreateCollection (headers, this);
                }
 
+               public Func<object, string> CustomToString {
+                       get; private set;
+               }
+
                public virtual string Separator {
                        get {
                                // Needed for AllowsMany only
index 8fdb011cd51fa6833db66e62c5f45ad0a32afd63..9a7248582a1a0ff88cb46cc9df3410785acc4551 100644 (file)
@@ -48,7 +48,7 @@ namespace System.Net.Http.Headers
 
                        public readonly Func<object, string> CustomToString;
 
-                       public HeaderBucket (object parsed, Func<object, string> converter = null)
+                       public HeaderBucket (object parsed, Func<object, string> converter)
                        {
                                this.Parsed = parsed;
                                this.CustomToString = converter;
@@ -104,18 +104,18 @@ namespace System.Net.Http.Headers
                                HeaderInfo.CreateSingle<byte[]> ("Content-MD5", Parser.MD5.TryParse, HttpHeaderKind.Content),
                                HeaderInfo.CreateSingle<ContentRangeHeaderValue> ("Content-Range", ContentRangeHeaderValue.TryParse, HttpHeaderKind.Content),
                                HeaderInfo.CreateSingle<MediaTypeHeaderValue> ("Content-Type", MediaTypeHeaderValue.TryParse, HttpHeaderKind.Content),
-                               HeaderInfo.CreateSingle<DateTimeOffset> ("Date", Parser.DateTime.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
+                               HeaderInfo.CreateSingle<DateTimeOffset> ("Date", Parser.DateTime.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response, Parser.DateTime.ToString),
                                HeaderInfo.CreateSingle<EntityTagHeaderValue> ("ETag", EntityTagHeaderValue.TryParse, HttpHeaderKind.Response),
                                HeaderInfo.CreateMulti<NameValueWithParametersHeaderValue> ("Expect", NameValueWithParametersHeaderValue.TryParse, HttpHeaderKind.Request),
-                               HeaderInfo.CreateSingle<DateTimeOffset> ("Expires", Parser.DateTime.TryParse, HttpHeaderKind.Content),
+                               HeaderInfo.CreateSingle<DateTimeOffset> ("Expires", Parser.DateTime.TryParse, HttpHeaderKind.Content, Parser.DateTime.ToString),
                                HeaderInfo.CreateSingle<string> ("From", Parser.EmailAddress.TryParse, HttpHeaderKind.Request),
                                HeaderInfo.CreateSingle<string> ("Host", Parser.Host.TryParse, HttpHeaderKind.Request),
                                HeaderInfo.CreateMulti<EntityTagHeaderValue> ("If-Match", EntityTagHeaderValue.TryParse, HttpHeaderKind.Request),
-                               HeaderInfo.CreateSingle<DateTimeOffset> ("If-Modified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request),
+                               HeaderInfo.CreateSingle<DateTimeOffset> ("If-Modified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request, Parser.DateTime.ToString),
                                HeaderInfo.CreateMulti<EntityTagHeaderValue> ("If-None-Match", EntityTagHeaderValue.TryParse, HttpHeaderKind.Request),
                                HeaderInfo.CreateSingle<RangeConditionHeaderValue> ("If-Range", RangeConditionHeaderValue.TryParse, HttpHeaderKind.Request),
-                               HeaderInfo.CreateSingle<DateTimeOffset> ("If-Unmodified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request),
-                               HeaderInfo.CreateSingle<DateTimeOffset> ("Last-Modified", Parser.DateTime.TryParse, HttpHeaderKind.Content),
+                               HeaderInfo.CreateSingle<DateTimeOffset> ("If-Unmodified-Since", Parser.DateTime.TryParse, HttpHeaderKind.Request, Parser.DateTime.ToString),
+                               HeaderInfo.CreateSingle<DateTimeOffset> ("Last-Modified", Parser.DateTime.TryParse, HttpHeaderKind.Content, Parser.DateTime.ToString),
                                HeaderInfo.CreateSingle<Uri> ("Location", Parser.Uri.TryParse, HttpHeaderKind.Response),
                                HeaderInfo.CreateSingle<int> ("Max-Forwards", Parser.Int.TryParse, HttpHeaderKind.Request),
                                HeaderInfo.CreateMulti<NameValueHeaderValue> ("Pragma", NameValueHeaderValue.TryParsePragma, HttpHeaderKind.Request | HttpHeaderKind.Response),
@@ -198,18 +198,18 @@ namespace System.Net.Http.Headers
 
                                        if (headerInfo.AllowsMany) {
                                                if (bucket == null)
-                                                       bucket = new HeaderBucket (headerInfo.CreateCollection (this));
+                                                       bucket = new HeaderBucket (headerInfo.CreateCollection (this), headerInfo.CustomToString);
 
                                                headerInfo.AddToCollection (bucket.Parsed, parsed_value);
                                        } else {
                                                if (bucket != null)
                                                        throw new FormatException ();
 
-                                               bucket = new HeaderBucket (parsed_value);
+                                               bucket = new HeaderBucket (parsed_value, headerInfo.CustomToString);
                                        }
                                } else {
                                        if (bucket == null)
-                                               bucket = new HeaderBucket (null);
+                                               bucket = new HeaderBucket (null, null);
 
                                        bucket.Values.Add (value ?? string.Empty);
                                }
@@ -466,7 +466,7 @@ namespace System.Net.Http.Headers
 
                        if (!headers.TryGetValue (name, out value)) {
                                var hinfo = known_headers[name];
-                               value = new HeaderBucket (new HttpHeaderValueCollection<T> (this, hinfo));
+                               value = new HeaderBucket (new HttpHeaderValueCollection<T> (this, hinfo), hinfo.CustomToString);
                                headers.Add (name, value);
                        }
 
index 513a21eb5db772564a9c6c7b3245f2bb0a38c4a9..5c23fc0b525b223eb9f16cb4ebf835ea0e3ac7c7 100644 (file)
@@ -340,6 +340,8 @@ namespace System.Net.Http
                                                        wrequest.ContentLength = content.Headers.ContentLength.Value;
                                                }
 
+                                               wrequest.ResendContentFactory = content.CopyTo;
+
                                                var stream = await wrequest.GetRequestStreamAsync ().ConfigureAwait (false);
                                                await request.Content.CopyToAsync (stream).ConfigureAwait (false);
                                        } else if (HttpMethod.Post.Equals (request.Method) || HttpMethod.Put.Equals (request.Method) || HttpMethod.Delete.Equals (request.Method)) {
index 344d87164eb1621a6d55bc6d67d03c3def40488b..df97dc50bbc11d7168206a84565ffb8321f9095e 100644 (file)
@@ -81,6 +81,12 @@ namespace System.Net.Http
                        }
                }
 
+               // Only used by HttpWebRequest internals which is not async friendly
+               internal void CopyTo (Stream stream)
+               {
+                       CopyToAsync (stream).Wait ();
+               }
+
                public Task CopyToAsync (Stream stream)
                {
                        return CopyToAsync (stream, null);
index 177df39d5b695e4a803d3676610aaf9f79b11cf7..9a1333cbb5db8a5b54400d94f458a989e503193a 100644 (file)
@@ -133,6 +133,16 @@ namespace MonoTests.System.Net.Http
                        Assert.AreEqual (other, m.First (), "#4");
                }
 
+               [Test]
+               public void Add_ParseCustomToString ()
+               {
+                       var m = new MultipartContent ("a", "b");
+
+                       m.Headers.Add ("Expires", "Mon,   30 Nov 2020   19:55:22    GMT");
+
+                       Assert.AreEqual ("Mon, 30 Nov 2020 19:55:22 GMT", m.Headers.Skip (1).First().Value.First ());
+               }
+
                [Test]
                public void Add_Resursive ()
                {
index e6a69cb620a21d04ef62cbdb997f649ab3d66c9e..d1251b47c827b594efa14c743db03469cf3f2ee6 100644 (file)
     <Compile Include="..\..\..\external\referencesource\System.Runtime.Serialization\System\Xml\XmlWriteBase64AsyncArgs.cs" />\r
     <Compile Include="..\..\..\external\referencesource\System.Runtime.Serialization\TD.Designer.cs" />\r
     <Compile Include="..\..\build\common\Consts.cs" />\r
-    <Compile Include="..\..\build\common\Locale.cs" />\r
-    <Compile Include="..\..\build\common\MonoTODOAttribute.cs" />\r
     <Compile Include="..\..\build\common\SR.cs" />\r
     <Compile Include="Assembly\AssemblyInfo.cs" />\r
     <Compile Include="ReferenceSources\BitFlagsGenerator.cs" />\r
index e6db41560996538dd7d9295e2ca8f24150a9d730..319640fc23476960fd9b9139104a6f01088f26a3 100644 (file)
@@ -1,3 +1,4 @@
+../../test-helpers/NetworkHelpers.cs
 System.Runtime.Serialization.Json/DataContractJsonSerializerTest.cs
 System.Runtime.Serialization.Json/JsonReaderTest.cs
 System.Runtime.Serialization.Json/JsonWriterTest.cs
index 2c7509da96cd4aa4b0f5cb860c3a1da5389aeba4..8f0cd0e14e28e5f90462acd83306d44d44497bb8 100644 (file)
@@ -37,6 +37,8 @@ using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;\r
 using System.Net;\r
 \r
+using MonoTests.Helpers;\r
+\r
 namespace MonoTests.System.ServiceModel.Web\r
 {\r
        [TestFixture]\r
@@ -46,7 +48,7 @@ namespace MonoTests.System.ServiceModel.Web
                [Category("NotWorking")]\r
                public void ServiceDebugBehaviorTest () {\r
 \r
-                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
+                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString()));\r
                        ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding");\r
 \r
                        Assert.AreEqual (true, host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageEnabled, "HttpHelpPageEnabled #1");\r
@@ -64,7 +66,7 @@ namespace MonoTests.System.ServiceModel.Web
                [Category ("NotWorking")]\r
                public void WebHttpBehaviorTest1 () {\r
 \r
-                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
+                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString()));\r
                        ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding");\r
                        ServiceEndpoint basicHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new BasicHttpBinding (), "BasicHttpBinding");\r
 \r
@@ -84,7 +86,7 @@ namespace MonoTests.System.ServiceModel.Web
                [Category("NotWorking")]\r
                public void WebHttpBehaviorTest2 () {\r
 \r
-                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
+                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString()));\r
                        ServiceEndpoint webHttp = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.Web.WebServiceHostTest+MyService", new WebHttpBinding (), "WebHttpBinding");\r
                        MyWebHttpBehavior behavior = new MyWebHttpBehavior ();\r
                        behavior.ApplyDispatchBehaviorBegin += delegate {\r
@@ -104,7 +106,7 @@ namespace MonoTests.System.ServiceModel.Web
                [Test]\r
                public void ServiceBaseUriTest () {\r
 \r
-                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://localhost:30158/"));\r
+                       var host = new WebServiceHost (typeof (MyService), new Uri ("http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString()));\r
                        Assert.AreEqual (0, host.Description.Endpoints.Count, "no endpoints yet");\r
                        host.Open ();\r
                        Assert.AreEqual (1, host.Description.Endpoints.Count, "default endpoint after open");\r
@@ -138,12 +140,13 @@ namespace MonoTests.System.ServiceModel.Web
                [Test]\r
                public void Connect ()\r
                {\r
+                       var url = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString();\r
                        var host = new WebServiceHost (typeof (DemoService), new Uri\r
-                                                      ("http://localhost:30158/"));\r
+                                                      (url));\r
                        try {\r
                                host.Open ();\r
                                var wc = new WebClient();\r
-                               wc.DownloadString("http://localhost:30158/testData");\r
+                               wc.DownloadString(url + "/testData");\r
                                Console.WriteLine();\r
                        } finally {\r
                                host.Close();\r
index c71ac9b0aa5ce2f0f9b592aacb065ed7ba025c12..deb325709e5eb9cb1235044bf952f85994b148c6 100644 (file)
@@ -1,4 +1,5 @@
 NUnitMoonHelper.cs
+../../test-helpers/NetworkHelpers.cs
 FeatureBased/Features.Client/AsyncCallTesterProxy.cs
 FeatureBased/Features.Client/AsyncPatternServer.cs
 FeatureBased/Features.Client/DataContractTesterProxy.cs
@@ -210,3 +211,5 @@ MetadataTests/MetadataSamples.cs
 MetadataTests/TestContext.cs
 MetadataTests/TestLabel.cs
 MetadataTests/ExportTests.cs
+../../test-helpers/NetworkHelpers.cs
+
index e9f9cee52c2827291ab87ad445e6e7c851d52b42..370a5bbd0dc7e928956a78c9b8349354c81a9a36 100644 (file)
@@ -43,6 +43,8 @@ using System.Threading;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Channels
 {
        [TestFixture]
@@ -131,7 +133,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        CustomBinding binding = new CustomBinding (sbe,
                                new HttpTransportBindingElement ());
                        IChannelListener<IReplyChannel> l =
-                               binding.BuildChannelListener<IReplyChannel> (new Uri ("http://localhost:37564"), new BindingParameterCollection ());
+                               binding.BuildChannelListener<IReplyChannel> (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new BindingParameterCollection ());
                        try {
                                l.Open ();
                        } finally {
@@ -171,11 +173,11 @@ namespace MonoTests.System.ServiceModel.Channels
                        b_res.ReceiveTimeout = b_res.SendTimeout = TimeSpan.FromSeconds (10);
 
                        EndpointAddress remaddr = new EndpointAddress (
-                               new Uri ("http://localhost:37564"),
+                               new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()),
                                new X509CertificateEndpointIdentity (cert2));
                        CalcProxy proxy = null;
                        ServiceHost host = new ServiceHost (typeof (CalcService));
-                       host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:37564");
+                       host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:" + NetworkHelpers.FindFreePort ());
 
                        ServiceCredentials cred = new ServiceCredentials ();
                        cred.ServiceCertificate.Certificate = cert;
@@ -240,7 +242,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                new HttpTransportBindingElement ();
                        CustomBinding binding = new CustomBinding (sbe, hbe);
                        host.AddServiceEndpoint (typeof (IFoo),
-                               binding, new Uri ("http://localhost:37564"));
+                               binding, new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        ServiceCredentials cred = new ServiceCredentials ();
                        cred.ServiceCertificate.Certificate =
                                new X509Certificate2 ("Test/Resources/test.pfx", "mono");
index 9c51d150f40c75d072b1de3726e1516e63ec49c9..f1511d5245a6891d51c4d7305f4001e9d390198d 100644 (file)
@@ -36,6 +36,8 @@ using System.Text;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 using Element = System.ServiceModel.Channels.BinaryMessageEncodingBindingElement;
 
 namespace MonoTests.System.ServiceModel.Channels
@@ -191,14 +193,15 @@ namespace MonoTests.System.ServiceModel.Channels
                        var bindingsvc = new CustomBinding (new BindingElement [] {
                                new BinaryMessageEncodingBindingElement (),
                                new TcpTransportBindingElement () });
-                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:37564/");
+                       int port = NetworkHelpers.FindFreePort ();
+                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:" + port + "/");
                        host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true;
                        host.Open (TimeSpan.FromSeconds (5));
                        try {
                                for (int i = 0; i < 2; i++) {
                                        var bindingcli = new NetTcpBinding ();
                                        bindingcli.Security.Mode = SecurityMode.None;
-                                       var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel ();
+                                       var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel ();
                                        Assert.AreEqual ("test for echo", cli.Echo ("TEST FOR ECHO"), "#1");
                                        var sid = cli.SessionId;
                                        Assert.AreEqual (3000, cli.Add (1000, 2000), "#2");
@@ -207,7 +210,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                }
                        } finally {
                                host.Close (TimeSpan.FromSeconds (5));
-                               var t = new TcpListener (37564);
+                               var t = new TcpListener (port);
                                t.Start ();
                                t.Stop ();
                        }
@@ -220,7 +223,8 @@ namespace MonoTests.System.ServiceModel.Channels
                        var bindingsvc = new CustomBinding (new BindingElement [] {
                                new BinaryMessageEncodingBindingElement (),
                                new HttpTransportBindingElement () });
-                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "http://localhost:37564/");
+                       int port = NetworkHelpers.FindFreePort ();
+                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "http://localhost:" + port + "/");
                        host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true;
                        host.Open (TimeSpan.FromSeconds (5));
                        try {
@@ -228,7 +232,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                        var bindingcli = new CustomBinding (new BindingElement [] {
                                                new BinaryMessageEncodingBindingElement (),
                                                new HttpTransportBindingElement () });
-                                       var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("http://localhost:37564/")).CreateChannel ();
+                                       var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("http://localhost:" + port + "/")).CreateChannel ();
                                        Assert.AreEqual ("test for echo", cli.Echo ("TEST FOR ECHO"), "#1");
                                        var sid = cli.SessionId;
                                        Assert.AreEqual (3000, cli.Add (1000, 2000), "#2");
@@ -237,7 +241,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                }
                        } finally {
                                host.Close (TimeSpan.FromSeconds (5));
-                               var t = new TcpListener (37564);
+                               var t = new TcpListener (port);
                                t.Start ();
                                t.Stop ();
                        }
index ab1f8dd87501c479098ec7f41432263a6bf81a4c..756a71fad445d5858f1a077e677084221e1eba33 100644 (file)
@@ -40,6 +40,8 @@ using System.Text;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Channels
 {
        [TestFixture]
@@ -211,7 +213,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                new HandlerTransportBindingElement (sender));
 
                        EndpointAddress address = new EndpointAddress (
-                               new Uri ("http://localhost:37564"),
+                               new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()),
                                new X509CertificateEndpointIdentity (new X509Certificate2 ("Test/Resources/test.pfx", "mono")));
 
                        ChannelFactory<IRequestChannel> cf =
@@ -259,7 +261,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                new HandlerTransportBindingElement (sender));
 
                        EndpointAddress address = new EndpointAddress (
-                               new Uri ("http://localhost:37564"),
+                               new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()),
                                new X509CertificateEndpointIdentity (new X509Certificate2 ("Test/Resources/test.pfx", "mono")));
 
                        ChannelProtectionRequirements reqs =
@@ -322,7 +324,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                new HttpTransportBindingElement ());
                        BindingContext ctx = new BindingContext (
                                cb, new BindingParameterCollection (),
-                               new Uri ("http://localhost:37564"), String.Empty, ListenUriMode.Unique);
+                               new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), String.Empty, ListenUriMode.Unique);
                        new TextMessageEncodingBindingElement ().BuildChannelListener<IReplyChannel> (ctx);
                }
 
@@ -336,7 +338,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        ServiceHost host = new ServiceHost (typeof (FooService));
                        host.AddServiceEndpoint (typeof (IFooService),
                                new CustomBinding (new MyBindingElement (false), new HttpTransportBindingElement ()),
-                               "http://localhost:37564");
+                               "http://localhost:" + NetworkHelpers.FindFreePort ());
                        host.Open ();
                }
 
@@ -349,7 +351,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        ServiceHost host = new ServiceHost (typeof (FooService));
                        host.AddServiceEndpoint (typeof (IFooService),
                                new CustomBinding (new MyBindingElement (true), new HttpTransportBindingElement ()),
-                               "http://localhost:37564");
+                               "http://localhost:" + NetworkHelpers.FindFreePort ());
                        host.Open ();
                        host.Close ();
                }
@@ -363,7 +365,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        ServiceHost host = new ServiceHost (typeof (FooService));
                        host.AddServiceEndpoint (typeof (IFooService),
                                new CustomBinding (new MyBindingElement (true), new HttpTransportBindingElement ()),
-                               "http://localhost:37564", new Uri ("foobar", UriKind.Relative));
+                               "http://localhost:" + NetworkHelpers.FindFreePort (), new Uri ("foobar", UriKind.Relative));
                }
 
                [Test]
@@ -372,10 +374,10 @@ namespace MonoTests.System.ServiceModel.Channels
                {
                        // MyBindingElement overrides GetProperty<T>() to call GetInnerProperty<T>() (default implementation).
                        // HttpTransportBindingElement should return Soap11.
-                       ServiceHost host = new ServiceHost (typeof (FooService), new Uri ("http://localhost:37564"));
+                       ServiceHost host = new ServiceHost (typeof (FooService), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        host.AddServiceEndpoint (typeof (IFooService),
                                new CustomBinding (new MyBindingElement (true), new HttpTransportBindingElement ()),
-                               "http://localhost:37564", new Uri ("foobar", UriKind.Relative));
+                               "http://localhost:" + NetworkHelpers.FindFreePort (), new Uri ("foobar", UriKind.Relative));
                        host.Open ();
                        host.Close ();
                }
index 705d4ed2af1562a41fd76fbc077b41b928f217dc..40401dec37e39fefcc42b7f943618e5299eb037f 100644 (file)
@@ -38,6 +38,8 @@ using System.Threading;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 #if NET_4_0
 using System.Security.Authentication.ExtendedProtection;
 #endif
@@ -203,7 +205,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        var cf = new HttpTransportBindingElement ().BuildChannelFactory<IRequestChannel> (ctx);
                        Assert.IsTrue (cf is ChannelFactoryBase<IRequestChannel>, "#1");
                        cf.Open ();
-                       cf.CreateChannel (new EndpointAddress ("http://localhost:8080"), null);
+                       cf.CreateChannel (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), null);
                }
 
                [Test]
@@ -228,7 +230,7 @@ namespace MonoTests.System.ServiceModel.Channels
                public void EndpointAddressAndViaMustMatchOnAddressingNone ()
                {
                        try {
-                               var ch = ChannelFactory<IFoo>.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564/"), new Uri ("http://localhost:8080/HogeService"));
+                               var ch = ChannelFactory<IFoo>.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort () + "/"), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort () + "/HogeService"));
                                ((ICommunicationObject) ch).Close ();
                        } catch (TargetInvocationException) {
                                // we throw this exception so far. Since it is
@@ -338,7 +340,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        BindingContext lbc = new BindingContext (
                                new CustomBinding (),
                                new BindingParameterCollection (),
-                               new Uri ("http://localhost:37564"),
+                               new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()),
                                String.Empty, ListenUriMode.Explicit);
                        listener = lel.BuildChannelListener<IReplyChannel> (lbc);
 
@@ -370,7 +372,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        factory.Open ();
 
                        IRequestChannel request = factory.CreateChannel (
-                               new EndpointAddress ("http://localhost:37564"));
+                               new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
 
                        request.Open ();
 
index 9a476515e8e28030331daceae8c34ad3dc935766..2d4e9bfda2210cf019a5c24521bf76dd69b932c6 100644 (file)
@@ -41,6 +41,8 @@ using System.ServiceModel.Security.Tokens;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Channels
 {
        [TestFixture]
@@ -428,7 +430,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        ClientCredentials cred = new ClientCredentials ();
                        cred.ClientCertificate.Certificate =
                                new X509Certificate2 ("Test/Resources/test.pfx", "mono");
-                       IChannelFactory<IReplyChannel> ch = b.BuildChannelFactory<IReplyChannel> (new Uri ("http://localhost:37564"), cred);
+                       IChannelFactory<IReplyChannel> ch = b.BuildChannelFactory<IReplyChannel> (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), cred);
                        try {
                                ch.Open ();
                        } finally {
@@ -456,7 +458,7 @@ namespace MonoTests.System.ServiceModel.Channels
                        ServiceCredentials cred = new ServiceCredentials ();
                        cred.ServiceCertificate.Certificate =
                                new X509Certificate2 ("Test/Resources/test.pfx", "mono");
-                       IChannelListener<IReplyChannel> ch = b.BuildChannelListener<IReplyChannel> (new Uri ("http://localhost:37564"), cred);
+                       IChannelListener<IReplyChannel> ch = b.BuildChannelListener<IReplyChannel> (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), cred);
                        try {
                                ch.Open ();
                        } finally {
@@ -478,7 +480,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                new UserNameSecurityTokenParameters ());
                        Binding b = new CustomBinding (be, new HttpTransportBindingElement ());
                        X509Certificate2 cert = new X509Certificate2 ("Test/Resources/test.pfx", "mono");
-                       EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:37564"), new X509CertificateEndpointIdentity (cert));
+                       EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (cert));
                        CalcProxy client = new CalcProxy (b, ea);
                        client.ClientCredentials.UserName.UserName = "rupert";
                        client.Sum (1, 2);
index c68cb851126517a6ef40cf846a3a5d394339fe94..d90197b253470f7cb69792bf2acbcca6e2c45c10 100644 (file)
@@ -37,6 +37,8 @@ using System.Threading;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Channels
 {
        [TestFixture]
@@ -173,8 +175,9 @@ namespace MonoTests.System.ServiceModel.Channels
                                new TcpTransportBindingElement () });
                        bindingS.ReceiveTimeout = TimeSpan.FromSeconds (5);
                        bindingS.OpenTimeout = TimeSpan.FromSeconds (20);
+                       int port = NetworkHelpers.FindFreePort ();
                        host.AddServiceEndpoint (typeof (IFoo),
-                               bindingS, new Uri ("net.tcp://localhost:37564"));
+                               bindingS, new Uri ("net.tcp://localhost:" + port));
                        host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true;
                        host.Open ();
 
@@ -182,7 +185,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                for (int i = 0; i < 2; i++) {
                                        var bindingC = new NetTcpBinding ();
                                        bindingC.Security.Mode = SecurityMode.None;
-                                       IFooChannel proxy = new ChannelFactory<IFooChannel> (bindingC, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel ();
+                                       IFooChannel proxy = new ChannelFactory<IFooChannel> (bindingC, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel ();
                                        proxy.Open ();
                                        try {
                                                Assert.AreEqual ("TEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"), "#1");
@@ -212,8 +215,9 @@ namespace MonoTests.System.ServiceModel.Channels
                        bindingS.Security.Mode = SecurityMode.None;
                        bindingS.ReceiveTimeout = TimeSpan.FromSeconds (5);
                        bindingS.OpenTimeout = TimeSpan.FromSeconds (20);
+                       int port = NetworkHelpers.FindFreePort ();
                        host.AddServiceEndpoint (typeof (IFoo),
-                               bindingS, new Uri ("net.tcp://localhost:37564"));
+                               bindingS, new Uri ("net.tcp://localhost:" + port));
                        host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().IncludeExceptionDetailInFaults = true;
                        host.Open ();
 
@@ -222,7 +226,7 @@ namespace MonoTests.System.ServiceModel.Channels
                                        var bindingC = new NetTcpBinding ();
                                        bindingS.TransferMode = TransferMode.Streamed;
                                        bindingC.Security.Mode = SecurityMode.None;
-                                       IFooChannel proxy = new ChannelFactory<IFooChannel> (bindingC, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel ();
+                                       IFooChannel proxy = new ChannelFactory<IFooChannel> (bindingC, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel ();
                                        proxy.Open ();
                                        try {
                                                Assert.AreEqual ("TEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"), "#1");
index 71e580f69033e7224cc11aa659af04baedf56c8f..c822063805c18472d653710b6fa139a881541a7a 100644 (file)
@@ -38,17 +38,19 @@ using System.ServiceModel;
 
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Description
 {
        [TestFixture]
        public class MetadataResolverTest
        {
-               string url = "http://localhost:37564/echo/mex";
+               string url;
                //string url = "http://192.168.0.1:8080/echo/mex";
 
                static HttpListener listener;
                IAsyncResult current_request;
-               int remaining;
+               int remaining, port;
 
                static readonly string mex = File.ReadAllText ("Test/System.ServiceModel.Description/dump.xml");
 
@@ -58,7 +60,9 @@ namespace MonoTests.System.ServiceModel.Description
                        if (listener != null)
                                listener.Stop ();
                        listener = new HttpListener ();
-                       listener.Prefixes.Add ("http://*:37564/echo/");
+                       port = NetworkHelpers.FindFreePort ();
+                       url = "http://localhost:" + port + "/echo/mex";
+                       listener.Prefixes.Add ("http://*:" + port + "/echo/");
                        listener.Start ();
                        current_request = listener.BeginGetContext (OnReceivedRequest, null);
                        remaining = 1;
index a7cfc7807f767c2f4aba0a60339b4749782bc3d3..861a0be9ac14485e9238153e295faea32594c979 100644 (file)
@@ -34,6 +34,8 @@ using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Description
 {
        [TestFixture]
@@ -73,7 +75,7 @@ namespace MonoTests.System.ServiceModel.Description
                        b.ImpersonateCallerForAllOperations = true;
                        b.PrincipalPermissionMode = PrincipalPermissionMode.None;
 
-                       host.AddServiceEndpoint (typeof (TestService), new BasicHttpBinding (), new Uri ("http://localhost:37564"));
+                       host.AddServiceEndpoint (typeof (TestService), new BasicHttpBinding (), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
 
                        host.Open ();
                }
@@ -86,7 +88,7 @@ namespace MonoTests.System.ServiceModel.Description
                        b.ImpersonateCallerForAllOperations = false;
                        b.PrincipalPermissionMode = PrincipalPermissionMode.None;
 
-                       host.AddServiceEndpoint (typeof (TestService2), new BasicHttpBinding (), new Uri ("http://localhost:37564"));
+                       host.AddServiceEndpoint (typeof (TestService2), new BasicHttpBinding (), new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
 
                        host.Open ();
                        var ed = ((ChannelDispatcher) host.ChannelDispatchers [0]).Endpoints [0];
index 46d129ff6010f6c131b1e9d88bf6baee7ebffc09..1785f29015bcde579625c1725aeaff5640167b39 100644 (file)
@@ -36,6 +36,8 @@ using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;
 using System.ServiceModel.Channels;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Description
 {
        [TestFixture]
@@ -66,7 +68,7 @@ namespace MonoTests.System.ServiceModel.Description
 
                [Test]
                public void InitializeRuntime1 () {
-                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) {
+                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + NetworkHelpers.FindFreePort ()))) {
                                host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "e1");
 
                                Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1");
@@ -103,7 +105,7 @@ namespace MonoTests.System.ServiceModel.Description
 
                [Test]
                public void InitializeRuntime2 () {
-                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) {
+                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + NetworkHelpers.FindFreePort ()))) {
                                host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
                                host.Description.Behaviors.Remove<ServiceDebugBehavior> ();
 
@@ -122,7 +124,7 @@ namespace MonoTests.System.ServiceModel.Description
 
                [Test]
                public void InitializeRuntime3 () {
-                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) {
+                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + NetworkHelpers.FindFreePort ()))) {
                                host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
                                host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageEnabled = false;
 
@@ -140,9 +142,10 @@ namespace MonoTests.System.ServiceModel.Description
 
                [Test]
                public void InitializeRuntime4 () {
-                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) {
+                       int port = NetworkHelpers.FindFreePort ();
+                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + port))) {
                                host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
-                               host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:37564/help");
+                               host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:" + port + "/help");
 
                                Assert.AreEqual (0, host.ChannelDispatchers.Count, "ChannelDispatchers.Count #1");
 
@@ -168,7 +171,7 @@ namespace MonoTests.System.ServiceModel.Description
                                Assert.AreEqual (0, ed.FilterPriority, "FilterPriority");
 
                                EndpointAddress ea = ed.EndpointAddress;
-                               Assert.AreEqual (new Uri ("http://localhost:37564/help"), ea.Uri, "Uri");
+                               Assert.AreEqual (new Uri ("http://localhost:" + port + "/help"), ea.Uri, "Uri");
 
                                DispatchRuntime dr = ed.DispatchRuntime;
                                Assert.AreEqual (1, dr.Operations.Count, "Operations.Count");
@@ -186,9 +189,10 @@ namespace MonoTests.System.ServiceModel.Description
 
                [Test]
                public void ServiceMetadataExtension1 () {
-                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) {
+                       int port = NetworkHelpers.FindFreePort ();
+                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + port))) {
                                host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
-                               host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:37564/help");
+                               host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = new Uri ("http://localhost:" + port + "/help");
                                try {
                                host.Open ();
 
@@ -202,9 +206,10 @@ namespace MonoTests.System.ServiceModel.Description
 
                [Test]
                public void ServiceMetadataExtension2 () {
-                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:37564"))) {
+                       int port = NetworkHelpers.FindFreePort ();
+                       using (ServiceHost host = new ServiceHost (typeof (MyService), CreateUri ("http://localhost:" + port))) {
                                host.AddServiceEndpoint (typeof (IMyContract), new BasicHttpBinding (), "");
-                               host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = CreateUri ("http://localhost:37564/help");
+                               host.Description.Behaviors.Find<ServiceDebugBehavior> ().HttpHelpPageUrl = CreateUri ("http://localhost:" + port + "/help");
 
                                ServiceMetadataExtension extension = new ServiceMetadataExtension ();
                                host.Extensions.Add (extension);
index 4ec9e8827c7733907fc1f5f48fe93ece3917062e..7921e30d7fec4797ee4026020e9e4aa0b8458eda 100644 (file)
@@ -35,6 +35,8 @@ using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;
 using System.ServiceModel.Channels;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Description
 {
        [TestFixture]
@@ -58,7 +60,7 @@ namespace MonoTests.System.ServiceModel.Description
                [Test]
                public void ListenUri ()
                {
-                       Uri uri = new Uri ("http://localhost:37564");
+                       Uri uri = new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        var se = new ServiceEndpoint (contract1, null, new EndpointAddress (uri));
                        Assert.AreEqual (uri, se.ListenUri, "#1");
                }
index ed5fb8b65c9cc31c43284bd985a0b33a7d369678..70d9c79c624ff3f6f16f89b274a894da425884f0 100644 (file)
@@ -35,6 +35,8 @@ using NUnit.Framework;
 
 using WebServiceMoonlightTest.ServiceReference1;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Dispatcher
 {
        [TestFixture]
@@ -44,7 +46,8 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                public void Bug652331_2 () // test in one of the comment
                {
                        // Init service
-                       ServiceHost serviceHost = new ServiceHost (typeof (Service1), new Uri ("http://localhost:37564/Service1"));
+                       int port = NetworkHelpers.FindFreePort ();
+                       ServiceHost serviceHost = new ServiceHost (typeof (Service1), new Uri ("http://localhost:" + port + "/Service1"));
                        serviceHost.AddServiceEndpoint (typeof (IService1), new BasicHttpBinding (), string.Empty);
 
                        // Enable metadata exchange (WSDL publishing)
@@ -58,7 +61,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                        try {
                                // client
                                var binding = new BasicHttpBinding ();
-                               var remoteAddress = new EndpointAddress ("http://localhost:37564/Service1");
+                               var remoteAddress = new EndpointAddress ("http://localhost:" + port + "/Service1");
                                var client = new Service1Client (binding, remoteAddress);
 
                                var wait = new ManualResetEvent (false);
index 3655b4177772f3b5674299727282ca2ff66681f9..59328f08103764aba73e0fc2c0e86ee518916d13 100644 (file)
@@ -37,6 +37,8 @@ using NUnit.Framework;
 
 using WebServiceMoonlightTest.ServiceReference2;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Dispatcher
 {
        [TestFixture]
@@ -47,7 +49,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                public void Bug652331_3 ()
                {
                        // Init service
-                       ServiceHost serviceHost = new ServiceHost(typeof(Service1), new Uri("http://localhost:37564/Service1"));
+                       ServiceHost serviceHost = new ServiceHost(typeof(Service1), new Uri("http://localhost:" + NetworkHelpers.FindFreePort () + "/Service1"));
                        serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), string.Empty);
 
                        // Enable metadata exchange (WSDL publishing)
@@ -68,7 +70,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                void RunClient ()
                {
                        var binding = new BasicHttpBinding ();
-                       var remoteAddress = new EndpointAddress ("http://localhost:37564/Service1");
+                       var remoteAddress = new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort () + "/Service1");
 
                        var normalClient      = new Service1Client (binding, remoteAddress);
                        var collectionClient  = new Service1Client (binding, remoteAddress);
index 3718357513859af9bbf7e39c3a4febdb3401d2b4..11fe45e9a5924502e03728680ac611e3a25e4840 100644 (file)
@@ -10,6 +10,8 @@ using System.ServiceModel.Channels;
 using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Dispatcher
 {
        [TestFixture]
@@ -42,7 +44,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                        var st = cd.ServiceThrottle;
                        Assert.IsNull (st, "#0");
 
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        h.AddServiceEndpoint (typeof (TestContract).FullName, new BasicHttpBinding (), "address");
                        h.ChannelDispatchers.Add (cd);
@@ -69,7 +71,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [Test]                  
                public void Collection_Add_Remove () {
                        Console.WriteLine ("STart test Collection_Add_Remove");
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        h.AddServiceEndpoint (typeof (TestContract).FullName, new BasicHttpBinding (), "address");
                        MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri));
@@ -87,7 +89,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [Test]
                public void EndpointDispatcherAddTest ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri));
                        d.Endpoints.Add (new EndpointDispatcher (new EndpointAddress (uri), "", ""));
                }
@@ -95,7 +97,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [Test]
                [ExpectedException (typeof (InvalidOperationException))] 
                public void EndpointDispatcherAddTest2 () {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri));
                        d.Endpoints.Add (new EndpointDispatcher (new EndpointAddress (uri), "", ""));
                        d.Open (); // the dispatcher must be attached.
@@ -105,7 +107,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [ExpectedException (typeof (InvalidOperationException))]
                public void EndpointDispatcherAddTest3 ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        MyChannelDispatcher d = new MyChannelDispatcher (new MyChannelListener (uri));
                        d.Endpoints.Add (new EndpointDispatcher (new EndpointAddress (uri), "", ""));
@@ -117,7 +119,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [ExpectedException (typeof (InvalidOperationException))] // i.e. it is thrown synchronously in current thread.
                public void EndpointDispatcherAddTest4 ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        var listener = new MyChannelListener (uri);
                        MyChannelDispatcher d = new MyChannelDispatcher (listener);
@@ -149,7 +151,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [ExpectedException (typeof (InvalidOperationException))] // i.e. it is thrown synchronously in current thread.
                public void EndpointDispatcherAddTest5 ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        var binding = new BasicHttpBinding ();
                        var listener = new MyChannelListener (uri);
@@ -171,7 +173,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [Test]
                public void EndpointDispatcherAddTest6 ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        var binding = new BasicHttpBinding ();
                        var listener = new MyChannelListener<IReplyChannel> (uri);
@@ -202,7 +204,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                [ExpectedException (typeof (InvalidOperationException))]
                public void EndpointDispatcherAddTest7 ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        var binding = new BasicHttpBinding ();
                        var listener = new MyChannelListener<IReplyChannel> (uri);
@@ -237,7 +239,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                // but it makes little sense especially for checking duplicate listen URIs. Duplicate listen URIs should be rejected anyways.
                public void EndpointDispatcherAddTest8 ()
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (typeof (TestContract), uri);
                        var listener = new MyChannelListener<IReplyChannel> (uri);
                        MyChannelDispatcher d = new MyChannelDispatcher (listener);
@@ -282,7 +284,7 @@ namespace MonoTests.System.ServiceModel.Dispatcher
 //             [Test]
                public void EndpointDispatcherAddTest9 () // test singleton service
                {
-                       var uri = CreateAvailableUri ("http://localhost:37564");
+                       var uri = CreateAvailableUri ("http://localhost:" + NetworkHelpers.FindFreePort ());
                        ServiceHost h = new ServiceHost (new TestContract (), uri);
                        h.Description.Behaviors.Find<ServiceBehaviorAttribute> ().InstanceContextMode = InstanceContextMode.Single;
                        var listener = new MyChannelListener<IReplyChannel> (uri);
index e8881b27d8a3d1771c1372d0de6d3de5abce9f95..641a95852ee198c0bfd2d652495f9de556f8c91a 100644 (file)
@@ -37,6 +37,8 @@ using System.ServiceModel.Security;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Dispatcher
 {
        [TestFixture]
@@ -88,11 +90,12 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                public void FaultContractInfos ()
                {
                        var host = new ServiceHost (typeof (TestFaultContract));
+                       int port = NetworkHelpers.FindFreePort ();
                        host.Description.Behaviors.Find<ServiceDebugBehavior> ().IncludeExceptionDetailInFaults = false;
-                       host.AddServiceEndpoint (typeof (ITestFaultContract), new BasicHttpBinding (), new Uri ("http://localhost:37564"));
+                       host.AddServiceEndpoint (typeof (ITestFaultContract), new BasicHttpBinding (), new Uri ("http://localhost:" + port));
                        host.Open ();
                        try {
-                               var cf = new ChannelFactory<ITestFaultContract> (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564"));
+                               var cf = new ChannelFactory<ITestFaultContract> (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + port));
                                var cli = cf.CreateChannel ();
                                try {
                                        cli.Run ("default");
@@ -178,4 +181,4 @@ namespace MonoTests.System.ServiceModel.Dispatcher
                        { }
                }
        }
-}
\ No newline at end of file
+}
index b29b970197aab4b16e67ed89b2ba9d8150c83a18..424e6519ee3640f62ef1c516fb8bff58515e7a3a 100644 (file)
@@ -42,6 +42,8 @@ using NUnit.Framework;
 
 using MonoTests.System.ServiceModel.Channels;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel.Security
 {
        [TestFixture]
@@ -190,7 +192,7 @@ namespace MonoTests.System.ServiceModel.Security
                                        sintercept,
                                        transport);
                                b_res.ReceiveTimeout = b_res.SendTimeout = TimeSpan.FromSeconds (5);
-                               host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:37564");
+                               host.AddServiceEndpoint (typeof (ICalc), b_res, "http://localhost:" + NetworkHelpers.FindFreePort ());
 
                                ServiceCredentials cred = new ServiceCredentials ();
                                cred.ServiceCertificate.Certificate = cert;
@@ -223,7 +225,7 @@ namespace MonoTests.System.ServiceModel.Security
 
                        b_req.ReceiveTimeout = b_req.SendTimeout = TimeSpan.FromSeconds (5);
                        EndpointAddress remaddr = new EndpointAddress (
-                               new Uri ("http://localhost:37564"),
+                               new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()),
                                new X509CertificateEndpointIdentity (cert));
                        CalcProxy proxy = new CalcProxy (b_req, remaddr);
                        proxy.ClientCredentials.ClientCertificate.Certificate = cert2;
index 3685bd6bb837edfb1b5bb98fcc0ac70aa29e8509..aa8d9417e250b17e665d49e72690c3688c93ee98 100644 (file)
@@ -39,6 +39,8 @@ using System.Transactions;
 using System.Threading;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -80,7 +82,7 @@ namespace MonoTests.System.ServiceModel
                        IEndpointBehavior eb = new CallbackBehaviorAttribute () { ConcurrencyMode = ConcurrencyMode.Multiple, ValidateMustUnderstand = false };
                        var cd = ContractDescription.GetContract (typeof (IFoo));
                        var se = new ServiceEndpoint (cd);
-                       var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:37564"), "IFoo", "urn:foo");
+                       var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), "IFoo", "urn:foo");
                        eb.ApplyDispatchBehavior (se, ed);
                }
 
@@ -92,7 +94,7 @@ namespace MonoTests.System.ServiceModel
                        IEndpointBehavior eb = new CallbackBehaviorAttribute () { ConcurrencyMode = ConcurrencyMode.Multiple, ValidateMustUnderstand = false };
                        var cd = ContractDescription.GetContract (typeof (IFoo));
                        var se = new ServiceEndpoint (cd);
-                       var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:37564"), "IFoo", "urn:foo");
+                       var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), "IFoo", "urn:foo");
                        var cr = ed.DispatchRuntime.CallbackClientRuntime;
                        eb.ApplyClientBehavior (se, cr);
                }
@@ -104,7 +106,7 @@ namespace MonoTests.System.ServiceModel
                        IEndpointBehavior eb = new CallbackBehaviorAttribute () { ConcurrencyMode = ConcurrencyMode.Multiple, ValidateMustUnderstand = false };
                        var cd = ContractDescription.GetContract (typeof (IDuplexFoo));
                        var se = new ServiceEndpoint (cd);
-                       var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:37564"), "IDuplexFoo", "urn:foo");
+                       var ed = new EndpointDispatcher (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), "IDuplexFoo", "urn:foo");
                        var cr = ed.DispatchRuntime.CallbackClientRuntime;
                        eb.ApplyClientBehavior (se, cr);
                        Assert.IsFalse (cr.ValidateMustUnderstand, "#2.1");
index 70efef2761cbe03739ced20a4c172d9f86f0ee5c..30e4c4036d8fc33542d8d403d8be93484af6c1dd 100644 (file)
@@ -38,6 +38,8 @@ using System.Xml.Serialization;
 using MonoTests.System.ServiceModel.Channels;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -63,14 +65,14 @@ namespace MonoTests.System.ServiceModel
                        //ChannelFactory<TestService> f =
                                new ChannelFactory<TestService> (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564"));
+                                       new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                }
 
                [Test]
                public void EndpointAddressAfterCreateChannel ()
                {
                        var f = new ChannelFactory<ITestService> (new BasicHttpBinding ());
-                       f.CreateChannel (new EndpointAddress ("http://localhost:37564"), null);
+                       f.CreateChannel (new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()), null);
                        Assert.IsNull (f.Endpoint.Address, "#1");
                }
 
@@ -163,7 +165,7 @@ namespace MonoTests.System.ServiceModel
                        MyChannelFactory<ITestService> f =
                                new MyChannelFactory<ITestService> (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564"));
+                                       new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        Assert.AreEqual (CommunicationState.Created,
                                f.State, "#1");
                        f.OpenAnyways ();
@@ -179,7 +181,7 @@ namespace MonoTests.System.ServiceModel
                        ChannelFactory<ITestService> f =
                                new ChannelFactory<ITestService> (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564"));
+                                       new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        f.CreateChannel ();
                }
 
index ee445d6620f590d5cb3fcb5aa1d01a6fbee8680f..4fb3ce3a5d9b8f6d8dfd3986db1f9661d18a6018 100644 (file)
@@ -36,6 +36,8 @@ using System.ServiceModel.Description;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -217,22 +219,23 @@ namespace MonoTests.System.ServiceModel
                [Ignore ("With Orcas it does not work fine")]
                public void UseCase1Test ()
                {
+                       int port = NetworkHelpers.FindFreePort ();
                        // almost equivalent to samples/clientbase/samplesvc.cs
                        using (host = new ServiceHost (typeof (UseCase1))) {
                                Binding binding = new BasicHttpBinding ();
                                binding.ReceiveTimeout = TimeSpan.FromSeconds (15);
-                               host.AddServiceEndpoint (typeof (IUseCase1).FullName, binding, new Uri ("http://localhost:37564"));
+                               host.AddServiceEndpoint (typeof (IUseCase1).FullName, binding, new Uri ("http://localhost:" + port));
 
                                host.Open ();
                                // almost equivalent to samples/clientbase/samplecli.cs
                                using (UseCase1Proxy proxy = new UseCase1Proxy (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564"))) {
+                                       new EndpointAddress ("http://localhost:" + port))) {
                                        proxy.Open ();
                                        Assert.AreEqual ("TEST FOR ECHOTEST FOR ECHO", proxy.Echo ("TEST FOR ECHO"));
                                }
                        }
-                       EnsurePortNonBlocking (37564);
+                       EnsurePortNonBlocking (port);
                }
 
                void EnsurePortNonBlocking (int port)
@@ -357,8 +360,9 @@ namespace MonoTests.System.ServiceModel
                        ServiceHost host = new ServiceHost (typeof (UseCase2));
                        Binding binding = new BasicHttpBinding ();
                        binding.ReceiveTimeout = TimeSpan.FromSeconds (15);
+                       int port = NetworkHelpers.FindFreePort ();
                        host.AddServiceEndpoint (typeof (IUseCase2).FullName,
-                       binding, new Uri ("http://localhost:37564"));
+                       binding, new Uri ("http://localhost:" + port));
 
                        try {
                                host.Open ();
@@ -368,7 +372,7 @@ namespace MonoTests.System.ServiceModel
                                b.ReceiveTimeout = TimeSpan.FromSeconds (15);
                                UseCase2Proxy proxy = new UseCase2Proxy (
                                        b,
-                                       new EndpointAddress ("http://localhost:37564/"));
+                                       new EndpointAddress ("http://localhost:" + port + "/"));
                                proxy.Open ();
                                Message req = Message.CreateMessage (MessageVersion.Soap11, "http://tempuri.org/IUseCase2/Echo");
                                Message res = proxy.Echo (req);
@@ -378,7 +382,7 @@ namespace MonoTests.System.ServiceModel
                        } finally {
                                if (host.State == CommunicationState.Opened)
                                        host.Close ();
-                               EnsurePortNonBlocking (37564);
+                               EnsurePortNonBlocking (port);
                        }
                }
 
@@ -426,9 +430,10 @@ namespace MonoTests.System.ServiceModel
                        Binding bs = new BasicHttpBinding ();
                        bs.SendTimeout = TimeSpan.FromSeconds (5);
                        bs.ReceiveTimeout = TimeSpan.FromSeconds (5);
+                       int port = NetworkHelpers.FindFreePort ();
                        // magic name that does not require fully qualified name ...
                        host.AddServiceEndpoint ("IMetadataExchange",
-                               bs, new Uri ("http://localhost:37564"));
+                               bs, new Uri ("http://localhost:" + port));
                        try {
                                host.Open ();
                                // almost equivalent to samples/clientbase/samplecli3.cs
@@ -437,7 +442,7 @@ namespace MonoTests.System.ServiceModel
                                bc.ReceiveTimeout = TimeSpan.FromSeconds (5);
                                MetadataExchangeProxy proxy = new MetadataExchangeProxy (
                                        bc,
-                                       new EndpointAddress ("http://localhost:37564/"));
+                                       new EndpointAddress ("http://localhost:" + port + "/"));
                                proxy.Open ();
 
                                Message req = Message.CreateMessage (MessageVersion.Soap11, "http://schemas.xmlsoap.org/ws/2004/09/transfer/Get");
@@ -448,7 +453,7 @@ namespace MonoTests.System.ServiceModel
                        } finally {
                                if (host.State == CommunicationState.Opened)
                                        host.Close ();
-                               EnsurePortNonBlocking (37564);
+                               EnsurePortNonBlocking (port);
                        }
                }
 
index c886a971395332ceeb025856c22629250d6ec82b..d5908a5db451419445d9536a2e3820eafb575748 100644 (file)
@@ -37,6 +37,8 @@ using System.ServiceModel.Dispatcher;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -48,7 +50,7 @@ namespace MonoTests.System.ServiceModel
                [ExpectedException (typeof (InvalidOperationException))]
                public void NotAllowedInitializationUI ()
                {
-                       var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564"));
+                       var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        f.Endpoint.Contract.Behaviors.Add (new MyContractBehavior ());
                        f.InnerChannel.AllowInitializationUI = false;
                        f.DisplayInitializationUI ();
@@ -58,7 +60,7 @@ namespace MonoTests.System.ServiceModel
                [ExpectedException (typeof (InvalidOperationException))]
                public void OpenBeforeDisplayInitializationUI ()
                {
-                       var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564"));
+                       var f = new FooProxy (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        f.Endpoint.Contract.Behaviors.Add (new MyContractBehavior ());
                        f.Open ();
                }
index a1f28e3e1539d1247629cfa96686c16bbcb2307a..cf758cfe3ab8af315e5fd7853034f9825b723feb 100644 (file)
@@ -42,6 +42,8 @@ using MonoTests.System.ServiceModel.Channels;
 
 using ReqType = System.ServiceModel.Security.Tokens.ServiceModelSecurityTokenRequirement;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -621,7 +623,7 @@ Assert.IsFalse (new MyManager (new MyClientCredentials ()).IsIssued (r), "premis
                        be.EndpointSupportingTokenParameters.Endorsing.Add (
                                new MyEndorsingTokenParameters ());
                        Binding b = new CustomBinding (be, new HttpTransportBindingElement ());
-                       EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:37564"), new X509CertificateEndpointIdentity (cert));
+                       EndpointAddress ea = new EndpointAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()), new X509CertificateEndpointIdentity (cert));
                        CalcProxy client = new CalcProxy (b, ea);
                        client.Endpoint.Behaviors.RemoveAll<ClientCredentials> ();
                        client.Endpoint.Behaviors.Add (new MyClientCredentials ());
index 1fc0a1ee8d1e3f03dd8d49b47c6ab0c3234c3920..962643c81d6240d9ba322bbee2233c79672ff668 100644 (file)
@@ -39,6 +39,7 @@ using System.Threading;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
 
 namespace MonoTests.System.ServiceModel
 {
@@ -55,17 +56,18 @@ namespace MonoTests.System.ServiceModel
                {
                        // Service
                        ServiceHost host = new ServiceHost (typeof (Foo));
+                       int port = NetworkHelpers.FindFreePort ();
                        try {
                                Binding binding = new BasicHttpBinding ();
                                binding.SendTimeout = binding.ReceiveTimeout = TimeSpan.FromSeconds (5);
                                ServiceEndpoint se = host.AddServiceEndpoint ("MonoTests.System.ServiceModel.IFoo",
-                                       binding, new Uri ("http://localhost:37564"));
+                                       binding, new Uri ("http://localhost:" + port));
                                host.Open ();
 
                                // Client
                                ChannelFactory<IFoo> cf = new ChannelFactory<IFoo> (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564/"));
+                                       new EndpointAddress ("http://localhost:" + port + "/"));
                                IFoo foo  = cf.CreateChannel ();
                                Assert.AreEqual ("Test for EchoTest for Echo", foo.Echo ("Test for Echo"));
                        } finally {
@@ -80,17 +82,18 @@ namespace MonoTests.System.ServiceModel
                {
                        // Service
                        ServiceHost host = new ServiceHost (typeof (Foo2));
+                       int port = NetworkHelpers.FindFreePort ();
                        try {
                                Binding binding = new BasicHttpBinding ();
                                binding.SendTimeout = binding.ReceiveTimeout = TimeSpan.FromSeconds (5);
                                host.AddServiceEndpoint ("MonoTests.System.ServiceModel.IFoo2",
-                               binding, new Uri ("http://localhost:37564"));
+                               binding, new Uri ("http://localhost:" + port));
                                host.Open ();
 
                                // Client
                                Foo2Proxy proxy = new Foo2Proxy (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564/"));
+                                       new EndpointAddress ("http://localhost:" + port + "/"));
                                proxy.Open ();
                                try {
                                        Assert.AreEqual ("TEST FOR ECHOTEST FOR ECHO",
@@ -111,17 +114,18 @@ namespace MonoTests.System.ServiceModel
                {
                        // Service
                        ServiceHost host = new ServiceHost (typeof (MetadataExchange));
+                       int port = NetworkHelpers.FindFreePort ();
                        try {
                                Binding binding = new BasicHttpBinding ();
                                binding.ReceiveTimeout = TimeSpan.FromSeconds (5);
                                host.AddServiceEndpoint ("IMetadataExchange",
-                               binding, new Uri ("http://localhost:37564"));
+                               binding, new Uri ("http://localhost:" + port));
                                host.Open ();
                                // Client
 
                                MetadataExchangeProxy proxy = new MetadataExchangeProxy (
                                        new BasicHttpBinding (),
-                                       new EndpointAddress ("http://localhost:37564/"));
+                                       new EndpointAddress ("http://localhost:" + port + "/"));
                                proxy.Open ();
 
                                try {
index 72837c7af45453576c231c9a63c50426ac7494f8..633b776aeac48c10c96f3b29d32d12e21dcad79e 100644 (file)
@@ -35,6 +35,8 @@ using System.ServiceModel.Security;
 using System.Threading;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -167,17 +169,18 @@ namespace MonoTests.System.ServiceModel
                {
                        var host = new ServiceHost (typeof (Foo));
                        var bindingsvc = new CustomBinding (new BinaryMessageEncodingBindingElement (), new TcpTransportBindingElement ());
-                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:37564/");
+                       int port = NetworkHelpers.FindFreePort ();
+                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:" + port + "/");
                        host.Open (TimeSpan.FromSeconds (5));
                        try {
                                var bindingcli = new NetTcpBinding () { TransactionFlow = false };
                                bindingcli.Security.Mode = SecurityMode.None;
-                               var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel ();
+                               var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel ();
                                Assert.AreEqual (5, cli.Add (1, 4));
                                Assert.AreEqual ("monkey science", cli.Join ("monkey", "science"));
                        } finally {
                                host.Close (TimeSpan.FromSeconds (5));
-                               var t = new TcpListener (37564);
+                               var t = new TcpListener (port);
                                t.Start ();
                                t.Stop ();
                        }
@@ -190,18 +193,19 @@ namespace MonoTests.System.ServiceModel
                {
                        var host = new ServiceHost (typeof (Foo));
                        var bindingsvc = new CustomBinding (new BinaryMessageEncodingBindingElement (), new TcpTransportBindingElement () { TransferMode = TransferMode.Streamed });
-                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:37564/");
+                       int port = NetworkHelpers.FindFreePort ();
+                       host.AddServiceEndpoint (typeof (IFoo), bindingsvc, "net.tcp://localhost:" + port + "/");
                        host.Open (TimeSpan.FromSeconds (5));
                        try {
                                var bindingcli = new NetTcpBinding () { TransactionFlow = false };
                                bindingcli.TransferMode = TransferMode.Streamed;
                                bindingcli.Security.Mode = SecurityMode.None;
-                               var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("net.tcp://localhost:37564/")).CreateChannel ();
+                               var cli = new ChannelFactory<IFooClient> (bindingcli, new EndpointAddress ("net.tcp://localhost:" + port + "/")).CreateChannel ();
                                Assert.AreEqual (5, cli.Add (1, 4));
                                Assert.AreEqual ("monkey science", cli.Join ("monkey", "science"));
                        } finally {
                                host.Close (TimeSpan.FromSeconds (5));
-                               var t = new TcpListener (37564);
+                               var t = new TcpListener (port);
                                t.Start ();
                                t.Stop ();
                        }
index dafa6346c52a2d8d731d3ba18db2cd7252fa9126..3378c7b82b735cc17a8cd9083c810970f00b23f1 100644 (file)
@@ -35,6 +35,8 @@ using System.ServiceModel;
 using System.Xml;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -50,7 +52,7 @@ namespace MonoTests.System.ServiceModel
                [Test]
                public void UserContextProperties ()
                {
-                       var ch = ChannelFactory<IFooChannel>.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564"));
+                       var ch = ChannelFactory<IFooChannel>.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        var o = new OperationContext (ch);
 
                        // FIXME: this is strange. It should return non-null value.
@@ -91,7 +93,7 @@ namespace MonoTests.System.ServiceModel
                        Assert.IsNull (OperationContext.Current, "Current-1");
 
                        try {
-                               var ch = ChannelFactory<IFooChannel>.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:37564"));
+                               var ch = ChannelFactory<IFooChannel>.CreateChannel (new BasicHttpBinding (), new EndpointAddress ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                                OperationContext.Current = new OperationContext (ch);
                                Assert.IsNotNull (OperationContext.Current, "Current-2");
                        }
index d73d516cbbb1c341b565695eb7c3f7ae35ffad34..55441b8d24e9de01ce050e83ccf69e0dd05e4e29 100644 (file)
@@ -36,6 +36,8 @@ using System.ServiceModel.Dispatcher;
 using SMMessage = System.ServiceModel.Channels.Message;
 using System.ServiceModel.Channels;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -159,7 +161,8 @@ namespace MonoTests.System.ServiceModel
 
                [Test]
                public void ChannelDispatchers_NoDebug () {
-                       ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158"));
+                       var ep = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString();
+                       ServiceHost h = new ServiceHost (typeof (AllActions), new Uri (ep));
                        h.AddServiceEndpoint (typeof (AllActions).FullName, new BasicHttpBinding (), "address");
 
                        ServiceDebugBehavior b = h.Description.Behaviors.Find<ServiceDebugBehavior> ();
@@ -173,7 +176,7 @@ namespace MonoTests.System.ServiceModel
                        Assert.IsTrue (channelDispatcher.Endpoints.Count == 1, "#2");
                        EndpointAddressMessageFilter filter = channelDispatcher.Endpoints [0].AddressFilter as EndpointAddressMessageFilter;
                        Assert.IsNotNull (filter, "#3");
-                       Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:30158/address")), "#4");
+                       Assert.IsTrue (filter.Address.Equals (new EndpointAddress (ep + "/address")), "#4");
                        Assert.IsFalse (filter.IncludeHostNameInComparison, "#5");
                        Assert.IsTrue (channelDispatcher.Endpoints [0].ContractFilter is MatchAllMessageFilter, "#6");
                        } finally {
@@ -183,11 +186,12 @@ namespace MonoTests.System.ServiceModel
 
                [Test]
                public void ChannelDispatchers_WithDebug () {
-                       ServiceHost h = new ServiceHost (typeof (AllActions), new Uri ("http://localhost:30158"));
+                       var ep = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString();
+                       ServiceHost h = new ServiceHost (typeof (AllActions), new Uri (ep));
                        h.AddServiceEndpoint (typeof (AllActions).FullName, new BasicHttpBinding (), "address");
                        ServiceMetadataBehavior b = new ServiceMetadataBehavior ();
                        b.HttpGetEnabled = true;
-                       b.HttpGetUrl = new Uri( "http://localhost:30158" );
+                       b.HttpGetUrl = new Uri( ep );
                        h.Description.Behaviors.Add (b);
                        h.Open ();
 
@@ -197,7 +201,7 @@ namespace MonoTests.System.ServiceModel
                        Assert.IsTrue (channelDispatcher.Endpoints.Count == 1, "#3");
                        EndpointAddressMessageFilter filter = channelDispatcher.Endpoints [0].AddressFilter as EndpointAddressMessageFilter;
                        Assert.IsNotNull (filter, "#4");
-                       Assert.IsTrue (filter.Address.Equals (new EndpointAddress ("http://localhost:30158")), "#5");
+                       Assert.IsTrue (filter.Address.Equals (new EndpointAddress (ep)), "#5");
                        Assert.IsFalse (filter.IncludeHostNameInComparison, "#6");
                        Assert.IsTrue (channelDispatcher.Endpoints [0].ContractFilter is MatchAllMessageFilter, "#7");
                        h.Close ();
@@ -207,7 +211,8 @@ namespace MonoTests.System.ServiceModel
                public void SpecificActionTest ()
                {
                        //EndpointDispatcher d = new EndpointDispatcher(
-                       ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:30158"));
+                       var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString();
+                       ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://" + ep));
                        h.AddServiceEndpoint (typeof (Action1Interface), new BasicHttpBinding (), "address");
                                                
                        h.Open ();
@@ -222,7 +227,8 @@ namespace MonoTests.System.ServiceModel
                [Test]
                public void InitializeRuntimeBehaviors1 () {
                        HostState st = new HostState ();
-                       ServiceHost h = new ServiceHost (typeof (SpecificAction2), new Uri ("http://localhost:30158"));
+                       var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString();
+                       ServiceHost h = new ServiceHost (typeof (SpecificAction2), new Uri ("http://" + ep));
                        h.AddServiceEndpoint (typeof (SpecificAction2), new BasicHttpBinding (), "temp");                       
 
                        h.Description.Behaviors.Add (new MyServiceBehavior (st, h));
@@ -241,7 +247,8 @@ namespace MonoTests.System.ServiceModel
                [Test]
                public void InitializeRuntimeBehaviors2 () {
                        HostState st = new HostState ();
-                       ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://localhost:30158"));
+                       var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString();
+                       ServiceHost h = new ServiceHost (typeof (SpecificAction), new Uri ("http://" + ep));
                        h.AddServiceEndpoint (typeof (Action1Interface), new BasicHttpBinding (), "temp");
                        h.AddServiceEndpoint (typeof (Action2Interface), new BasicHttpBinding (), "temp2");
 
@@ -266,9 +273,9 @@ namespace MonoTests.System.ServiceModel
                {
                        var host = new Poker ();
                        Assert.AreEqual (0, host.BaseAddresses.Count, "#1");
-                       host.DoAddBaseAddress (new Uri ("http://localhost:37564"));
+                       host.DoAddBaseAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        Assert.AreEqual (1, host.BaseAddresses.Count, "#1");
-                       host.DoAddBaseAddress (new Uri ("net.tcp://localhost:893"));
+                       host.DoAddBaseAddress (new Uri ("net.tcp://localhost:" + NetworkHelpers.FindFreePort ()));
                        Assert.AreEqual (2, host.BaseAddresses.Count, "#1");
                }
 
@@ -278,39 +285,42 @@ namespace MonoTests.System.ServiceModel
                {
                        var host = new Poker ();
                        Assert.AreEqual (0, host.BaseAddresses.Count, "#1");
-                       host.DoAddBaseAddress (new Uri ("http://localhost:37564"));
+                       host.DoAddBaseAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                        // http base address is already added.
-                       host.DoAddBaseAddress (new Uri ("http://localhost:893"));
+                       host.DoAddBaseAddress (new Uri ("http://localhost:" + NetworkHelpers.FindFreePort ()));
                }
 
                [Test]
                public void AddServiceEndpointUri ()
                {
+                       int port = NetworkHelpers.FindFreePort ();
                        var host = new ServiceHost (typeof (AllActions),
-                               new Uri ("http://localhost:37564"));
+                               new Uri ("http://localhost:" + port));
                        var se = host.AddServiceEndpoint (typeof (AllActions),
                                new BasicHttpBinding (), "foobar");
-                       Assert.AreEqual ("http://localhost:37564/foobar", se.Address.Uri.AbsoluteUri, "#1");
-                       Assert.AreEqual ("http://localhost:37564/foobar", se.ListenUri.AbsoluteUri, "#2");
+                       Assert.AreEqual ("http://localhost:" + port + "/foobar", se.Address.Uri.AbsoluteUri, "#1");
+                       Assert.AreEqual ("http://localhost:" + port + "/foobar", se.ListenUri.AbsoluteUri, "#2");
                }
 
                [Test]
                public void AddServiceEndpointUri2 ()
                {
+                       int port = NetworkHelpers.FindFreePort ();
                        var host = new ServiceHost (typeof (AllActions),
-                               new Uri ("http://localhost:37564"));
+                               new Uri ("http://localhost:" + port));
                        var se = host.AddServiceEndpoint (typeof (AllActions),
                                new BasicHttpBinding (), String.Empty);
-                       Assert.AreEqual ("http://localhost:37564/", se.Address.Uri.AbsoluteUri, "#1");
-                       Assert.AreEqual ("http://localhost:37564/", se.ListenUri.AbsoluteUri, "#2");
+                       Assert.AreEqual ("http://localhost:" + port + "/", se.Address.Uri.AbsoluteUri, "#1");
+                       Assert.AreEqual ("http://localhost:" + port + "/", se.ListenUri.AbsoluteUri, "#2");
                }
 
                [Test]
                [ExpectedException (typeof (InvalidOperationException))]
                public void AddServiceEndpointOnlyMex ()
                {
+            var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString();
                        var host = new ServiceHost (typeof (AllActions),
-                               new Uri ("http://localhost:37564"));
+                               new Uri ("http://" + ep));
                        host.Description.Behaviors.Add (new ServiceMetadataBehavior ());
                        host.AddServiceEndpoint ("IMetadataExchange",
                                new BasicHttpBinding (), "/wsdl");
@@ -339,7 +349,7 @@ namespace MonoTests.System.ServiceModel
 
                void RunDestinationUnreachableTest (string label, Binding binding)
                {
-                       string address = "http://localhost:37564/";
+                       string address = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString();
                        var host = OpenHost (address, binding);
                        
                        try {
index 57e03d8e7b4fa9e487ea5c0c18e84c479ded4e0d..a120402ff7cc6bbcdcaadc235ad311843ca49752 100644 (file)
@@ -34,6 +34,8 @@ using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.ServiceModel
 {
        [TestFixture]
@@ -172,10 +174,11 @@ namespace MonoTests.System.ServiceModel
                [Test]
                public void AddServiceEndpoint2_4 ()
                {
-                       ServiceHost host = new ServiceHost (typeof (HogeFuga), new Uri ("http://localhost:37564"));
+                       var ep = "http://" + NetworkHelpers.LocalEphemeralEndPoint().ToString();
+                       ServiceHost host = new ServiceHost (typeof (HogeFuga), new Uri (ep));
                        var binding = new BasicHttpBinding ();
-                       host.AddServiceEndpoint (typeof (IHoge), binding, new Uri ("http://localhost:37564"));
-                       host.AddServiceEndpoint (typeof (IFuga), binding, new Uri ("http://localhost:37564"));
+                       host.AddServiceEndpoint (typeof (IHoge), binding, new Uri (ep));
+                       host.AddServiceEndpoint (typeof (IFuga), binding, new Uri (ep));
 
                        // Use the same binding, results in one ChannelDispatcher (actually two, for metadata/debug behavior).
                        host.Open ();
@@ -296,13 +299,14 @@ namespace MonoTests.System.ServiceModel
                [Test]
                public void InstanceWithNonSingletonMode ()
                {
+                       var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString();
                        ServiceHost host = new ServiceHost (
                                new NonSingletonService ());
                        Assert.IsNotNull (host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().GetWellKnownSingleton (), "premise1");
                        host.AddServiceEndpoint (
                                typeof (NonSingletonService),
                                new BasicHttpBinding (),
-                               new Uri ("http://localhost:37564/s1"));
+                               new Uri ("http://" + ep + "/s1"));
 
                        // in case Open() didn't fail, we need to close the host.
                        // And even if Close() caused the expected exception,
@@ -323,13 +327,14 @@ namespace MonoTests.System.ServiceModel
                [Test]
                public void InstanceWithSingletonMode ()
                {
+            var ep = NetworkHelpers.LocalEphemeralEndPoint().ToString();
                        SingletonService instance = new SingletonService ();
                        ServiceHost host = new ServiceHost (instance);
                        Assert.IsNotNull (host.Description.Behaviors.Find<ServiceBehaviorAttribute> ().GetWellKnownSingleton (), "#1");
                        host.AddServiceEndpoint (
                                typeof (SingletonService),
                                new BasicHttpBinding (),
-                               new Uri ("http://localhost:37564/s2"));
+                               new Uri ("http://" + ep + "/s2"));
 
                        // in case Open() didn't fail, we need to close the host.
                        // And even if Close() caused the expected exception,
index b3e4a1c16dcf32f25e1e66d93c70ecb37699e7d9..d53c063441e031e840b38712192ef849e2c4bbae 100644 (file)
@@ -92,6 +92,8 @@ namespace System.Web.Routing
                        }
                }
 
+               public bool LowercaseUrls { get; set; }
+               public bool AppendTrailingSlash { get; set; }
                public bool RouteExistingFiles { get; set; }
 
                public void Add (string name, RouteBase item)
index f1b350172c181bfbc5de5bdfac758063ebbd84f5..67956ca1ebddea04ac32fbbf78d0615b834230df 100644 (file)
     <Compile Include="System.Web\CapabilitiesLoader.cs" />\r
     <Compile Include="System.Web\DefaultExceptionPageTemplate.cs" />\r
     <Compile Include="System.Web\DefaultHttpHandler.cs" />\r
+    <Compile Include="System.Web\DynamicModuleManager.cs" />\r
     <Compile Include="System.Web\EndEventHandler.cs" />\r
     <Compile Include="System.Web\EventHandlerTaskAsyncHelper.cs" />\r
     <Compile Include="System.Web\ExceptionPageTemplate.cs" />\r
index fe5bb23c9924ee97d2adc1f1800f43553300d645..925358a6fb72a9893dd309a6b89af2885379b355 100644 (file)
     <Compile Include="System.Web\CapabilitiesLoader.cs" />\r
     <Compile Include="System.Web\DefaultExceptionPageTemplate.cs" />\r
     <Compile Include="System.Web\DefaultHttpHandler.cs" />\r
+    <Compile Include="System.Web\DynamicModuleManager.cs" />\r
     <Compile Include="System.Web\EndEventHandler.cs" />\r
     <Compile Include="System.Web\EventHandlerTaskAsyncHelper.cs" />\r
     <Compile Include="System.Web\ExceptionPageTemplate.cs" />\r
index 62eb0716440d75bdb62c0933c298994a2c61068f..a328b5e18fcbb139a2a26bbaaa0726f0bef4c426 100644 (file)
@@ -63,6 +63,7 @@ namespace System.Web.Configuration
                static ConfigurationProperty encoderTypeProp;
                static ConfigurationProperty relaxedUrlToFileSystemMappingProp;
                static ConfigurationProperty targetFrameworkProp;
+               static ConfigurationProperty allowDynamicModuleRegistrationProp;
                static ConfigurationPropertyCollection properties;
 
                static HttpRuntimeSection ()
@@ -141,6 +142,8 @@ namespace System.Web.Configuration
                                                                                PropertyHelper.VersionConverter,
                                                                                PropertyHelper.DefaultValidator,
                                                                                ConfigurationPropertyOptions.None);
+                       allowDynamicModuleRegistrationProp = new ConfigurationProperty ("allowDynamicModuleRegistration", typeof(bool), true,
+                                                                               ConfigurationPropertyOptions.None);
                        
                        properties = new ConfigurationPropertyCollection();
                        properties.Add (apartmentThreadingProp);
@@ -169,6 +172,7 @@ namespace System.Web.Configuration
                        properties.Add (encoderTypeProp);
                        properties.Add (relaxedUrlToFileSystemMappingProp);
                        properties.Add (targetFrameworkProp);
+                       properties.Add (allowDynamicModuleRegistrationProp);
                }
 
                public HttpRuntimeSection()
@@ -349,6 +353,11 @@ namespace System.Web.Configuration
                protected internal override ConfigurationPropertyCollection Properties {
                        get { return properties; }
                }
+               [ConfigurationProperty ("allowDynamicModuleRegistration", DefaultValue = "True")]
+               public bool AllowDynamicModuleRegistration {
+                       get { return (bool) base [allowDynamicModuleRegistrationProp]; }
+                       set { base [allowDynamicModuleRegistrationProp] = value; }
+               }
        }
 }
 
index ebf540bfb924df4dc2192c8277913ed9698f8fe0..4b8a52f036de2deb44f292da94fd47541e04a425 100644 (file)
@@ -104,6 +104,13 @@ namespace System.Web.Hosting {
                        get { return vpath_provider; }
                }
 
+               public static bool InClientBuildManager {
+                       get {
+                               // Mono doesn't have a ClientBuildManager, so we can't be in it. Simple as that.
+                               return false;
+                       }
+               }
+
                public static void DecrementBusyCount ()
                {
                        Interlocked.Decrement (ref busy_count);
diff --git a/mcs/class/System.Web/System.Web/DynamicModuleManager.cs b/mcs/class/System.Web/System.Web/DynamicModuleManager.cs
new file mode 100644 (file)
index 0000000..99e0a36
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// DynamicModuleManager.cs: Manager for dynamic Http Modules.
+//
+// Author:
+//   Matthias Bogad (bogad@cs.tum.edu)
+//
+// (C) 2015
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace System.Web {
+       sealed class DynamicModuleManager {
+               const string moduleNameFormat = "__Module__{0}_{1}";
+       
+               readonly List<DynamicModuleInfo> entries = new List<DynamicModuleInfo> ();
+               bool entriesAreReadOnly = false;
+               readonly object mutex = new object ();
+               
+               public void Add (Type moduleType) 
+               {
+                       if (moduleType == null)
+                               throw new ArgumentException ("moduleType");
+                       
+                       if (!typeof (IHttpModule).IsAssignableFrom (moduleType))
+                               throw new ArgumentException ("Given object does not implement IHttpModule.", "moduleType");
+                       
+                       lock (mutex) {
+                               if (entriesAreReadOnly)
+                                       throw new InvalidOperationException ("A module was to be added to the dynamic module list, but the list was already initialized. The dynamic module list can only be initialized once.");
+
+                               entries.Add (new DynamicModuleInfo (moduleType,
+                                                       string.Format (moduleNameFormat, moduleType.AssemblyQualifiedName, Guid.NewGuid ())));
+                       }
+               }
+               
+               public ICollection<DynamicModuleInfo> LockAndGetModules ()
+               {
+                       lock (mutex) {
+                               entriesAreReadOnly = true;
+                               return entries;
+                       }
+               }
+       }
+
+       struct DynamicModuleInfo {
+               public readonly string Name;
+               public readonly Type Type;
+
+               public DynamicModuleInfo (Type type, string name)
+               {
+                       Name = name;
+                       Type = type;
+               }
+       }
+}
index 68c098dcc261c264a2237318072781429e24192b..34c2d105769aa4f5623694fd0d1d903d48c81039 100644 (file)
@@ -4,7 +4,8 @@
 // Author:
 //     Miguel de Icaza (miguel@novell.com)
 //     Gonzalo Paniagua (gonzalo@ximian.com)
-//    
+//     Matthias Bogad (bogad@cs.tum.edu)
+//
 //
 // Copyright (C) 2005-2009 Novell, Inc (http://www.novell.com)
 //
 //    Events Disposed
 //
 
+using System;
 using System.IO;
 using System.Collections;
+using System.Collections.Generic;
 using System.ComponentModel;
 using System.Configuration;
 using System.Diagnostics;
@@ -162,6 +165,8 @@ namespace System.Web
                bool removeConfigurationFromCache;
                bool fullInitComplete = false;
                
+               static DynamicModuleManager dynamicModuleManeger = new DynamicModuleManager ();
+
                //
                // These are used to detect the case where the EndXXX method is invoked
                // from within the BeginXXXX delegate, so we detect whether we kick the
@@ -209,6 +214,13 @@ namespace System.Web
                                        if (context == null)
                                                context = HttpContext.Current;
                                        HttpModuleCollection coll = modules.LoadModules (this);
+
+                                       HttpModuleCollection dynMods = CreateDynamicModules ();
+
+                                       for (int i = 0; i < dynMods.Count; i++) {
+                                               coll.AddModule (dynMods.GetKey (i), dynMods.Get (i));
+                                       }
+
                                        Interlocked.CompareExchange (ref modcoll, coll, null);
                                        HttpContext.Current = saved;
 
@@ -404,7 +416,7 @@ namespace System.Web
                
                public void AddOnAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        AcquireRequestState += new EventHandler (invoker.Invoke);
                }
 
@@ -417,7 +429,7 @@ namespace System.Web
                
                public void AddOnAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        AuthenticateRequest += new EventHandler (invoker.Invoke);
                }
 
@@ -430,7 +442,7 @@ namespace System.Web
                
                public void AddOnAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        AuthorizeRequest += new EventHandler (invoker.Invoke);
                }
 
@@ -452,7 +464,7 @@ namespace System.Web
                
                public void AddOnBeginRequestAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        BeginRequest += new EventHandler (invoker.Invoke);
                }
 
@@ -474,7 +486,7 @@ namespace System.Web
                
                public void AddOnEndRequestAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        EndRequest += new EventHandler (invoker.Invoke);
                }
 
@@ -487,7 +499,7 @@ namespace System.Web
                
                public void AddOnPostRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        PostRequestHandlerExecute += new EventHandler (invoker.Invoke);
                }
 
@@ -500,7 +512,7 @@ namespace System.Web
                
                public void AddOnPreRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        PreRequestHandlerExecute += new EventHandler (invoker.Invoke);
                }
 
@@ -513,7 +525,7 @@ namespace System.Web
                
                public void AddOnReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        ReleaseRequestState += new EventHandler (invoker.Invoke);
                }
 
@@ -526,7 +538,7 @@ namespace System.Web
                
                public void AddOnResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        ResolveRequestCache += new EventHandler (invoker.Invoke);
                }
 
@@ -539,7 +551,7 @@ namespace System.Web
                
                public void AddOnUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this);
                        UpdateRequestCache += new EventHandler (invoker.Invoke);
                }
 
@@ -557,7 +569,7 @@ namespace System.Web
                        
                public void AddOnPostAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostAuthenticateRequest += new EventHandler (invoker.Invoke);
                }
 
@@ -575,7 +587,7 @@ namespace System.Web
                
                public void AddOnPostAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostAuthorizeRequest += new EventHandler (invoker.Invoke);
                }
                
@@ -593,7 +605,7 @@ namespace System.Web
                
                public void AddOnPostResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostResolveRequestCache += new EventHandler (invoker.Invoke);
                }
 
@@ -611,7 +623,7 @@ namespace System.Web
                
                public void AddOnPostMapRequestHandlerAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostMapRequestHandler += new EventHandler (invoker.Invoke);
                }
 
@@ -629,7 +641,7 @@ namespace System.Web
                
                public void AddOnPostAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostAcquireRequestState += new EventHandler (invoker.Invoke);
                }
 
@@ -647,7 +659,7 @@ namespace System.Web
                
                public void AddOnPostReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostReleaseRequestState += new EventHandler (invoker.Invoke);
                }
 
@@ -665,7 +677,7 @@ namespace System.Web
                
                public void AddOnPostUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostUpdateRequestCache += new EventHandler (invoker.Invoke);
                }
 
@@ -674,61 +686,61 @@ namespace System.Web
                //
                public void AddOnAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        AcquireRequestState += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        AuthenticateRequest += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        AuthorizeRequest += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnBeginRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        BeginRequest += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnEndRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        EndRequest += new EventHandler (invoker.Invoke);
                }
                
                public void AddOnPostRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PostRequestHandlerExecute += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnPreRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        PreRequestHandlerExecute += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        ReleaseRequestState += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        ResolveRequestCache += new EventHandler (invoker.Invoke);
                }
 
                public void AddOnUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, data);
+                       AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data);
                        UpdateRequestCache += new EventHandler (invoker.Invoke);
                }
 
@@ -749,7 +761,7 @@ namespace System.Web
                
                public void AddOnLogRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, state);
+                       AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state);
                        LogRequest += new EventHandler (invoker.Invoke);
                }
 
@@ -767,7 +779,7 @@ namespace System.Web
 
                public void AddOnMapRequestHandlerAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, state);
+                       AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state);
                        MapRequestHandler += new EventHandler (invoker.Invoke);
                }
 
@@ -785,7 +797,7 @@ namespace System.Web
 
                public void AddOnPostLogRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state)
                {
-                       AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, state);
+                       AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state);
                        PostLogRequest += new EventHandler (invoker.Invoke);
                }
                
@@ -871,7 +883,7 @@ namespace System.Web
                //
                // If we catch an error, queue this error
                //
-               void ProcessError (Exception e)
+               internal void ProcessError (Exception e)
                {
                        bool first = context.Error == null;
                        context.AddError (e);
@@ -1643,7 +1655,39 @@ namespace System.Web
                                return true;
                        }
                }
-               
+
+               public static void RegisterModule (Type moduleType) 
+               {
+                       HttpRuntimeSection config = (HttpRuntimeSection)WebConfigurationManager.GetSection ("system.web/httpRuntime");
+
+                       if (!config.AllowDynamicModuleRegistration)
+                               throw new InvalidOperationException ("The Application has requested to register a dynamic Module, but dynamic module registration is disabled in web.config.");
+
+                       dynamicModuleManeger.Add (moduleType);
+               }
+
+
+               HttpModuleCollection CreateDynamicModules () 
+               {
+                       HttpModuleCollection modules = new HttpModuleCollection ();
+
+                       foreach (var module in dynamicModuleManeger.LockAndGetModules ()) {
+                               IHttpModule httpModule = CreateModuleInstance (module.Type);
+                               httpModule.Init (this);
+                               modules.AddModule (module.Name, httpModule);
+                       }
+                       return modules;
+               }
+
+               IHttpModule CreateModuleInstance (Type type)
+               {
+                       return (IHttpModule) Activator.CreateInstance (type,
+                                       BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance,
+                                       null,
+                                       null,
+                                       null);
+               }
+
 #region internals
                internal void ClearError ()
                {
@@ -1891,24 +1935,40 @@ namespace System.Web
                public BeginEventHandler begin;
                public EndEventHandler end;
                public object data;
+               HttpApplication app;
+               AsyncCallback callback;
                
-               public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh, object d)
+               public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh, HttpApplication a, object d)
                {
                        begin = bh;
                        end = eh;
                        data = d;
+                       app = a;
+                       callback = new AsyncCallback (doAsyncCallback);
                }
 
-               public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh)
-               {
-                       begin = bh;
-                       end = eh;
-               }
+               public AsyncInvoker (BeginEventHandler bh, EndEventHandler eh, HttpApplication app) : this(bh, eh, app, null) { }
                
                public void Invoke (object sender, EventArgs e)
                {
-                       throw new Exception ("This is just a dummy");
+                       IAsyncResult res;
+                       res = begin (app, e, callback, data);
+               }
+
+               void doAsyncCallback (IAsyncResult res)
+               {
+                       ThreadPool.QueueUserWorkItem ((object ores) => {
+                               IAsyncResult tres = (IAsyncResult) ores;
+                               try {
+                                       end (tres);
+                               } catch (Exception ee) {
+                                       // I tried using ProcessError(), but we only come here frome an Invokation in PipelineDone().
+                                       // Using ProcessError, I still get a blank screen, this way, we at least log the error to console...
+                                       Console.Error.WriteLine (ee.ToString ());
+                               }
+                       }, res);
                }
        }
 #endregion
 }
+
index 8703eb00471f39775bcb5413a53b6d75c187bdd1..b074ec8f0a8cb9c7b928f59b9cddbeeb7c8a5044 100644 (file)
@@ -10,3 +10,4 @@ System.Web/UnvalidatedRequestValuesWrapper.cs
 System.Web/TaskAsyncResult.cs
 System.Web/TaskEventHandler.cs
 System.Web.Security/MembershipPasswordAttribute.cs
+System.Web/DynamicModuleManager.cs
index 10367320015607cdb8452069ec55294616e27512..54cd8471352f2f1c9ea6a643504f3dabec99775c 100644 (file)
@@ -64,3 +64,7 @@ using System.Runtime.InteropServices;
 #endif
 
 [assembly: ComVisible (false)]
+
+#if !MOBILE
+[assembly: TypeForwardedTo (typeof (System.Windows.Markup.ValueSerializerAttribute))]
+#endif
index 5d82088e5309b94a3b8b47475bdf458950a47608..58f07d40c8aa50707a5e4dea7b001a45459b57d7 100644 (file)
     <Compile Include="ReferenceSources\AssertWrapper.cs" />\r
     <Compile Include="ReferenceSources\BinaryCompatibility.cs" />\r
     <Compile Include="ReferenceSources\ConfigurationManagerInternalFactory.cs" />\r
+    <Compile Include="ReferenceSources\HttpSysSettings.cs" />\r
     <Compile Include="ReferenceSources\Logging.cs" />\r
     <Compile Include="ReferenceSources\NativeMethods.cs" />\r
     <Compile Include="ReferenceSources\SettingsSectionInternal.cs" />\r
index 10451c474152c1db2e91542b434eb0fb8bcea71f..731ae63b8793f031d1da059761fc3238c3632e9d 100644 (file)
     <Compile Include="ReferenceSources\AssertWrapper.cs" />\r
     <Compile Include="ReferenceSources\BinaryCompatibility.cs" />\r
     <Compile Include="ReferenceSources\ConfigurationManagerInternalFactory.cs" />\r
+    <Compile Include="ReferenceSources\HttpSysSettings.cs" />\r
     <Compile Include="ReferenceSources\Logging.cs" />\r
     <Compile Include="ReferenceSources\NativeMethods.cs" />\r
     <Compile Include="ReferenceSources\SettingsSectionInternal.cs" />\r
index d4c8d3e15237ea4b7d2103ad5b1f738b59c7e77c..c17518029fbb9eca45498ab8daa61e06206f8562 100644 (file)
     <Compile Include="ReferenceSources\AssertWrapper.cs" />\r
     <Compile Include="ReferenceSources\BinaryCompatibility.cs" />\r
     <Compile Include="ReferenceSources\ConfigurationManagerInternalFactory.cs" />\r
+    <Compile Include="ReferenceSources\HttpSysSettings.cs" />\r
     <Compile Include="ReferenceSources\Logging.cs" />\r
     <Compile Include="ReferenceSources\NativeMethods.cs" />\r
     <Compile Include="ReferenceSources\SettingsSectionInternal.cs" />\r
index 7ccbcc2f34e104f80fadfedc6a3dbe262d13e073..b9cc121d03c7f6dc1455782f6dbf692a96539330 100644 (file)
@@ -110,6 +110,9 @@ namespace System.Net
                AuthorizationState auth_state, proxy_auth_state;
                string host;
 
+               [NonSerialized]
+               internal Action<Stream> ResendContentFactory;
+
                // Constructors
                static HttpWebRequest ()
                {
@@ -226,9 +229,15 @@ namespace System.Net
                
                internal bool InternalAllowBuffering {
                        get {
-                               return (allowBuffering && (method != "HEAD" && method != "GET" &&
-                                                       method != "MKCOL" && method != "CONNECT" &&
-                                                       method != "TRACE"));
+                               return allowBuffering && MethodWithBuffer;
+                       }
+               }
+
+               bool MethodWithBuffer {
+                       get {
+                               return method != "HEAD" && method != "GET" &&
+                               method != "MKCOL" && method != "CONNECT" &&
+                               method != "TRACE";
                        }
                }
                
@@ -1101,7 +1110,7 @@ namespace System.Net
                        if (e != null)
                                throw e;
 
-                       if (AllowWriteStreamBuffering)
+                       if (AllowWriteStreamBuffering || method == "GET")
                                contentLength = -1;
 
                        uriString = webResponse.Headers ["Location"];
@@ -1306,8 +1315,7 @@ namespace System.Net
                                                bodyBuffer = null;
                                                writeStream.Close ();
                                        }
-                               } else if (method != "HEAD" && method != "GET" && method != "MKCOL" && method != "CONNECT" &&
-                                         method != "TRACE") {
+                               } else if (MethodWithBuffer) {
                                        if (getResponseCalled && !writeStream.RequestWritten)
                                                return writeStream.WriteRequestAsync (result);
                                }
@@ -1606,12 +1614,28 @@ namespace System.Net
                                        (ProxyQuery && !proxy_auth_state.IsCompleted && code == HttpStatusCode.ProxyAuthenticationRequired)) {
                                        if (!usedPreAuth && CheckAuthorization (webResponse, code)) {
                                                // Keep the written body, so it can be rewritten in the retry
-                                               if (InternalAllowBuffering) {
-                                                       if (writeStream.WriteBufferLength > 0) {
-                                                               bodyBuffer = writeStream.WriteBuffer;
-                                                               bodyBufferLength = writeStream.WriteBufferLength;
+                                               if (MethodWithBuffer) {
+                                                       if (AllowWriteStreamBuffering) {
+                                                               if (writeStream.WriteBufferLength > 0) {
+                                                                       bodyBuffer = writeStream.WriteBuffer;
+                                                                       bodyBufferLength = writeStream.WriteBufferLength;
+                                                               }
+
+                                                               return true;
+                                                       }
+
+                                                       //
+                                                       // Buffering is not allowed but we have alternative way to get same content (we
+                                                       // need to resent it due to NTLM Authentication).
+                                                       //
+                                                       if (ResendContentFactory != null) {
+                                                               using (var ms = new MemoryStream ()) {
+                                                                       ResendContentFactory (ms);
+                                                                       bodyBuffer = ms.ToArray ();
+                                                                       bodyBufferLength = bodyBuffer.Length;
+                                                               }
+                                                               return true;
                                                        }
-                                                       return true;
                                                } else if (method != "PUT" && method != "POST") {
                                                        bodyBuffer = null;
                                                        return true;
index 326ff298024580ff7205d0cafe3cd61ce9165310..a0a649376af9d09aab8c24be09f7f422d69c1a08 100644 (file)
@@ -29,6 +29,8 @@ using Mono.Security.Authenticode;
 using Mono.Security.Protocol.Tls;
 #endif
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.Net
 {
        [TestFixture]
@@ -93,7 +95,7 @@ namespace MonoTests.System.Net
                [Test] // bug #471782
                public void CloseRequestStreamAfterReadingResponse ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9152);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -241,7 +243,7 @@ namespace MonoTests.System.Net
                        methods.Add ("whatever", "whatever");
                        methods.Add ("PUT", "PUT");
 
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9153);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        foreach (DictionaryEntry de in methods) {
@@ -271,7 +273,7 @@ namespace MonoTests.System.Net
                [Test]
                public void BeginGetRequestStream_Body_NotAllowed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9154);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -310,7 +312,7 @@ namespace MonoTests.System.Net
                [Test] // bug #465613
                public void BeginGetRequestStream_NoBuffering ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 11001);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -366,7 +368,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")] // #5842
                public void BeginGetResponse ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8001);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -463,7 +465,7 @@ namespace MonoTests.System.Net
                [Test] // bug #511851
                public void BeginGetRequestStream_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8002);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -490,7 +492,7 @@ namespace MonoTests.System.Net
                [Test] // bug #511851
                public void BeginGetResponse_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9155);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -517,7 +519,7 @@ namespace MonoTests.System.Net
                [Test]
                public void EndGetRequestStream_AsyncResult_Null ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9156);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -545,7 +547,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")] // do not get consistent result on MS
                public void EndGetRequestStream_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8003);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -575,7 +577,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")]
                public void EndGetResponse_AsyncResult_Invalid ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9157);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -601,7 +603,7 @@ namespace MonoTests.System.Net
                [Test]
                public void EndGetResponse_AsyncResult_Null ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9158);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -634,7 +636,7 @@ namespace MonoTests.System.Net
                [Test] // bug #429200
                public void GetRequestStream ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -658,7 +660,7 @@ namespace MonoTests.System.Net
                [Test] // bug #511851
                public void GetRequestStream_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10001);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -686,7 +688,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")] // #5842
                public void GetRequestStream_Close_NotAllBytesWritten ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10002);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -754,7 +756,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")] // #5842
                public void GetRequestStream_Write_Overflow ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8010);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        // buffered, non-chunked
@@ -965,7 +967,7 @@ namespace MonoTests.System.Net
                [Test] // bug #511851
                public void GetResponse_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 10100);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
@@ -1320,7 +1322,7 @@ namespace MonoTests.System.Net
                [Test] // bug #513087
                public void NonStandardVerb ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8123);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/moved/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (VerbEchoHandler))) {
@@ -1355,7 +1357,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")] // Assert #2 fails
                public void NotModifiedSince ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9123);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (NotModifiedSinceHandler))) {
@@ -2301,7 +2303,7 @@ namespace MonoTests.System.Net
 
                void DoRequest (Action<HttpWebRequest, EventWaitHandle> request)
                {
-                       int port = 30158;
+                       int port = NetworkHelpers.FindFreePort ();
 
                        ManualResetEvent completed = new ManualResetEvent (false);
                        Uri address = new Uri (string.Format ("http://localhost:{0}", port));
@@ -2315,7 +2317,7 @@ namespace MonoTests.System.Net
 
                void DoRequest (Action<HttpWebRequest, EventWaitHandle> request, Action<HttpListenerContext> processor)
                {
-                       int port = 30158;
+                       int port = NetworkHelpers.FindFreePort ();
 
                        ManualResetEvent [] completed = new ManualResetEvent [2];
                        completed [0] = new ManualResetEvent (false);
@@ -2697,7 +2699,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CookieContainerTest ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 11002);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString ();
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (CookieRequestHandler))) {
@@ -2785,7 +2787,7 @@ namespace MonoTests.System.Net
                [Test]
                public void BeginRead ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9124);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2814,7 +2816,7 @@ namespace MonoTests.System.Net
                [Test]
                public void BeginWrite_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9125);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2843,7 +2845,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CanRead ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9126);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2867,7 +2869,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CanSeek ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9127);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2891,7 +2893,7 @@ namespace MonoTests.System.Net
                [Test] // bug #324182
                public void CanTimeout ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9128);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2915,7 +2917,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CanWrite ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9129);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2939,7 +2941,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9130);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2968,7 +2970,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ReadByte ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9140);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -2996,7 +2998,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ReadTimeout ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9141);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3020,7 +3022,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Seek ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9142);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3048,7 +3050,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write_Buffer_Null ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9143);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3076,7 +3078,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write_Count_Negative ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9144);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3106,7 +3108,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write_Count_Overflow ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9145);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3136,7 +3138,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write_Offset_Negative ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9146);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3166,7 +3168,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write_Offset_Overflow ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9147);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3196,7 +3198,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9148);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3226,7 +3228,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")]
                public void Write_Stream_Closed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9149);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3255,7 +3257,7 @@ namespace MonoTests.System.Net
                [Test]
                public void WriteByte_Request_Aborted ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9150);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
@@ -3284,7 +3286,7 @@ namespace MonoTests.System.Net
                [Test]
                public void WriteTimeout ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 9151);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebRequestTest.EchoRequestHandler))) {
index c62c888f24bd17afd2c5c70124789fb17bd7f812..b76bd8b9a540c78d07220da3c91f55ec72c3bd2c 100644 (file)
@@ -14,6 +14,8 @@ using System.Net;
 using System.Net.Sockets;
 using System.Text;
 
+using MonoTests.Helpers;
+
 using NUnit.Framework;
 
 namespace MonoTests.System.Net
@@ -24,7 +26,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CharacterSet_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -54,7 +56,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Close_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -75,7 +77,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ContentEncoding_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -105,7 +107,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ContentLength_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -127,7 +129,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ContentType_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -157,7 +159,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Cookies_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -197,7 +199,7 @@ namespace MonoTests.System.Net
                [Test]
                public void GetResponseHeader_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -227,7 +229,7 @@ namespace MonoTests.System.Net
                [Test]
                public void GetResponseStream_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -257,7 +259,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Headers_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -286,7 +288,7 @@ namespace MonoTests.System.Net
                [Test]
                public void LastModified_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -316,7 +318,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Method_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -346,7 +348,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ProtocolVersion_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -376,7 +378,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ResponseUri_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -406,7 +408,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Server_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -436,7 +438,7 @@ namespace MonoTests.System.Net
                [Test]
                public void StatusCode_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -458,7 +460,7 @@ namespace MonoTests.System.Net
                [Test]
                public void StatusDescription_Disposed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (FullResponseHandler))) {
@@ -511,7 +513,7 @@ namespace MonoTests.System.Net
                [Test]
                public void BeginRead_Buffer_Null ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -562,7 +564,7 @@ namespace MonoTests.System.Net
                [Test]
                public void BeginWrite ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -597,7 +599,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")]
                public void CanRead ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -626,7 +628,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CanSeek ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -655,7 +657,7 @@ namespace MonoTests.System.Net
                [Test] // bug #324182
                public void CanTimeout ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -684,7 +686,7 @@ namespace MonoTests.System.Net
                [Test]
                public void CanWrite ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -713,7 +715,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -752,7 +754,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read_Buffer_Null ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -803,7 +805,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read_Count_Negative ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -855,7 +857,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read_Count_Overflow ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -907,7 +909,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read_Offset_Negative ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -959,7 +961,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Read_Offset_Overflow ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -1012,7 +1014,7 @@ namespace MonoTests.System.Net
                [Category ("NotWorking")]
                public void Read_Stream_Closed ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -1077,7 +1079,7 @@ namespace MonoTests.System.Net
                [Test]
                public void ReadTimeout ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -1106,7 +1108,7 @@ namespace MonoTests.System.Net
                [Test]
                public void Write ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
@@ -1140,7 +1142,7 @@ namespace MonoTests.System.Net
                [Test]
                public void WriteTimeout ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint();
                        string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (HttpWebResponseTest.FullResponseHandler))) {
index f3105b0ca162ce4d9beb3dd23b4811f92dcc8dae..133d293271e74d8da5d4c3f1ed28e8030bd78f8c 100644 (file)
@@ -16,6 +16,8 @@ using System.Text;
 using System.Threading;
 using NUnit.Framework;
 
+using MonoTests.Helpers;
+
 namespace MonoTests.System.Net
 {
        [TestFixture]
@@ -1417,8 +1419,8 @@ namespace MonoTests.System.Net
                [Test]
                public void UploadValues1 ()
                {
-                       IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 8000);
-                       string url = "http://" + IPAddress.Loopback.ToString () + ":8000/test/";
+                       IPEndPoint ep = NetworkHelpers.LocalEphemeralEndPoint ();
+                       string url = "http://" + ep.ToString () + "/test/";
 
                        using (SocketResponder responder = new SocketResponder (ep, new SocketRequestHandler (EchoRequestHandler))) {
                                responder.Start ();
@@ -1783,7 +1785,7 @@ namespace MonoTests.System.Net
                [Test]
                public void UploadStringAsyncCancelEvent ()
                {
-                       UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+                       UploadAsyncCancelEventTest (9301, (webClient, uri, cancelEvent) =>
                        {
 
                                webClient.UploadStringCompleted += (sender, args) =>
@@ -1799,7 +1801,7 @@ namespace MonoTests.System.Net
                [Test]
                public void UploadDataAsyncCancelEvent ()
                {
-                       UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+                       UploadAsyncCancelEventTest (9302, (webClient, uri, cancelEvent) =>
                        {
                                webClient.UploadDataCompleted += (sender, args) =>
                                {
@@ -1814,7 +1816,7 @@ namespace MonoTests.System.Net
                [Test]
                public void UploadValuesAsyncCancelEvent ()
                {
-                       UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+                       UploadAsyncCancelEventTest (9303, (webClient, uri, cancelEvent) =>
                        {
                                webClient.UploadValuesCompleted += (sender, args) =>
                                {
@@ -1829,7 +1831,7 @@ namespace MonoTests.System.Net
                [Test]
                public void UploadFileAsyncCancelEvent ()
                {
-                       UploadAsyncCancelEventTest ((webClient, uri, cancelEvent) =>
+                       UploadAsyncCancelEventTest (9304,(webClient, uri, cancelEvent) =>
                        {
                                string tempFile = Path.Combine (_tempFolder, "upload.tmp");
                                File.Create (tempFile).Close ();
@@ -1868,10 +1870,10 @@ namespace MonoTests.System.Net
 #endif
 
 #if NET_4_0
-               public void UploadAsyncCancelEventTest (Action<WebClient, Uri, EventWaitHandle> uploadAction)
+               public void UploadAsyncCancelEventTest (int port, Action<WebClient, Uri, EventWaitHandle> uploadAction)
                {
-                       var ep = new IPEndPoint (IPAddress.Loopback, 8000);
-                       string url = "http://" + IPAddress.Loopback + ":8000/test/";
+                       var ep = NetworkHelpers.LocalEphemeralEndPoint ();
+                       string url = "http://" + ep.ToString() + "/test/";
 
                        using (var responder = new SocketResponder (ep, EchoRequestHandler))
                        {
index 47c11b008427597474e4a170100220d8e11e6146..02780da33bf225a57be55861d62188518273f79b 100644 (file)
@@ -76,5 +76,7 @@ using System.Windows.Markup;
 [assembly: XmlnsDefinitionAttribute ("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows")]
 [assembly: XmlnsDefinitionAttribute ("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Diagnostics")]
 
+#if !MOBILE
 [assembly: TypeForwardedTo (typeof (ValueSerializerAttribute))]
+#endif
 
index ad5d95213b513210f387c63513c24b8ca086c627..9d56645004ffa85fdcd9dc4ee0e3292b3d63d17a 100644 (file)
@@ -25,7 +25,7 @@
     <DebugType>full</DebugType>\r
     <NoWarn>612,618,1699</NoWarn>\r
     <Optimize>false</Optimize>\r
-    <DefineConstants>DEBUG;TRACE;INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP</DefineConstants>\r
+    <DefineConstants>DEBUG;TRACE;INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY</DefineConstants>\r
     <ErrorReport>prompt</ErrorReport>\r
     <WarningLevel>4</WarningLevel>\r
   </PropertyGroup>\r
@@ -33,7 +33,7 @@
     <DebugType>pdbonly</DebugType>\r
     <NoWarn>612,618,1699</NoWarn>\r
     <Optimize>true</Optimize>\r
-    <DefineConstants>INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP</DefineConstants>\r
+    <DefineConstants>INSIDE_CORLIB;MONO_CULTURE_DATA;LIBC;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY;NET_4_0;NET_4_5;MONO;DISABLE_CAS_USE;FEATURE_PAL;GENERICS_WORK;FEATURE_LIST_PREDICATES;FEATURE_SERIALIZATION;FEATURE_ASCII;FEATURE_LATIN1;FEATURE_UTF7;FEATURE_UTF32;MONO_HYBRID_ENCODING_SUPPORT;FEATURE_ASYNC_IO;NEW_EXPERIMENTAL_ASYNC_IO;FEATURE_UTF32;FEATURE_EXCEPTIONDISPATCHINFO;FEATURE_CORRUPTING_EXCEPTIONS;FEATURE_EXCEPTION_NOTIFICATIONS;FEATURE_STRONGNAME_MIGRATION;FEATURE_USE_LCID;FEATURE_FUSION;FEATURE_CRYPTO;FEATURE_X509_SECURESTRINGS;FEATURE_SYNCHRONIZATIONCONTEXT;FEATURE_SYNCHRONIZATIONCONTEXT_WAIT;FEATURE_REMOTING;MONO_COM;FEATURE_COMINTEROP;FEATURE_ROLE_BASED_SECURITY</DefineConstants>\r
     <ErrorReport>prompt</ErrorReport>\r
     <WarningLevel>4</WarningLevel>\r
   </PropertyGroup>\r
     <Compile Include="..\..\..\external\referencesource\mscorlib\system\io\stringwriter.cs" />\r
     <Compile Include="..\..\..\external\referencesource\mscorlib\system\io\textreader.cs" />\r
     <Compile Include="..\..\..\external\referencesource\mscorlib\system\io\textwriter.cs" />\r
+    <Compile Include="..\..\..\external\referencesource\mscorlib\system\io\unmanagedmemoryaccessor.cs" />\r
     <Compile Include="..\..\..\external\referencesource\mscorlib\system\io\unmanagedmemorystream.cs" />\r
     <Compile Include="..\..\..\external\referencesource\mscorlib\system\io\unmanagedmemorystreamwrapper.cs" />\r
     <Compile Include="..\..\..\external\referencesource\mscorlib\system\iobservable.cs" />\r
     <Compile Include="System.IO\SeekOrigin.cs" />\r
     <Compile Include="System.IO\UnexceptionalStreamReader.cs" />\r
     <Compile Include="System.IO\UnexceptionalStreamWriter.cs" />\r
-    <Compile Include="System.IO\UnmanagedMemoryAccessor.cs" />\r
     <Compile Include="System.Reflection.Emit\AssemblyBuilder.cs" />\r
     <Compile Include="System.Reflection.Emit\AssemblyBuilderAccess.cs" />\r
     <Compile Include="System.Reflection.Emit\ConstructorBuilder.cs" />\r
index 1dee0470816b6e9667888db2c1382d4935c1d6d4..a4e89d0ed579665bebd6161dd9980f31cc5de9d6 100644 (file)
@@ -46,428 +46,428 @@ Monodoc.Ecma/EcmaUrlTokenizer.cs
 Monodoc.Ecma/EcmaDesc.cs
 Mono.Documentation/ManifestResourceResolver.cs
 Mono.Documentation/XmlDocUtils.cs
-../../../external/Lucene.Net/src/core/Analysis/Analyzer.cs
-../../../external/Lucene.Net/src/core/Analysis/ASCIIFoldingFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/BaseCharFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/CachingTokenFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/CharArraySet.cs
-../../../external/Lucene.Net/src/core/Analysis/CharFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/CharReader.cs
-../../../external/Lucene.Net/src/core/Analysis/CharStream.cs
-../../../external/Lucene.Net/src/core/Analysis/CharTokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/ISOLatin1AccentFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/KeywordAnalyzer.cs
-../../../external/Lucene.Net/src/core/Analysis/KeywordTokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/LengthFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/LetterTokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/LowerCaseFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/LowerCaseTokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/MappingCharFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/NormalizeCharMap.cs
-../../../external/Lucene.Net/src/core/Analysis/NumericTokenStream.cs
-../../../external/Lucene.Net/src/core/Analysis/PerFieldAnalyzerWrapper.cs
-../../../external/Lucene.Net/src/core/Analysis/PorterStemFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/PorterStemmer.cs
-../../../external/Lucene.Net/src/core/Analysis/SimpleAnalyzer.cs
-../../../external/Lucene.Net/src/core/Analysis/Standard/StandardAnalyzer.cs
-../../../external/Lucene.Net/src/core/Analysis/Standard/StandardFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/Standard/StandardTokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/Standard/StandardTokenizerImpl.cs
-../../../external/Lucene.Net/src/core/Analysis/StopAnalyzer.cs
-../../../external/Lucene.Net/src/core/Analysis/StopFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/TeeSinkTokenFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/Token.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/FlagsAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/ITermAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/ITypeAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/OffsetAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/PayloadAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/TermAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenattributes/TypeAttribute.cs
-../../../external/Lucene.Net/src/core/Analysis/TokenFilter.cs
-../../../external/Lucene.Net/src/core/Analysis/Tokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/TokenStream.cs
-../../../external/Lucene.Net/src/core/Analysis/WhitespaceAnalyzer.cs
-../../../external/Lucene.Net/src/core/Analysis/WhitespaceTokenizer.cs
-../../../external/Lucene.Net/src/core/Analysis/WordlistLoader.cs
-../../../external/Lucene.Net/src/core/Document/AbstractField.cs
-../../../external/Lucene.Net/src/core/Document/CompressionTools.cs
-../../../external/Lucene.Net/src/core/Document/DateField.cs
-../../../external/Lucene.Net/src/core/Document/DateTools.cs
-../../../external/Lucene.Net/src/core/Document/Document.cs
-../../../external/Lucene.Net/src/core/Document/Field.cs
-../../../external/Lucene.Net/src/core/Document/Fieldable.cs
-../../../external/Lucene.Net/src/core/Document/FieldSelector.cs
-../../../external/Lucene.Net/src/core/Document/FieldSelectorResult.cs
-../../../external/Lucene.Net/src/core/Document/LoadFirstFieldSelector.cs
-../../../external/Lucene.Net/src/core/Document/MapFieldSelector.cs
-../../../external/Lucene.Net/src/core/Document/NumberTools.cs
-../../../external/Lucene.Net/src/core/Document/NumericField.cs
-../../../external/Lucene.Net/src/core/Document/SetBasedFieldSelector.cs
-../../../external/Lucene.Net/src/core/Index/AbstractAllTermDocs.cs
-../../../external/Lucene.Net/src/core/Index/AllTermDocs.cs
-../../../external/Lucene.Net/src/core/Index/BufferedDeletes.cs
-../../../external/Lucene.Net/src/core/Index/ByteBlockPool.cs
-../../../external/Lucene.Net/src/core/Index/ByteSliceReader.cs
-../../../external/Lucene.Net/src/core/Index/ByteSliceWriter.cs
-../../../external/Lucene.Net/src/core/Index/CharBlockPool.cs
-../../../external/Lucene.Net/src/core/Index/CheckIndex.cs
-../../../external/Lucene.Net/src/core/Index/CompoundFileReader.cs
-../../../external/Lucene.Net/src/core/Index/CompoundFileWriter.cs
-../../../external/Lucene.Net/src/core/Index/ConcurrentMergeScheduler.cs
-../../../external/Lucene.Net/src/core/Index/CorruptIndexException.cs
-../../../external/Lucene.Net/src/core/Index/DefaultSkipListReader.cs
-../../../external/Lucene.Net/src/core/Index/DefaultSkipListWriter.cs
-../../../external/Lucene.Net/src/core/Index/DirectoryReader.cs
-../../../external/Lucene.Net/src/core/Index/DocConsumer.cs
-../../../external/Lucene.Net/src/core/Index/DocConsumerPerThread.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldConsumer.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldConsumerPerField.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldConsumerPerThread.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldConsumers.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldConsumersPerField.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldConsumersPerThread.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldProcessor.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldProcessorPerField.cs
-../../../external/Lucene.Net/src/core/Index/DocFieldProcessorPerThread.cs
-../../../external/Lucene.Net/src/core/Index/DocInverter.cs
-../../../external/Lucene.Net/src/core/Index/DocInverterPerField.cs
-../../../external/Lucene.Net/src/core/Index/DocInverterPerThread.cs
-../../../external/Lucene.Net/src/core/Index/DocumentsWriter.cs
-../../../external/Lucene.Net/src/core/Index/DocumentsWriterThreadState.cs
-../../../external/Lucene.Net/src/core/Index/FieldInfo.cs
-../../../external/Lucene.Net/src/core/Index/FieldInfos.cs
-../../../external/Lucene.Net/src/core/Index/FieldInvertState.cs
-../../../external/Lucene.Net/src/core/Index/FieldReaderException.cs
-../../../external/Lucene.Net/src/core/Index/FieldSortedTermVectorMapper.cs
-../../../external/Lucene.Net/src/core/Index/FieldsReader.cs
-../../../external/Lucene.Net/src/core/Index/FieldsWriter.cs
-../../../external/Lucene.Net/src/core/Index/FilterIndexReader.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsDocsConsumer.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsDocsWriter.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsFieldsConsumer.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsFieldsWriter.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsPositionsConsumer.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsPositionsWriter.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsTermsConsumer.cs
-../../../external/Lucene.Net/src/core/Index/FormatPostingsTermsWriter.cs
-../../../external/Lucene.Net/src/core/Index/FreqProxFieldMergeState.cs
-../../../external/Lucene.Net/src/core/Index/FreqProxTermsWriter.cs
-../../../external/Lucene.Net/src/core/Index/FreqProxTermsWriterPerField.cs
-../../../external/Lucene.Net/src/core/Index/FreqProxTermsWriterPerThread.cs
-../../../external/Lucene.Net/src/core/Index/IndexCommit.cs
-../../../external/Lucene.Net/src/core/Index/IndexDeletionPolicy.cs
-../../../external/Lucene.Net/src/core/Index/IndexFileDeleter.cs
-../../../external/Lucene.Net/src/core/Index/IndexFileNameFilter.cs
-../../../external/Lucene.Net/src/core/Index/IndexFileNames.cs
-../../../external/Lucene.Net/src/core/Index/IndexReader.cs
-../../../external/Lucene.Net/src/core/Index/IndexWriter.cs
-../../../external/Lucene.Net/src/core/Index/IntBlockPool.cs
-../../../external/Lucene.Net/src/core/Index/InvertedDocConsumer.cs
-../../../external/Lucene.Net/src/core/Index/InvertedDocConsumerPerField.cs
-../../../external/Lucene.Net/src/core/Index/InvertedDocConsumerPerThread.cs
-../../../external/Lucene.Net/src/core/Index/InvertedDocEndConsumer.cs
-../../../external/Lucene.Net/src/core/Index/InvertedDocEndConsumerPerField.cs
-../../../external/Lucene.Net/src/core/Index/InvertedDocEndConsumerPerThread.cs
-../../../external/Lucene.Net/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs
-../../../external/Lucene.Net/src/core/Index/LogByteSizeMergePolicy.cs
-../../../external/Lucene.Net/src/core/Index/LogDocMergePolicy.cs
-../../../external/Lucene.Net/src/core/Index/LogMergePolicy.cs
-../../../external/Lucene.Net/src/core/Index/MergeDocIDRemapper.cs
-../../../external/Lucene.Net/src/core/Index/MergePolicy.cs
-../../../external/Lucene.Net/src/core/Index/MergeScheduler.cs
-../../../external/Lucene.Net/src/core/Index/MultiLevelSkipListReader.cs
-../../../external/Lucene.Net/src/core/Index/MultiLevelSkipListWriter.cs
-../../../external/Lucene.Net/src/core/Index/MultipleTermPositions.cs
-../../../external/Lucene.Net/src/core/Index/MultiReader.cs
-../../../external/Lucene.Net/src/core/Index/NormsWriter.cs
-../../../external/Lucene.Net/src/core/Index/NormsWriterPerField.cs
-../../../external/Lucene.Net/src/core/Index/NormsWriterPerThread.cs
-../../../external/Lucene.Net/src/core/Index/ParallelReader.cs
-../../../external/Lucene.Net/src/core/Index/Payload.cs
-../../../external/Lucene.Net/src/core/Index/PositionBasedTermVectorMapper.cs
-../../../external/Lucene.Net/src/core/Index/RawPostingList.cs
-../../../external/Lucene.Net/src/core/Index/ReadOnlyDirectoryReader.cs
-../../../external/Lucene.Net/src/core/Index/ReadOnlySegmentReader.cs
-../../../external/Lucene.Net/src/core/Index/ReusableStringReader.cs
-../../../external/Lucene.Net/src/core/Index/SegmentInfo.cs
-../../../external/Lucene.Net/src/core/Index/SegmentInfos.cs
-../../../external/Lucene.Net/src/core/Index/SegmentMergeInfo.cs
-../../../external/Lucene.Net/src/core/Index/SegmentMergeQueue.cs
-../../../external/Lucene.Net/src/core/Index/SegmentMerger.cs
-../../../external/Lucene.Net/src/core/Index/SegmentReader.cs
-../../../external/Lucene.Net/src/core/Index/SegmentTermDocs.cs
-../../../external/Lucene.Net/src/core/Index/SegmentTermEnum.cs
-../../../external/Lucene.Net/src/core/Index/SegmentTermPositions.cs
-../../../external/Lucene.Net/src/core/Index/SegmentTermPositionVector.cs
-../../../external/Lucene.Net/src/core/Index/SegmentTermVector.cs
-../../../external/Lucene.Net/src/core/Index/SegmentWriteState.cs
-../../../external/Lucene.Net/src/core/Index/SerialMergeScheduler.cs
-../../../external/Lucene.Net/src/core/Index/SnapshotDeletionPolicy.cs
-../../../external/Lucene.Net/src/core/Index/SortedTermVectorMapper.cs
-../../../external/Lucene.Net/src/core/Index/StaleReaderException.cs
-../../../external/Lucene.Net/src/core/Index/StoredFieldsWriter.cs
-../../../external/Lucene.Net/src/core/Index/StoredFieldsWriterPerThread.cs
-../../../external/Lucene.Net/src/core/Index/Term.cs
-../../../external/Lucene.Net/src/core/Index/TermBuffer.cs
-../../../external/Lucene.Net/src/core/Index/TermDocs.cs
-../../../external/Lucene.Net/src/core/Index/TermEnum.cs
-../../../external/Lucene.Net/src/core/Index/TermFreqVector.cs
-../../../external/Lucene.Net/src/core/Index/TermInfo.cs
-../../../external/Lucene.Net/src/core/Index/TermInfosReader.cs
-../../../external/Lucene.Net/src/core/Index/TermInfosWriter.cs
-../../../external/Lucene.Net/src/core/Index/TermPositions.cs
-../../../external/Lucene.Net/src/core/Index/TermPositionVector.cs
-../../../external/Lucene.Net/src/core/Index/TermsHash.cs
-../../../external/Lucene.Net/src/core/Index/TermsHashConsumer.cs
-../../../external/Lucene.Net/src/core/Index/TermsHashConsumerPerField.cs
-../../../external/Lucene.Net/src/core/Index/TermsHashConsumerPerThread.cs
-../../../external/Lucene.Net/src/core/Index/TermsHashPerField.cs
-../../../external/Lucene.Net/src/core/Index/TermsHashPerThread.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorEntry.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorEntryFreqSortedComparator.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorMapper.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorOffsetInfo.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorsReader.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorsTermsWriter.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorsTermsWriterPerField.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorsTermsWriterPerThread.cs
-../../../external/Lucene.Net/src/core/Index/TermVectorsWriter.cs
-../../../external/Lucene.Net/src/core/LucenePackage.cs
-../../../external/Lucene.Net/src/core/LZOCompressor.cs
-../../../external/Lucene.Net/src/core/Messages/INLSException.cs
-../../../external/Lucene.Net/src/core/Messages/Message.cs
-../../../external/Lucene.Net/src/core/Messages/MessageImpl.cs
-../../../external/Lucene.Net/src/core/Messages/NLS.cs
-../../../external/Lucene.Net/src/core/QueryParser/CharStream.cs
-../../../external/Lucene.Net/src/core/QueryParser/FastCharStream.cs
-../../../external/Lucene.Net/src/core/QueryParser/MultiFieldQueryParser.cs
-../../../external/Lucene.Net/src/core/QueryParser/ParseException.cs
-../../../external/Lucene.Net/src/core/QueryParser/QueryParser.cs
-../../../external/Lucene.Net/src/core/QueryParser/QueryParserConstants.cs
-../../../external/Lucene.Net/src/core/QueryParser/QueryParserTokenManager.cs
-../../../external/Lucene.Net/src/core/QueryParser/Token.cs
-../../../external/Lucene.Net/src/core/QueryParser/TokenMgrError.cs
-../../../external/Lucene.Net/src/core/Search/BooleanClause.cs
-../../../external/Lucene.Net/src/core/Search/BooleanQuery.cs
-../../../external/Lucene.Net/src/core/Search/BooleanScorer.cs
-../../../external/Lucene.Net/src/core/Search/BooleanScorer2.cs
-../../../external/Lucene.Net/src/core/Search/CachingSpanFilter.cs
-../../../external/Lucene.Net/src/core/Search/CachingWrapperFilter.cs
-../../../external/Lucene.Net/src/core/Search/Collector.cs
-../../../external/Lucene.Net/src/core/Search/ComplexExplanation.cs
-../../../external/Lucene.Net/src/core/Search/ConjunctionScorer.cs
-../../../external/Lucene.Net/src/core/Search/ConstantScoreQuery.cs
-../../../external/Lucene.Net/src/core/Search/DefaultSimilarity.cs
-../../../external/Lucene.Net/src/core/Search/DisjunctionMaxQuery.cs
-../../../external/Lucene.Net/src/core/Search/DisjunctionMaxScorer.cs
-../../../external/Lucene.Net/src/core/Search/DisjunctionSumScorer.cs
-../../../external/Lucene.Net/src/core/Search/DocIdSet.cs
-../../../external/Lucene.Net/src/core/Search/DocIdSetIterator.cs
-../../../external/Lucene.Net/src/core/Search/ExactPhraseScorer.cs
-../../../external/Lucene.Net/src/core/Search/Explanation.cs
-../../../external/Lucene.Net/src/core/Search/FieldCache.cs
-../../../external/Lucene.Net/src/core/Search/FieldCacheImpl.cs
-../../../external/Lucene.Net/src/core/Search/FieldCacheRangeFilter.cs
-../../../external/Lucene.Net/src/core/Search/FieldCacheTermsFilter.cs
-../../../external/Lucene.Net/src/core/Search/FieldComparator.cs
-../../../external/Lucene.Net/src/core/Search/FieldComparatorSource.cs
-../../../external/Lucene.Net/src/core/Search/FieldDoc.cs
-../../../external/Lucene.Net/src/core/Search/FieldDocSortedHitQueue.cs
-../../../external/Lucene.Net/src/core/Search/FieldValueHitQueue.cs
-../../../external/Lucene.Net/src/core/Search/Filter.cs
-../../../external/Lucene.Net/src/core/Search/FilteredDocIdSet.cs
-../../../external/Lucene.Net/src/core/Search/FilteredDocIdSetIterator.cs
-../../../external/Lucene.Net/src/core/Search/FilteredQuery.cs
-../../../external/Lucene.Net/src/core/Search/FilteredTermEnum.cs
-../../../external/Lucene.Net/src/core/Search/FilterManager.cs
-../../../external/Lucene.Net/src/core/Search/Function/ByteFieldSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/CustomScoreProvider.cs
-../../../external/Lucene.Net/src/core/Search/Function/CustomScoreQuery.cs
-../../../external/Lucene.Net/src/core/Search/Function/DocValues.cs
-../../../external/Lucene.Net/src/core/Search/Function/FieldCacheSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/FieldScoreQuery.cs
-../../../external/Lucene.Net/src/core/Search/Function/FloatFieldSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/IntFieldSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/OrdFieldSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/ReverseOrdFieldSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/ShortFieldSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/ValueSource.cs
-../../../external/Lucene.Net/src/core/Search/Function/ValueSourceQuery.cs
-../../../external/Lucene.Net/src/core/Search/FuzzyQuery.cs
-../../../external/Lucene.Net/src/core/Search/FuzzyTermEnum.cs
-../../../external/Lucene.Net/src/core/Search/HitQueue.cs
-../../../external/Lucene.Net/src/core/Search/IndexSearcher.cs
-../../../external/Lucene.Net/src/core/Search/MatchAllDocsQuery.cs
-../../../external/Lucene.Net/src/core/Search/MultiPhraseQuery.cs
-../../../external/Lucene.Net/src/core/Search/MultiSearcher.cs
-../../../external/Lucene.Net/src/core/Search/MultiTermQuery.cs
-../../../external/Lucene.Net/src/core/Search/MultiTermQueryWrapperFilter.cs
-../../../external/Lucene.Net/src/core/Search/NumericRangeFilter.cs
-../../../external/Lucene.Net/src/core/Search/NumericRangeQuery.cs
-../../../external/Lucene.Net/src/core/Search/ParallelMultiSearcher.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/AveragePayloadFunction.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/MaxPayloadFunction.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/MinPayloadFunction.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/PayloadFunction.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/PayloadNearQuery.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/PayloadSpanUtil.cs
-../../../external/Lucene.Net/src/core/Search/Payloads/PayloadTermQuery.cs
-../../../external/Lucene.Net/src/core/Search/PhrasePositions.cs
-../../../external/Lucene.Net/src/core/Search/PhraseQuery.cs
-../../../external/Lucene.Net/src/core/Search/PhraseQueue.cs
-../../../external/Lucene.Net/src/core/Search/PhraseScorer.cs
-../../../external/Lucene.Net/src/core/Search/PositiveScoresOnlyCollector.cs
-../../../external/Lucene.Net/src/core/Search/PrefixFilter.cs
-../../../external/Lucene.Net/src/core/Search/PrefixQuery.cs
-../../../external/Lucene.Net/src/core/Search/PrefixTermEnum.cs
-../../../external/Lucene.Net/src/core/Search/Query.cs
-../../../external/Lucene.Net/src/core/Search/QueryTermVector.cs
-../../../external/Lucene.Net/src/core/Search/QueryWrapperFilter.cs
-../../../external/Lucene.Net/src/core/Search/ReqExclScorer.cs
-../../../external/Lucene.Net/src/core/Search/ReqOptSumScorer.cs
-../../../external/Lucene.Net/src/core/Search/ScoreCachingWrappingScorer.cs
-../../../external/Lucene.Net/src/core/Search/ScoreDoc.cs
-../../../external/Lucene.Net/src/core/Search/Scorer.cs
-../../../external/Lucene.Net/src/core/Search/Searchable.cs
-../../../external/Lucene.Net/src/core/Search/Searcher.cs
-../../../external/Lucene.Net/src/core/Search/Similarity.cs
-../../../external/Lucene.Net/src/core/Search/SimilarityDelegator.cs
-../../../external/Lucene.Net/src/core/Search/SingleTermEnum.cs
-../../../external/Lucene.Net/src/core/Search/SloppyPhraseScorer.cs
-../../../external/Lucene.Net/src/core/Search/Sort.cs
-../../../external/Lucene.Net/src/core/Search/SortField.cs
-../../../external/Lucene.Net/src/core/Search/SpanFilter.cs
-../../../external/Lucene.Net/src/core/Search/SpanFilterResult.cs
-../../../external/Lucene.Net/src/core/Search/SpanQueryFilter.cs
-../../../external/Lucene.Net/src/core/Search/Spans/FieldMaskingSpanQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/NearSpansOrdered.cs
-../../../external/Lucene.Net/src/core/Search/Spans/NearSpansUnordered.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanFirstQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanNearQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanNotQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanOrQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/Spans.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanScorer.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanTermQuery.cs
-../../../external/Lucene.Net/src/core/Search/Spans/SpanWeight.cs
-../../../external/Lucene.Net/src/core/Search/Spans/TermSpans.cs
-../../../external/Lucene.Net/src/core/Search/TermQuery.cs
-../../../external/Lucene.Net/src/core/Search/TermRangeFilter.cs
-../../../external/Lucene.Net/src/core/Search/TermRangeQuery.cs
-../../../external/Lucene.Net/src/core/Search/TermRangeTermEnum.cs
-../../../external/Lucene.Net/src/core/Search/TermScorer.cs
-../../../external/Lucene.Net/src/core/Search/TimeLimitingCollector.cs
-../../../external/Lucene.Net/src/core/Search/TopDocs.cs
-../../../external/Lucene.Net/src/core/Search/TopDocsCollector.cs
-../../../external/Lucene.Net/src/core/Search/TopFieldCollector.cs
-../../../external/Lucene.Net/src/core/Search/TopFieldDocs.cs
-../../../external/Lucene.Net/src/core/Search/TopScoreDocCollector.cs
-../../../external/Lucene.Net/src/core/Search/Weight.cs
-../../../external/Lucene.Net/src/core/Search/WildcardQuery.cs
-../../../external/Lucene.Net/src/core/Search/WildcardTermEnum.cs
-../../../external/Lucene.Net/src/core/Store/AlreadyClosedException.cs
-../../../external/Lucene.Net/src/core/Store/BufferedIndexInput.cs
-../../../external/Lucene.Net/src/core/Store/BufferedIndexOutput.cs
-../../../external/Lucene.Net/src/core/Store/CheckSumIndexInput.cs
-../../../external/Lucene.Net/src/core/Store/CheckSumIndexOutput.cs
-../../../external/Lucene.Net/src/core/Store/Directory.cs
-../../../external/Lucene.Net/src/core/Store/FileSwitchDirectory.cs
-../../../external/Lucene.Net/src/core/Store/FSDirectory.cs
-../../../external/Lucene.Net/src/core/Store/FSLockFactory.cs
-../../../external/Lucene.Net/src/core/Store/IndexInput.cs
-../../../external/Lucene.Net/src/core/Store/IndexOutput.cs
-../../../external/Lucene.Net/src/core/Store/Lock.cs
-../../../external/Lucene.Net/src/core/Store/LockFactory.cs
-../../../external/Lucene.Net/src/core/Store/LockObtainFailedException.cs
-../../../external/Lucene.Net/src/core/Store/LockReleaseFailedException.cs
-../../../external/Lucene.Net/src/core/Store/LockStressTest.cs
-../../../external/Lucene.Net/src/core/Store/LockVerifyServer.cs
-../../../external/Lucene.Net/src/core/Store/MMapDirectory.cs
-../../../external/Lucene.Net/src/core/Store/NativeFSLockFactory.cs
-../../../external/Lucene.Net/src/core/Store/NIOFSDirectory.cs
-../../../external/Lucene.Net/src/core/Store/NoLockFactory.cs
-../../../external/Lucene.Net/src/core/Store/NoSuchDirectoryException.cs
-../../../external/Lucene.Net/src/core/Store/RAMDirectory.cs
-../../../external/Lucene.Net/src/core/Store/RAMFile.cs
-../../../external/Lucene.Net/src/core/Store/RAMInputStream.cs
-../../../external/Lucene.Net/src/core/Store/RAMOutputStream.cs
-../../../external/Lucene.Net/src/core/Store/SimpleFSDirectory.cs
-../../../external/Lucene.Net/src/core/Store/SimpleFSLockFactory.cs
-../../../external/Lucene.Net/src/core/Store/SingleInstanceLockFactory.cs
-../../../external/Lucene.Net/src/core/Store/VerifyingLockFactory.cs
-../../../external/Lucene.Net/src/core/Support/AppSettings.cs
-../../../external/Lucene.Net/src/core/Support/AttributeImplItem.cs
-../../../external/Lucene.Net/src/core/Support/BitSetSupport.cs
-../../../external/Lucene.Net/src/core/Support/BuildType.cs
-../../../external/Lucene.Net/src/core/Support/Character.cs
-../../../external/Lucene.Net/src/core/Support/CloseableThreadLocalProfiler.cs
-../../../external/Lucene.Net/src/core/Support/CollectionsHelper.cs
-../../../external/Lucene.Net/src/core/Support/Compare.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/ConcurrentDictionary.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/Func.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/ISet.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/SetFactory.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/SortedSet.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/ThreadLocal.cs
-../../../external/Lucene.Net/src/core/Support/Compatibility/WrappedHashSet.cs
-../../../external/Lucene.Net/src/core/Support/CRC32.cs
-../../../external/Lucene.Net/src/core/Support/Cryptography.cs
-../../../external/Lucene.Net/src/core/Support/Deflater.cs
-../../../external/Lucene.Net/src/core/Support/Double.cs
-../../../external/Lucene.Net/src/core/Support/EquatableList.cs
-../../../external/Lucene.Net/src/core/Support/FileSupport.cs
-../../../external/Lucene.Net/src/core/Support/GeneralKeyedCollection.cs
-../../../external/Lucene.Net/src/core/Support/HashMap.cs
-../../../external/Lucene.Net/src/core/Support/IChecksum.cs
-../../../external/Lucene.Net/src/core/Support/Inflater.cs
-../../../external/Lucene.Net/src/core/Support/IThreadRunnable.cs
-../../../external/Lucene.Net/src/core/Support/Number.cs
-../../../external/Lucene.Net/src/core/Support/OS.cs
-../../../external/Lucene.Net/src/core/Support/SharpZipLib.cs
-../../../external/Lucene.Net/src/core/Support/Single.cs
-../../../external/Lucene.Net/src/core/Support/TextSupport.cs
-../../../external/Lucene.Net/src/core/Support/ThreadClass.cs
-../../../external/Lucene.Net/src/core/Support/ThreadLock.cs
-../../../external/Lucene.Net/src/core/Support/WeakDictionary.cs
-../../../external/Lucene.Net/src/core/Util/ArrayUtil.cs
-../../../external/Lucene.Net/src/core/Util/Attribute.cs
-../../../external/Lucene.Net/src/core/Util/AttributeSource.cs
-../../../external/Lucene.Net/src/core/Util/AverageGuessMemoryModel.cs
-../../../external/Lucene.Net/src/core/Util/BitUtil.cs
-../../../external/Lucene.Net/src/core/Util/BitVector.cs
-../../../external/Lucene.Net/src/core/Util/Cache/Cache.cs
-../../../external/Lucene.Net/src/core/Util/Cache/SimpleLRUCache.cs
-../../../external/Lucene.Net/src/core/Util/Cache/SimpleMapCache.cs
-../../../external/Lucene.Net/src/core/Util/CloseableThreadLocal.cs
-../../../external/Lucene.Net/src/core/Util/Constants.cs
-../../../external/Lucene.Net/src/core/Util/DocIdBitSet.cs
-../../../external/Lucene.Net/src/core/Util/FieldCacheSanityChecker.cs
-../../../external/Lucene.Net/src/core/Util/IAttribute.cs
-../../../external/Lucene.Net/src/core/Util/IdentityDictionary.cs
-../../../external/Lucene.Net/src/core/Util/IndexableBinaryStringTools.cs
-../../../external/Lucene.Net/src/core/Util/MapOfSets.cs
-../../../external/Lucene.Net/src/core/Util/MemoryModel.cs
-../../../external/Lucene.Net/src/core/Util/NumericUtils.cs
-../../../external/Lucene.Net/src/core/Util/OpenBitSet.cs
-../../../external/Lucene.Net/src/core/Util/OpenBitSetDISI.cs
-../../../external/Lucene.Net/src/core/Util/OpenBitSetIterator.cs
-../../../external/Lucene.Net/src/core/Util/PriorityQueue.cs
-../../../external/Lucene.Net/src/core/Util/RamUsageEstimator.cs
-../../../external/Lucene.Net/src/core/Util/ReaderUtil.cs
-../../../external/Lucene.Net/src/core/Util/ScorerDocQueue.cs
-../../../external/Lucene.Net/src/core/Util/SimpleStringInterner.cs
-../../../external/Lucene.Net/src/core/Util/SmallFloat.cs
-../../../external/Lucene.Net/src/core/Util/SortedVIntList.cs
-../../../external/Lucene.Net/src/core/Util/SorterTemplate.cs
-../../../external/Lucene.Net/src/core/Util/StringHelper.cs
-../../../external/Lucene.Net/src/core/Util/StringInterner.cs
-../../../external/Lucene.Net/src/core/Util/ToStringUtils.cs
-../../../external/Lucene.Net/src/core/Util/UnicodeUtil.cs
-../../../external/Lucene.Net/src/core/Util/Version.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Analyzer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/ASCIIFoldingFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/BaseCharFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/CachingTokenFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/CharArraySet.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/CharFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/CharReader.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/CharStream.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/CharTokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/ISOLatin1AccentFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/KeywordAnalyzer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/KeywordTokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/LengthFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/LetterTokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/LowerCaseFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/LowerCaseTokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/MappingCharFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/NormalizeCharMap.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/NumericTokenStream.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/PerFieldAnalyzerWrapper.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/PorterStemFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/PorterStemmer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/SimpleAnalyzer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardAnalyzer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizerImpl.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/StopAnalyzer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/StopFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/TeeSinkTokenFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Token.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/FlagsAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITermAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITypeAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/OffsetAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PayloadAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TermAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TypeAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/TokenFilter.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/Tokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/TokenStream.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/WhitespaceAnalyzer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/WhitespaceTokenizer.cs
+../../../external/Lucene.Net.Light/src/core/Analysis/WordlistLoader.cs
+../../../external/Lucene.Net.Light/src/core/Document/AbstractField.cs
+../../../external/Lucene.Net.Light/src/core/Document/CompressionTools.cs
+../../../external/Lucene.Net.Light/src/core/Document/DateField.cs
+../../../external/Lucene.Net.Light/src/core/Document/DateTools.cs
+../../../external/Lucene.Net.Light/src/core/Document/Document.cs
+../../../external/Lucene.Net.Light/src/core/Document/Field.cs
+../../../external/Lucene.Net.Light/src/core/Document/Fieldable.cs
+../../../external/Lucene.Net.Light/src/core/Document/FieldSelector.cs
+../../../external/Lucene.Net.Light/src/core/Document/FieldSelectorResult.cs
+../../../external/Lucene.Net.Light/src/core/Document/LoadFirstFieldSelector.cs
+../../../external/Lucene.Net.Light/src/core/Document/MapFieldSelector.cs
+../../../external/Lucene.Net.Light/src/core/Document/NumberTools.cs
+../../../external/Lucene.Net.Light/src/core/Document/NumericField.cs
+../../../external/Lucene.Net.Light/src/core/Document/SetBasedFieldSelector.cs
+../../../external/Lucene.Net.Light/src/core/Index/AbstractAllTermDocs.cs
+../../../external/Lucene.Net.Light/src/core/Index/AllTermDocs.cs
+../../../external/Lucene.Net.Light/src/core/Index/BufferedDeletes.cs
+../../../external/Lucene.Net.Light/src/core/Index/ByteBlockPool.cs
+../../../external/Lucene.Net.Light/src/core/Index/ByteSliceReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/ByteSliceWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/CharBlockPool.cs
+../../../external/Lucene.Net.Light/src/core/Index/CheckIndex.cs
+../../../external/Lucene.Net.Light/src/core/Index/CompoundFileReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/CompoundFileWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/ConcurrentMergeScheduler.cs
+../../../external/Lucene.Net.Light/src/core/Index/CorruptIndexException.cs
+../../../external/Lucene.Net.Light/src/core/Index/DefaultSkipListReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/DefaultSkipListWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/DirectoryReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocConsumerPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumers.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldProcessor.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocInverter.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocInverterPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocInverterPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocumentsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/DocumentsWriterThreadState.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldInfo.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldInfos.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldInvertState.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldReaderException.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldSortedTermVectorMapper.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldsReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/FieldsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/FilterIndexReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/FreqProxFieldMergeState.cs
+../../../external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexCommit.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexDeletionPolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexFileDeleter.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexFileNameFilter.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexFileNames.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/IndexWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/IntBlockPool.cs
+../../../external/Lucene.Net.Light/src/core/Index/InvertedDocConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/LogByteSizeMergePolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/LogDocMergePolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/LogMergePolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/MergeDocIDRemapper.cs
+../../../external/Lucene.Net.Light/src/core/Index/MergePolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/MergeScheduler.cs
+../../../external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/MultipleTermPositions.cs
+../../../external/Lucene.Net.Light/src/core/Index/MultiReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/NormsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/NormsWriterPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/NormsWriterPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/ParallelReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/Payload.cs
+../../../external/Lucene.Net.Light/src/core/Index/PositionBasedTermVectorMapper.cs
+../../../external/Lucene.Net.Light/src/core/Index/RawPostingList.cs
+../../../external/Lucene.Net.Light/src/core/Index/ReadOnlyDirectoryReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/ReadOnlySegmentReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/ReusableStringReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentInfo.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentInfos.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentMergeInfo.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentMergeQueue.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentMerger.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentTermDocs.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentTermPositions.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentTermPositionVector.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentTermVector.cs
+../../../external/Lucene.Net.Light/src/core/Index/SegmentWriteState.cs
+../../../external/Lucene.Net.Light/src/core/Index/SerialMergeScheduler.cs
+../../../external/Lucene.Net.Light/src/core/Index/SnapshotDeletionPolicy.cs
+../../../external/Lucene.Net.Light/src/core/Index/SortedTermVectorMapper.cs
+../../../external/Lucene.Net.Light/src/core/Index/StaleReaderException.cs
+../../../external/Lucene.Net.Light/src/core/Index/StoredFieldsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/StoredFieldsWriterPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/Term.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermBuffer.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermDocs.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermFreqVector.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermInfo.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermInfosReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermInfosWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermPositions.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermPositionVector.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermsHash.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermsHashConsumer.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermsHashPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermsHashPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorEntry.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorEntryFreqSortedComparator.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorMapper.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorOffsetInfo.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorsReader.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriter.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerField.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerThread.cs
+../../../external/Lucene.Net.Light/src/core/Index/TermVectorsWriter.cs
+../../../external/Lucene.Net.Light/src/core/LucenePackage.cs
+../../../external/Lucene.Net.Light/src/core/LZOCompressor.cs
+../../../external/Lucene.Net.Light/src/core/Messages/INLSException.cs
+../../../external/Lucene.Net.Light/src/core/Messages/Message.cs
+../../../external/Lucene.Net.Light/src/core/Messages/MessageImpl.cs
+../../../external/Lucene.Net.Light/src/core/Messages/NLS.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/CharStream.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/FastCharStream.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/MultiFieldQueryParser.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/ParseException.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/QueryParser.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/QueryParserConstants.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/QueryParserTokenManager.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/Token.cs
+../../../external/Lucene.Net.Light/src/core/QueryParser/TokenMgrError.cs
+../../../external/Lucene.Net.Light/src/core/Search/BooleanClause.cs
+../../../external/Lucene.Net.Light/src/core/Search/BooleanQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/BooleanScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/BooleanScorer2.cs
+../../../external/Lucene.Net.Light/src/core/Search/CachingSpanFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/CachingWrapperFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/Collector.cs
+../../../external/Lucene.Net.Light/src/core/Search/ComplexExplanation.cs
+../../../external/Lucene.Net.Light/src/core/Search/ConjunctionScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/ConstantScoreQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/DefaultSimilarity.cs
+../../../external/Lucene.Net.Light/src/core/Search/DisjunctionMaxQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/DisjunctionMaxScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/DisjunctionSumScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/DocIdSet.cs
+../../../external/Lucene.Net.Light/src/core/Search/DocIdSetIterator.cs
+../../../external/Lucene.Net.Light/src/core/Search/ExactPhraseScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/Explanation.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldCache.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldCacheImpl.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldCacheRangeFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldCacheTermsFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldComparator.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldComparatorSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldDoc.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldDocSortedHitQueue.cs
+../../../external/Lucene.Net.Light/src/core/Search/FieldValueHitQueue.cs
+../../../external/Lucene.Net.Light/src/core/Search/Filter.cs
+../../../external/Lucene.Net.Light/src/core/Search/FilteredDocIdSet.cs
+../../../external/Lucene.Net.Light/src/core/Search/FilteredDocIdSetIterator.cs
+../../../external/Lucene.Net.Light/src/core/Search/FilteredQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/FilteredTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Search/FilterManager.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/ByteFieldSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/CustomScoreProvider.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/CustomScoreQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/DocValues.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/FieldCacheSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/FieldScoreQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/FloatFieldSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/IntFieldSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/OrdFieldSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/ReverseOrdFieldSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/ShortFieldSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/ValueSource.cs
+../../../external/Lucene.Net.Light/src/core/Search/Function/ValueSourceQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/FuzzyQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/FuzzyTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Search/HitQueue.cs
+../../../external/Lucene.Net.Light/src/core/Search/IndexSearcher.cs
+../../../external/Lucene.Net.Light/src/core/Search/MatchAllDocsQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/MultiPhraseQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/MultiSearcher.cs
+../../../external/Lucene.Net.Light/src/core/Search/MultiTermQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/MultiTermQueryWrapperFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/NumericRangeFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/NumericRangeQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/ParallelMultiSearcher.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/AveragePayloadFunction.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/MaxPayloadFunction.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/MinPayloadFunction.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadFunction.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadNearQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadSpanUtil.cs
+../../../external/Lucene.Net.Light/src/core/Search/Payloads/PayloadTermQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/PhrasePositions.cs
+../../../external/Lucene.Net.Light/src/core/Search/PhraseQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/PhraseQueue.cs
+../../../external/Lucene.Net.Light/src/core/Search/PhraseScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/PositiveScoresOnlyCollector.cs
+../../../external/Lucene.Net.Light/src/core/Search/PrefixFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/PrefixQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/PrefixTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Search/Query.cs
+../../../external/Lucene.Net.Light/src/core/Search/QueryTermVector.cs
+../../../external/Lucene.Net.Light/src/core/Search/QueryWrapperFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/ReqExclScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/ReqOptSumScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/ScoreCachingWrappingScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/ScoreDoc.cs
+../../../external/Lucene.Net.Light/src/core/Search/Scorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/Searchable.cs
+../../../external/Lucene.Net.Light/src/core/Search/Searcher.cs
+../../../external/Lucene.Net.Light/src/core/Search/Similarity.cs
+../../../external/Lucene.Net.Light/src/core/Search/SimilarityDelegator.cs
+../../../external/Lucene.Net.Light/src/core/Search/SingleTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Search/SloppyPhraseScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/Sort.cs
+../../../external/Lucene.Net.Light/src/core/Search/SortField.cs
+../../../external/Lucene.Net.Light/src/core/Search/SpanFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/SpanFilterResult.cs
+../../../external/Lucene.Net.Light/src/core/Search/SpanQueryFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/FieldMaskingSpanQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/NearSpansOrdered.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/NearSpansUnordered.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanFirstQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanNearQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanNotQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanOrQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/Spans.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanTermQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/SpanWeight.cs
+../../../external/Lucene.Net.Light/src/core/Search/Spans/TermSpans.cs
+../../../external/Lucene.Net.Light/src/core/Search/TermQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/TermRangeFilter.cs
+../../../external/Lucene.Net.Light/src/core/Search/TermRangeQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/TermRangeTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Search/TermScorer.cs
+../../../external/Lucene.Net.Light/src/core/Search/TimeLimitingCollector.cs
+../../../external/Lucene.Net.Light/src/core/Search/TopDocs.cs
+../../../external/Lucene.Net.Light/src/core/Search/TopDocsCollector.cs
+../../../external/Lucene.Net.Light/src/core/Search/TopFieldCollector.cs
+../../../external/Lucene.Net.Light/src/core/Search/TopFieldDocs.cs
+../../../external/Lucene.Net.Light/src/core/Search/TopScoreDocCollector.cs
+../../../external/Lucene.Net.Light/src/core/Search/Weight.cs
+../../../external/Lucene.Net.Light/src/core/Search/WildcardQuery.cs
+../../../external/Lucene.Net.Light/src/core/Search/WildcardTermEnum.cs
+../../../external/Lucene.Net.Light/src/core/Store/AlreadyClosedException.cs
+../../../external/Lucene.Net.Light/src/core/Store/BufferedIndexInput.cs
+../../../external/Lucene.Net.Light/src/core/Store/BufferedIndexOutput.cs
+../../../external/Lucene.Net.Light/src/core/Store/CheckSumIndexInput.cs
+../../../external/Lucene.Net.Light/src/core/Store/CheckSumIndexOutput.cs
+../../../external/Lucene.Net.Light/src/core/Store/Directory.cs
+../../../external/Lucene.Net.Light/src/core/Store/FileSwitchDirectory.cs
+../../../external/Lucene.Net.Light/src/core/Store/FSDirectory.cs
+../../../external/Lucene.Net.Light/src/core/Store/FSLockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Store/IndexInput.cs
+../../../external/Lucene.Net.Light/src/core/Store/IndexOutput.cs
+../../../external/Lucene.Net.Light/src/core/Store/Lock.cs
+../../../external/Lucene.Net.Light/src/core/Store/LockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Store/LockObtainFailedException.cs
+../../../external/Lucene.Net.Light/src/core/Store/LockReleaseFailedException.cs
+../../../external/Lucene.Net.Light/src/core/Store/LockStressTest.cs
+../../../external/Lucene.Net.Light/src/core/Store/LockVerifyServer.cs
+../../../external/Lucene.Net.Light/src/core/Store/MMapDirectory.cs
+../../../external/Lucene.Net.Light/src/core/Store/NativeFSLockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Store/NIOFSDirectory.cs
+../../../external/Lucene.Net.Light/src/core/Store/NoLockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Store/NoSuchDirectoryException.cs
+../../../external/Lucene.Net.Light/src/core/Store/RAMDirectory.cs
+../../../external/Lucene.Net.Light/src/core/Store/RAMFile.cs
+../../../external/Lucene.Net.Light/src/core/Store/RAMInputStream.cs
+../../../external/Lucene.Net.Light/src/core/Store/RAMOutputStream.cs
+../../../external/Lucene.Net.Light/src/core/Store/SimpleFSDirectory.cs
+../../../external/Lucene.Net.Light/src/core/Store/SimpleFSLockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Store/SingleInstanceLockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Store/VerifyingLockFactory.cs
+../../../external/Lucene.Net.Light/src/core/Support/AppSettings.cs
+../../../external/Lucene.Net.Light/src/core/Support/AttributeImplItem.cs
+../../../external/Lucene.Net.Light/src/core/Support/BitSetSupport.cs
+../../../external/Lucene.Net.Light/src/core/Support/BuildType.cs
+../../../external/Lucene.Net.Light/src/core/Support/Character.cs
+../../../external/Lucene.Net.Light/src/core/Support/CloseableThreadLocalProfiler.cs
+../../../external/Lucene.Net.Light/src/core/Support/CollectionsHelper.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compare.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/ConcurrentDictionary.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/Func.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/ISet.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/SetFactory.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/SortedSet.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/ThreadLocal.cs
+../../../external/Lucene.Net.Light/src/core/Support/Compatibility/WrappedHashSet.cs
+../../../external/Lucene.Net.Light/src/core/Support/CRC32.cs
+../../../external/Lucene.Net.Light/src/core/Support/Cryptography.cs
+../../../external/Lucene.Net.Light/src/core/Support/Deflater.cs
+../../../external/Lucene.Net.Light/src/core/Support/Double.cs
+../../../external/Lucene.Net.Light/src/core/Support/EquatableList.cs
+../../../external/Lucene.Net.Light/src/core/Support/FileSupport.cs
+../../../external/Lucene.Net.Light/src/core/Support/GeneralKeyedCollection.cs
+../../../external/Lucene.Net.Light/src/core/Support/HashMap.cs
+../../../external/Lucene.Net.Light/src/core/Support/IChecksum.cs
+../../../external/Lucene.Net.Light/src/core/Support/Inflater.cs
+../../../external/Lucene.Net.Light/src/core/Support/IThreadRunnable.cs
+../../../external/Lucene.Net.Light/src/core/Support/Number.cs
+../../../external/Lucene.Net.Light/src/core/Support/OS.cs
+../../../external/Lucene.Net.Light/src/core/Support/SharpZipLib.cs
+../../../external/Lucene.Net.Light/src/core/Support/Single.cs
+../../../external/Lucene.Net.Light/src/core/Support/TextSupport.cs
+../../../external/Lucene.Net.Light/src/core/Support/ThreadClass.cs
+../../../external/Lucene.Net.Light/src/core/Support/ThreadLock.cs
+../../../external/Lucene.Net.Light/src/core/Support/WeakDictionary.cs
+../../../external/Lucene.Net.Light/src/core/Util/ArrayUtil.cs
+../../../external/Lucene.Net.Light/src/core/Util/Attribute.cs
+../../../external/Lucene.Net.Light/src/core/Util/AttributeSource.cs
+../../../external/Lucene.Net.Light/src/core/Util/AverageGuessMemoryModel.cs
+../../../external/Lucene.Net.Light/src/core/Util/BitUtil.cs
+../../../external/Lucene.Net.Light/src/core/Util/BitVector.cs
+../../../external/Lucene.Net.Light/src/core/Util/Cache/Cache.cs
+../../../external/Lucene.Net.Light/src/core/Util/Cache/SimpleLRUCache.cs
+../../../external/Lucene.Net.Light/src/core/Util/Cache/SimpleMapCache.cs
+../../../external/Lucene.Net.Light/src/core/Util/CloseableThreadLocal.cs
+../../../external/Lucene.Net.Light/src/core/Util/Constants.cs
+../../../external/Lucene.Net.Light/src/core/Util/DocIdBitSet.cs
+../../../external/Lucene.Net.Light/src/core/Util/FieldCacheSanityChecker.cs
+../../../external/Lucene.Net.Light/src/core/Util/IAttribute.cs
+../../../external/Lucene.Net.Light/src/core/Util/IdentityDictionary.cs
+../../../external/Lucene.Net.Light/src/core/Util/IndexableBinaryStringTools.cs
+../../../external/Lucene.Net.Light/src/core/Util/MapOfSets.cs
+../../../external/Lucene.Net.Light/src/core/Util/MemoryModel.cs
+../../../external/Lucene.Net.Light/src/core/Util/NumericUtils.cs
+../../../external/Lucene.Net.Light/src/core/Util/OpenBitSet.cs
+../../../external/Lucene.Net.Light/src/core/Util/OpenBitSetDISI.cs
+../../../external/Lucene.Net.Light/src/core/Util/OpenBitSetIterator.cs
+../../../external/Lucene.Net.Light/src/core/Util/PriorityQueue.cs
+../../../external/Lucene.Net.Light/src/core/Util/RamUsageEstimator.cs
+../../../external/Lucene.Net.Light/src/core/Util/ReaderUtil.cs
+../../../external/Lucene.Net.Light/src/core/Util/ScorerDocQueue.cs
+../../../external/Lucene.Net.Light/src/core/Util/SimpleStringInterner.cs
+../../../external/Lucene.Net.Light/src/core/Util/SmallFloat.cs
+../../../external/Lucene.Net.Light/src/core/Util/SortedVIntList.cs
+../../../external/Lucene.Net.Light/src/core/Util/SorterTemplate.cs
+../../../external/Lucene.Net.Light/src/core/Util/StringHelper.cs
+../../../external/Lucene.Net.Light/src/core/Util/StringInterner.cs
+../../../external/Lucene.Net.Light/src/core/Util/ToStringUtils.cs
+../../../external/Lucene.Net.Light/src/core/Util/UnicodeUtil.cs
+../../../external/Lucene.Net.Light/src/core/Util/Version.cs
index 02709af2ba7bf6f541646aadf7f5ff95ad11482f..fcb63961d23eaa7a64e09ba4c7bc835ea05214ac 100644 (file)
@@ -14,5 +14,9 @@ namespace MonoTests.Helpers {
                        l.Stop();
                        return port;
                }
+               public static IPEndPoint LocalEphemeralEndPoint ()
+               {
+                       return new IPEndPoint (IPAddress.Loopback, FindFreePort());
+               }
        }
 }
index fb7b6c79942278a404d2105f69c243ce1885d4e9..369ee5db92e12ba9d6a7406e0ae4d7601db40a00 100644 (file)
@@ -1114,14 +1114,20 @@ namespace Mono.CSharp {
                        //
                        bool found;
                        if (!TypeSpecComparer.Override.IsEqual (BaseType, other.BaseType)) {
-                               if (other.targs == null)
-                                       return false;
-
                                found = false;
-                               foreach (var otarg in other.targs) {
-                                       if (TypeSpecComparer.Override.IsEqual (BaseType, otarg)) {
-                                               found = true;
-                                               break;
+                               if (other.targs != null) {
+                                       foreach (var otarg in other.targs) {
+                                               if (TypeSpecComparer.Override.IsEqual (BaseType, otarg)) {
+                                                       found = true;
+                                                       break;
+                                               }
+                                       }
+                               } else if (targs != null) {
+                                       foreach (var targ in targs) {
+                                               if (TypeSpecComparer.Override.IsEqual (targ, other.BaseType)) {
+                                                       found = true;
+                                                       break;
+                                               }
                                        }
                                }
 
@@ -1164,18 +1170,25 @@ namespace Mono.CSharp {
 
                        // Check interfaces implementation <- definition
                        if (other.InterfacesDefined != null) {
-                               if (InterfacesDefined == null)
-                                       return false;
-
                                //
                                // Iterate over inflated interfaces
                                //
                                foreach (var oiface in other.Interfaces) {
                                        found = false;
-                                       foreach (var iface in Interfaces) {
-                                               if (TypeSpecComparer.Override.IsEqual (iface, oiface)) {
-                                                       found = true;
-                                                       break;
+
+                                       if (InterfacesDefined != null) {
+                                               foreach (var iface in Interfaces) {
+                                                       if (TypeSpecComparer.Override.IsEqual (iface, oiface)) {
+                                                               found = true;
+                                                               break;
+                                                       }
+                                               }
+                                       } else if (targs != null) {
+                                               foreach (var targ in targs) {
+                                                       if (TypeSpecComparer.Override.IsEqual (targ, oiface)) {
+                                                               found = true;
+                                                               break;
+                                                       }
                                                }
                                        }
 
@@ -1186,18 +1199,30 @@ namespace Mono.CSharp {
 
                        // Check type parameters implementation -> definition
                        if (targs != null) {
-                               if (other.targs == null)
-                                       return false;
-
                                foreach (var targ in targs) {
                                        found = false;
-                                       foreach (var otarg in other.targs) {
-                                               if (TypeSpecComparer.Override.IsEqual (targ, otarg)) {
-                                                       found = true;
-                                                       break;
+
+                                       if (other.targs != null) {
+                                               foreach (var otarg in other.targs) {
+                                                       if (TypeSpecComparer.Override.IsEqual (targ, otarg)) {
+                                                               found = true;
+                                                               break;
+                                                       }
                                                }
                                        }
 
+                                       if (other.InterfacesDefined != null && !found) {
+                                               foreach (var iface in other.Interfaces) {
+                                                       if (TypeSpecComparer.Override.IsEqual (iface, targ)) {
+                                                               found = true;
+                                                               break;
+                                                       }
+                                               }
+                                       }
+
+                                       if (!found)
+                                               found = TypeSpecComparer.Override.IsEqual (targ, other.BaseType);
+
                                        if (!found)
                                                return false;
                                }
index 4b7b21e4887bfb9c5627b494cfbb489e03dededd..718fe669922f885d4191817f1de83d06e4543221 100644 (file)
@@ -619,8 +619,7 @@ namespace Mono.CSharp
                                                GetSignatureForError ());
                                }
                        } else if ((ModFlags & Modifiers.OVERRIDE) == 0 && 
-                               (Get == null && (Set.ModFlags & Modifiers.AccessibilityMask) != 0) ||
-                               (Set == null && (Get.ModFlags & Modifiers.AccessibilityMask) != 0)) {
+                               ((Get == null && (Set.ModFlags & Modifiers.AccessibilityMask) != 0) || (Set == null && (Get.ModFlags & Modifiers.AccessibilityMask) != 0))) {
                                Report.Error (276, Location, 
                                              "`{0}': accessibility modifiers on accessors may only be used if the property or indexer has both a get and a set accessor",
                                              GetSignatureForError ());
diff --git a/mcs/tests/gtest-631.cs b/mcs/tests/gtest-631.cs
new file mode 100644 (file)
index 0000000..32939c9
--- /dev/null
@@ -0,0 +1,22 @@
+public class BaseClass<TSource>
+{
+       public void DoStuff<TInput> (TInput stuff) where TInput: TSource 
+       {
+       }
+}
+
+public class MyClass: BaseClass<TInterface>, MyInterface
+{
+       public static void Main ()
+       {
+       }
+}
+
+public interface TInterface
+{
+}
+
+public interface MyInterface 
+{
+       void DoStuff<TInput> (TInput stuff) where TInput: TInterface;
+}
\ No newline at end of file
diff --git a/mcs/tests/gtest-632.cs b/mcs/tests/gtest-632.cs
new file mode 100644 (file)
index 0000000..59cbafb
--- /dev/null
@@ -0,0 +1,22 @@
+public class BaseClass<TSource>
+{
+       public void DoStuff<TInput> (TInput stuff) where TInput: TSource 
+       {
+       }
+}
+
+public class MyClass: BaseClass<TInterface>, MyInterface
+{
+       public static void Main ()
+       {
+       }
+}
+
+public class TInterface
+{
+}
+
+public interface MyInterface 
+{
+       void DoStuff<TInput> (TInput stuff) where TInput: TInterface;
+}
\ No newline at end of file
diff --git a/mcs/tests/test-926.cs b/mcs/tests/test-926.cs
new file mode 100644 (file)
index 0000000..dfb7b3b
--- /dev/null
@@ -0,0 +1,32 @@
+class Program
+{
+       public static void Main ()
+       {
+               System.Console.WriteLine("Hi");
+       }
+}
+
+public class MyClass
+{
+       protected internal virtual int this[int i]
+       {
+               protected get
+               {
+                       return 2;
+               }
+               set
+               {
+               }
+       }
+}
+
+public class Derived : MyClass
+{
+       protected internal override int this[int i]
+       {
+               protected get
+               {
+                       return 4;
+               }
+       }
+}
\ No newline at end of file
index b306de4869ad986ab7ed4a5324e0f4f171b289a2..d8b153527fcee50bf7082f2b0b4c78d50732eda7 100644 (file)
       </method>
     </type>
   </test>
+  <test name="dtest-061.cs">
+    <type name="Test.Program">
+      <method name="Void Main()" attrs="150">
+        <size>88</size>
+      </method>
+      <method name="Void AreEqual[A,B](A, B)" attrs="150">
+        <size>54</size>
+      </method>
+      <method name="Void ShiftTest(Int32, Int32)" attrs="134">
+        <size>2459</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+      <method name="Void .cctor()" attrs="6289">
+        <size>24</size>
+      </method>
+    </type>
+  </test>
   <test name="dtest-anontype-01.cs">
     <type name="C">
       <method name="Void Main()" attrs="150">
       </method>
     </type>
   </test>
+  <test name="gtest-631.cs">
+    <type name="BaseClass`1[TSource]">
+      <method name="Void DoStuff[TInput](TInput)" attrs="134">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="MyClass">
+      <method name="Void Main()" attrs="150">
+        <size>2</size>
+      </method>
+      <method name="Void MyInterface.DoStuff[TInput](TInput)" attrs="993">
+        <size>8</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
+  <test name="gtest-632.cs">
+    <type name="BaseClass`1[TSource]">
+      <method name="Void DoStuff[TInput](TInput)" attrs="134">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="MyClass">
+      <method name="Void Main()" attrs="150">
+        <size>2</size>
+      </method>
+      <method name="Void MyInterface.DoStuff[TInput](TInput)" attrs="993">
+        <size>8</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="TInterface">
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-anontype-01.cs">
     <type name="Test">
       <method name="Int32 Main()" attrs="150">
       </method>
     </type>
   </test>
+  <test name="test-926.cs">
+    <type name="Program">
+      <method name="Void Main()" attrs="150">
+        <size>12</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="MyClass">
+      <method name="Int32 get_Item(Int32)" attrs="2500">
+        <size>10</size>
+      </method>
+      <method name="Void set_Item(Int32, Int32)" attrs="2501">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Derived">
+      <method name="Int32 get_Item(Int32)" attrs="2244">
+        <size>10</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-93.cs">
     <type name="N1.C">
       <method name="Void .ctor()" attrs="6278">
index cdb191f3171efc1ad6582ad4201bd023a61f65ca..a57d8aaeb7ad287a7eebf321b6ddf9e2b5c648ad 100644 (file)
 #endif
 #endif
 
-#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__)
+#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__)
 #include <sys/proc.h>
 #include <sys/sysctl.h>
 #  if !defined(__OpenBSD__)
 #    include <sys/utsname.h>
 #  endif
+#  if defined(__FreeBSD__)
+#    include <sys/user.h>  /* struct kinfo_proc */
+#  endif
 #endif
 
 #ifdef PLATFORM_SOLARIS
@@ -115,7 +118,7 @@ static guint32 process_wait (gpointer handle, guint32 timeout, gboolean alertabl
 static void process_close (gpointer handle, gpointer data);
 static gboolean is_pid_valid (pid_t pid);
 
-#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__))
+#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__))
 static FILE *
 open_process_map (int pid, const char *mode);
 #endif
@@ -175,7 +178,7 @@ is_pid_valid (pid_t pid)
 {
        gboolean result = FALSE;
 
-#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__)
+#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__)
        if (((kill(pid, 0) == 0) || (errno == EPERM)) && pid != 0)
                result = TRUE;
 #elif defined(__HAIKU__)
@@ -1448,7 +1451,7 @@ static GSList *load_modules (void)
        
        return(ret);
 }
-#elif defined(__OpenBSD__)
+#elif defined(__OpenBSD__) || defined(__FreeBSD__)
 #include <link.h>
 static int load_modules_callback (struct dl_phdr_info *info, size_t size, void *ptr)
 {
@@ -1670,6 +1673,7 @@ static gboolean match_procname_to_modulename (char *procname, char *modulename)
        if (procname == NULL || modulename == NULL)
                return (FALSE);
 
+       DEBUG ("%s: procname=\"%s\", modulename=\"%s\"", __func__, procname, modulename);
        pname = mono_path_resolve_symlinks (procname);
        mname = mono_path_resolve_symlinks (modulename);
 
@@ -1698,10 +1702,11 @@ static gboolean match_procname_to_modulename (char *procname, char *modulename)
        g_free (pname);
        g_free (mname);
 
+       DEBUG ("%s: result is %d", __func__, result);
        return result;
 }
 
-#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__))
+#if !(defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__))
 static FILE *
 open_process_map (int pid, const char *mode)
 {
@@ -1724,11 +1729,13 @@ open_process_map (int pid, const char *mode)
 }
 #endif
 
+static char *get_process_name_from_proc (pid_t pid);
+
 gboolean EnumProcessModules (gpointer process, gpointer *modules,
                             guint32 size, guint32 *needed)
 {
        WapiHandle_process *process_handle;
-#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX)
+#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) && !defined(__FreeBSD__)
        FILE *fp;
 #endif
        GSList *mods = NULL;
@@ -1752,6 +1759,7 @@ gboolean EnumProcessModules (gpointer process, gpointer *modules,
 
        if (WAPI_IS_PSEUDO_PROCESS_HANDLE (process)) {
                pid = WAPI_HANDLE_TO_PID (process);
+               proc_name = get_process_name_from_proc (pid);
        } else {
                process_handle = lookup_process_handle (process);
                if (!process_handle) {
@@ -1763,7 +1771,7 @@ gboolean EnumProcessModules (gpointer process, gpointer *modules,
                proc_name = process_handle->proc_name;
        }
        
-#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__)
+#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__)
        mods = load_modules ();
        if (!proc_name) {
                modules[0] = NULL;
@@ -1818,7 +1826,7 @@ gboolean EnumProcessModules (gpointer process, gpointer *modules,
 static char *
 get_process_name_from_proc (pid_t pid)
 {
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined(__FreeBSD__)
        int mib [6];
        size_t size;
        struct kinfo_proc *pi;
@@ -1876,6 +1884,30 @@ get_process_name_from_proc (pid_t pid)
 
        free(pi);
 #endif
+#elif defined(__FreeBSD__)
+       mib [0] = CTL_KERN;
+       mib [1] = KERN_PROC;
+       mib [2] = KERN_PROC_PID;
+       mib [3] = pid;
+       if (sysctl(mib, 4, NULL, &size, NULL, 0) < 0) {
+               DEBUG ("%s: sysctl() failed: %d", __func__, errno);
+               return(ret);
+       }
+
+       if ((pi = malloc(size)) == NULL)
+               return(ret);
+
+       if (sysctl (mib, 4, pi, &size, NULL, 0) < 0) {
+               if (errno == ENOMEM) {
+                       free(pi);
+                       DEBUG ("%s: Didn't allocate enough memory for kproc info", __func__);
+               }
+               return(ret);
+       }
+
+       if (strlen (pi->ki_comm) > 0)
+               ret = g_strdup (pi->ki_comm);
+       free(pi);
 #elif defined(__OpenBSD__)
        mib [0] = CTL_KERN;
        mib [1] = KERN_PROC;
@@ -1885,8 +1917,10 @@ get_process_name_from_proc (pid_t pid)
        mib [5] = 0;
 
 retry:
-       if (sysctl(mib, 6, NULL, &size, NULL, 0) < 0)
+       if (sysctl(mib, 6, NULL, &size, NULL, 0) < 0) {
+               DEBUG ("%s: sysctl() failed: %d", __func__, errno);
                return(ret);
+       }
 
        if ((pi = malloc(size)) == NULL)
                return(ret);
@@ -1902,8 +1936,13 @@ retry:
                return(ret);
        }
 
+#if defined(__OpenBSD__)
        if (strlen (pi->p_comm) > 0)
                ret = g_strdup (pi->p_comm);
+#elif defined(__FreeBSD__)
+       if (strlen (pi->ki_comm) > 0)
+               ret = g_strdup (pi->ki_comm);
+#endif
 
        free(pi);
 #elif defined(__HAIKU__)
@@ -2010,7 +2049,7 @@ get_module_name (gpointer process, gpointer module,
        char *procname_ext = NULL;
        glong len;
        gsize bytes;
-#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX)
+#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) && !defined(__FreeBSD__)
        FILE *fp;
 #endif
        GSList *mods = NULL;
@@ -2044,7 +2083,7 @@ get_module_name (gpointer process, gpointer module,
        }
 
        /* Look up the address in /proc/<pid>/maps */
-#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__)
+#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__HAIKU__)
        mods = load_modules ();
 #else
        fp = open_process_map (pid, "r");
@@ -2150,7 +2189,7 @@ GetModuleInformation (gpointer process, gpointer module,
 {
        WapiHandle_process *process_handle;
        pid_t pid;
-#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX)
+#if !defined(__OpenBSD__) && !defined(PLATFORM_MACOSX) && !defined(__FreeBSD__)
        FILE *fp;
 #endif
        GSList *mods = NULL;
@@ -2181,7 +2220,7 @@ GetModuleInformation (gpointer process, gpointer module,
                proc_name = g_strdup (process_handle->proc_name);
        }
 
-#if defined(PLATFORM_MACOSX) || defined(__OpenBSD__) || defined(__HAIKU__)
+#if defined(PLATFORM_MACOSX) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
        mods = load_modules ();
 #else
        /* Look up the address in /proc/<pid>/maps */
index 441b0a4271ce2118e96a4cb63c8139a775ab2343..25a116171ab719b34c31dde89c6ba5eb71631269 100644 (file)
@@ -1223,6 +1223,9 @@ mono_loader_get_last_error (void);
 void
 mono_loader_clear_error    (void);
 
+void
+mono_loader_assert_no_error (void);
+
 void
 mono_reflection_init       (void);
 
index ca7567985ff3193344445353b7920d60b46a516c..058c0c982d2879f7061c0a050139350518727c56 100644 (file)
@@ -280,7 +280,7 @@ done:
                        mono_error_set_type_load_name (error, name, assembly, "Could not resolve type with token %08x", type_token);
                }
        }
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return res;
 }
 
@@ -1335,7 +1335,7 @@ mono_class_find_enum_basetype (MonoClass *class, MonoError *error)
        mono_error_set_type_load_class (error, class, "Could not find base type");
 
 fail:
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return NULL;
 }
 
@@ -5744,7 +5744,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError
 
        if (mono_metadata_token_table (type_token) != MONO_TABLE_TYPEDEF || tidx > tt->rows) {
                mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token);
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
                return NULL;
        }
 
@@ -5752,7 +5752,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError
 
        if ((class = mono_internal_hash_table_lookup (&image->class_cache, GUINT_TO_POINTER (type_token)))) {
                mono_loader_unlock ();
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
                return class;
        }
 
@@ -5841,7 +5841,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError
                        mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, g_strdup (mono_error_get_message (error)));
                        mono_loader_unlock ();
                        mono_profiler_class_loaded (class, MONO_PROFILE_FAILED);
-                       g_assert (!mono_loader_get_last_error ());
+                       mono_loader_assert_no_error ();
                        return NULL;
                }
        }
@@ -5913,7 +5913,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError
                        mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, g_strdup (mono_error_get_message (error)));
                        mono_loader_unlock ();
                        mono_profiler_class_loaded (class, MONO_PROFILE_FAILED);
-                       g_assert (!mono_loader_get_last_error ());
+                       mono_loader_assert_no_error ();
                        return NULL;
                }
                class->cast_class = class->element_class = mono_class_from_mono_type (enum_basetype);
@@ -5928,7 +5928,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError
                mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, g_strdup_printf ("Could not load generic parameter constrains due to %s", mono_error_get_message (error)));
                mono_loader_unlock ();
                mono_profiler_class_loaded (class, MONO_PROFILE_FAILED);
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
                return NULL;
        }
 
@@ -5940,7 +5940,7 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError
        mono_loader_unlock ();
 
        mono_profiler_class_loaded (class, MONO_PROFILE_OK);
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
 
        return class;
 
@@ -5948,7 +5948,7 @@ parent_failure:
        mono_class_setup_mono_type (class);
        mono_loader_unlock ();
        mono_profiler_class_loaded (class, MONO_PROFILE_FAILED);
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return NULL;
 }
 
@@ -6546,7 +6546,7 @@ mono_type_retrieve_from_typespec (MonoImage *image, guint32 type_spec, MonoGener
                MonoType *inflated = inflate_generic_type (NULL, t, context, error);
 
                if (!mono_error_ok (error)) {
-                       g_assert (!mono_loader_get_last_error ());
+                       mono_loader_assert_no_error ();
                        return NULL;
                }
 
@@ -7408,7 +7408,7 @@ mono_type_get_checked (MonoImage *image, guint32 type_token, MonoGenericContext
                MonoClass *class = mono_class_get_checked (image, type_token, error);
 
                if (!class) {
-                       g_assert (!mono_loader_get_last_error ());
+                       mono_loader_assert_no_error ();
                        return NULL;
                }
 
@@ -7419,7 +7419,7 @@ mono_type_get_checked (MonoImage *image, guint32 type_token, MonoGenericContext
        type = mono_type_retrieve_from_typespec (image, type_token, context, &inflated, error);
 
        if (!type) {
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
                return NULL;
        }
 
index f1fd30c136043744d0394095da88f7aafc7553bf..7d7b7588e7dae77ee43323197a1e31c9ad6c5adb 100644 (file)
@@ -38,77 +38,77 @@ static const DateTimeFormatEntry datetime_format_entries [] = {
        {1921, 1929, 1932, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {9286, 9296, 9305, 9313, 9321, 9329, 9336, 9343, 9351, 2102, 9357, 9365, 0}, {9374, 9384, 9393, 9401, 9409, 9417, 9424, 9431, 9440, 7911, 9446, 9456, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
        {1921, 1929, 1932, {9610, 9618, 9627, 9634, 9641, 9650, 1985}, {1992, 1995, 9657, 2002, 9660, 9664, 2013}, {2016, 2018, 9667, 2023, 9669, 2018, 2023}, {5710, 5718, 9672, 6077, 9678, 9683, 9688, 2479, 2486, 5789, 2504, 2513, 0}, {9693, 9702, 7844, 9712, 9720, 9726, 9732, 9738, 9746, 9756, 9765, 9774, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 691, 187, {4753,1156,1167,1692,5888,9783,9796,9806,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2321,0,0,0,0,0,0,0,0,0},{848,269,2337,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {289, 9817, 9826, {9834, 9841, 9850, 9859, 9871, 9879, 9888}, {9898, 9902, 3761, 9907, 9912, 9916, 9920}, {2673, 5694, 2428, 2428, 9924, 2018, 2023}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, 0, 1, 691, 187, {4753,4762,0,0,0,0,0,0,0,0,0,0,0,0},{1207,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 10097, 10101, 10105, 10109}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {10114, 10122, 10131, 2696, 10004, 2706, 2711, 10136, 2723, 2733, 2741, 3752, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10144, 2486, 2496, 2504, 2513, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10152,10170,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {2277,2286,189,198,8579,10193,1692,0,0,0,0,0,0,0},{1242,10205,10221,0,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 10263, 10268, {10272, 10278, 10288, 10294, 10305, 10315, 10320}, {10330, 10334, 10338, 10342, 10347, 10351, 10355}, {2018, 2018, 2023, 10359, 2018, 7736, 7736}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10485,1242,10502,5505,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 10520, 10538, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 1929, 1932, {10765, 10772, 10778, 10785, 10790, 10796, 10802}, {10808, 10812, 10816, 10820, 10824, 10828, 10832}, {2428, 2023, 2023, 10836, 4442, 3987, 2023}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {198,189,1128,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 10873, 10878, {10883, 10896, 10915, 10932, 10945, 10958, 10975}, {10988, 8775, 8780, 8785, 8790, 8795, 8800}, {10993, 8808, 8805, 8811, 8814, 8808, 8811}, {10996, 11009, 11020, 11037, 11052, 11067, 11082, 11095, 11110, 11127, 11142, 11159, 0}, {11174, 11185, 11198, 11213, 11226, 11239, 11252, 11263, 11276, 11291, 11304, 11323, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11420,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{11438,0,0,0,0,0,0,0}},
-       {289, 11454, 11467, {11480, 11495, 11516, 11531, 11544, 11557, 10975}, {421, 426, 11572, 436, 11577, 446, 451}, {456, 459, 11582, 465, 468, 459, 465}, {11585, 11602, 11611, 11626, 521, 11643, 11658, 11671, 11686, 11703, 11724, 11741, 0}, {11756, 11773, 11786, 11803, 9017, 11822, 11837, 11850, 11863, 11878, 11901, 11920, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, 0, 0, 691, 187, {1167,0,0,0,0,0,0,0,0,0,0,0,0,0},{1242,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 12010, 12015, {12020, 12028, 12039, 12045, 12051, 12060, 1985}, {9246, 9250, 2415, 12066, 9262, 9267, 12070}, {9275, 9277, 12074, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12099,1167,9806,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {12109, 12118, 12123, {12128, 12139, 12150, 12161, 12172, 12183, 12189}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, 2, 1, 691, 187, {7519,1156,1167,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 12281, 12298, {12312, 12323, 12333, 12342, 12353, 12365, 12376}, {12386, 12389, 12392, 12395, 12398, 12401, 12404}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12407, 12417, 12428, 12434, 12443, 12449, 12457, 12465, 12473, 12484, 12493, 12503, 0}, {12513, 12523, 2453, 12534, 12543, 12549, 12557, 12565, 12573, 12584, 12593, 12603, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, 0, 1, 691, 187, {9517,9539,12657,0,0,0,0,0,0,0,0,0,0,0},{12669,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{12696,0,0,0,0,0,0,0}},
-       {12714, 12726, 12015, {12732, 12744, 12756, 12768, 12782, 12797, 12810}, {12824, 12827, 12830, 12833, 12836, 12839, 9660}, {2023, 2018, 12842, 2430, 4442, 2018, 9669}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{13016,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{13038,0,0,0,0,0,0,0}},
-       {1, 13053, 13065, {13077, 13092, 13107, 13122, 13139, 13158, 13169}, {13180, 13187, 13194, 13201, 13208, 13215, 13222}, {0, 0, 0, 0, 0, 0, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 0, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13393,13411,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 13430, 13450, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13559, 13562, 13565, 13568, 13571, 13574, 13577}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13708, 13723, 13604, 13613, 13736, 13629, 13743, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13756,5505,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 13775, 13778, {13781, 13794, 13804, 13813, 13823, 13834, 13845}, {13857, 13860, 13865, 13870, 13875, 13880, 13885}, {13857, 13890, 13893, 13896, 13899, 13902, 13905}, {13908, 13917, 13926, 13935, 13944, 13953, 13962, 13971, 13980, 13989, 13999, 14009, 0}, {14019, 14028, 14037, 14046, 14055, 14064, 14073, 14082, 14091, 14100, 14110, 14120, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, 0, 1, 185, 187, {198,189,1139,1128,1692,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 14205, 14229, {14253, 14266, 14287, 14306, 14327, 14346, 14359}, {14370, 14377, 14384, 14391, 14398, 14405, 14412}, {14419, 14422, 14422, 14425, 14428, 14431, 14436}, {14439, 14454, 14469, 14478, 14489, 14500, 14513, 14526, 14541, 14560, 14579, 14596, 0}, {14615, 14632, 14649, 14660, 14673, 14686, 14701, 14716, 14733, 14754, 14775, 14794, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14899,3582,1692,0,0,0,0,0,0,0},{3870,1207,13756,5505,14910,14921,14933,14950,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {14968, 14974, 14988, 15011, 15025, 15041, 15048}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15084, 15091, 10374, 15098, 3730, 15104, 15110, 15116, 15123, 15132, 15140, 15147, 0}, {15154, 15161, 15168, 15173, 15179, 15183, 15188, 15193, 15200, 15209, 15217, 15224, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 0, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15259,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {15281, 1929, 1932, {15296, 15304, 15315, 15325, 15336, 15345, 15354}, {15364, 15368, 15372, 15376, 15380, 15384, 15388}, {15392, 12842, 12842, 12842, 2432, 2432, 2436}, {15394, 15404, 15412, 15420, 15428, 15436, 15443, 15451, 15459, 15466, 15472, 15479, 0}, {15487, 15498, 15507, 15516, 15525, 15534, 15542, 15551, 15560, 15568, 15575, 15583, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15647,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{15680,0,0,0,0,0,0,0}},
-       {289, 15697, 15718, {15735, 331, 352, 8714, 15748, 15765, 15776}, {15789, 15797, 15805, 15811, 15819, 15827, 15835}, {456, 459, 462, 465, 468, 459, 465}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15923,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 0, 0, {15940, 15947, 15958, 15967, 15976, 15983, 15994}, {16004, 16008, 16012, 16016, 16020, 16023, 16027}, {0, 0, 0, 0, 0, 0, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 0, 0, {16196, 16201, 16207, 16217, 16229, 16237, 16248}, {16257, 16261, 16265, 16269, 16273, 16277, 16281}, {0, 0, 0, 0, 0, 0, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 185, 187, {1681,1735,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {16387, 16393, 16404, 16217, 16229, 16237, 16248}, {16414, 16418, 16422, 16269, 16273, 16277, 16281}, {2023, 2428, 16426, 2430, 2023, 5694, 2428}, {16428, 16438, 16449, 16456, 16465, 16471, 16477, 16485, 16493, 16504, 16514, 16523, 0}, {16532, 16295, 16541, 16547, 16319, 2706, 16324, 16331, 16554, 16347, 16355, 16363, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 2566, 187, {1128,1139,189,1681,1735,1692,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 16568, 16572, {16576, 16583, 16591, 16599, 16608, 16618, 16625}, {2652, 16634, 2658, 16637, 2664, 16640, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {1681,1735,1692,16689,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {16701, 16717, 16742, 16770, 16798, 16826, 16854}, {16873, 16883, 16893, 16903, 16913, 16923, 16933}, {16943, 16947, 16951, 16947, 16955, 16959, 16963}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17360,17394,17427,3870,17461,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 17473, 17478, {5932, 17483, 17494, 17504, 17514, 17524, 17538}, {17550, 17554, 17559, 17564, 17568, 17573, 17578}, {2023, 2428, 2430, 2428, 5694, 2434, 2436}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,4288,0,0,0,0,0,0,0,0,0,0},{269,4302,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 17582, 17598, {17608, 17627, 17646, 17668, 17687, 17709, 17734}, {17753, 17763, 17773, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {18178, 18192, 18195, {18198, 18207, 18216, 18226, 18236, 18246, 18258}, {18266, 18271, 18275, 18279, 18283, 18288, 18293}, {18297, 2430, 2430, 9924, 18297, 18300, 2023}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, 0, 0, 185, 187, {198,1692,18419,7410,2277,0,0,0,0,0,0,0,0,0},{18428,18453,10193,0,0,0,0,0,0,0},{251,3594,843,0,0,0,0,0,0,0,0,0},{269,3602,848,3594,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {18472, 18485, 18490, {18495, 18507, 18518, 18532, 18544, 18554, 18564}, {18575, 18580, 18585, 18590, 18595, 18600, 18605}, {2023, 3989, 2428, 6293, 2673, 16426, 2436}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18838,18862,0,0,0,0,0,0,0,0},{251,843,4288,0,0,0,0,0,0,0,0,0},{269,848,4302,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 7281, 7286, {18880, 18894, 18904, 18915, 18929, 18940, 18951}, {18964, 18969, 18974, 18981, 18987, 18993, 18999}, {2673, 2436, 2428, 7736, 2673, 12842, 2023}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10193,8579,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 19173, 19176, {19180, 19185, 10778, 10785, 19191, 19198, 10802}, {19205, 19209, 10816, 10820, 19213, 10828, 10832}, {12842, 15392, 2023, 10836, 4442, 3987, 2023}, {10114, 10122, 19217, 2696, 10844, 2776, 19221, 19227, 2723, 2733, 2741, 19232, 0}, {10114, 10122, 19217, 2696, 10844, 2776, 19221, 19227, 2723, 2733, 2741, 19232, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 19241, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 19241, 2788, 2792, 2796, 16383, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 19245, 19267, {19291, 19306, 19323, 19340, 19357, 19374, 19383}, {19394, 19400, 19406, 19412, 19418, 19424, 19430}, {19436, 19439, 8811, 8811, 19442, 19436, 8811}, {19445, 19458, 19469, 19482, 19493, 19504, 19517, 19528, 19539, 19556, 19567, 19580, 0}, {19445, 19458, 19469, 19482, 19493, 19504, 19517, 19528, 19539, 19556, 19567, 19580, 0}, {19599, 19607, 19615, 19623, 19631, 19639, 19647, 19655, 19663, 19671, 19679, 19687, 0}, {19599, 19607, 19615, 19623, 19631, 19639, 19647, 19655, 19663, 19671, 19679, 19687, 0}, 0, 0, 2566, 187, {6488,0,0,0,0,0,0,0,0,0,0,0,0,0},{19697,19715,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {19734, 19743, 19769, {19797, 19804, 19811, 19818, 19825, 19832, 19839}, {19797, 19804, 19811, 19818, 19825, 19832, 19839}, {19436, 19439, 19846, 19846, 19442, 19436, 19849}, {19852, 19865, 501, 19880, 521, 19893, 19902, 542, 19911, 19928, 19943, 19956, 0}, {19852, 19865, 501, 19880, 521, 19893, 19902, 542, 19911, 19928, 19943, 19956, 0}, {19971, 15891, 15899, 639, 521, 19979, 19987, 647, 19995, 665, 20003, 683, 0}, {19971, 15891, 15899, 639, 521, 19979, 19987, 647, 19995, 665, 20003, 683, 0}, 0, 0, 2566, 187, {20011,0,0,0,0,0,0,0,0,0,0,0,0,0},{20020,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{20041,0,0,0,0,0,0,0}},
-       {20057, 1929, 1932, {20065, 20074, 20083, 20091, 20100, 20109, 20116}, {20125, 20128, 20131, 20134, 20137, 20141, 20144}, {6607, 6609, 6611, 6613, 12842, 15392, 6605}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {20220, 1929, 1932, {20227, 20237, 20246, 20255, 20266, 20276, 20281}, {20288, 20294, 20299, 20304, 20309, 10828, 20313}, {20318, 2673, 2023, 7736, 2018, 3987, 2023}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, 0, 0, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20359,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 20377, 20405, {20427, 20446, 20465, 20490, 20509, 20543, 20568}, {20587, 20597, 20607, 20623, 20633, 20658, 20674}, {20684, 20688, 20695, 20699, 20706, 20713, 20720}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, 0, 1, 2566, 187, {1139,2293,1128,20970,20983,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 1929, 1932, {21038, 21054, 21073, 21095, 21114, 21133, 21161}, {21183, 21191, 21202, 21216, 21227, 21238, 21258}, {21272, 21276, 21283, 21290, 21300, 21307, 21320}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, {21327, 21343, 21362, 21375, 21394, 21401, 21411, 21427, 21440, 21456, 21475, 21491, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{10502,1242,0,0,0,0,0,0,0,0},{1866,1858,843,251,0,0,0,0,0,0,0,0},{1886,1875,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 1929, 1932, {21507, 21526, 21545, 21567, 21586, 21608, 21633}, {21652, 21662, 21672, 21685, 21695, 21708, 21724}, {21734, 21738, 21745, 21752, 21759, 21766, 21773}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 8151, 22114, {22117, 22136, 22155, 22180, 22199, 22221, 22246}, {22265, 22275, 22285, 22301, 22311, 22324, 22340}, {22350, 22354, 22361, 22365, 22372, 22379, 22386}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 22633, 22658, {22683, 22702, 22724, 22749, 22765, 22787, 22806}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 22974, 22993, 23024, 23049, 23071, 0}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 23096, 22993, 23024, 23049, 23071, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3613, 1929, 1932, {23214, 23236, 23258, 23283, 23305, 23330, 23358}, {23380, 23390, 23400, 23413, 23423, 23436, 23452}, {23462, 23466, 23473, 23477, 23484, 23491, 23498}, {23502, 23518, 23543, 23562, 23584, 23591, 23604, 23617, 23636, 23667, 23692, 23711, 0}, {23502, 23518, 23543, 23562, 23584, 23591, 23736, 23617, 23636, 23667, 23692, 23711, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3613, 1929, 1932, {23852, 23871, 23890, 23912, 23931, 23953, 23978}, {23997, 24007, 24017, 24030, 24040, 24053, 24069}, {24079, 24083, 24090, 24097, 24104, 24111, 24118}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {20057, 1929, 1932, {24502, 24530, 24564, 24592, 24620, 24651, 24688}, {24716, 24729, 24748, 24764, 24777, 24796, 24815}, {24825, 24832, 24839, 24846, 24853, 24866, 24873}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, 0, 0, 2566, 187, {1139,2293,1167,4762,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 25243, 25271, {25293, 25312, 25331, 25356, 25375, 25409, 25434}, {25453, 20597, 20607, 20623, 25463, 25488, 20674}, {0, 0, 0, 0, 0, 0, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25805,0,0,0,0,0,0,0,0,0},{1858,1866,0,0,0,0,0,0,0,0,0,0},{1875,1886,0,0,0,0,0,0,0},{25824,25832,0,0,0,0,0,0}},
-       {1, 1929, 1932, {17608, 17627, 25842, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {5619, 26213, 26218, {26223, 26230, 26241, 26254, 26267, 26278, 26291}, {26302, 26307, 26312, 26317, 26322, 26327, 26332}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26836,26890,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{26926,0,0,0,0,0,0,0}},
-       {26945, 26969, 26991, {27016, 27044, 27072, 27109, 27140, 27174, 27199}, {27233, 27249, 27265, 27290, 27309, 27331, 27344}, {27366, 27373, 27380, 27387, 27394, 27401, 27405}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28030,28073,28121,28153,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28190,1914,0,0,0,0,0,0}},
-       {289, 1929, 1932, {28223, 28232, 28242, 28254, 28267, 28276, 28288}, {28300, 28304, 28309, 28313, 28317, 28321, 28325}, {2023, 28329, 2428, 2428, 15392, 6293, 2023}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, 2, 1, 185, 187, {189,198,5002,8579,0,0,0,0,0,0,0,0,0,0},{1242,1207,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 28449, 28465, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10205,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28794,0,0,0,0,0,0,0}},
-       {289, 28829, 28854, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {29036, 29040, 29044, 29048, 29058, 29062, 29072}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, 0, 0, 185, 187, {198,29388,6480,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 7281, 7286, {3895, 29398, 3909, 29403, 29413, 29419, 3942}, {29426, 8413, 3761, 29430, 29435, 29439, 29443}, {2673, 2436, 2428, 2428, 29448, 3989, 2023}, {29450, 29458, 4005, 4011, 29467, 29472, 29478, 4034, 29484, 29493, 29501, 29510, 0}, {29519, 29527, 4094, 1012, 8083, 29536, 29542, 4117, 8100, 8109, 8117, 29548, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29578,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29607,0,0,0,0,0,0,0,0},{848,269,257,29619,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1, 29639, 29651, {29663, 17627, 29691, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {0, 0, 0, 0, 0, 0, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {20057, 29776, 29788, {29797, 29813, 29829, 29857, 29873, 29916, 29941}, {29797, 29813, 29969, 29857, 29979, 30001, 30014}, {30024, 30028, 30032, 30036, 30040, 30053, 30060}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30420,0,0,0,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{30468,0,0,0,0,0,0,0}},
-       {30478, 30494, 30504, {30517, 30527, 30534, 30547, 30557, 30567, 30577}, {30517, 30527, 30587, 30547, 30557, 30567, 30577}, {30597, 30601, 30605, 30609, 30613, 30617, 30621}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30736, 30752, 30768, 0}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30784, 30752, 30768, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30883,0,0,0,0,0,0,0,0,0},{3594,0,0,0,0,0,0,0,0,0,0,0},{3602,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 30915, 30925, {30938, 30945, 30951, 30958, 30964, 30970, 30978}, {30988, 30992, 30996, 31000, 31004, 31008, 31012}, {12842, 12842, 12842, 12842, 12842, 12842, 12842}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 31145, 31186, {31227, 31246, 31265, 31290, 31309, 31331, 31356}, {31375, 17763, 31385, 17786, 31401, 17809, 17825}, {31414, 17839, 31418, 17853, 31422, 17867, 17874}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
-       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 6, 185, 187, {1654,1692,0,0,0,0,0,0,0,0,0,0,0,0},{31719,31740,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {31755, 1929, 1932, {31761, 31768, 31774, 31781, 31792, 31800, 31809}, {31816, 8413, 3761, 31820, 31824, 31828, 10832}, {2436, 2436, 2428, 2428, 5694, 16426, 2023}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 0, 0, {31916, 31923, 31931, 31938, 31945, 31953, 31961}, {31968, 31971, 31974, 31977, 31980, 31983, 31986}, {2436, 2436, 2430, 2436, 12842, 3987, 12842}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 32083, 32094, {32104, 32122, 32137, 32159, 32172, 32186, 32203}, {32227, 32235, 32240, 32159, 32172, 32252, 32259}, {0, 0, 0, 0, 0, 0, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20186,20206,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
-       {3613, 0, 0, {32589, 32597, 15958, 15967, 15976, 32608, 32618}, {16414, 16008, 16012, 16016, 16020, 16277, 32627}, {0, 0, 0, 0, 0, 0, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {32725, 32738, 32743, {32748, 32755, 32770, 32784, 32800, 32815, 32831}, {6289, 32846, 2530, 32850, 32854, 32858, 32862}, {2023, 12842, 2428, 2018, 2023, 2430, 12842}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 0, 0, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{32935,2300,4769,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 32954, 32959, {32964, 32980, 32988, 32996, 33005, 33017, 33027}, {33037, 33043, 33049, 33053, 33057, 33065, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{2313,0,0,0,0,0,0,0,0,0,0,0},{2326,0,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {33179, 33206, 33213, {33220, 33230, 33240, 33250, 33260, 33270, 33280}, {33290, 33297, 33304, 33311, 33318, 33325, 33332}, {33339, 33343, 33347, 33351, 33355, 33359, 33363}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,0,0,0,0,0,0,0,0},{33457,33481,33511,33541,33558,0,0,0,0,0},{1858,843,251,0,0,0,0,0,0,0,0,0},{1875,848,269,0,0,0,0,0,0},{33581,1914,0,0,0,0,0,0}},
-       {289, 0, 0, {28300, 8413, 33598, 33605, 33615, 33620, 33627}, {33634, 6273, 33638, 4850, 33643, 33648, 33653}, {4421, 33658, 33661, 33664, 33667, 33670, 33673}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 33783, 33788, {33793, 33801, 33811, 33821, 33830, 33840, 33848}, {33858, 33862, 33867, 33871, 33875, 33879, 33883}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33887, 33896, 33907, 33916, 33926, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33887, 33896, 33907, 33916, 33926, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 0, 0, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {33936, 33954, 33959, {33964, 33989, 34018, 34043, 34056, 34071, 34088}, {34103, 34108, 34113, 34118, 34123, 34128, 8800}, {19442, 19442, 34133, 8811, 8814, 19442, 8811}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, 0, 1, 691, 187, {1156,4753,1692,34490,34500,0,0,0,0,0,0,0,0,0},{34513,34548,34577,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{34612,0,0,0,0,0,0,0}},
-       {20057, 0, 0, {34628, 34640, 34651, 34663, 34675, 34685, 34697}, {34712, 34717, 34722, 34727, 34732, 34737, 34742}, {0, 0, 0, 0, 0, 0, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34903,1207,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 34923, 34925, {34927, 34940, 34948, 34957, 34967, 34977, 34986}, {34998, 35002, 35006, 35010, 35014, 35018, 35022}, {2673, 2436, 2428, 7736, 12842, 5694, 2023}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 2411, 2415, 2419, 10097}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10110,10128,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {2277,2286,189,198,8579,10151,1692,0,0,0,0,0,0,0},{1242,10163,10179,0,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10221, 10226, {10230, 10236, 10246, 10252, 10263, 10273, 10278}, {10288, 10292, 10296, 10300, 10305, 10309, 10313}, {2018, 2018, 2023, 10317, 2018, 7736, 7736}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10443,1242,10460,5505,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 10478, 10496, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {10723, 10730, 10736, 10743, 10748, 10754, 10760}, {10766, 10770, 10774, 10778, 10782, 10786, 10790}, {2428, 2023, 2023, 10794, 4442, 3987, 2023}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {198,189,1128,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10848, 10853, {10858, 10871, 10890, 10907, 10920, 10933, 10950}, {10963, 8775, 8780, 8785, 8790, 8795, 8800}, {10968, 8808, 8805, 8811, 8814, 8808, 8811}, {10971, 10984, 10995, 11012, 11027, 11042, 11057, 11070, 11085, 11102, 11117, 11134, 0}, {11149, 11160, 11173, 11188, 11201, 11214, 11227, 11238, 11251, 11266, 11279, 11298, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11395,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{11413,0,0,0,0,0,0,0}},
+       {289, 11429, 11442, {11455, 11470, 11491, 11506, 11519, 11532, 10950}, {421, 426, 11547, 436, 11552, 446, 451}, {456, 459, 11557, 465, 468, 459, 465}, {11560, 11577, 11586, 11601, 521, 11618, 11633, 11646, 11661, 11678, 11699, 11716, 0}, {11731, 11748, 11761, 11778, 9017, 11797, 11812, 11825, 11838, 11853, 11876, 11895, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 0}, 0, 0, 691, 187, {1167,0,0,0,0,0,0,0,0,0,0,0,0,0},{1242,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 11985, 11990, {11995, 12003, 12014, 12020, 12026, 12035, 1985}, {9246, 9250, 2415, 12041, 9262, 9267, 12045}, {9275, 9277, 12049, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12074,1167,9806,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {12084, 12093, 12098, {12103, 12114, 12125, 12136, 12147, 12158, 12164}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 0}, 2, 1, 691, 187, {7519,1156,1167,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 12256, 12273, {12287, 12298, 12308, 12317, 12328, 12340, 12351}, {12361, 12364, 12367, 12370, 12373, 12376, 12379}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12382, 12392, 12403, 12409, 12418, 12424, 12432, 12440, 12448, 12459, 12468, 12478, 0}, {12488, 12498, 2453, 12509, 12518, 12524, 12532, 12540, 12548, 12559, 12568, 12578, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, 0, 1, 691, 187, {9517,9539,12632,0,0,0,0,0,0,0,0,0,0,0},{12644,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{12671,0,0,0,0,0,0,0}},
+       {12689, 12701, 11990, {12707, 12719, 12731, 12743, 12757, 12772, 12785}, {12799, 12802, 12805, 12808, 12811, 12814, 9660}, {2023, 2018, 12817, 2430, 4442, 2018, 9669}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{12991,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{13013,0,0,0,0,0,0,0}},
+       {1, 13028, 13040, {13052, 13067, 13082, 13097, 13114, 13133, 13144}, {13155, 13162, 13169, 13176, 13183, 13190, 13197}, {0, 0, 0, 0, 0, 0, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 0, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13368,13386,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 13405, 13425, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13534, 13537, 13540, 13543, 13546, 13549, 13552}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13683, 13698, 13579, 13588, 13711, 13604, 13718, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13731,5505,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 13750, 13753, {13756, 13769, 13779, 13788, 13798, 13809, 13820}, {13832, 13835, 13840, 13845, 13850, 13855, 13860}, {13832, 13865, 13868, 13871, 13874, 13877, 13880}, {13883, 13892, 13901, 13910, 13919, 13928, 13937, 13946, 13955, 13964, 13974, 13984, 0}, {13994, 14003, 14012, 14021, 14030, 14039, 14048, 14057, 14066, 14075, 14085, 14095, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 0}, 0, 1, 185, 187, {198,189,1139,1128,1692,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 14180, 14204, {14228, 14241, 14262, 14281, 14302, 14321, 14334}, {14345, 14352, 14359, 14366, 14373, 14380, 14387}, {14394, 14397, 14397, 14400, 14403, 14406, 14411}, {14414, 14429, 14444, 14453, 14464, 14475, 14488, 14501, 14516, 14535, 14554, 14571, 0}, {14590, 14607, 14624, 14635, 14648, 14661, 14676, 14691, 14708, 14729, 14750, 14769, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14874,3582,1692,0,0,0,0,0,0,0},{3870,1207,13731,5505,14885,14896,14908,14925,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {14943, 14949, 14963, 14986, 15000, 15016, 15023}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15059, 15066, 10332, 15073, 3730, 15079, 15085, 15091, 15098, 15107, 15115, 15122, 0}, {15129, 15136, 15143, 15148, 15154, 15158, 15163, 15168, 15175, 15184, 15192, 15199, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 0, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15234,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {15256, 1929, 1932, {15271, 15279, 15290, 15300, 15311, 15320, 15329}, {15339, 15343, 15347, 15351, 15355, 15359, 15363}, {15367, 12817, 12817, 12817, 2432, 2432, 2436}, {15369, 15379, 15387, 15395, 15403, 15411, 15418, 15426, 15434, 15441, 15447, 15454, 0}, {15462, 15473, 15482, 15491, 15500, 15509, 15517, 15526, 15535, 15543, 15550, 15558, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15622,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{15655,0,0,0,0,0,0,0}},
+       {289, 15672, 15693, {15710, 331, 352, 8714, 15723, 15740, 15751}, {15764, 15772, 15780, 15786, 15794, 15802, 15810}, {456, 459, 462, 465, 468, 459, 465}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15898,0,0,0,0,0,0,0,0,0,0,0},{13731,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {15915, 15922, 15933, 15942, 15951, 15958, 15969}, {15979, 15983, 15987, 15991, 15995, 15998, 16002}, {0, 0, 0, 0, 0, 0, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {16171, 16176, 16182, 16192, 16204, 16212, 16223}, {16232, 16236, 16240, 16244, 16248, 16252, 16256}, {0, 0, 0, 0, 0, 0, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, 0, 0, 185, 187, {1681,1735,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16362, 16368, 16379, 16192, 16204, 16212, 16223}, {16389, 16393, 16397, 16244, 16248, 16252, 16256}, {2023, 2428, 16401, 2430, 2023, 5694, 2428}, {16403, 16413, 16424, 16431, 16440, 16446, 16452, 16460, 16468, 16479, 16489, 16498, 0}, {16507, 16270, 16516, 16522, 16294, 2706, 16299, 16306, 16529, 16322, 16330, 16338, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, 0, 0, 2566, 187, {1128,1139,189,1681,1735,1692,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 16543, 16547, {16551, 16558, 16566, 16574, 16583, 16593, 16600}, {2652, 16609, 2658, 16612, 2664, 16615, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {1681,1735,1692,16664,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16676, 16692, 16717, 16745, 16773, 16801, 16829}, {16848, 16858, 16868, 16878, 16888, 16898, 16908}, {16918, 16922, 16926, 16922, 16930, 16934, 16938}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17335,17369,17402,3870,17436,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 17448, 17453, {5932, 17458, 17469, 17479, 17489, 17499, 17513}, {17525, 17529, 17534, 17539, 17543, 17548, 17553}, {2023, 2428, 2430, 2428, 5694, 2434, 2436}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,4288,0,0,0,0,0,0,0,0,0,0},{269,4302,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 17557, 17573, {17583, 17602, 17621, 17643, 17662, 17684, 17709}, {17728, 17738, 17748, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {18153, 18167, 18170, {18173, 18182, 18191, 18201, 18211, 18221, 18233}, {18241, 18246, 18250, 18254, 18258, 18263, 18268}, {18272, 2430, 2430, 9924, 18272, 18275, 2023}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, 0, 0, 185, 187, {198,1692,18394,7410,2277,0,0,0,0,0,0,0,0,0},{18403,18428,10151,0,0,0,0,0,0,0},{251,3594,843,0,0,0,0,0,0,0,0,0},{269,3602,848,3594,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {18447, 18460, 18465, {18470, 18482, 18493, 18507, 18519, 18529, 18539}, {18550, 18555, 18560, 18565, 18570, 18575, 18580}, {2023, 3989, 2428, 6293, 2673, 16401, 2436}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18813,18837,0,0,0,0,0,0,0,0},{251,843,4288,0,0,0,0,0,0,0,0,0},{269,848,4302,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {18855, 18869, 18879, 18890, 18904, 18915, 18926}, {18939, 18944, 18949, 18956, 18962, 18968, 18974}, {2673, 2436, 2428, 7736, 2673, 12817, 2023}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10151,8579,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 19148, 19151, {19155, 19160, 10736, 10743, 19166, 19173, 10760}, {19180, 19184, 10774, 10778, 19188, 10786, 10790}, {12817, 15367, 2023, 10794, 4442, 3987, 2023}, {10796, 10804, 19192, 2696, 10819, 2776, 19196, 19202, 2723, 2733, 2741, 19207, 0}, {10796, 10804, 19192, 2696, 10819, 2776, 19196, 19202, 2723, 2733, 2741, 19207, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 19216, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 19216, 2788, 2792, 2796, 16358, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 19220, 19242, {19266, 19281, 19298, 19315, 19332, 19349, 19358}, {19369, 19375, 19381, 19387, 19393, 19399, 19405}, {19411, 19414, 8811, 8811, 19417, 19411, 8811}, {19420, 19433, 19444, 19457, 19468, 19479, 19492, 19503, 19514, 19531, 19542, 19555, 0}, {19420, 19433, 19444, 19457, 19468, 19479, 19492, 19503, 19514, 19531, 19542, 19555, 0}, {19574, 19582, 19590, 19598, 19606, 19614, 19622, 19630, 19638, 19646, 19654, 19662, 0}, {19574, 19582, 19590, 19598, 19606, 19614, 19622, 19630, 19638, 19646, 19654, 19662, 0}, 0, 0, 2566, 187, {6488,0,0,0,0,0,0,0,0,0,0,0,0,0},{19672,19690,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {19709, 19718, 19744, {19772, 19779, 19786, 19793, 19800, 19807, 19814}, {19772, 19779, 19786, 19793, 19800, 19807, 19814}, {19411, 19414, 19821, 19821, 19417, 19411, 19824}, {19827, 19840, 501, 19855, 521, 19868, 19877, 542, 19886, 19903, 19918, 19931, 0}, {19827, 19840, 501, 19855, 521, 19868, 19877, 542, 19886, 19903, 19918, 19931, 0}, {19946, 15866, 15874, 639, 521, 19954, 19962, 647, 19970, 665, 19978, 683, 0}, {19946, 15866, 15874, 639, 521, 19954, 19962, 647, 19970, 665, 19978, 683, 0}, 0, 0, 2566, 187, {19986,0,0,0,0,0,0,0,0,0,0,0,0,0},{19995,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{20016,0,0,0,0,0,0,0}},
+       {20032, 1929, 1932, {20040, 20049, 20058, 20066, 20075, 20084, 20091}, {20100, 20103, 20106, 20109, 20112, 20116, 20119}, {6607, 6609, 6611, 6613, 12817, 15367, 6605}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20195, 1929, 1932, {20202, 20212, 20221, 20230, 20241, 20251, 20256}, {20263, 20269, 20274, 20279, 20284, 10786, 20288}, {20293, 2673, 2023, 7736, 2018, 3987, 2023}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, 0, 0, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20334,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 20352, 20380, {20402, 20421, 20440, 20465, 20484, 20518, 20543}, {20562, 20572, 20582, 20598, 20608, 20633, 20649}, {20659, 20663, 20670, 20674, 20681, 20688, 20695}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, 0, 1, 2566, 187, {1139,2293,1128,20945,20958,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {21013, 21029, 21048, 21070, 21089, 21108, 21136}, {21158, 21166, 21177, 21191, 21202, 21213, 21233}, {21247, 21251, 21258, 21265, 21275, 21282, 21295}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, {21302, 21318, 21337, 21350, 21369, 21376, 21386, 21402, 21415, 21431, 21450, 21466, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{10460,1242,0,0,0,0,0,0,0,0},{1866,1858,843,251,0,0,0,0,0,0,0,0},{1886,1875,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {21482, 21501, 21520, 21542, 21561, 21583, 21608}, {21627, 21637, 21647, 21660, 21670, 21683, 21699}, {21709, 21713, 21720, 21727, 21734, 21741, 21748}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 8151, 22089, {22092, 22111, 22130, 22155, 22174, 22196, 22221}, {22240, 22250, 22260, 22276, 22286, 22299, 22315}, {22325, 22329, 22336, 22340, 22347, 22354, 22361}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 0}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 22608, 22633, {22658, 22677, 22699, 22724, 22740, 22762, 22781}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 22949, 22968, 22999, 23024, 23046, 0}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 23071, 22968, 22999, 23024, 23046, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23189, 23211, 23233, 23258, 23280, 23305, 23333}, {23355, 23365, 23375, 23388, 23398, 23411, 23427}, {23437, 23441, 23448, 23452, 23459, 23466, 23473}, {23477, 23493, 23518, 23537, 23559, 23566, 23579, 23592, 23611, 23642, 23667, 23686, 0}, {23477, 23493, 23518, 23537, 23559, 23566, 23711, 23592, 23611, 23642, 23667, 23686, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23827, 23846, 23865, 23887, 23906, 23928, 23953}, {23972, 23982, 23992, 24005, 24015, 24028, 24044}, {24054, 24058, 24065, 24072, 24079, 24086, 24093}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20032, 1929, 1932, {24477, 24505, 24539, 24567, 24595, 24626, 24663}, {24691, 24704, 24723, 24739, 24752, 24771, 24790}, {24800, 24807, 24814, 24821, 24828, 24841, 24848}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 0}, 0, 0, 2566, 187, {1139,2293,1167,4762,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 25218, 25246, {25268, 25287, 25306, 25331, 25350, 25384, 25409}, {25428, 20572, 20582, 20598, 25438, 25463, 20649}, {0, 0, 0, 0, 0, 0, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25780,0,0,0,0,0,0,0,0,0},{1858,1866,0,0,0,0,0,0,0,0,0,0},{1875,1886,0,0,0,0,0,0,0},{25799,25807,0,0,0,0,0,0}},
+       {1, 1929, 1932, {17583, 17602, 25817, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {5619, 26188, 26193, {26198, 26205, 26216, 26229, 26242, 26253, 26266}, {26277, 26282, 26287, 26292, 26297, 26302, 26307}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26811,26865,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{26901,0,0,0,0,0,0,0}},
+       {26920, 26944, 26966, {26991, 27019, 27047, 27084, 27115, 27149, 27174}, {27208, 27224, 27240, 27265, 27284, 27306, 27319}, {27341, 27348, 27355, 27362, 27369, 27376, 27380}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28005,28048,28096,28128,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28165,1914,0,0,0,0,0,0}},
+       {289, 1929, 1932, {28198, 28207, 28217, 28229, 28242, 28251, 28263}, {28275, 28279, 28284, 28288, 28292, 28296, 28300}, {2023, 28304, 2428, 2428, 15367, 6293, 2023}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 0}, 2, 1, 185, 187, {189,198,5002,8579,0,0,0,0,0,0,0,0,0,0},{1242,1207,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 28424, 28440, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10163,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28769,0,0,0,0,0,0,0}},
+       {289, 28804, 28829, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {29011, 29015, 29019, 29023, 29033, 29037, 29047}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, 0, 0, 185, 187, {198,29363,6480,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 29373, 3909, 29378, 29388, 29394, 3942}, {29401, 8413, 3761, 29405, 29410, 29414, 29418}, {2673, 2436, 2428, 2428, 29423, 3989, 2023}, {29425, 29433, 4005, 4011, 29442, 29447, 29453, 4034, 29459, 29468, 29476, 29485, 0}, {29494, 29502, 4094, 1012, 8083, 29511, 29517, 4117, 8100, 8109, 8117, 29523, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29553,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29582,0,0,0,0,0,0,0,0},{848,269,257,29594,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 29614, 29626, {29638, 17602, 29666, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {0, 0, 0, 0, 0, 0, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20032, 29751, 29763, {29772, 29788, 29804, 29832, 29848, 29891, 29916}, {29772, 29788, 29944, 29832, 29954, 29976, 29989}, {29999, 30003, 30007, 30011, 30015, 30028, 30035}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30395,0,0,0,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{30443,0,0,0,0,0,0,0}},
+       {30453, 30469, 30479, {30492, 30502, 30509, 30522, 30532, 30542, 30552}, {30492, 30502, 30562, 30522, 30532, 30542, 30552}, {30572, 30576, 30580, 30584, 30588, 30592, 30596}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30711, 30727, 30743, 0}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30759, 30727, 30743, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30858,0,0,0,0,0,0,0,0,0},{3594,0,0,0,0,0,0,0,0,0,0,0},{3602,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 30890, 30900, {30913, 30920, 30926, 30933, 30939, 30945, 30953}, {30963, 30967, 30971, 30975, 30979, 30983, 30987}, {12817, 12817, 12817, 12817, 12817, 12817, 12817}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 31125, 31166, {31207, 31226, 31245, 31270, 31289, 31311, 31336}, {31355, 17738, 31365, 17761, 31381, 17784, 17800}, {31394, 17814, 31398, 17828, 31402, 17842, 17849}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25807,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 0}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 6, 185, 187, {1654,1692,0,0,0,0,0,0,0,0,0,0,0,0},{31699,31720,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {31735, 1929, 1932, {31741, 31748, 31754, 31761, 31772, 31780, 31789}, {31796, 8413, 3761, 31800, 31804, 31808, 10790}, {2436, 2436, 2428, 2428, 5694, 16401, 2023}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 0, 0, {31896, 31903, 31911, 31918, 31925, 31933, 31941}, {31948, 31951, 31954, 31957, 31960, 31963, 31966}, {2436, 2436, 2430, 2436, 12817, 3987, 12817}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 32063, 32074, {32084, 32102, 32117, 32139, 32152, 32166, 32183}, {32207, 32215, 32220, 32139, 32152, 32232, 32239}, {0, 0, 0, 0, 0, 0, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20161,20181,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25807,0,0,0,0,0,0,0}},
+       {3613, 0, 0, {32569, 32577, 15933, 15942, 15951, 32588, 32598}, {16389, 15983, 15987, 15991, 15995, 16252, 32607}, {0, 0, 0, 0, 0, 0, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {32705, 32718, 32723, {32728, 32735, 32750, 32764, 32780, 32795, 32811}, {6289, 32826, 2530, 32830, 32834, 32838, 32842}, {2023, 12817, 2428, 2018, 2023, 2430, 12817}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 0}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 0, 0, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{32915,2300,4769,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 32934, 32939, {32944, 32960, 32968, 32976, 32985, 32997, 33007}, {33017, 33023, 33029, 33033, 33037, 33045, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{2313,0,0,0,0,0,0,0,0,0,0,0},{2326,0,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {33159, 33186, 33193, {33200, 33210, 33220, 33230, 33240, 33250, 33260}, {33270, 33277, 33284, 33291, 33298, 33305, 33312}, {33319, 33323, 33327, 33331, 33335, 33339, 33343}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 0}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,0,0,0,0,0,0,0,0},{33437,33461,33491,33521,33538,0,0,0,0,0},{1858,843,251,0,0,0,0,0,0,0,0,0},{1875,848,269,0,0,0,0,0,0},{33561,1914,0,0,0,0,0,0}},
+       {289, 0, 0, {28275, 8413, 33578, 33585, 33595, 33600, 33607}, {33614, 6273, 33618, 4850, 33623, 33628, 33633}, {4421, 33638, 33641, 33644, 33647, 33650, 33653}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 33763, 33768, {33773, 33781, 33791, 33801, 33810, 33820, 33828}, {33838, 33842, 33847, 33851, 33855, 33859, 33863}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33867, 33876, 33887, 33896, 33906, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 33867, 33876, 33887, 33896, 33906, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 0, 0, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {33916, 33934, 33939, {33944, 33969, 33998, 34023, 34036, 34051, 34068}, {34083, 34088, 34093, 34098, 34103, 34108, 8800}, {19417, 19417, 34113, 8811, 8814, 19417, 8811}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, 0, 1, 691, 187, {1156,4753,1692,34470,34480,0,0,0,0,0,0,0,0,0},{34493,34528,34557,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{34592,0,0,0,0,0,0,0}},
+       {20032, 0, 0, {34608, 34620, 34631, 34643, 34655, 34665, 34677}, {34692, 34697, 34702, 34707, 34712, 34717, 34722}, {0, 0, 0, 0, 0, 0, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34883,1207,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 34903, 34905, {34907, 34920, 34928, 34937, 34947, 34957, 34966}, {34978, 34982, 34986, 34990, 34994, 34998, 35002}, {2673, 2436, 2428, 7736, 12817, 5694, 2023}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,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}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, {9, 18, 25, 45, 65, 89, 113, 120, 131, 142, 151, 169, 0}, 0, 0, 185, 187, {189,198,0,0,0,0,0,0,0,0,0,0,0,0},{209,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
        {289, 296, 307, {318, 331, 352, 367, 378, 397, 408}, {421, 426, 431, 436, 441, 446, 451}, {456, 459, 462, 465, 468, 459, 465}, {471, 484, 501, 510, 521, 528, 535, 542, 555, 574, 591, 606, 0}, {471, 484, 501, 510, 521, 528, 535, 542, 555, 574, 591, 606, 0}, {623, 629, 501, 639, 521, 528, 535, 647, 655, 665, 673, 683, 0}, {623, 629, 501, 639, 521, 528, 535, 647, 655, 665, 673, 683, 0}, 2, 1, 691, 187, {693,708,724,740,0,0,0,0,0,0,0,0,0,0},{757,776,794,819,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{856,0,0,0,0,0,0,0}},
        {289, 872, 878, {884, 893, 901, 909, 918, 925, 935}, {944, 948, 952, 956, 960, 964, 968}, {972, 975, 978, 981, 984, 987, 990}, {993, 999, 1006, 1012, 1018, 1023, 1028, 1035, 1041, 1050, 1058, 1067, 0}, {993, 999, 1006, 1012, 1018, 1023, 1028, 1035, 1041, 1050, 1058, 1067, 0}, {1076, 1081, 1006, 1086, 1018, 1023, 1091, 1096, 1100, 1105, 1110, 1115, 0}, {1076, 1081, 1006, 1086, 1018, 1023, 1091, 1096, 1100, 1105, 1110, 1115, 0}, 2, 1, 185, 187, {198,189,1120,1128,1139,1148,1156,1167,1176,0,0,0,0,0},{1184,1207,1225,1242,1254,1270,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1286,1301,1311,1320,0,0,0,0}},
-       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1681,1692,0,0,0,0,0,0,0,0,0,0,0},{1744,6632,1822,35285,0,0,0,0,0,0},{1866,1858,251,843,0,0,0,0,0,0,0,0},{1886,1875,269,848,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1681,1692,0,0,0,0,0,0,0,0,0,0,0},{1744,6632,1822,35265,0,0,0,0,0,0},{1866,1858,251,843,0,0,0,0,0,0,0,0},{1886,1875,269,848,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
        {1921, 1929, 1932, {1935, 1943, 1953, 1961, 1969, 1978, 1985}, {1992, 1995, 1998, 2002, 2005, 2009, 2013}, {2016, 2018, 2020, 2023, 2025, 2018, 2023}, {2028, 2034, 2040, 2048, 2054, 2062, 2070, 2080, 2086, 2094, 2102, 2111, 0}, {2120, 2126, 2133, 2141, 2147, 2155, 2163, 2173, 2086, 2179, 2187, 2197, 0}, {2206, 2210, 2215, 2220, 2224, 2229, 2234, 2239, 2243, 2249, 2255, 2259, 0}, {2206, 2210, 2215, 2220, 2224, 2229, 2234, 2239, 2243, 2249, 2255, 2259, 0}, 2, 1, 2263, 187, {2266,2277,198,2286,189,2293,1692,1663,1721,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2313,2321,0,0,0,0,0,0,0,0},{848,269,2326,2337,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {1921, 1929, 1932, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {2398, 2403, 2407, 2411, 2415, 2419, 2423}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 2453, 2459, 2465, 2469, 2474, 2479, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 2453, 2459, 2465, 2469, 2474, 2479, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,2804,0,0,0,0,0,0,0,0,0,0},{2818,2300,2837,0,0,0,0,0,0,0},{251,2850,0,0,0,0,0,0,0,0,0,0},{269,2862,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
@@ -132,1261 +132,1261 @@ static const DateTimeFormatEntry datetime_format_entries [] = {
        {1921, 1929, 1932, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {9286, 9296, 9305, 9313, 9321, 9329, 9336, 9343, 9351, 2102, 9357, 9365, 0}, {9374, 9384, 9393, 9401, 9409, 9417, 9424, 9431, 9440, 7911, 9446, 9456, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
        {1921, 1929, 1932, {9610, 9618, 9627, 9634, 9641, 9650, 1985}, {1992, 1995, 9657, 2002, 9660, 9664, 2013}, {2016, 2018, 9667, 2023, 9669, 2018, 2023}, {5710, 5718, 9672, 6077, 9678, 9683, 9688, 2479, 2486, 5789, 2504, 2513, 0}, {9693, 9702, 7844, 9712, 9720, 9726, 9732, 9738, 9746, 9756, 9765, 9774, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 9678, 9683, 9688, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 691, 187, {4753,1156,1167,1692,5888,9783,9796,9806,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{843,251,2321,0,0,0,0,0,0,0,0,0},{848,269,2337,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {289, 9817, 9826, {9834, 9841, 9850, 9859, 9871, 9879, 9888}, {9898, 9902, 3761, 9907, 9912, 9916, 9920}, {2673, 5694, 2428, 2428, 9924, 2018, 2023}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {9926, 9932, 4887, 9939, 2465, 9945, 9953, 9960, 9966, 9974, 9980, 9988, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, {2759, 9996, 3761, 10000, 10004, 10008, 10012, 10016, 9920, 10020, 10024, 10029, 0}, 0, 1, 691, 187, {4753,4762,0,0,0,0,0,0,0,0,0,0,0,0},{1207,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 10097, 10101, 10105, 10109}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {10114, 10122, 10131, 2696, 10004, 2706, 2711, 10136, 2723, 2733, 2741, 3752, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10144, 2486, 2496, 2504, 2513, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10152,10170,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {2277,2286,189,198,8579,10193,1692,0,0,0,0,0,0,0},{1242,10205,10221,0,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 10263, 10268, {10272, 10278, 10288, 10294, 10305, 10315, 10320}, {10330, 10334, 10338, 10342, 10347, 10351, 10355}, {2018, 2018, 2023, 10359, 2018, 7736, 7736}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10362, 10367, 10374, 10379, 10385, 10392, 10400, 10407, 10416, 10423, 10428, 10435, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, {10443, 10447, 3761, 10452, 3730, 10456, 10460, 10464, 10469, 10473, 10477, 10481, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10485,1242,10502,5505,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 10520, 10538, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {10556, 10567, 10580, 10589, 10596, 10609, 10618}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, {10627, 10638, 10649, 10658, 10669, 10676, 10683, 10696, 10705, 10716, 10729, 10740, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 1929, 1932, {10765, 10772, 10778, 10785, 10790, 10796, 10802}, {10808, 10812, 10816, 10820, 10824, 10828, 10832}, {2428, 2023, 2023, 10836, 4442, 3987, 2023}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {10114, 10122, 10838, 2696, 10844, 2706, 2711, 10848, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 10865, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {198,189,1128,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 10873, 10878, {10883, 10896, 10915, 10932, 10945, 10958, 10975}, {10988, 8775, 8780, 8785, 8790, 8795, 8800}, {10993, 8808, 8805, 8811, 8814, 8808, 8811}, {10996, 11009, 11020, 11037, 11052, 11067, 11082, 11095, 11110, 11127, 11142, 11159, 0}, {11174, 11185, 11198, 11213, 11226, 11239, 11252, 11263, 11276, 11291, 11304, 11323, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, {11336, 11343, 11350, 11357, 11364, 11371, 11378, 11385, 11392, 11399, 11406, 11413, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11420,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{11438,0,0,0,0,0,0,0}},
-       {289, 11454, 11467, {11480, 11495, 11516, 11531, 11544, 11557, 10975}, {421, 426, 11572, 436, 11577, 446, 451}, {456, 459, 11582, 465, 468, 459, 465}, {11585, 11602, 11611, 11626, 521, 11643, 11658, 11671, 11686, 11703, 11724, 11741, 0}, {11756, 11773, 11786, 11803, 9017, 11822, 11837, 11850, 11863, 11878, 11901, 11920, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, {11933, 11940, 11947, 11954, 521, 11961, 11968, 11975, 11982, 11989, 11996, 12003, 0}, 0, 0, 691, 187, {1167,0,0,0,0,0,0,0,0,0,0,0,0,0},{1242,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 12010, 12015, {12020, 12028, 12039, 12045, 12051, 12060, 1985}, {9246, 9250, 2415, 12066, 9262, 9267, 12070}, {9275, 9277, 12074, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12076, 12082, 12088, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12099,1167,9806,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {12109, 12118, 12123, {12128, 12139, 12150, 12161, 12172, 12183, 12189}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {2018, 9924, 2430, 4442, 2016, 10836, 2436}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12198, 12206, 12215, 12222, 4898, 12229, 12235, 2479, 2486, 12241, 2504, 12250, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, {12260, 12265, 12215, 2534, 4898, 12229, 12235, 2546, 12271, 2554, 2558, 12276, 0}, 2, 1, 691, 187, {7519,1156,1167,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 12281, 12298, {12312, 12323, 12333, 12342, 12353, 12365, 12376}, {12386, 12389, 12392, 12395, 12398, 12401, 12404}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12407, 12417, 12428, 12434, 12443, 12449, 12457, 12465, 12473, 12484, 12493, 12503, 0}, {12513, 12523, 2453, 12534, 12543, 12549, 12557, 12565, 12573, 12584, 12593, 12603, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, {12613, 12619, 12428, 12625, 12443, 12630, 12636, 12642, 4190, 12647, 4201, 12652, 0}, 0, 1, 691, 187, {9517,9539,12657,0,0,0,0,0,0,0,0,0,0,0},{12669,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{12696,0,0,0,0,0,0,0}},
-       {12714, 12726, 12015, {12732, 12744, 12756, 12768, 12782, 12797, 12810}, {12824, 12827, 12830, 12833, 12836, 12839, 9660}, {2023, 2018, 12842, 2430, 4442, 2018, 9669}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12844, 12851, 12859, 12865, 12874, 12883, 12893, 12899, 12910, 12920, 12927, 12937, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, {12945, 12951, 12956, 12961, 12966, 12971, 12978, 12984, 12990, 12996, 13002, 13009, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{13016,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{13038,0,0,0,0,0,0,0}},
-       {1, 13053, 13065, {13077, 13092, 13107, 13122, 13139, 13158, 13169}, {13180, 13187, 13194, 13201, 13208, 13215, 13222}, {0, 0, 0, 0, 0, 0, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13393,13411,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 13430, 13450, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13467, 13480, 13493, 13509, 13526, 13541, 13550}, {13559, 13562, 13565, 13568, 13571, 13574, 13577}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13708, 13723, 13604, 13613, 13736, 13629, 13743, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, {13580, 13593, 13604, 13613, 13624, 13629, 13638, 13649, 13656, 13671, 13682, 13695, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13756,5505,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 13775, 13778, {13781, 13794, 13804, 13813, 13823, 13834, 13845}, {13857, 13860, 13865, 13870, 13875, 13880, 13885}, {13857, 13890, 13893, 13896, 13899, 13902, 13905}, {13908, 13917, 13926, 13935, 13944, 13953, 13962, 13971, 13980, 13989, 13999, 14009, 0}, {14019, 14028, 14037, 14046, 14055, 14064, 14073, 14082, 14091, 14100, 14110, 14120, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, {14130, 14136, 14142, 14148, 14154, 14160, 14166, 14172, 14178, 14184, 14191, 14198, 0}, 0, 1, 185, 187, {198,189,1139,1128,1692,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 14205, 14229, {14253, 14266, 14287, 14306, 14327, 14346, 14359}, {14370, 14377, 14384, 14391, 14398, 14405, 14412}, {14419, 14422, 14422, 14425, 14428, 14431, 14436}, {14439, 14454, 14469, 14478, 14489, 14500, 14513, 14526, 14541, 14560, 14579, 14596, 0}, {14615, 14632, 14649, 14660, 14673, 14686, 14701, 14716, 14733, 14754, 14775, 14794, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, {14815, 14822, 14829, 14836, 14843, 14850, 14857, 14864, 14871, 14878, 14885, 14892, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14899,3582,1692,0,0,0,0,0,0,0},{3870,1207,13756,5505,14910,14921,14933,14950,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {14968, 14974, 14988, 15011, 15025, 15041, 15048}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15084, 15091, 10374, 15098, 3730, 15104, 15110, 15116, 15123, 15132, 15140, 15147, 0}, {15154, 15161, 15168, 15173, 15179, 15183, 15188, 15193, 15200, 15209, 15217, 15224, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15259,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {15281, 1929, 1932, {15296, 15304, 15315, 15325, 15336, 15345, 15354}, {15364, 15368, 15372, 15376, 15380, 15384, 15388}, {15392, 12842, 12842, 12842, 2432, 2432, 2436}, {15394, 15404, 15412, 15420, 15428, 15436, 15443, 15451, 15459, 15466, 15472, 15479, 0}, {15487, 15498, 15507, 15516, 15525, 15534, 15542, 15551, 15560, 15568, 15575, 15583, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, {15592, 15597, 4845, 15602, 15607, 15612, 15617, 15622, 15627, 15632, 15637, 15642, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15647,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{15680,0,0,0,0,0,0,0}},
-       {289, 15697, 15718, {15735, 331, 352, 8714, 15748, 15765, 15776}, {15789, 15797, 15805, 15811, 15819, 15827, 15835}, {456, 459, 462, 465, 468, 459, 465}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15843, 484, 501, 510, 15858, 15865, 15874, 542, 555, 574, 591, 606, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, {15883, 15891, 15899, 639, 15858, 15907, 15915, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15923,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 0, 0, {15940, 15947, 15958, 15967, 15976, 15983, 15994}, {16004, 16008, 16012, 16016, 16020, 16023, 16027}, {0, 0, 0, 0, 0, 0, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16031, 16041, 16050, 16058, 16067, 16080, 16092, 16099, 16106, 16113, 16123, 16135, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, {16148, 16152, 16156, 16160, 16164, 16168, 16172, 16176, 16180, 16184, 16188, 16192, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 0, 0, {16196, 16201, 16207, 16217, 16229, 16237, 16248}, {16257, 16261, 16265, 16269, 16273, 16277, 16281}, {0, 0, 0, 0, 0, 0, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {16285, 16295, 16305, 16312, 16319, 2706, 16324, 16331, 16338, 16347, 16355, 16363, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16027, 16371, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 185, 187, {1681,1735,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {16387, 16393, 16404, 16217, 16229, 16237, 16248}, {16414, 16418, 16422, 16269, 16273, 16277, 16281}, {2023, 2428, 16426, 2430, 2023, 5694, 2428}, {16428, 16438, 16449, 16456, 16465, 16471, 16477, 16485, 16493, 16504, 16514, 16523, 0}, {16532, 16295, 16541, 16547, 16319, 2706, 16324, 16331, 16554, 16347, 16355, 16363, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, {2759, 2763, 16564, 2772, 16375, 2776, 2780, 16379, 2788, 2792, 2796, 16383, 0}, 0, 0, 2566, 187, {1128,1139,189,1681,1735,1692,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 16568, 16572, {16576, 16583, 16591, 16599, 16608, 16618, 16625}, {2652, 16634, 2658, 16637, 2664, 16640, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {16643, 16652, 16662, 2696, 10844, 16668, 16674, 16680, 2723, 2733, 2741, 10856, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 3761, 2772, 10844, 2776, 2780, 2784, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {1681,1735,1692,16689,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {16701, 16717, 16742, 16770, 16798, 16826, 16854}, {16873, 16883, 16893, 16903, 16913, 16923, 16933}, {16943, 16947, 16951, 16947, 16955, 16959, 16963}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {16967, 16989, 17017, 17033, 17052, 17068, 17087, 17106, 17128, 17159, 17187, 17212, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, {17240, 17250, 17260, 17270, 17280, 17290, 17300, 17310, 17320, 17330, 17340, 17350, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17360,17394,17427,3870,17461,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 17473, 17478, {5932, 17483, 17494, 17504, 17514, 17524, 17538}, {17550, 17554, 17559, 17564, 17568, 17573, 17578}, {2023, 2428, 2430, 2428, 5694, 2434, 2436}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,4288,0,0,0,0,0,0,0,0,0,0},{269,4302,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 17582, 17598, {17608, 17627, 17646, 17668, 17687, 17709, 17734}, {17753, 17763, 17773, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {17878, 17894, 17913, 17929, 17948, 17955, 17965, 17981, 17997, 18016, 18038, 18054, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, {18073, 18080, 17913, 18090, 17948, 17955, 18106, 18119, 18126, 18139, 18155, 18165, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {18178, 18192, 18195, {18198, 18207, 18216, 18226, 18236, 18246, 18258}, {18266, 18271, 18275, 18279, 18283, 18288, 18293}, {18297, 2430, 2430, 9924, 18297, 18300, 2023}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {18303, 18310, 18315, 2696, 18321, 18327, 18334, 18340, 18348, 18358, 18366, 18375, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, {2759, 18385, 3761, 2772, 18389, 18393, 18398, 18402, 18406, 18410, 2796, 18414, 0}, 0, 0, 185, 187, {198,1692,18419,7410,2277,0,0,0,0,0,0,0,0,0},{18428,18453,10193,0,0,0,0,0,0,0},{251,3594,843,0,0,0,0,0,0,0,0,0},{269,3602,848,3594,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {18472, 18485, 18490, {18495, 18507, 18518, 18532, 18544, 18554, 18564}, {18575, 18580, 18585, 18590, 18595, 18600, 18605}, {2023, 3989, 2428, 6293, 2673, 16426, 2436}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, {18774, 18781, 18786, 18791, 18795, 18800, 18805, 18810, 18815, 18822, 18827, 18833, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18838,18862,0,0,0,0,0,0,0,0},{251,843,4288,0,0,0,0,0,0,0,0,0},{269,848,4302,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {20057, 1929, 1932, {20065, 20074, 20083, 20091, 20100, 20109, 20116}, {20125, 20128, 20131, 20134, 20137, 20141, 20144}, {6607, 6609, 6611, 6613, 12842, 15392, 6605}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {10114, 10122, 20147, 20153, 10844, 2706, 19221, 20160, 16338, 20167, 16355, 20174, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, {2759, 2763, 19217, 2772, 10844, 2776, 2780, 20182, 2788, 2792, 2796, 10869, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {20220, 1929, 1932, {20227, 20237, 20246, 20255, 20266, 20276, 20281}, {20288, 20294, 20299, 20304, 20309, 10828, 20313}, {20318, 2673, 2023, 7736, 2018, 3987, 2023}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20359,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 20377, 20405, {20427, 20446, 20465, 20490, 20509, 20543, 20568}, {20587, 20597, 20607, 20623, 20633, 20658, 20674}, {20684, 20688, 20695, 20699, 20706, 20713, 20720}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, 0, 0, 2566, 187, {1139,2293,1128,20970,20983,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 1929, 1932, {21507, 21526, 21545, 21567, 21586, 21608, 21633}, {21652, 21662, 21672, 21685, 21695, 21708, 21724}, {21734, 21738, 21745, 21752, 21759, 21766, 21773}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {21777, 21805, 21833, 21849, 21868, 21875, 21885, 21901, 21917, 21945, 21967, 21989, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, {22014, 22033, 21833, 21849, 21868, 21875, 21885, 22052, 22059, 22075, 22091, 22101, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 8151, 22114, {22117, 22136, 22155, 22180, 22199, 22221, 22246}, {22265, 22275, 22285, 22301, 22311, 22324, 22340}, {22350, 22354, 22361, 22365, 22372, 22379, 22386}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {22390, 22412, 22443, 22465, 22484, 22491, 22501, 22517, 22533, 22564, 22586, 22608, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 22633, 22658, {22683, 22702, 22724, 22749, 22765, 22787, 22806}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22816, 22823, 22830, 22837, 22844, 22851, 22858}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 22974, 22993, 23024, 23049, 23071, 0}, {22862, 22878, 22903, 22922, 22941, 22948, 22961, 23096, 22993, 23024, 23049, 23071, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, {23115, 23123, 23137, 23151, 22941, 22948, 22961, 23162, 23170, 23184, 23195, 23203, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3613, 1929, 1932, {23214, 23236, 23258, 23283, 23305, 23330, 23358}, {23380, 23390, 23400, 23413, 23423, 23436, 23452}, {23462, 23466, 23473, 23477, 23484, 23491, 23498}, {23502, 23518, 23543, 23562, 23584, 23591, 23604, 23617, 23636, 23667, 23692, 23711, 0}, {23502, 23518, 23543, 23562, 23584, 23591, 23736, 23617, 23636, 23667, 23692, 23711, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, {23749, 23756, 23543, 23772, 23584, 23591, 23736, 23617, 23788, 23810, 23826, 23836, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3613, 1929, 1932, {23852, 23871, 23890, 23912, 23931, 23953, 23978}, {23997, 24007, 24017, 24030, 24040, 24053, 24069}, {24079, 24083, 24090, 24097, 24104, 24111, 24118}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24122, 24138, 24163, 24182, 24204, 24211, 24224, 24237, 24256, 24284, 24309, 24331, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, {24356, 24364, 24384, 24391, 24204, 24408, 24415, 24423, 24431, 24454, 24471, 24485, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {20057, 1929, 1932, {24502, 24530, 24564, 24592, 24620, 24651, 24688}, {24716, 24729, 24748, 24764, 24777, 24796, 24815}, {24825, 24832, 24839, 24846, 24853, 24866, 24873}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {24877, 24896, 24924, 24946, 24965, 24978, 24988, 25001, 25026, 25057, 25082, 25098, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, {25117, 25127, 25146, 25156, 24965, 24978, 24988, 25172, 25179, 25204, 25220, 25230, 0}, 0, 0, 2566, 187, {1139,2293,1167,4762,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 25243, 25271, {25293, 25312, 25331, 25356, 25375, 25409, 25434}, {25453, 20597, 20607, 20623, 25463, 25488, 20674}, {0, 0, 0, 0, 0, 0, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25504, 25529, 25560, 25576, 20821, 20828, 20838, 25595, 25611, 25642, 25664, 25686, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, {25711, 25724, 25560, 25576, 20821, 20828, 20838, 25743, 25750, 25766, 25782, 25792, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25805,0,0,0,0,0,0,0,0,0},{1858,1866,0,0,0,0,0,0,0,0,0,0},{1875,1886,0,0,0,0,0,0,0},{25824,25832,0,0,0,0,0,0}},
-       {1, 1929, 1932, {17608, 17627, 25842, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {17835, 17839, 17846, 17853, 17860, 17867, 17874}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 25972, 25988, 26013, 26035, 26063, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, {26085, 26098, 17913, 26117, 25952, 17955, 25959, 26133, 26140, 26159, 26175, 26197, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {26945, 26969, 26991, {27016, 27044, 27072, 27109, 27140, 27174, 27199}, {27233, 27249, 27265, 27290, 27309, 27331, 27344}, {27366, 27373, 27380, 27387, 27394, 27401, 27405}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27415, 27449, 27486, 27520, 27554, 27585, 27622, 27659, 27699, 27733, 27767, 27816, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, {27865, 27878, 27891, 27904, 27917, 27930, 27943, 27956, 27969, 27982, 27998, 28014, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28030,28073,28121,28153,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28190,1914,0,0,0,0,0,0}},
-       {289, 1929, 1932, {28223, 28232, 28242, 28254, 28267, 28276, 28288}, {28300, 28304, 28309, 28313, 28317, 28321, 28325}, {2023, 28329, 2428, 2428, 15392, 6293, 2023}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28332, 28339, 28348, 28355, 2702, 28362, 28370, 28381, 28386, 28391, 28398, 28407, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, {28415, 28419, 28309, 28423, 2702, 28427, 28431, 28381, 28386, 28435, 28439, 28444, 0}, 2, 1, 185, 187, {189,198,5002,8579,0,0,0,0,0,0,0,0,0,0},{1242,1207,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 28449, 28465, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {28481, 28503, 28516, 28535, 28545, 28576, 28592}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, {28605, 28618, 28637, 28650, 28663, 28676, 28695, 28714, 28727, 28743, 28756, 28781, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10205,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28794,0,0,0,0,0,0,0}},
-       {289, 28829, 28854, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {28879, 28904, 28923, 28951, 28970, 28995, 29014}, {29036, 29040, 29044, 29048, 29058, 29062, 29072}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29076, 29095, 29111, 29124, 29137, 29159, 29178, 29200, 29216, 29232, 29245, 29261, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, {29277, 29286, 29295, 29304, 29313, 29322, 29334, 29343, 29352, 29361, 29370, 29379, 0}, 0, 0, 185, 187, {198,29388,6480,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 7281, 7286, {3895, 29398, 3909, 29403, 29413, 29419, 3942}, {29426, 8413, 3761, 29430, 29435, 29439, 29443}, {2673, 2436, 2428, 2428, 29448, 3989, 2023}, {29450, 29458, 4005, 4011, 29467, 29472, 29478, 4034, 29484, 29493, 29501, 29510, 0}, {29519, 29527, 4094, 1012, 8083, 29536, 29542, 4117, 8100, 8109, 8117, 29548, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, {29557, 2763, 3761, 29561, 2702, 29565, 29570, 20182, 18406, 29574, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29578,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29607,0,0,0,0,0,0,0,0},{848,269,257,29619,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1, 29639, 29651, {29663, 17627, 29691, 17668, 17687, 17709, 17734}, {17753, 17763, 25864, 17786, 17796, 17809, 17825}, {0, 0, 0, 0, 0, 0, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {25877, 25902, 17913, 25933, 25952, 17955, 25959, 29710, 29726, 29754, 26035, 26063, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {20057, 29776, 29788, {29797, 29813, 29829, 29857, 29873, 29916, 29941}, {29797, 29813, 29969, 29857, 29979, 30001, 30014}, {30024, 30028, 30032, 30036, 30040, 30053, 30060}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30067, 30086, 30111, 30130, 30155, 30168, 30181, 30194, 30216, 30250, 30275, 30303, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, {30331, 30338, 30348, 30130, 30155, 30168, 30181, 30361, 30371, 30384, 30394, 30407, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30420,0,0,0,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{30468,0,0,0,0,0,0,0}},
-       {30478, 30494, 30504, {30517, 30527, 30534, 30547, 30557, 30567, 30577}, {30517, 30527, 30587, 30547, 30557, 30567, 30577}, {30597, 30601, 30605, 30609, 30613, 30617, 30621}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30736, 30752, 30768, 0}, {30625, 30641, 30657, 30667, 30680, 30687, 30694, 30704, 30717, 30784, 30752, 30768, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, {30803, 30813, 30657, 30823, 30680, 30687, 30694, 30833, 30843, 30853, 30863, 30873, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30883,0,0,0,0,0,0,0,0,0},{3594,0,0,0,0,0,0,0,0,0,0,0},{3602,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 31145, 31186, {31227, 31246, 31265, 31290, 31309, 31331, 31356}, {31375, 17763, 31385, 17786, 31401, 17809, 17825}, {31414, 17839, 31418, 17853, 31422, 17867, 17874}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, {17878, 31429, 17913, 31457, 25952, 31476, 17965, 31486, 31502, 31533, 31555, 31580, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
-       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {31605, 31612, 31621, 31636, 31647, 31656, 31663, 31670, 31677, 31688, 31701, 31714, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 6, 185, 187, {1654,1692,0,0,0,0,0,0,0,0,0,0,0,0},{31719,31740,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {31755, 1929, 1932, {31761, 31768, 31774, 31781, 31792, 31800, 31809}, {31816, 8413, 3761, 31820, 31824, 31828, 10832}, {2436, 2436, 2428, 2428, 5694, 16426, 2023}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {3991, 31832, 31840, 4011, 4017, 31846, 31852, 4034, 31858, 31868, 31876, 31886, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, {31896, 31900, 3761, 29561, 3730, 31904, 31908, 20182, 18406, 2792, 31912, 16383, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 0, 0, {31916, 31923, 31931, 31938, 31945, 31953, 31961}, {31968, 31971, 31974, 31977, 31980, 31983, 31986}, {2436, 2436, 2430, 2436, 12842, 3987, 12842}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 32083, 32094, {32104, 32122, 32137, 32159, 32172, 32186, 32203}, {32227, 32235, 32240, 32159, 32172, 32252, 32259}, {0, 0, 0, 0, 0, 0, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32273, 32295, 32311, 32331, 32345, 32362, 32377, 32394, 32408, 32421, 32440, 32454, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, {32473, 32488, 32497, 32510, 32517, 32527, 32535, 32545, 32552, 32558, 32570, 32577, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20186,20206,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25832,0,0,0,0,0,0,0}},
-       {3613, 0, 0, {32589, 32597, 15958, 15967, 15976, 32608, 32618}, {16414, 16008, 16012, 16016, 16020, 16277, 32627}, {0, 0, 0, 0, 0, 0, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {32631, 32640, 32650, 32658, 10844, 3734, 32666, 32672, 32681, 32690, 32699, 32708, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, {2759, 2763, 16027, 32717, 10844, 2776, 2780, 20182, 18406, 2792, 32721, 16383, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {32725, 32738, 32743, {32748, 32755, 32770, 32784, 32800, 32815, 32831}, {6289, 32846, 2530, 32850, 32854, 32858, 32862}, {2023, 12842, 2428, 2018, 2023, 2430, 12842}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {7370, 7378, 32866, 32873, 32880, 2469, 2474, 32885, 32895, 32906, 32915, 32925, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 0, 0, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{32935,2300,4769,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 32954, 32959, {32964, 32980, 32988, 32996, 33005, 33017, 33027}, {33037, 33043, 33049, 33053, 33057, 33065, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33072, 33085, 33099, 33108, 33114, 33118, 33123, 33131, 16338, 33144, 16355, 16363, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, {33153, 2763, 33157, 16371, 33114, 33161, 2780, 33165, 2788, 33173, 2796, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{2313,0,0,0,0,0,0,0,0,0,0,0},{2326,0,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {33179, 33206, 33213, {33220, 33230, 33240, 33250, 33260, 33270, 33280}, {33290, 33297, 33304, 33311, 33318, 33325, 33332}, {33339, 33343, 33347, 33351, 33355, 33359, 33363}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {33367, 33374, 33381, 33388, 33395, 33402, 33409, 33416, 33423, 33430, 33437, 33447, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,0,0,0,0,0,0,0,0},{33457,33481,33511,33541,33558,0,0,0,0,0},{1858,843,251,0,0,0,0,0,0,0,0,0},{1875,848,269,0,0,0,0,0,0},{33581,1914,0,0,0,0,0,0}},
-       {289, 0, 0, {28300, 8413, 33598, 33605, 33615, 33620, 33627}, {33634, 6273, 33638, 4850, 33643, 33648, 33653}, {4421, 33658, 33661, 33664, 33667, 33670, 33673}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33676, 33683, 33598, 33694, 33700, 33704, 33713, 33720, 33725, 33734, 33739, 33742, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, {33748, 33752, 33759, 28423, 33700, 33764, 33769, 33720, 33774, 33734, 33739, 33779, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {33936, 33954, 33959, {33964, 33989, 34018, 34043, 34056, 34071, 34088}, {34103, 34108, 34113, 34118, 34123, 34128, 8800}, {19442, 19442, 34133, 8811, 8814, 19442, 8811}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34136, 34155, 34170, 34192, 34212, 34228, 34244, 34258, 34284, 34308, 34325, 34342, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, {34359, 34368, 34377, 34391, 34405, 34417, 34429, 34439, 34455, 34469, 34476, 34483, 0}, 0, 1, 691, 187, {1156,4753,1692,34490,34500,0,0,0,0,0,0,0,0,0},{34513,34548,34577,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{34612,0,0,0,0,0,0,0}},
-       {20057, 0, 0, {34628, 34640, 34651, 34663, 34675, 34685, 34697}, {34712, 34717, 34722, 34727, 34732, 34737, 34742}, {0, 0, 0, 0, 0, 0, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34747, 34756, 34768, 34776, 34781, 34791, 34798, 34807, 34814, 34820, 34829, 34840, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, {34848, 34853, 34858, 34863, 34868, 34873, 34878, 34732, 34883, 34888, 34893, 34898, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34903,1207,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 34923, 34925, {34927, 34940, 34948, 34957, 34967, 34977, 34986}, {34998, 35002, 35006, 35010, 35014, 35018, 35022}, {2673, 2436, 2428, 7736, 12842, 5694, 2023}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35026, 35040, 35051, 35060, 35071, 35083, 35097, 35109, 35122, 35135, 35147, 35160, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, {35174, 35179, 35185, 35191, 35196, 35202, 35208, 35213, 35219, 35224, 19163, 35230, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 2411, 2415, 2419, 10097}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 2566, 187, {1692,5888,0,0,0,0,0,0,0,0,0,0,0,0},{10110,10128,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {2277,2286,189,198,8579,10151,1692,0,0,0,0,0,0,0},{1242,10163,10179,0,0,0,0,0,0,0},{843,251,3594,242,0,0,0,0,0,0,0,0},{848,269,3602,257,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10221, 10226, {10230, 10236, 10246, 10252, 10263, 10273, 10278}, {10288, 10292, 10296, 10300, 10305, 10309, 10313}, {2018, 2018, 2023, 10317, 2018, 7736, 7736}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10320, 10325, 10332, 10337, 10343, 10350, 10358, 10365, 10374, 10381, 10386, 10393, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, {10401, 10405, 3761, 10410, 3730, 10414, 10418, 10422, 10427, 10431, 10435, 10439, 0}, 0, 1, 691, 187, {4753,4762,1156,1167,0,0,0,0,0,0,0,0,0,0},{10443,1242,10460,5505,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 10478, 10496, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {10514, 10525, 10538, 10547, 10554, 10567, 10576}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, {10585, 10596, 10607, 10616, 10627, 10634, 10641, 10654, 10663, 10674, 10687, 10698, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {10723, 10730, 10736, 10743, 10748, 10754, 10760}, {10766, 10770, 10774, 10778, 10782, 10786, 10790}, {2428, 2023, 2023, 10794, 4442, 3987, 2023}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {10796, 10804, 10813, 2696, 10819, 2706, 2711, 10823, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 10840, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {198,189,1128,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 10848, 10853, {10858, 10871, 10890, 10907, 10920, 10933, 10950}, {10963, 8775, 8780, 8785, 8790, 8795, 8800}, {10968, 8808, 8805, 8811, 8814, 8808, 8811}, {10971, 10984, 10995, 11012, 11027, 11042, 11057, 11070, 11085, 11102, 11117, 11134, 0}, {11149, 11160, 11173, 11188, 11201, 11214, 11227, 11238, 11251, 11266, 11279, 11298, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, {11311, 11318, 11325, 11332, 11339, 11346, 11353, 11360, 11367, 11374, 11381, 11388, 0}, 0, 1, 691, 187, {1156,1167,1692,0,0,0,0,0,0,0,0,0,0,0},{11395,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{11413,0,0,0,0,0,0,0}},
+       {289, 11429, 11442, {11455, 11470, 11491, 11506, 11519, 11532, 10950}, {421, 426, 11547, 436, 11552, 446, 451}, {456, 459, 11557, 465, 468, 459, 465}, {11560, 11577, 11586, 11601, 521, 11618, 11633, 11646, 11661, 11678, 11699, 11716, 0}, {11731, 11748, 11761, 11778, 9017, 11797, 11812, 11825, 11838, 11853, 11876, 11895, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 0}, {11908, 11915, 11922, 11929, 521, 11936, 11943, 11950, 11957, 11964, 11971, 11978, 0}, 0, 0, 691, 187, {1167,0,0,0,0,0,0,0,0,0,0,0,0,0},{1242,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 11985, 11990, {11995, 12003, 12014, 12020, 12026, 12035, 1985}, {9246, 9250, 2415, 12041, 9262, 9267, 12045}, {9275, 9277, 12049, 9281, 9283, 9277, 9281}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2438, 2445, 9672, 2459, 2465, 12051, 12057, 12063, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,12074,1167,9806,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {12084, 12093, 12098, {12103, 12114, 12125, 12136, 12147, 12158, 12164}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {2018, 9924, 2430, 4442, 2016, 10794, 2436}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12173, 12181, 12190, 12197, 4898, 12204, 12210, 2479, 2486, 12216, 2504, 12225, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 0}, {12235, 12240, 12190, 2534, 4898, 12204, 12210, 2546, 12246, 2554, 2558, 12251, 0}, 2, 1, 691, 187, {7519,1156,1167,1692,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 12256, 12273, {12287, 12298, 12308, 12317, 12328, 12340, 12351}, {12361, 12364, 12367, 12370, 12373, 12376, 12379}, {2023, 2018, 2432, 2430, 7736, 2018, 2023}, {12382, 12392, 12403, 12409, 12418, 12424, 12432, 12440, 12448, 12459, 12468, 12478, 0}, {12488, 12498, 2453, 12509, 12518, 12524, 12532, 12540, 12548, 12559, 12568, 12578, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, {12588, 12594, 12403, 12600, 12418, 12605, 12611, 12617, 4190, 12622, 4201, 12627, 0}, 0, 1, 691, 187, {9517,9539,12632,0,0,0,0,0,0,0,0,0,0,0},{12644,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{12671,0,0,0,0,0,0,0}},
+       {12689, 12701, 11990, {12707, 12719, 12731, 12743, 12757, 12772, 12785}, {12799, 12802, 12805, 12808, 12811, 12814, 9660}, {2023, 2018, 12817, 2430, 4442, 2018, 9669}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12819, 12826, 12834, 12840, 12849, 12858, 12868, 12874, 12885, 12895, 12902, 12912, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, {12920, 12926, 12931, 12936, 12941, 12946, 12953, 12959, 12965, 12971, 12977, 12984, 0}, 2, 1, 2566, 187, {1692,2568,0,0,0,0,0,0,0,0,0,0,0,0},{12991,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{13013,0,0,0,0,0,0,0}},
+       {1, 13028, 13040, {13052, 13067, 13082, 13097, 13114, 13133, 13144}, {13155, 13162, 13169, 13176, 13183, 13190, 13197}, {0, 0, 0, 0, 0, 0, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13368,13386,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 13405, 13425, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13442, 13455, 13468, 13484, 13501, 13516, 13525}, {13534, 13537, 13540, 13543, 13546, 13549, 13552}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13683, 13698, 13579, 13588, 13711, 13604, 13718, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, {13555, 13568, 13579, 13588, 13599, 13604, 13613, 13624, 13631, 13646, 13657, 13670, 0}, 0, 6, 185, 187, {198,189,0,0,0,0,0,0,0,0,0,0,0,0},{13731,5505,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 13750, 13753, {13756, 13769, 13779, 13788, 13798, 13809, 13820}, {13832, 13835, 13840, 13845, 13850, 13855, 13860}, {13832, 13865, 13868, 13871, 13874, 13877, 13880}, {13883, 13892, 13901, 13910, 13919, 13928, 13937, 13946, 13955, 13964, 13974, 13984, 0}, {13994, 14003, 14012, 14021, 14030, 14039, 14048, 14057, 14066, 14075, 14085, 14095, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 0}, {14105, 14111, 14117, 14123, 14129, 14135, 14141, 14147, 14153, 14159, 14166, 14173, 0}, 0, 1, 185, 187, {198,189,1139,1128,1692,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 14180, 14204, {14228, 14241, 14262, 14281, 14302, 14321, 14334}, {14345, 14352, 14359, 14366, 14373, 14380, 14387}, {14394, 14397, 14397, 14400, 14403, 14406, 14411}, {14414, 14429, 14444, 14453, 14464, 14475, 14488, 14501, 14516, 14535, 14554, 14571, 0}, {14590, 14607, 14624, 14635, 14648, 14661, 14676, 14691, 14708, 14729, 14750, 14769, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, {14790, 14797, 14804, 14811, 14818, 14825, 14832, 14839, 14846, 14853, 14860, 14867, 0}, 0, 1, 691, 187, {1156,1167,9796,198,14874,3582,1692,0,0,0,0,0,0,0},{3870,1207,13731,5505,14885,14896,14908,14925,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {14943, 14949, 14963, 14986, 15000, 15016, 15023}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15059, 15066, 10332, 15073, 3730, 15079, 15085, 15091, 15098, 15107, 15115, 15122, 0}, {15129, 15136, 15143, 15148, 15154, 15158, 15163, 15168, 15175, 15184, 15192, 15199, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15234,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {15256, 1929, 1932, {15271, 15279, 15290, 15300, 15311, 15320, 15329}, {15339, 15343, 15347, 15351, 15355, 15359, 15363}, {15367, 12817, 12817, 12817, 2432, 2432, 2436}, {15369, 15379, 15387, 15395, 15403, 15411, 15418, 15426, 15434, 15441, 15447, 15454, 0}, {15462, 15473, 15482, 15491, 15500, 15509, 15517, 15526, 15535, 15543, 15550, 15558, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, {15567, 15572, 4845, 15577, 15582, 15587, 15592, 15597, 15602, 15607, 15612, 15617, 0}, 2, 1, 185, 187, {1681,1692,0,0,0,0,0,0,0,0,0,0,0,0},{15622,0,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{15655,0,0,0,0,0,0,0}},
+       {289, 15672, 15693, {15710, 331, 352, 8714, 15723, 15740, 15751}, {15764, 15772, 15780, 15786, 15794, 15802, 15810}, {456, 459, 462, 465, 468, 459, 465}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15818, 484, 501, 510, 15833, 15840, 15849, 542, 555, 574, 591, 606, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, {15858, 15866, 15874, 639, 15833, 15882, 15890, 647, 655, 665, 673, 683, 0}, 0, 1, 691, 187, {1156,1167,15898,0,0,0,0,0,0,0,0,0,0,0},{13731,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {15915, 15922, 15933, 15942, 15951, 15958, 15969}, {15979, 15983, 15987, 15991, 15995, 15998, 16002}, {0, 0, 0, 0, 0, 0, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16006, 16016, 16025, 16033, 16042, 16055, 16067, 16074, 16081, 16088, 16098, 16110, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 0}, {16123, 16127, 16131, 16135, 16139, 16143, 16147, 16151, 16155, 16159, 16163, 16167, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 0, 0, {16171, 16176, 16182, 16192, 16204, 16212, 16223}, {16232, 16236, 16240, 16244, 16248, 16252, 16256}, {0, 0, 0, 0, 0, 0, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {16260, 16270, 16280, 16287, 16294, 2706, 16299, 16306, 16313, 16322, 16330, 16338, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16002, 16346, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, 0, 0, 185, 187, {1681,1735,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16362, 16368, 16379, 16192, 16204, 16212, 16223}, {16389, 16393, 16397, 16244, 16248, 16252, 16256}, {2023, 2428, 16401, 2430, 2023, 5694, 2428}, {16403, 16413, 16424, 16431, 16440, 16446, 16452, 16460, 16468, 16479, 16489, 16498, 0}, {16507, 16270, 16516, 16522, 16294, 2706, 16299, 16306, 16529, 16322, 16330, 16338, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, {2759, 2763, 16539, 2772, 16350, 2776, 2780, 16354, 2788, 2792, 2796, 16358, 0}, 0, 0, 2566, 187, {1128,1139,189,1681,1735,1692,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 16543, 16547, {16551, 16558, 16566, 16574, 16583, 16593, 16600}, {2652, 16609, 2658, 16612, 2664, 16615, 2670}, {2023, 2428, 2673, 3705, 2673, 3989, 2023}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {16618, 16627, 16637, 2696, 10819, 16643, 16649, 16655, 2723, 2733, 2741, 10831, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 3761, 2772, 10819, 2776, 2780, 2784, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {1681,1735,1692,16664,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {16676, 16692, 16717, 16745, 16773, 16801, 16829}, {16848, 16858, 16868, 16878, 16888, 16898, 16908}, {16918, 16922, 16926, 16922, 16930, 16934, 16938}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {16942, 16964, 16992, 17008, 17027, 17043, 17062, 17081, 17103, 17134, 17162, 17187, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, {17215, 17225, 17235, 17245, 17255, 17265, 17275, 17285, 17295, 17305, 17315, 17325, 0}, 0, 1, 691, 187, {1156,1167,7419,1176,4762,4753,1692,0,0,0,0,0,0,0},{17335,17369,17402,3870,17436,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 17448, 17453, {5932, 17458, 17469, 17479, 17489, 17499, 17513}, {17525, 17529, 17534, 17539, 17543, 17548, 17553}, {2023, 2428, 2430, 2428, 5694, 2434, 2436}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 6077, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{2300,0,0,0,0,0,0,0,0,0},{251,4288,0,0,0,0,0,0,0,0,0,0},{269,4302,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 17557, 17573, {17583, 17602, 17621, 17643, 17662, 17684, 17709}, {17728, 17738, 17748, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {17853, 17869, 17888, 17904, 17923, 17930, 17940, 17956, 17972, 17991, 18013, 18029, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 0}, {18048, 18055, 17888, 18065, 17923, 17930, 18081, 18094, 18101, 18114, 18130, 18140, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {18153, 18167, 18170, {18173, 18182, 18191, 18201, 18211, 18221, 18233}, {18241, 18246, 18250, 18254, 18258, 18263, 18268}, {18272, 2430, 2430, 9924, 18272, 18275, 2023}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {18278, 18285, 18290, 2696, 18296, 18302, 18309, 18315, 18323, 18333, 18341, 18350, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, {2759, 18360, 3761, 2772, 18364, 18368, 18373, 18377, 18381, 18385, 2796, 18389, 0}, 0, 0, 185, 187, {198,1692,18394,7410,2277,0,0,0,0,0,0,0,0,0},{18403,18428,10151,0,0,0,0,0,0,0},{251,3594,843,0,0,0,0,0,0,0,0,0},{269,3602,848,3594,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {18447, 18460, 18465, {18470, 18482, 18493, 18507, 18519, 18529, 18539}, {18550, 18555, 18560, 18565, 18570, 18575, 18580}, {2023, 3989, 2428, 6293, 2673, 16401, 2436}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, {18749, 18756, 18761, 18766, 18770, 18775, 18780, 18785, 18790, 18797, 18802, 18808, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{18813,18837,0,0,0,0,0,0,0,0},{251,843,4288,0,0,0,0,0,0,0,0,0},{269,848,4302,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {20032, 1929, 1932, {20040, 20049, 20058, 20066, 20075, 20084, 20091}, {20100, 20103, 20106, 20109, 20112, 20116, 20119}, {6607, 6609, 6611, 6613, 12817, 15367, 6605}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {10796, 10804, 20122, 20128, 10819, 2706, 19196, 20135, 16313, 20142, 16330, 20149, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, {2759, 2763, 19192, 2772, 10819, 2776, 2780, 20157, 2788, 2792, 2796, 10844, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20195, 1929, 1932, {20202, 20212, 20221, 20230, 20241, 20251, 20256}, {20263, 20269, 20274, 20279, 20284, 10786, 20288}, {20293, 2673, 2023, 7736, 2018, 3987, 2023}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20334,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 20352, 20380, {20402, 20421, 20440, 20465, 20484, 20518, 20543}, {20562, 20572, 20582, 20598, 20608, 20633, 20649}, {20659, 20663, 20670, 20674, 20681, 20688, 20695}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, 0, 0, 2566, 187, {1139,2293,1128,20945,20958,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 1929, 1932, {21482, 21501, 21520, 21542, 21561, 21583, 21608}, {21627, 21637, 21647, 21660, 21670, 21683, 21699}, {21709, 21713, 21720, 21727, 21734, 21741, 21748}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21752, 21780, 21808, 21824, 21843, 21850, 21860, 21876, 21892, 21920, 21942, 21964, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 0}, {21989, 22008, 21808, 21824, 21843, 21850, 21860, 22027, 22034, 22050, 22066, 22076, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 8151, 22089, {22092, 22111, 22130, 22155, 22174, 22196, 22221}, {22240, 22250, 22260, 22276, 22286, 22299, 22315}, {22325, 22329, 22336, 22340, 22347, 22354, 22361}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 0}, {22365, 22387, 22418, 22440, 22459, 22466, 22476, 22492, 22508, 22539, 22561, 22583, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 22608, 22633, {22658, 22677, 22699, 22724, 22740, 22762, 22781}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22791, 22798, 22805, 22812, 22819, 22826, 22833}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 22949, 22968, 22999, 23024, 23046, 0}, {22837, 22853, 22878, 22897, 22916, 22923, 22936, 23071, 22968, 22999, 23024, 23046, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 0}, {23090, 23098, 23112, 23126, 22916, 22923, 22936, 23137, 23145, 23159, 23170, 23178, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23189, 23211, 23233, 23258, 23280, 23305, 23333}, {23355, 23365, 23375, 23388, 23398, 23411, 23427}, {23437, 23441, 23448, 23452, 23459, 23466, 23473}, {23477, 23493, 23518, 23537, 23559, 23566, 23579, 23592, 23611, 23642, 23667, 23686, 0}, {23477, 23493, 23518, 23537, 23559, 23566, 23711, 23592, 23611, 23642, 23667, 23686, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 0}, {23724, 23731, 23518, 23747, 23559, 23566, 23711, 23592, 23763, 23785, 23801, 23811, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {23827, 23846, 23865, 23887, 23906, 23928, 23953}, {23972, 23982, 23992, 24005, 24015, 24028, 24044}, {24054, 24058, 24065, 24072, 24079, 24086, 24093}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24097, 24113, 24138, 24157, 24179, 24186, 24199, 24212, 24231, 24259, 24284, 24306, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 0}, {24331, 24339, 24359, 24366, 24179, 24383, 24390, 24398, 24406, 24429, 24446, 24460, 0}, 0, 0, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20032, 1929, 1932, {24477, 24505, 24539, 24567, 24595, 24626, 24663}, {24691, 24704, 24723, 24739, 24752, 24771, 24790}, {24800, 24807, 24814, 24821, 24828, 24841, 24848}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {24852, 24871, 24899, 24921, 24940, 24953, 24963, 24976, 25001, 25032, 25057, 25073, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 0}, {25092, 25102, 25121, 25131, 24940, 24953, 24963, 25147, 25154, 25179, 25195, 25205, 0}, 0, 0, 2566, 187, {1139,2293,1167,4762,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 25218, 25246, {25268, 25287, 25306, 25331, 25350, 25384, 25409}, {25428, 20572, 20582, 20598, 25438, 25463, 20649}, {0, 0, 0, 0, 0, 0, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25479, 25504, 25535, 25551, 20796, 20803, 20813, 25570, 25586, 25617, 25639, 25661, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, {25686, 25699, 25535, 25551, 20796, 20803, 20813, 25718, 25725, 25741, 25757, 25767, 0}, 0, 0, 2566, 187, {1128,0,0,0,0,0,0,0,0,0,0,0,0,0},{25780,0,0,0,0,0,0,0,0,0},{1858,1866,0,0,0,0,0,0,0,0,0,0},{1875,1886,0,0,0,0,0,0,0},{25799,25807,0,0,0,0,0,0}},
+       {1, 1929, 1932, {17583, 17602, 25817, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {17810, 17814, 17821, 17828, 17835, 17842, 17849}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 25947, 25963, 25988, 26010, 26038, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 0}, {26060, 26073, 17888, 26092, 25927, 17930, 25934, 26108, 26115, 26134, 26150, 26172, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {26920, 26944, 26966, {26991, 27019, 27047, 27084, 27115, 27149, 27174}, {27208, 27224, 27240, 27265, 27284, 27306, 27319}, {27341, 27348, 27355, 27362, 27369, 27376, 27380}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27390, 27424, 27461, 27495, 27529, 27560, 27597, 27634, 27674, 27708, 27742, 27791, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, {27840, 27853, 27866, 27879, 27892, 27905, 27918, 27931, 27944, 27957, 27973, 27989, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,1721,1714,1728,0,0,0,0,0},{28005,28048,28096,28128,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28165,1914,0,0,0,0,0,0}},
+       {289, 1929, 1932, {28198, 28207, 28217, 28229, 28242, 28251, 28263}, {28275, 28279, 28284, 28288, 28292, 28296, 28300}, {2023, 28304, 2428, 2428, 15367, 6293, 2023}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28307, 28314, 28323, 28330, 2702, 28337, 28345, 28356, 28361, 28366, 28373, 28382, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 0}, {28390, 28394, 28284, 28398, 2702, 28402, 28406, 28356, 28361, 28410, 28414, 28419, 0}, 2, 1, 185, 187, {189,198,5002,8579,0,0,0,0,0,0,0,0,0,0},{1242,1207,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 28424, 28440, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {28456, 28478, 28491, 28510, 28520, 28551, 28567}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, {28580, 28593, 28612, 28625, 28638, 28651, 28670, 28689, 28702, 28718, 28731, 28756, 0}, 0, 0, 185, 187, {189,1692,0,0,0,0,0,0,0,0,0,0,0,0},{1242,10163,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{28769,0,0,0,0,0,0,0}},
+       {289, 28804, 28829, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {28854, 28879, 28898, 28926, 28945, 28970, 28989}, {29011, 29015, 29019, 29023, 29033, 29037, 29047}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29051, 29070, 29086, 29099, 29112, 29134, 29153, 29175, 29191, 29207, 29220, 29236, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, {29252, 29261, 29270, 29279, 29288, 29297, 29309, 29318, 29327, 29336, 29345, 29354, 0}, 0, 0, 185, 187, {198,29363,6480,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 29373, 3909, 29378, 29388, 29394, 3942}, {29401, 8413, 3761, 29405, 29410, 29414, 29418}, {2673, 2436, 2428, 2428, 29423, 3989, 2023}, {29425, 29433, 4005, 4011, 29442, 29447, 29453, 4034, 29459, 29468, 29476, 29485, 0}, {29494, 29502, 4094, 1012, 8083, 29511, 29517, 4117, 8100, 8109, 8117, 29523, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, {29532, 2763, 3761, 29536, 2702, 29540, 29545, 20157, 18381, 29549, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,1120,2286,1139,1167,1692,0,0,0,0,0,0,0},{29553,4239,4266,1242,0,0,0,0,0,0},{843,251,242,29582,0,0,0,0,0,0,0,0},{848,269,257,29594,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 29614, 29626, {29638, 17602, 29666, 17643, 17662, 17684, 17709}, {17728, 17738, 25839, 17761, 17771, 17784, 17800}, {0, 0, 0, 0, 0, 0, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 0}, {25852, 25877, 17888, 25908, 25927, 17930, 25934, 29685, 29701, 29729, 26010, 26038, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,1866,1858,0,0,0,0,0,0,0,0},{269,848,1886,1875,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {20032, 29751, 29763, {29772, 29788, 29804, 29832, 29848, 29891, 29916}, {29772, 29788, 29944, 29832, 29954, 29976, 29989}, {29999, 30003, 30007, 30011, 30015, 30028, 30035}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30042, 30061, 30086, 30105, 30130, 30143, 30156, 30169, 30191, 30225, 30250, 30278, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, {30306, 30313, 30323, 30105, 30130, 30143, 30156, 30336, 30346, 30359, 30369, 30382, 0}, 0, 1, 2566, 187, {1692,1681,1735,198,189,0,0,0,0,0,0,0,0,0},{30395,0,0,0,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{30443,0,0,0,0,0,0,0}},
+       {30453, 30469, 30479, {30492, 30502, 30509, 30522, 30532, 30542, 30552}, {30492, 30502, 30562, 30522, 30532, 30542, 30552}, {30572, 30576, 30580, 30584, 30588, 30592, 30596}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30711, 30727, 30743, 0}, {30600, 30616, 30632, 30642, 30655, 30662, 30669, 30679, 30692, 30759, 30727, 30743, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, {30778, 30788, 30632, 30798, 30655, 30662, 30669, 30808, 30818, 30828, 30838, 30848, 0}, 0, 0, 185, 187, {2277,1692,0,0,0,0,0,0,0,0,0,0,0,0},{30858,0,0,0,0,0,0,0,0,0},{3594,0,0,0,0,0,0,0,0,0,0,0},{3602,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 31125, 31166, {31207, 31226, 31245, 31270, 31289, 31311, 31336}, {31355, 17738, 31365, 17761, 31381, 17784, 17800}, {31394, 17814, 31398, 17828, 31402, 17842, 17849}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, {17853, 31409, 17888, 31437, 25927, 31456, 17940, 31466, 31482, 31513, 31535, 31560, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25807,0,0,0,0,0,0,0}},
+       {289, 0, 0, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 0}, {31585, 31592, 31601, 31616, 31627, 31636, 31643, 31650, 31657, 31668, 31681, 31694, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 6, 185, 187, {1654,1692,0,0,0,0,0,0,0,0,0,0,0,0},{31699,31720,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {31735, 1929, 1932, {31741, 31748, 31754, 31761, 31772, 31780, 31789}, {31796, 8413, 3761, 31800, 31804, 31808, 10790}, {2436, 2436, 2428, 2428, 5694, 16401, 2023}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {3991, 31812, 31820, 4011, 4017, 31826, 31832, 4034, 31838, 31848, 31856, 31866, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, {31876, 31880, 3761, 29536, 3730, 31884, 31888, 20157, 18381, 2792, 31892, 16358, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 0, 0, {31896, 31903, 31911, 31918, 31925, 31933, 31941}, {31948, 31951, 31954, 31957, 31960, 31963, 31966}, {2436, 2436, 2430, 2436, 12817, 3987, 12817}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 32063, 32074, {32084, 32102, 32117, 32139, 32152, 32166, 32183}, {32207, 32215, 32220, 32139, 32152, 32232, 32239}, {0, 0, 0, 0, 0, 0, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32253, 32275, 32291, 32311, 32325, 32342, 32357, 32374, 32388, 32401, 32420, 32434, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, {32453, 32468, 32477, 32490, 32497, 32507, 32515, 32525, 32532, 32538, 32550, 32557, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{222,20161,20181,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{25807,0,0,0,0,0,0,0}},
+       {3613, 0, 0, {32569, 32577, 15933, 15942, 15951, 32588, 32598}, {16389, 15983, 15987, 15991, 15995, 16252, 32607}, {0, 0, 0, 0, 0, 0, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {32611, 32620, 32630, 32638, 10819, 3734, 32646, 32652, 32661, 32670, 32679, 32688, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 0}, {2759, 2763, 16002, 32697, 10819, 2776, 2780, 20157, 18381, 2792, 32701, 16358, 0}, 0, 0, 185, 187, {189,1681,1735,1692,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,3594,251,0,0,0,0,0,0,0,0,0},{257,3602,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {32705, 32718, 32723, {32728, 32735, 32750, 32764, 32780, 32795, 32811}, {6289, 32826, 2530, 32830, 32834, 32838, 32842}, {2023, 12817, 2428, 2018, 2023, 2430, 12817}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 0}, {7370, 7378, 32846, 32853, 32860, 2469, 2474, 32865, 32875, 32886, 32895, 32905, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 0, 0, 2566, 187, {1128,1139,1692,2568,0,0,0,0,0,0,0,0,0,0},{32915,2300,4769,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 32934, 32939, {32944, 32960, 32968, 32976, 32985, 32997, 33007}, {33017, 33023, 33029, 33033, 33037, 33045, 3701}, {0, 0, 0, 0, 0, 0, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33052, 33065, 33079, 33088, 33094, 33098, 33103, 33111, 16313, 33124, 16330, 16338, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, {33133, 2763, 33137, 16346, 33094, 33141, 2780, 33145, 2788, 33153, 2796, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{2313,0,0,0,0,0,0,0,0,0,0,0},{2326,0,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {33159, 33186, 33193, {33200, 33210, 33220, 33230, 33240, 33250, 33260}, {33270, 33277, 33284, 33291, 33298, 33305, 33312}, {33319, 33323, 33327, 33331, 33335, 33339, 33343}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 0}, {33347, 33354, 33361, 33368, 33375, 33382, 33389, 33396, 33403, 33410, 33417, 33427, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, {6605, 6607, 6609, 6611, 6613, 6615, 6617, 6619, 6621, 6623, 6626, 6629, 0}, 0, 0, 185, 187, {1654,1663,1672,1703,1692,1681,0,0,0,0,0,0,0,0},{33437,33461,33491,33521,33538,0,0,0,0,0},{1858,843,251,0,0,0,0,0,0,0,0,0},{1875,848,269,0,0,0,0,0,0},{33561,1914,0,0,0,0,0,0}},
+       {289, 0, 0, {28275, 8413, 33578, 33585, 33595, 33600, 33607}, {33614, 6273, 33618, 4850, 33623, 33628, 33633}, {4421, 33638, 33641, 33644, 33647, 33650, 33653}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33656, 33663, 33578, 33674, 33680, 33684, 33693, 33700, 33705, 33714, 33719, 33722, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 0}, {33728, 33732, 33739, 28398, 33680, 33744, 33749, 33700, 33754, 33714, 33719, 33759, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,5002,1242,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {33916, 33934, 33939, {33944, 33969, 33998, 34023, 34036, 34051, 34068}, {34083, 34088, 34093, 34098, 34103, 34108, 8800}, {19417, 19417, 34113, 8811, 8814, 19417, 8811}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34116, 34135, 34150, 34172, 34192, 34208, 34224, 34238, 34264, 34288, 34305, 34322, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, {34339, 34348, 34357, 34371, 34385, 34397, 34409, 34419, 34435, 34449, 34456, 34463, 0}, 0, 1, 691, 187, {1156,4753,1692,34470,34480,0,0,0,0,0,0,0,0,0},{34493,34528,34557,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{34592,0,0,0,0,0,0,0}},
+       {20032, 0, 0, {34608, 34620, 34631, 34643, 34655, 34665, 34677}, {34692, 34697, 34702, 34707, 34712, 34717, 34722}, {0, 0, 0, 0, 0, 0, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34727, 34736, 34748, 34756, 34761, 34771, 34778, 34787, 34794, 34800, 34809, 34820, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, {34828, 34833, 34838, 34843, 34848, 34853, 34858, 34712, 34863, 34868, 34873, 34878, 0}, 0, 0, 185, 187, {9796,2286,0,0,0,0,0,0,0,0,0,0,0,0},{34883,1207,0,0,0,0,0,0,0,0},{843,0,0,0,0,0,0,0,0,0,0,0},{848,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 34903, 34905, {34907, 34920, 34928, 34937, 34947, 34957, 34966}, {34978, 34982, 34986, 34990, 34994, 34998, 35002}, {2673, 2436, 2428, 7736, 12817, 5694, 2023}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35006, 35020, 35031, 35040, 35051, 35063, 35077, 35089, 35102, 35115, 35127, 35140, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 0}, {35154, 35159, 35165, 35171, 35176, 35182, 35188, 35193, 35199, 35204, 19138, 35210, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
        {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1663,1672,1681,1692,1703,1714,1721,1728,1735,0,0,0,0},{1744,1766,1794,1822,1837,0,0,0,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
-       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,35591,4762,1692,0,0,0,0,0,0,0,0},{2818,2300,35601,0,0,0,0,0,0,0},{251,843,35611,35620,35630,35641,8353,35646,35652,0,0,0},{269,848,35660,35673,2862,35685,35699,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 8151, 22114, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,1207,13756,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 7281, 7286, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {35706, 6273, 4845, 35711, 35717, 35722, 35726}, {2673, 2436, 2428, 29448, 3987, 3989, 2023}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {35732, 5803, 35736, 1086, 35741, 2538, 2542, 1096, 1100, 1105, 1110, 35745, 0}, {35732, 5803, 35736, 1086, 35741, 2538, 2542, 1096, 1100, 1105, 1110, 35745, 0}, 0, 0, 185, 187, {198,3582,189,1120,2286,1139,1692,0,0,0,0,0,0,0},{4211,4266,0,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,35571,4762,1692,0,0,0,0,0,0,0,0},{2818,2300,35581,0,0,0,0,0,0,0},{251,843,35591,35600,35610,35621,8353,35626,35632,0,0,0},{269,848,35640,35653,2862,35665,35679,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 8151, 22089, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 2, 1, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,1207,13731,0,0,0,0,0,0},{251,843,242,3594,0,0,0,0,0,0,0,0},{269,848,257,3602,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {35686, 6273, 4845, 35691, 35697, 35702, 35706}, {2673, 2436, 2428, 29423, 3987, 3989, 2023}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {35712, 5803, 35716, 1086, 35721, 2538, 2542, 1096, 1100, 1105, 1110, 35725, 0}, {35712, 5803, 35716, 1086, 35721, 2538, 2542, 1096, 1100, 1105, 1110, 35725, 0}, 0, 0, 185, 187, {198,3582,189,1120,2286,1139,1692,0,0,0,0,0,0,0},{4211,4266,0,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
        {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 2566, 187, {1139,198,189,1128,0,0,0,0,0,0,0,0,0,0},{4985,1242,0,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {6207, 6216, 6224, 6233, 6244, 6253, 6262}, {6269, 6273, 2530, 6277, 6281, 6285, 6289}, {2673, 2436, 2428, 2428, 6293, 3989, 2023}, {6295, 6303, 4005, 6312, 6319, 6326, 6333, 4034, 6340, 6350, 6358, 6367, 0}, {6376, 6384, 4094, 6393, 6400, 6407, 6414, 4117, 6421, 6431, 1058, 6439, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, 2, 1, 691, 187, {1156,1167,9806,2286,6480,0,0,0,0,0,0,0,0,0},{2818,1242,1207,0,0,0,0,0,0,0},{251,843,35611,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 7281, 7286, {7291, 7298, 7306, 7314, 7323, 7333, 7341}, {7350, 4424, 7353, 7356, 7359, 7362, 7365}, {7368, 2428, 2673, 3705, 2673, 3989, 7368}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 185, 187, {9796,1120,1139,1167,7419,1692,0,0,0,0,0,0,0,0},{4985,3809,1242,5548,0,0,0,0,0,0},{843,251,35750,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 35760, 35765, {2345, 10060, 35770, 2368, 2375, 2383, 35777}, {2398, 35785, 35790, 2411, 2415, 2419, 35794}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
-       {3883, 7281, 7286, {3895, 7966, 7980, 7993, 8006, 8019, 3942}, {6269, 8031, 8035, 8039, 8043, 8047, 8051}, {2673, 2023, 2430, 8056, 8056, 2023, 2023}, {35798, 35806, 35816, 4011, 29467, 35823, 35829, 4034, 29484, 29493, 29501, 35835, 0}, {35798, 35806, 35816, 4011, 29467, 35823, 35829, 4034, 29484, 29493, 29501, 35835, 0}, {2759, 20342, 3761, 29561, 2702, 2776, 2780, 20182, 18406, 29574, 2796, 2800, 0}, {2759, 20342, 3761, 29561, 2702, 2776, 2780, 20182, 18406, 29574, 2796, 2800, 0}, 2, 1, 185, 187, {198,1156,1128,189,1167,1139,1681,1703,1692,1735,35844,5888,0,0},{4266,4211,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 10097, 10101, 10105, 10109}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {10114, 10122, 10131, 2696, 10004, 2706, 2711, 10136, 2723, 2733, 2741, 3752, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10144, 2486, 2496, 2504, 2513, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 10004, 2776, 2780, 2784, 2788, 2792, 2796, 3769, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{10152,10170,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {35853, 35864, 35888, 35918, 35935, 35957, 35966}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 0}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 7281, 7286, {18880, 18894, 18904, 18915, 18929, 18940, 18951}, {18964, 18969, 18974, 18981, 18987, 18993, 18999}, {2673, 2436, 2428, 7736, 2673, 12842, 2023}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19004, 19012, 19020, 19027, 19036, 19046, 19056, 19062, 19070, 19085, 19103, 19111, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, {19119, 19123, 19020, 19129, 19133, 19138, 19056, 19144, 19149, 19156, 19163, 19168, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10193,8579,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {36090, 36105, 36120, 36135, 36152, 36169, 36178}, {36189, 36196, 36203, 36210, 36217, 19832, 36224}, {36231, 19439, 8811, 8814, 8808, 19436, 19846}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,36234,4762,189,1692,0,0,0,0,0,0,0,0},{36245,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 20377, 20405, {20427, 20446, 20465, 20490, 20509, 20543, 20568}, {20587, 20597, 20607, 20623, 20633, 20658, 20674}, {20684, 20688, 20695, 20699, 20706, 20713, 20720}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, {20724, 20752, 20786, 20802, 20821, 20828, 20838, 20854, 20870, 20901, 20923, 20945, 0}, 0, 5, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20998,21007,0,0,0,0,0,0,0,0},{4302,2337,21015,21027,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
-       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {36395, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36395, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36403, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {36403, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,36408,7419,0,0,0,0,0,0,0,0,0},{36418,36438,0,0,0,0,0,0,0,0},{251,843,2850,36450,35641,8353,35652,0,0,0,0,0},{269,848,2862,35685,35699,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {6207, 6216, 6224, 6233, 6244, 6253, 6262}, {6269, 6273, 2530, 6277, 6281, 6285, 6289}, {2673, 2436, 2428, 2428, 6293, 3989, 2023}, {6295, 6303, 4005, 6312, 6319, 6326, 6333, 4034, 6340, 6350, 6358, 6367, 0}, {6376, 6384, 4094, 6393, 6400, 6407, 6414, 4117, 6421, 6431, 1058, 6439, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, {6448, 2526, 2530, 2534, 6452, 6456, 6460, 6464, 6468, 6472, 2558, 6476, 0}, 2, 1, 691, 187, {1156,1167,9806,2286,6480,0,0,0,0,0,0,0,0,0},{2818,1242,1207,0,0,0,0,0,0,0},{251,843,35591,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {7291, 7298, 7306, 7314, 7323, 7333, 7341}, {7350, 4424, 7353, 7356, 7359, 7362, 7365}, {7368, 2428, 2673, 3705, 2673, 3989, 7368}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 7387, 2459, 7393, 2469, 2474, 7397, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 7406, 2534, 7393, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 185, 187, {9796,1120,1139,1167,7419,1692,0,0,0,0,0,0,0,0},{4985,3809,1242,5548,0,0,0,0,0,0},{843,251,35730,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 35740, 35745, {2345, 10060, 35750, 2368, 2375, 2383, 35757}, {2398, 10088, 35765, 2411, 2415, 2419, 35769}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {3883, 7281, 7286, {3895, 7966, 7980, 7993, 8006, 8019, 3942}, {6269, 8031, 8035, 8039, 8043, 8047, 8051}, {2673, 2023, 2430, 8056, 8056, 2023, 2023}, {35773, 35781, 35791, 4011, 29442, 35798, 35804, 4034, 29459, 29468, 29476, 35810, 0}, {35773, 35781, 35791, 4011, 29442, 35798, 35804, 4034, 29459, 29468, 29476, 35810, 0}, {2759, 20317, 3761, 29536, 2702, 2776, 2780, 20157, 18381, 29549, 2796, 2800, 0}, {2759, 20317, 3761, 29536, 2702, 2776, 2780, 20157, 18381, 29549, 2796, 2800, 0}, 2, 1, 185, 187, {198,1156,1128,189,1167,1139,1681,1703,1692,1735,35819,5888,0,0},{4266,4211,0,0,0,0,0,0,0,0},{251,0,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {10033, 10046, 10049, {10052, 10060, 10068, 2368, 2375, 2383, 10075}, {10083, 10088, 10093, 2411, 2415, 2419, 10097}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {7370, 7378, 4887, 2459, 2465, 2469, 2474, 10102, 2486, 2496, 2504, 2513, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 2546, 2550, 2554, 2558, 2562, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{10110,10128,0,0,0,0,0,0,0,0},{251,843,7529,0,0,0,0,0,0,0,0,0},{269,848,7585,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {35828, 35839, 35863, 35893, 35910, 35932, 35941}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 7281, 7286, {18855, 18869, 18879, 18890, 18904, 18915, 18926}, {18939, 18944, 18949, 18956, 18962, 18968, 18974}, {2673, 2436, 2428, 7736, 2673, 12817, 2023}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {18979, 18987, 18995, 19002, 19011, 19021, 19031, 19037, 19045, 19060, 19078, 19086, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, {19094, 19098, 18995, 19104, 19108, 19113, 19031, 19119, 19124, 19131, 19138, 19143, 0}, 2, 0, 185, 187, {198,189,2286,4762,1692,0,0,0,0,0,0,0,0,0},{1242,5505,10151,8579,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {36065, 36080, 36095, 36110, 36127, 36144, 36153}, {36164, 36171, 36178, 36185, 36192, 19807, 36199}, {36206, 19414, 8811, 8814, 8808, 19411, 19821}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,36209,4762,189,1692,0,0,0,0,0,0,0,0},{36220,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 20352, 20380, {20402, 20421, 20440, 20465, 20484, 20518, 20543}, {20562, 20572, 20582, 20598, 20608, 20633, 20649}, {20659, 20663, 20670, 20674, 20681, 20688, 20695}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, {20699, 20727, 20761, 20777, 20796, 20803, 20813, 20829, 20845, 20876, 20898, 20920, 0}, 0, 5, 2566, 187, {1139,2293,4762,1128,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{4288,2321,20973,20982,0,0,0,0,0,0,0,0},{4302,2337,20990,21002,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {36370, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36370, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {36378, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {36378, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1692,36383,7419,0,0,0,0,0,0,0,0,0},{36393,36413,0,0,0,0,0,0,0,0},{251,843,2850,36425,35621,8353,35632,0,0,0,0,0},{269,848,2862,35665,35679,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {9796,1120,2286,2277,189,198,3809,5518,1692,1735,1681,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,843,251,0,0,0,0,0,0,0,0,0},{3602,848,269,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 2, 1, 185, 187, {198,189,1120,2286,2293,1139,1167,1692,0,0,0,0,0,0},{4211,4239,4266,0,0,0,0,0,0,0},{843,251,2321,4288,4294,0,0,0,0,0,0,0},{848,269,2337,4302,4311,0,0,0,0},{1286,0,0,0,0,0,0,0}},
        {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 0, 0, 2566, 187, {1692,5888,1139,6179,189,3582,0,0,0,0,0,0,0,0},{1242,8579,0,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {18472, 18485, 18490, {36461, 36469, 36477, 36485, 36497, 36506, 36518}, {18575, 18580, 18585, 18590, 18595, 18600, 18605}, {2023, 2428, 2673, 6293, 2673, 16426, 2436}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {18610, 18627, 18640, 18654, 18667, 18680, 18693, 18707, 18719, 18733, 18747, 18761, 0}, {36529, 36540, 36547, 36555, 36562, 36569, 36576, 36584, 36590, 36598, 36606, 36614, 0}, {36529, 36540, 36547, 36555, 36562, 36569, 36576, 36584, 36590, 36598, 36606, 36614, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{36621,18862,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,35285,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
-       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,4762,4753,1692,0,0,0,0,0,0,0,0},{36647,2818,36673,36688,0,0,0,0,0,0},{251,843,2321,35630,0,0,0,0,0,0,0,0},{269,35685,2862,35699,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1692,198,189,2286,5888,36702,3809,14921,1692,0,0,0,0,0},{3838,20186,36710,6488,0,0,0,0,0,0},{3594,242,251,843,0,0,0,0,0,0,0,0},{3602,257,269,848,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,9796,2286,1139,1692,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {18447, 18460, 18465, {36436, 36444, 36452, 36460, 36472, 36481, 36493}, {18550, 18555, 18560, 18565, 18570, 18575, 18580}, {2023, 2428, 2673, 6293, 2673, 16401, 2436}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {18585, 18602, 18615, 18629, 18642, 18655, 18668, 18682, 18694, 18708, 18722, 18736, 0}, {36504, 36515, 36522, 36530, 36537, 36544, 36551, 36559, 36565, 36573, 36581, 36589, 0}, {36504, 36515, 36522, 36530, 36537, 36544, 36551, 36559, 36565, 36573, 36581, 36589, 0}, 2, 1, 691, 187, {4753,1156,4762,1692,0,0,0,0,0,0,0,0,0,0},{36596,18837,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,35265,0,0,0,0,0,0},{1858,1866,843,251,0,0,0,0,0,0,0,0},{1875,1886,848,269,0,0,0,0,0},{1898,0,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,4762,4753,1692,0,0,0,0,0,0,0,0},{36622,2818,36648,36663,0,0,0,0,0,0},{251,843,2321,35610,0,0,0,0,0,0,0,0},{269,35665,2862,35679,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1692,198,189,2286,5888,36677,3809,14896,1692,0,0,0,0,0},{3838,20161,36685,6488,0,0,0,0,0,0},{3594,242,251,843,0,0,0,0,0,0,0,0},{3602,257,269,848,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,9796,2286,1139,1692,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
        {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 691, 187, {1156,1167,4762,1692,0,0,0,0,0,0,0,0,0,0},{4985,1242,5002,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {1921, 1929, 1932, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {9286, 9296, 9305, 9313, 9321, 9329, 9336, 9343, 9351, 2102, 9357, 9365, 0}, {9374, 9384, 9393, 9401, 9409, 9417, 9424, 9431, 9440, 7911, 9446, 9456, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, {9465, 9469, 9474, 9479, 9483, 7945, 2239, 9487, 9491, 2255, 9495, 2259, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,36790,36817,2568,1822,35285,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
-       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,35591,4762,1692,7419,4753,0,0,0,0,0,0},{2818,2300,36833,0,0,0,0,0,0,0},{251,843,35630,35641,2321,0,0,0,0,0,0,0},{269,848,2862,35685,35699,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,36765,36792,2568,1822,35265,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 2579, 2585, {2592, 2600, 2607, 2616, 2625, 2636, 2644}, {2652, 2655, 2658, 2661, 2664, 2667, 2670}, {2023, 2428, 2673, 2428, 2673, 2434, 2023}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2675, 2682, 2690, 2696, 2702, 2706, 2711, 2716, 2723, 2733, 2741, 2750, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, {2759, 2763, 2767, 2772, 2702, 2776, 2780, 2784, 2788, 2792, 2796, 2800, 0}, 2, 1, 691, 187, {1156,1167,1176,35571,4762,1692,7419,4753,0,0,0,0,0,0},{2818,2300,36808,0,0,0,0,0,0,0},{251,843,35610,35621,2321,0,0,0,0,0,0,0},{269,848,2862,35665,35679,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {289, 7281, 7286, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {9796,1120,189,1176,1692,0,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,251,843,0,0,0,0,0,0,0,0},{3602,257,269,848,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,0,0,0,0,0,0,0,0,0,0},{4239,4266,3809,36845,14910,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{36854,4985,5002,1242,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {12109, 36877, 36887, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, {36266, 36277, 13604, 36290, 36754, 36310, 36940, 36953, 36960, 36356, 36971, 36982, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,0,0,0,0,0,0,0,0,0,0},{4239,4266,3809,36820,14885,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{36829,4985,5002,1242,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {12084, 36852, 36862, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, {36241, 36252, 13579, 36265, 36729, 36285, 36915, 36928, 36935, 36331, 36946, 36957, 0}, 0, 6, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
        {289, 7281, 7286, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 2, 0, 185, 187, {198,1128,1692,0,0,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {2286,189,1139,1692,0,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {2286,189,1139,1692,0,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
        {289, 1929, 1932, {4783, 4792, 4798, 4804, 4813, 4819, 4828}, {4835, 4840, 4845, 4850, 4855, 4860, 4865}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4870, 4878, 4887, 4892, 4898, 4902, 4907, 4915, 4921, 4931, 1058, 4939, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, {4949, 4955, 4887, 4962, 4898, 4902, 4967, 4915, 4973, 1105, 1110, 4979, 0}, 2, 1, 185, 187, {198,189,1167,1139,1692,0,0,0,0,0,0,0,0,0},{4985,1242,5002,0,0,0,0,0,0,0},{251,843,4288,5011,5021,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 36877, 36887, {12020, 36993, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, {36721, 36732, 13604, 36743, 36754, 36761, 36770, 36783, 36343, 36356, 36369, 36382, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1921, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, {36696, 36707, 13579, 36718, 36729, 36736, 36745, 36758, 36318, 36331, 36344, 36357, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{843,251,242,0,0,0,0,0,0,0,0,0},{848,269,257,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
        {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{5505,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {2286,2277,2293,7410,4762,4753,0,0,0,0,0,0,0,0},{29578,4266,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1921, 37015, 37033, {37048, 37061, 37080, 37093, 37108, 37125, 10975}, {37136, 37143, 37150, 37157, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{10751,14921,1128,20186,20206,222,0,0,0,0},{251,242,3594,843,0,0,0,0,0,0,0,0},{269,257,3602,848,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 2566, 187, {1128,198,189,2286,1139,1692,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {20057, 37015, 37033, {37048, 37061, 37080, 37093, 37108, 37125, 10975}, {37136, 37143, 37150, 37157, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,9796,2286,1139,1692,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1921, 36877, 36887, {12020, 36993, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1921, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{13756,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {37368, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,251,843,0,0,0,0,0,0,0,0},{257,3602,269,848,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1921, 36877, 36887, {12020, 36993, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, {35423, 35447, 35456, 35465, 35476, 35485, 35498, 35507, 35512, 35523, 35545, 35569, 0}, 0, 1, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,2277,0,0,0,0,0,0,0,0,0,0,0,0},{1207,1242,5002,10205,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{37381,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1921, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,37391,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1692,1735,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {37403, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 2566, 187, {1128,1139,189,2286,0,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{843,251,242,3594,0,0,0,0,0,0,0,0},{848,269,257,3602,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29578,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,278,0,0,0,0,0,0}},
-       {1, 35305, 35308, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35311, 35322, 35337, 35354, 35371, 35384, 35397}, {35408, 35411, 35414, 35417, 35420, 13574, 13565}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, {36266, 36277, 13604, 36290, 36301, 36310, 36321, 36332, 36343, 36356, 36369, 36382, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 8151, 22114, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,0,0,0,0,0,0,0,0,0},{269,848,2326,257,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {37403, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,0,0,0,0,0,0,0,0,0,0},{29578,4266,0,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37414,1692,0,0,0,0,0,0,0,0,0,0},{29578,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {289, 8151, 22114, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {2277,2286,198,189,1692,0,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37414,1692,0,0,0,0,0,0,0,0,0,0},{4211,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37414,1692,0,0,0,0,0,0,0,0,0,0},{4211,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{37425,0,0,0,0,0,0,0}},
-       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37414,1692,0,0,0,0,0,0,0,0,0,0},{29578,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {3613, 1929, 1932, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
-       {20057, 37015, 37033, {37048, 37061, 37080, 37093, 37108, 37125, 10975}, {37136, 37143, 37150, 37157, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 15865, 15874, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {12109, 36877, 36887, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {1921, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1921, 36877, 36887, {12020, 36993, 9208, 12045, 9223, 9233, 9239}, {9246, 9250, 9254, 12066, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2538, 2542, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {35853, 35864, 35888, 35918, 35935, 35957, 35966}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 0}, {35977, 35990, 501, 36003, 521, 36014, 36023, 542, 36032, 36049, 36064, 36077, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {2286,2277,2293,7410,4762,4753,0,0,0,0,0,0,0,0},{29553,4266,0,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36990, 37008, {37023, 37036, 37055, 37068, 37083, 37100, 10950}, {37111, 37118, 37125, 37132, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{10709,14896,1128,20161,20181,222,0,0,0,0},{251,242,3594,843,0,0,0,0,0,0,0,0},{269,257,3602,848,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 2566, 187, {1128,198,189,2286,1139,1692,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {20032, 36990, 37008, {37023, 37036, 37055, 37068, 37083, 37100, 10950}, {37111, 37118, 37125, 37132, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 0, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,9796,2286,1139,1692,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{3594,843,0,0,0,0,0,0,0,0,0,0},{3602,848,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{13731,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,1692,0,0,0,0,0,0,0,0,0,0,0,0},{13731,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {37343, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{242,3594,251,843,0,0,0,0,0,0,0,0},{257,3602,269,848,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,1692,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, {35403, 35427, 35436, 35445, 35456, 35465, 35478, 35487, 35492, 35503, 35525, 35549, 0}, 0, 1, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {198,2277,0,0,0,0,0,0,0,0,0,0,0,0},{1207,1242,5002,10163,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{37356,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1921, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {9499,9509,6153,9517,9529,9539,9549,37366,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1692,1735,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {37378, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 2566, 187, {1128,1139,189,2286,0,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 1, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{843,251,242,3594,0,0,0,0,0,0,0,0},{848,269,257,3602,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,1692,0,0,0,0,0,0,0,0,0},{29553,4239,4266,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,278,0,0,0,0,0,0}},
+       {1, 35285, 35288, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35291, 35302, 35317, 35334, 35351, 35364, 35377}, {35388, 35391, 35394, 35397, 35400, 13549, 13540}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, {36241, 36252, 13579, 36265, 36276, 36285, 36296, 36307, 36318, 36331, 36344, 36357, 0}, 0, 6, 185, 187, {198,189,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{242,251,843,0,0,0,0,0,0,0,0,0},{257,269,848,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 8151, 22089, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 2566, 187, {1128,1139,2293,4762,1692,0,0,0,0,0,0,0,0,0},{5505,1242,0,0,0,0,0,0,0,0},{251,843,242,0,0,0,0,0,0,0,0,0},{269,848,2326,257,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {37378, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,2286,1139,0,0,0,0,0,0,0,0,0,0},{29553,4266,0,0,0,0,0,0,0,0},{242,3594,843,251,0,0,0,0,0,0,0,0},{257,3602,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37389,1692,0,0,0,0,0,0,0,0,0,0},{29553,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {289, 8151, 22089, {3620, 3627, 3634, 3642, 3652, 3661, 3668}, {3677, 3681, 3685, 3689, 3693, 3697, 3701}, {2023, 2428, 2430, 3705, 2430, 2434, 2023}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {3707, 3715, 3724, 2696, 3730, 3734, 3739, 2716, 2723, 3744, 2741, 3752, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, {2759, 2763, 3761, 2772, 3730, 2776, 2780, 2784, 2788, 3765, 2796, 3769, 0}, 0, 0, 185, 187, {2277,2286,198,189,1692,0,0,0,0,0,0,0,0,0},{1207,1242,0,0,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37389,1692,0,0,0,0,0,0,0,0,0,0},{4211,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37389,1692,0,0,0,0,0,0,0,0,0,0},{4211,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{37400,0,0,0,0,0,0,0}},
+       {3883, 872, 878, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {198,189,37389,1692,0,0,0,0,0,0,0,0,0,0},{29553,0,0,0,0,0,0,0,0,0},{242,251,0,0,0,0,0,0,0,0,0,0},{257,269,0,0,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {3613, 1929, 1932, {3895, 3903, 3909, 3916, 3927, 3934, 3942}, {3950, 3955, 3960, 3965, 3971, 3976, 3981}, {2673, 2436, 2428, 2428, 3987, 3989, 2023}, {3991, 3997, 4005, 4011, 4017, 4022, 4028, 4034, 4041, 4052, 4060, 4070, 0}, {4080, 4086, 4094, 1012, 4100, 4105, 4111, 4117, 4124, 1050, 4135, 4145, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, {4155, 4160, 3960, 4165, 4170, 4175, 4180, 4185, 4190, 4196, 4201, 4206, 0}, 0, 0, 185, 187, {3773,3782,3789,3798,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{1286,0,0,0,0,0,0,0}},
+       {20032, 36990, 37008, {37023, 37036, 37055, 37068, 37083, 37100, 10950}, {37111, 37118, 37125, 37132, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 15840, 15849, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {12084, 36852, 36862, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {1921, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1921, 36852, 36862, {11995, 36968, 9208, 12020, 9223, 9233, 9239}, {9246, 9250, 9254, 12041, 9262, 9267, 9271}, {9275, 9277, 9279, 9281, 9283, 9277, 9281}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2538, 2542, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {35828, 35839, 35863, 35893, 35910, 35932, 35941}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {35952, 35965, 501, 35978, 521, 35989, 35998, 542, 36007, 36024, 36039, 36052, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{1242,5505,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{269,0,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
        {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {1424, 1431, 1438, 1445, 1452, 1459, 1466}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1501, 1508, 1515, 1522, 1529, 1536, 1543, 1550, 1557, 1564, 1571, 1581, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {1654,1663,1672,1681,1692,1703,1714,1721,1728,1735,0,0,0,0},{1744,1766,1794,1822,1837,0,0,0,0,0},{843,251,1858,1866,0,0,0,0,0,0,0,0},{848,269,1875,1886,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
-       {1921, 35760, 35765, {2345, 10060, 35770, 2368, 2375, 2383, 35777}, {2398, 35785, 35790, 2411, 2415, 2419, 35794}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
-       {12109, 36877, 36887, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 0}, {2438, 2445, 15168, 2459, 2465, 2469, 2474, 12088, 36895, 36905, 36913, 36922, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12095, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36931,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {14968, 14974, 14988, 15011, 15025, 15041, 15048}, {15057, 15060, 15065, 15071, 15075, 7736, 15080}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15084, 15091, 10374, 15098, 3730, 15104, 15110, 15116, 15123, 15132, 15140, 15147, 0}, {15154, 15161, 15168, 15173, 15179, 15183, 15188, 15193, 15200, 15209, 15217, 15224, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, {15231, 8135, 2530, 2534, 15179, 15235, 15239, 15243, 15247, 2554, 15251, 15255, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15259,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 1929, 1932, {36090, 36105, 36120, 36135, 36152, 36169, 36178}, {36189, 36196, 36203, 36210, 36217, 19832, 36224}, {36231, 19439, 8811, 8814, 8808, 19436, 19846}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,36234,4762,189,1692,0,0,0,0,0,0,0,0},{36245,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {5619, 26213, 26218, {26223, 26230, 26241, 26254, 26267, 26278, 26291}, {26302, 26307, 26312, 26317, 26322, 26327, 26332}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26337, 26363, 26391, 26421, 26451, 26477, 26507, 26533, 26561, 26585, 26613, 26650, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, {26689, 26701, 26713, 26725, 26737, 26749, 26761, 26773, 26785, 26797, 26810, 26823, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26836,26890,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{26926,0,0,0,0,0,0,0}},
-       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
-       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35236, 35243, 35250, 35257, 35264, 35271, 35278}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1921, 35740, 35745, {2345, 10060, 35750, 2368, 2375, 2383, 35757}, {2398, 10088, 35765, 2411, 2415, 2419, 35769}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
+       {12084, 36852, 36862, {9187, 9196, 9208, 9215, 9223, 9233, 9239}, {9246, 9250, 9254, 9258, 9262, 9267, 9271}, {0, 0, 0, 0, 0, 0, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2438, 2445, 15143, 2459, 2465, 2469, 2474, 12063, 36870, 36880, 36888, 36897, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, {2522, 2526, 2530, 2534, 2465, 2538, 2542, 12070, 2550, 2554, 2558, 2562, 0}, 0, 1, 691, 187, {4753,4762,2266,1156,36906,1167,9806,1692,0,0,0,0,0,0},{2300,4769,2818,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {14943, 14949, 14963, 14986, 15000, 15016, 15023}, {15032, 15035, 15040, 15046, 15050, 7736, 15055}, {6617, 6605, 6607, 6609, 6611, 6613, 6615}, {15059, 15066, 10332, 15073, 3730, 15079, 15085, 15091, 15098, 15107, 15115, 15122, 0}, {15129, 15136, 15143, 15148, 15154, 15158, 15163, 15168, 15175, 15184, 15192, 15199, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, {15206, 8135, 2530, 2534, 15154, 15210, 15214, 15218, 15222, 2554, 15226, 15230, 0}, 0, 1, 691, 187, {1156,1167,4762,189,1692,0,0,0,0,0,0,0,0,0},{15234,0,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 1929, 1932, {36065, 36080, 36095, 36110, 36127, 36144, 36153}, {36164, 36171, 36178, 36185, 36192, 19807, 36199}, {36206, 19414, 8811, 8814, 8808, 19411, 19821}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,36209,4762,189,1692,0,0,0,0,0,0,0,0},{36220,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {5619, 26188, 26193, {26198, 26205, 26216, 26229, 26242, 26253, 26266}, {26277, 26282, 26287, 26292, 26297, 26302, 26307}, {6605, 6607, 6609, 6611, 6613, 6615, 6617}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26312, 26338, 26366, 26396, 26426, 26452, 26482, 26508, 26536, 26560, 26588, 26625, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, {26664, 26676, 26688, 26700, 26712, 26724, 26736, 26748, 26760, 26772, 26785, 26798, 0}, 0, 0, 2566, 187, {1692,0,0,0,0,0,0,0,0,0,0,0,0,0},{26811,26865,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{26901,0,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
+       {1327, 1340, 1347, {1354, 1364, 1374, 1384, 1394, 1404, 1414}, {35216, 35223, 35230, 35237, 35244, 35251, 35258}, {1473, 1477, 1481, 1485, 1489, 1493, 1497}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, {1591, 1596, 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1636, 1642, 1648, 0}, 0, 0, 185, 187, {2277,2286,189,1714,1735,1654,1681,1692,0,0,0,0,0,0},{1744,6632,1822,1837,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{1898,1914,0,0,0,0,0,0}},
        {1921, 7281, 7286, {2345, 2353, 2360, 2368, 2375, 2383, 2390}, {7485, 7490, 7494, 7498, 7502, 7506, 7510}, {2023, 2428, 2430, 2432, 2430, 2434, 2436}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2438, 2445, 4887, 2459, 4898, 2469, 2474, 2479, 2486, 2496, 2504, 6121, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, {2522, 2526, 2530, 2534, 4898, 2538, 2542, 2546, 2550, 2554, 2558, 7515, 0}, 2, 1, 691, 187, {1156,7519,1167,4762,2804,1692,0,0,0,0,0,0,0,0},{2300,4769,0,0,0,0,0,0,0,0},{251,843,7529,7539,4288,2321,7550,7561,0,0,0,0},{269,848,7571,7585,4302,2337,7598,7612,0},{1301,7625,7635,0,0,0,0,0}},
-       {1921, 37015, 37033, {37048, 37061, 37080, 8714, 37108, 37125, 10975}, {37136, 37143, 37150, 37361, 37164, 37171, 37178}, {456, 459, 37185, 465, 468, 459, 465}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37188, 37201, 501, 510, 15858, 37312, 37319, 542, 37216, 37235, 37250, 37267, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, {37284, 37291, 37298, 37305, 15858, 37312, 37319, 37326, 37333, 37340, 37347, 37354, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{37004,0,0,0,0,0,0,0}},
-       {1, 13053, 13065, {13077, 13092, 13107, 13122, 13139, 13158, 13169}, {13180, 13187, 13194, 13201, 13208, 13215, 13222}, {0, 0, 0, 0, 0, 0, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13229, 13240, 8845, 13253, 8867, 13264, 13271, 8892, 13278, 13293, 13306, 13317, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, {13330, 13337, 13344, 13351, 8867, 13264, 13271, 13358, 13365, 13372, 13379, 13386, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13393,13411,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {20220, 1929, 1932, {20227, 20237, 20246, 20255, 20266, 20276, 20281}, {20288, 20294, 20299, 20304, 20309, 10828, 20313}, {20318, 2673, 2023, 7736, 2018, 3987, 2023}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {15084, 15091, 10374, 15098, 3730, 20320, 20325, 20330, 15123, 15132, 15140, 15147, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, {20337, 20342, 3761, 2772, 3730, 20320, 20325, 20346, 10812, 2792, 20350, 20355, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20359,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
-       {289, 30915, 30925, {30938, 30945, 30951, 30958, 30964, 30970, 30978}, {30988, 30992, 30996, 31000, 31004, 31008, 31012}, {12842, 12842, 12842, 12842, 12842, 12842, 12842}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31018, 31027, 10131, 31036, 31042, 31048, 31054, 31061, 31067, 31076, 31085, 31093, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, {31102, 31106, 3761, 31110, 3730, 31114, 31118, 31122, 31127, 31131, 31137, 31141, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10751,222,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
-       {289, 0, 0, {31916, 31923, 31931, 31938, 31945, 31953, 31961}, {31968, 31971, 31974, 31977, 31980, 31983, 31986}, {2436, 2436, 2430, 2436, 12842, 3987, 12842}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {31989, 31997, 32007, 32013, 32021, 32026, 32031, 32036, 32043, 20167, 32051, 32059, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, {2759, 32067, 3761, 32071, 3730, 31114, 31118, 32075, 3701, 2792, 32079, 16383, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20186,20206,222,10751,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}}
+       {1921, 36990, 37008, {37023, 37036, 37055, 8714, 37083, 37100, 10950}, {37111, 37118, 37125, 37336, 37139, 37146, 37153}, {456, 459, 37160, 465, 468, 459, 465}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37163, 37176, 501, 510, 15833, 37287, 37294, 542, 37191, 37210, 37225, 37242, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, {37259, 37266, 37273, 37280, 15833, 37287, 37294, 37301, 37308, 37315, 37322, 37329, 0}, 0, 1, 691, 187, {9499,9517,0,0,0,0,0,0,0,0,0,0,0,0},{9561,9575,9590,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{36979,0,0,0,0,0,0,0}},
+       {1, 13028, 13040, {13052, 13067, 13082, 13097, 13114, 13133, 13144}, {13155, 13162, 13169, 13176, 13183, 13190, 13197}, {0, 0, 0, 0, 0, 0, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13204, 13215, 8845, 13228, 8867, 13239, 13246, 8892, 13253, 13268, 13281, 13292, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, {13305, 13312, 13319, 13326, 8867, 13239, 13246, 13333, 13340, 13347, 13354, 13361, 0}, 0, 1, 691, 187, {1156,1167,4762,1128,189,0,0,0,0,0,0,0,0,0},{13368,13386,0,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {20195, 1929, 1932, {20202, 20212, 20221, 20230, 20241, 20251, 20256}, {20263, 20269, 20274, 20279, 20284, 10786, 20288}, {20293, 2673, 2023, 7736, 2018, 3987, 2023}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {15059, 15066, 10332, 15073, 3730, 20295, 20300, 20305, 15098, 15107, 15115, 15122, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, {20312, 20317, 3761, 2772, 3730, 20295, 20300, 20321, 10770, 2792, 20325, 20330, 0}, 0, 1, 691, 187, {1156,0,0,0,0,0,0,0,0,0,0,0,0,0},{20334,1242,5505,0,0,0,0,0,0,0},{251,843,0,0,0,0,0,0,0,0,0,0},{269,848,0,0,0,0,0,0,0},{1301,0,0,0,0,0,0,0}},
+       {289, 30890, 30900, {30913, 30920, 30926, 30933, 30939, 30945, 30953}, {30963, 30967, 30971, 30975, 30979, 30983, 30987}, {12817, 12817, 12817, 12817, 12817, 12817, 12817}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {30993, 31002, 31011, 31016, 31022, 31028, 31034, 31041, 31047, 31056, 31065, 31073, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, {31082, 31086, 3761, 31090, 3730, 31094, 31098, 31102, 31107, 31111, 31117, 31121, 0}, 0, 0, 2566, 187, {1128,1139,1692,0,0,0,0,0,0,0,0,0,0,0},{10709,222,0,0,0,0,0,0,0,0},{843,251,0,0,0,0,0,0,0,0,0,0},{848,269,0,0,0,0,0,0,0},{278,0,0,0,0,0,0,0}},
+       {289, 0, 0, {31896, 31903, 31911, 31918, 31925, 31933, 31941}, {31948, 31951, 31954, 31957, 31960, 31963, 31966}, {2436, 2436, 2430, 2436, 12817, 3987, 12817}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {31969, 31977, 31987, 31993, 32001, 32006, 32011, 32016, 32023, 20142, 32031, 32039, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, {2759, 32047, 3761, 32051, 3730, 31094, 31098, 32055, 3701, 2792, 32059, 16358, 0}, 0, 0, 185, 187, {2277,2286,189,198,1735,1692,3809,0,0,0,0,0,0,0},{20161,20181,222,10709,0,0,0,0,0,0},{3594,242,843,251,0,0,0,0,0,0,0,0},{3602,257,848,269,0,0,0,0,0},{278,0,0,0,0,0,0,0}}
 };
 
 
 static const NumberFormatEntry number_format_entries [] = {
-       {691, 37441, 691, 37443, 37446, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37504, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37526, 37535, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37546, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37599, 37613, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37501, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37647, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37672, 37510, 37512, 37516, 37676, 37487, 37689, 37694, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37699, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37712, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37716, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37720, 37730, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37739, 37510, 37512, 37516, 37743, 37762, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37781, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 691, 37784, 37788, 37510, 37512, 37516, 37792, 37801, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37810, 37510, 37818, 37516, 37835, 37863, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37890, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37501, 37893, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37501, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37906, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37910, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37914, 37510, 37917, 37516, 37940, 37487, 37956, 37964, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37972, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37975, 37510, 37979, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37996, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38000, 38014, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 38027, 37516, 38041, 38053, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 38064, 37441, 37501, 38066, 37510, 37512, 37516, 38069, 38080, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37441, 0, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
-       {185, 37441, 185, 37443, 38090, 37456, 38099, 37474, 38110, 37487, 38125, 37964, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38132, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38136, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38142, 38152, 2566, 37520, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38161, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 10836, 37510, 38168, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 38064, 37441, 37501, 10836, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 0, 37510, 38174, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38219, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {2566, 37501, 37441, 37501, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 0, 37510, 38222, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38239, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37443, 0, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38243, 37510, 38250, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
-       {38277, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {37441, 37501, 37441, 37441, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38282, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}},
-       {691, 37441, 691, 691, 38286, 37510, 38290, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38327, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}},
-       {691, 37441, 691, 37441, 38335, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}},
-       {37441, 38064, 37441, 37501, 0, 37510, 0, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38342, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},
-       {691, 37441, 691, 37443, 38355, 37456, 0, 37516, 37477, 37487, 2566, 37520, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38358, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 0, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37543, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37784, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37441, 37810, 37510, 0, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 38366, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 37446, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37504, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37526, 37535, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38369, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37546, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37599, 37613, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37647, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37672, 37510, 37512, 37516, 37676, 37487, 37689, 37694, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37699, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37712, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37716, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37720, 37730, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37739, 37510, 37512, 37516, 37743, 37762, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37781, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 691, 37784, 37788, 37510, 37512, 37516, 37792, 37801, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37810, 37510, 37818, 37516, 37835, 37863, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37890, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37550, 37562, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37501, 37893, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 37501, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37906, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37910, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37914, 37510, 37917, 37516, 37940, 37487, 37956, 37964, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37972, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37975, 37510, 37979, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37996, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38000, 38014, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 38027, 37516, 38041, 38053, 2566, 37520, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 38064, 37441, 37501, 38066, 37510, 37512, 37516, 38069, 38080, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37441, 38383, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
-       {185, 37441, 185, 37443, 38090, 37456, 38099, 37474, 38110, 37487, 38125, 37964, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38132, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38136, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 38390, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 38142, 38152, 2566, 37520, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38161, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 10836, 37510, 38168, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 38064, 37441, 37501, 10836, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 0, 37510, 38174, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38239, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37443, 38395, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38215, 37510, 38250, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
-       {38277, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38282, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}},
-       {691, 37441, 691, 691, 38286, 37510, 38290, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38215, 37510, 0, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37441, 38327, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}},
-       {691, 37441, 691, 37441, 38335, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 38342, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},
-       {691, 37441, 691, 37443, 38355, 37456, 0, 37516, 37477, 37487, 2566, 37520, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38358, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37501, 10836, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37574, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}},
-       {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37543, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37441, 37810, 37510, 0, 37516, 37477, 37487, 2566, 37520, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 38366, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38401, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37712, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 37441, 38411, 37788, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38279, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 37441, 38411, 37788, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37720, 37730, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37628, 37702, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 38413, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37522, 37510, 0, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37443, 38421, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38428, 37510, 38250, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
-       {691, 37441, 691, 37443, 38432, 37456, 37512, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37626, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 15, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37899, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38442, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 0, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 8056, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37501, 37441, 38411, 37788, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38452, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 2, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38455, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38465, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 38411, 0, 37510, 37512, 37516, 37577, 37588, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38470, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38452, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38474, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38484, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37522, 37510, 37512, 37516, 37656, 37664, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38452, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38488, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 10836, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38498, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38503, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38513, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38498, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38517, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38527, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38532, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38542, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38546, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38554, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 691, 38564, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37522, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38574, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38358, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 9, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38584, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38594, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38604, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37443, 38608, 37456, 37459, 37474, 37477, 37487, 2566, 37496, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38215, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
-       {37441, 691, 37441, 691, 38618, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 2436, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38621, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37626, 37510, 37512, 37516, 37628, 37638, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
-       {37441, 691, 37441, 691, 38498, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38452, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38624, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38632, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 38413, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 37543, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38452, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 691, 38390, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37443, 38421, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37441, 0, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38637, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38637, 37510, 38373, 37516, 37477, 37487, 2566, 37520, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37501, 37574, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 691, 37441, 691, 38632, 37510, 37512, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
-       {37441, 37501, 37441, 37441, 38383, 37510, 0, 37516, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
-       {37441, 37501, 37441, 37443, 38395, 37456, 37512, 37474, 37477, 37487, 2566, 37520, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
-       {37441, 38064, 37441, 37501, 0, 37510, 0, 37516, 37656, 37664, 2566, 37520, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
-       {691, 37441, 691, 37441, 38362, 37510, 0, 37516, 37477, 37487, 2566, 37520, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}
+       {691, 37416, 691, 37418, 37421, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37479, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37501, 37510, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37521, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37574, 37588, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 37476, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37622, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37647, 37485, 37487, 37491, 37651, 37462, 37664, 37669, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37674, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37687, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37691, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37695, 37705, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37714, 37485, 37487, 37491, 37718, 37737, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37756, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 691, 37759, 37763, 37485, 37487, 37491, 37767, 37776, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37785, 37485, 37793, 37491, 37810, 37838, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37865, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 37476, 37868, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 37476, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37881, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37885, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37889, 37485, 37892, 37491, 37915, 37462, 37931, 37939, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37947, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37950, 37485, 37954, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37971, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37975, 37989, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 38002, 37491, 38016, 38028, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 38039, 37416, 37476, 38041, 37485, 37487, 37491, 38044, 38055, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37416, 0, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {185, 37416, 185, 37418, 38065, 37431, 38074, 37449, 38085, 37462, 38100, 37939, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38107, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38111, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 38117, 38127, 2566, 37495, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38136, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 10794, 37485, 38143, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 38039, 37416, 37476, 10794, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 0, 37485, 38149, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38194, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {2566, 37476, 37416, 37476, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 0, 37485, 38197, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38214, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37418, 0, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38218, 37485, 38225, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
+       {38252, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {37416, 37476, 37416, 37416, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38257, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}},
+       {691, 37416, 691, 691, 38261, 37485, 38265, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38302, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37416, 691, 37416, 38310, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}},
+       {37416, 38039, 37416, 37476, 0, 37485, 0, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38317, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37416, 691, 37418, 38330, 37431, 0, 37491, 37452, 37462, 2566, 37495, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38333, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 0, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37518, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37759, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37416, 37785, 37485, 0, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 38341, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 37421, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37479, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37501, 37510, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38344, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37521, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37574, 37588, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37622, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37647, 37485, 37487, 37491, 37651, 37462, 37664, 37669, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37674, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37687, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37691, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37695, 37705, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37714, 37485, 37487, 37491, 37718, 37737, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37756, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 691, 37759, 37763, 37485, 37487, 37491, 37767, 37776, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37785, 37485, 37793, 37491, 37810, 37838, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37865, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 2, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37525, 37537, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 37476, 37868, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 37476, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37881, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37885, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37889, 37485, 37892, 37491, 37915, 37462, 37931, 37939, 3, 0, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37947, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37950, 37485, 37954, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37971, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37975, 37989, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 38002, 37491, 38016, 38028, 2566, 37495, 9, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 38039, 37416, 37476, 38041, 37485, 37487, 37491, 38044, 38055, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37416, 38358, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {185, 37416, 185, 37418, 38065, 37431, 38074, 37449, 38085, 37462, 38100, 37939, 3, 0, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38107, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38111, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 38365, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 38117, 38127, 2566, 37495, 8, 3, 10, 3, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38136, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 10794, 37485, 38143, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 38039, 37416, 37476, 10794, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 0, 37485, 38149, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38214, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37418, 38370, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38190, 37485, 38225, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 2, 2, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
+       {38252, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38257, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 2, 2, 2, {3, -1}, {3, 0}},
+       {691, 37416, 691, 691, 38261, 37485, 38265, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, 0}, {3, 0}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38190, 37485, 0, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37416, 38302, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37416, 691, 37416, 38310, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 1, {3, 0}, {3, 0}},
+       {691, 37416, 691, 37416, 38317, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 2}},
+       {691, 37416, 691, 37418, 38330, 37431, 0, 37491, 37452, 37462, 2566, 37495, 3, 0, 4, 2, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38333, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37476, 10794, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 2, 2, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37549, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, 0}, {3, 0}},
+       {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37518, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37416, 37785, 37485, 0, 37491, 37452, 37462, 2566, 37495, 5, 1, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 38341, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38376, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37687, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 37416, 38386, 37763, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38254, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 37416, 38386, 37763, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37695, 37705, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37603, 37677, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 38388, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37497, 37485, 0, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37418, 38396, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38403, 37485, 38225, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 0, 1, 2, 2, {3, 2}, {3, 2}},
+       {691, 37416, 691, 37418, 38407, 37431, 37487, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37601, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 15, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37874, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38417, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 0, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 8056, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37476, 37416, 38386, 37763, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38427, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 2, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38430, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38440, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 38386, 0, 37485, 37487, 37491, 37552, 37563, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38445, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38427, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38449, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38459, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37497, 37485, 37487, 37491, 37631, 37639, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38427, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38463, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 10794, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38473, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38478, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 1, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38488, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38473, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38492, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38502, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38507, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38517, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38521, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38529, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 691, 38539, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37497, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38549, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38333, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 9, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38559, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 9, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38569, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 3, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38579, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 0, 0, 1, 0, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37418, 38583, 37431, 37434, 37449, 37452, 37462, 2566, 37471, 3, 2, 0, 0, 3, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38190, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, 2}, {3, 2}},
+       {37416, 691, 37416, 691, 38593, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 14, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 2436, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 12, 2, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38596, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 1, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37601, 37485, 37487, 37491, 37603, 37613, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, 0}},
+       {37416, 691, 37416, 691, 38473, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38427, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38599, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38607, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 38388, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 37518, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 2, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38427, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 691, 38365, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37418, 38396, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37416, 0, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38612, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38612, 37485, 38348, 37491, 37452, 37462, 2566, 37495, 0, 0, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37476, 37549, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 12, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 691, 37416, 691, 38607, 37485, 37487, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, -1}, {3, -1}},
+       {37416, 37476, 37416, 37416, 38358, 37485, 0, 37491, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 2, 2, {3, 0}, {3, 0}},
+       {37416, 37476, 37416, 37418, 38370, 37431, 37487, 37449, 37452, 37462, 2566, 37495, 8, 3, 1, 1, 1, 0, 2, {3, -1}, {3, -1}},
+       {37416, 38039, 37416, 37476, 0, 37485, 0, 37491, 37631, 37639, 2566, 37495, 8, 3, 0, 0, 1, 2, 2, {3, -1}, {3, -1}},
+       {691, 37416, 691, 37416, 38337, 37485, 0, 37491, 37452, 37462, 2566, 37495, 2, 2, 0, 0, 1, 2, 2, {3, -1}, {3, -1}}
 };
 
 
 static const CultureInfoEntry culture_entries [] = {
-       {0x0001, 0x007F, 768, -1, 38641, 38644, 38651, 38666, 38670, 38641, 0, {0, 0, 38674, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0002, 0x007F, 257, -1, 38702, 38705, 38715, 38734, 38738, 38702, 0, {38742, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }},
-       {0x0003, 0x007F, 257, -1, 38784, 38787, 38795, 38803, 38807, 38784, 0, {38811, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0004, 0x0004, 257, -1, 38831, 38838, 38866, 38873, 38877, 38881, 0, {38884, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }},
-       {0x0004, 0x7804, 257, -1, 38891, 38899, 38866, 38873, 38877, 38881, 0, {38884, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }},
-       {0x0005, 0x007F, 257, -1, 38920, 38923, 38929, 38939, 38943, 38920, 0, {38947, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x0006, 0x007F, 257, -1, 38973, 38976, 38983, 38989, 38993, 38973, 0, {38997, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0007, 0x007F, 257, -1, 39018, 39021, 39028, 39036, 39040, 39018, 0, {39044, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0008, 0x007F, 257, -1, 39069, 39072, 39078, 39095, 39099, 39069, 0, {39103, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }},
-       {0x0009, 0x007F, 257, -1, 39145, 39148, 39148, 39156, 39160, 39145, 0, {39164, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x000A, 0x007F, 257, -1, 39183, 39186, 39194, 39203, 39207, 39183, 0, {39211, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }},
-       {0x000B, 0x007F, 257, -1, 39233, 39236, 39244, 39250, 39254, 39233, 0, {39258, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x000C, 0x007F, 257, -1, 39283, 39286, 39293, 39303, 39307, 39283, 0, {39311, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x000D, 0x007F, 257, -1, 39333, 39336, 39343, 39354, 39358, 39333, 0, {39362, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }},
-       {0x000E, 0x007F, 257, -1, 39395, 39398, 39408, 39415, 39419, 39395, 0, {39423, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x000F, 0x007F, 257, -1, 39439, 39442, 39452, 39462, 39466, 39439, 0, {39470, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }},
-       {0x0010, 0x007F, 257, -1, 39490, 39493, 39501, 39510, 39514, 39490, 0, {39518, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }},
-       {0x0011, 0x007F, 257, -1, 39540, 39543, 39552, 39562, 39566, 39540, 0, {39570, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }},
-       {0x0012, 0x007F, 257, -1, 39597, 39600, 39607, 39617, 39621, 39597, 0, {39625, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }},
-       {0x0013, 0x007F, 257, -1, 39635, 39638, 39644, 39655, 39659, 39635, 0, {39663, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0014, 0x007F, 257, -1, 39685, 39688, 39698, 39704, 39708, 39712, 0, {38997, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0015, 0x007F, 257, -1, 39715, 39718, 39725, 39732, 39736, 39715, 0, {39740, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0016, 0x007F, 257, -1, 39764, 39767, 39778, 39789, 39793, 39764, 0, {39797, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0017, 0x007F, 257, -1, 39820, 39823, 39831, 39841, 39845, 39820, 0, {39849, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0018, 0x007F, 257, -1, 39869, 39872, 39881, 39890, 39894, 39869, 0, {39898, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0019, 0x007F, 257, -1, 39917, 39920, 39928, 39943, 39947, 39917, 0, {39951, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x001A, 0x007F, 257, -1, 39997, 40000, 40009, 40018, 40022, 39997, 0, {40026, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }},
-       {0x001B, 0x007F, 257, -1, 12824, 40049, 40056, 40068, 40072, 12824, 0, {40076, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x001C, 0x007F, 257, -1, 40100, 40103, 40112, 40118, 40122, 40100, 0, {40126, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x001D, 0x007F, 257, -1, 40146, 40149, 40157, 40165, 40169, 40146, 0, {38997, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x001E, 0x007F, 512, -1, 40173, 40176, 40181, 40191, 40195, 40173, 0, {0, 40199, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }},
-       {0x001F, 0x007F, 257, -1, 12833, 40230, 40238, 40247, 40251, 12833, 0, {40255, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x0020, 0x007F, 257, -1, 40269, 40272, 40277, 40286, 40290, 40269, 0, {40294, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0021, 0x007F, 257, -1, 40324, 40327, 40338, 40355, 40359, 40324, 0, {40363, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0022, 0x007F, 257, -1, 40382, 40385, 40395, 40416, 40420, 40382, 0, {40424, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }},
-       {0x0023, 0x007F, 257, -1, 40470, 40473, 40484, 40505, 40509, 40470, 0, {40513, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0024, 0x007F, 257, -1, 40555, 40558, 40568, 40582, 40586, 40555, 0, {40590, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0025, 0x007F, 257, -1, 40612, 40615, 40624, 40630, 40634, 40612, 0, {40638, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0026, 0x007F, 257, -1, 40658, 40661, 40669, 40679, 40683, 40658, 0, {40687, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0027, 0x007F, 257, -1, 40706, 40709, 40720, 40730, 40734, 40706, 0, {40738, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0028, 0x007F, 257, -1, 40761, 40764, 40770, 40783, 40787, 40761, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0029, 0x007F, 257, -1, 40791, 40794, 40802, 40813, 40817, 40791, 0, {40821, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x002A, 0x007F, 257, -1, 40845, 40848, 40859, 40874, 35722, 40845, 0, {40878, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }},
-       {0x002B, 0x007F, 257, -1, 40893, 40896, 40905, 40920, 40924, 40893, 0, {40928, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }},
-       {0x002C, 0x007F, 257, -1, 40958, 40961, 40973, 40985, 40989, 40958, 0, {40993, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x002D, 0x007F, 257, -1, 41012, 41015, 41022, 41030, 41034, 41012, 0, {41038, 0, 0, 0}, 45, 45, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x002F, 0x007F, 257, -1, 41058, 41061, 41072, 41093, 41097, 41058, 0, {41101, 0, 0, 0}, 46, 46, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0032, 0x007F, 257, -1, 41145, 41148, 41155, 41164, 41168, 41145, 0, {0, 0, 0, 0}, 47, 47, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0034, 0x007F, 257, -1, 41172, 41175, 41181, 41190, 41194, 41172, 0, {0, 0, 0, 0}, 48, 48, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0035, 0x007F, 257, -1, 41198, 41201, 41206, 41214, 41218, 41198, 0, {41222, 0, 0, 0}, 49, 49, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0036, 0x007F, 257, -1, 41243, 41246, 41246, 41256, 41260, 41243, 0, {41264, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0037, 0x007F, 257, -1, 41284, 41287, 41296, 41318, 41322, 41284, 0, {41326, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, 0, ';' }},
-       {0x0038, 0x007F, 257, -1, 41391, 41394, 41402, 41412, 41416, 41391, 0, {0, 0, 0, 0}, 52, 52, { 1252, 20277, 10079, 850, 0, ';' }},
-       {0x0039, 0x007F, 257, -1, 41420, 41423, 41429, 41445, 41449, 41420, 0, {41453, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, 0, ',' }},
-       {0x003A, 0x007F, 257, -1, 41506, 41509, 41517, 41523, 41527, 41506, 0, {41531, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ',' }},
-       {0x003B, 0x007F, 257, -1, 41552, 41555, 41569, 41586, 41590, 41552, 0, {41594, 0, 0, 0}, 55, 55, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x003C, 0x007F, 257, -1, 41613, 41616, 41622, 41630, 41634, 41613, 0, {41638, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x003E, 0x007F, 257, -1, 41659, 41662, 41668, 41682, 41686, 41659, 0, {41690, 0, 0, 0}, 57, 57, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x003F, 0x007F, 257, -1, 41707, 41710, 41717, 41737, 41741, 41707, 0, {41745, 0, 0, 0}, 58, 58, { 0, 500, 2, 1, 0, ';' }},
-       {0x0040, 0x007F, 257, -1, 41787, 41790, 41797, 41814, 41818, 41787, 0, {41822, 0, 0, 0}, 59, 59, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0041, 0x007F, 257, -1, 41860, 41863, 41871, 41881, 41885, 41860, 0, {41889, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0043, 0x007F, 257, -1, 41910, 41913, 41919, 41930, 41934, 41910, 0, {41938, 0, 0, 0}, 61, 61, { 1254, 500, 10029, 857, 0, ';' }},
-       {0x0045, 0x007F, 257, -1, 41958, 41961, 41969, 41985, 41989, 41958, 0, {41993, 0, 0, 0}, 62, 62, { 0, 500, 2, 1, 0, ',' }},
-       {0x0046, 0x007F, 257, -1, 42058, 42061, 42069, 42088, 42092, 42058, 0, {42096, 0, 0, 0}, 63, 63, { 0, 500, 2, 1, 0, ',' }},
-       {0x0047, 0x007F, 257, -1, 42143, 42146, 42155, 42177, 42181, 42143, 0, {42185, 0, 0, 0}, 64, 64, { 0, 500, 2, 1, 0, ',' }},
-       {0x0048, 0x007F, 257, -1, 42241, 42244, 42250, 42266, 42270, 42241, 0, {0, 0, 0, 0}, 65, 65, { 0, 500, 2, 1, 0, ',' }},
-       {0x0049, 0x007F, 257, -1, 42274, 42277, 42283, 42299, 42303, 42274, 0, {42307, 0, 0, 0}, 66, 66, { 0, 500, 2, 1, 0, ',' }},
-       {0x004A, 0x007F, 257, -1, 42372, 42375, 42382, 42401, 42405, 42372, 0, {42409, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }},
-       {0x004B, 0x007F, 257, -1, 37890, 42474, 42482, 42498, 42502, 37890, 0, {42506, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }},
-       {0x004C, 0x007F, 257, -1, 42571, 42574, 42584, 42603, 42607, 42571, 0, {42611, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }},
-       {0x004D, 0x007F, 257, -1, 42655, 42658, 42667, 42689, 42693, 42655, 0, {42697, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }},
-       {0x004E, 0x007F, 257, -1, 42750, 42753, 42761, 42777, 2530, 42750, 0, {42781, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }},
-       {0x0050, 0x007F, 257, -1, 42843, 42846, 42856, 42869, 42873, 42843, 0, {42877, 0, 0, 0}, 72, 72, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0051, 0x007F, 257, -1, 42909, 42912, 42920, 42945, 42949, 42909, 0, {0, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }},
-       {0x0052, 0x007F, 257, -1, 42953, 42956, 42962, 42970, 42974, 42953, 0, {42978, 0, 0, 0}, 74, 74, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0053, 0x007F, 257, -1, 42994, 42997, 43003, 43019, 43023, 42994, 0, {43027, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }},
-       {0x0054, 0x007F, 257, -1, 43082, 43085, 43089, 43099, 43103, 43082, 0, {43107, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }},
-       {0x0056, 0x007F, 257, -1, 43153, 43156, 43165, 43172, 43176, 43153, 0, {39518, 0, 0, 0}, 77, 77, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0057, 0x007F, 257, -1, 43180, 43184, 43192, 43211, 43180, 43180, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }},
-       {0x005B, 0x007F, 257, -1, 43215, 43218, 43226, 43242, 43246, 43215, 0, {43250, 0, 0, 0}, 79, 79, { 0, 500, 2, 1, 0, ',' }},
-       {0x005E, 0x007F, 257, -1, 8151, 43309, 43317, 43330, 43334, 8151, 0, {43338, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ';' }},
-       {0x005F, 0x007F, 257, -1, 43383, 43387, 43411, 43421, 43383, 43383, 0, {0, 0, 0, 0}, 81, 81, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0061, 0x007F, 257, -1, 1992, 43425, 43432, 43451, 43455, 1992, 0, {43459, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ',' }},
-       {0x0063, 0x007F, 1024, -1, 43509, 43512, 43519, 43528, 43532, 43509, 0, {0, 0, 0, 0}, 83, 83, { 0, 500, 2, 1, 1, ';' }},
-       {0x0064, 0x007F, 257, -1, 43536, 43540, 43540, 43549, 43536, 43536, 0, {43553, 0, 0, 0}, 84, 84, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0068, 0x007F, 257, -1, 43576, 43579, 43579, 43585, 43589, 43576, 0, {0, 0, 0, 0}, 85, 85, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x006A, 0x007F, 257, -1, 43593, 43596, 43603, 43618, 43622, 43593, 0, {0, 0, 0, 0}, 86, 86, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x006C, 0x007F, 257, -1, 43626, 43630, 43645, 43662, 43626, 43626, 0, {0, 0, 0, 0}, 87, 87, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x006F, 0x007F, 257, -1, 43666, 43669, 43681, 43693, 43697, 43666, 0, {43701, 0, 0, 0}, 88, 88, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0070, 0x007F, 257, -1, 43728, 43731, 43731, 43736, 43740, 43728, 0, {0, 0, 0, 0}, 89, 89, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x0078, 0x007F, 257, -1, 43744, 43747, 43758, 43768, 43772, 43744, 0, {43776, 0, 0, 0}, 90, 90, { 0, 500, 2, 1, 0, ',' }},
-       {0x007E, 0x007F, 257, -1, 43789, 43792, 43799, 43809, 43813, 43789, 0, {43817, 0, 0, 0}, 91, 91, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0084, 0x007F, 257, -1, 43837, 43841, 43854, 43873, 43837, 43837, 0, {43877, 0, 0, 0}, 92, 92, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0085, 0x007F, 257, -1, 43902, 43906, 43912, 43930, 43902, 43902, 0, {0, 0, 0, 0}, 93, 93, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0087, 0x007F, 257, -1, 43934, 43937, 43937, 43949, 43953, 43934, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }},
-       {0x0091, 0x007F, 257, -1, 43957, 43960, 43976, 43986, 43990, 43957, 0, {43994, 0, 0, 0}, 95, 95, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0401, 0x0001, 768, 95, 44019, 44025, 44047, 38666, 38670, 38641, 13775, {0, 0, 38674, 0}, 96, 96, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0402, 0x0002, 257, 11, 44111, 44117, 44138, 38734, 38738, 38702, 44176, {38742, 0, 0, 0}, 97, 97, { 1251, 21025, 10007, 866, 0, ';' }},
-       {0x0403, 0x0003, 257, 31, 44179, 44185, 44201, 38803, 38807, 38784, 44219, {38811, 0, 0, 0}, 98, 98, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0404, 0x7C04, 257, 107, 44222, 44228, 44250, 44266, 38877, 38881, 44270, {44273, 0, 0, 0}, 99, 99, { 950, 500, 10002, 950, 0, ',' }},
-       {0x0405, 0x0005, 257, 23, 44280, 44286, 44309, 38939, 38943, 38920, 44339, {38947, 0, 0, 0}, 100, 100, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x0406, 0x0006, 257, 25, 44342, 44348, 44365, 38989, 38993, 38973, 44381, {38997, 0, 0, 0}, 101, 101, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0407, 0x0007, 257, 24, 44384, 44390, 44407, 39036, 39040, 39018, 44429, {39044, 0, 0, 0}, 102, 102, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0408, 0x0008, 257, 39, 44432, 44438, 44453, 39095, 39099, 39069, 44485, {39103, 0, 0, 0}, 103, 103, { 1253, 20273, 10006, 737, 0, ';' }},
-       {0x0409, 0x0009, 257, 109, 44488, 44494, 44494, 39156, 39160, 39145, 44518, {39164, 0, 0, 0}, 104, 104, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x040B, 0x000B, 257, 33, 44521, 44527, 44545, 39250, 39254, 39233, 44559, {39258, 0, 0, 0}, 105, 105, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x040C, 0x000C, 257, 35, 44562, 44568, 44584, 39303, 39307, 39283, 44603, {39311, 0, 0, 0}, 106, 106, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x040D, 0x000D, 257, 47, 44606, 44612, 44628, 39354, 39358, 39333, 44652, {39362, 0, 0, 0}, 107, 107, { 1255, 500, 10005, 862, 1, ',' }},
-       {0x040E, 0x000E, 257, 44, 44655, 44661, 44681, 39415, 39419, 39395, 44704, {39423, 0, 0, 0}, 108, 108, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x040F, 0x000F, 257, 51, 44707, 44713, 44733, 39462, 39466, 39439, 44753, {39470, 0, 0, 0}, 109, 109, { 1252, 20871, 10079, 850, 0, ';' }},
-       {0x0410, 0x0010, 257, 52, 44756, 44762, 44778, 39510, 39514, 39490, 44796, {39518, 0, 0, 0}, 110, 110, { 1252, 20280, 10000, 850, 0, ';' }},
-       {0x0411, 0x0011, 257, 55, 44799, 44805, 44822, 39562, 39566, 39540, 44841, {39570, 0, 0, 0}, 111, 111, { 932, 20290, 10001, 932, 0, ',' }},
-       {0x0412, 0x0012, 257, 58, 44844, 44850, 44871, 39617, 39621, 39597, 44896, {39625, 0, 0, 0}, 112, 112, { 949, 20833, 10003, 949, 0, ',' }},
-       {0x0413, 0x0013, 257, 77, 44899, 44905, 44925, 39655, 39659, 39635, 44948, {39663, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0414, 0x7C14, 257, 78, 44951, 44957, 44984, 39704, 39708, 39712, 45006, {38997, 0, 0, 0}, 114, 114, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0415, 0x0015, 257, 86, 45009, 45015, 45031, 39732, 39736, 39715, 45047, {39740, 0, 0, 0}, 115, 115, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0416, 0x0016, 257, 14, 45050, 45056, 45076, 39789, 39793, 39764, 45096, {39797, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0417, 0x0017, 257, 18, 45099, 45105, 45127, 39841, 39845, 39820, 13778, {39849, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0418, 0x0018, 257, 91, 45146, 45152, 45171, 39890, 39894, 39869, 45191, {39898, 0, 0, 0}, 118, 118, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0419, 0x0019, 257, 93, 45194, 45200, 45217, 39943, 39947, 39917, 45247, {39951, 0, 0, 0}, 119, 119, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x041A, 0x001A, 257, 43, 45250, 45256, 45275, 40018, 40022, 39997, 45295, {40026, 0, 0, 0}, 120, 120, { 1250, 500, 10082, 852, 0, ';' }},
-       {0x041B, 0x001B, 257, 99, 45298, 45304, 45322, 40068, 40072, 12824, 45346, {40076, 0, 0, 0}, 121, 121, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x041C, 0x001C, 257, 2, 45349, 45355, 45374, 40118, 40122, 40100, 45392, {40126, 0, 0, 0}, 122, 122, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x041D, 0x001D, 257, 96, 45395, 45401, 45418, 40165, 40169, 40146, 45436, {38997, 0, 0, 0}, 123, 123, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x041E, 0x001E, 512, 102, 45439, 45445, 45461, 40191, 40195, 40173, 45483, {0, 40199, 0, 0}, 124, 124, { 874, 20838, 10021, 874, 0, ',' }},
-       {0x041F, 0x001F, 257, 105, 45486, 45492, 45509, 40247, 40251, 12833, 45529, {40255, 0, 0, 0}, 125, 125, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x0420, 0x0020, 257, 85, 45532, 45538, 45554, 40286, 40290, 40269, 45580, {40294, 0, 0, 0}, 126, 126, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0421, 0x0021, 257, 45, 45583, 45589, 45612, 40355, 40359, 40324, 45641, {40363, 0, 0, 0}, 127, 127, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0422, 0x0022, 257, 108, 45644, 45650, 45670, 40416, 40420, 40382, 45708, {40424, 0, 0, 0}, 128, 128, { 1251, 500, 10017, 866, 0, ';' }},
-       {0x0423, 0x0023, 257, 15, 45711, 45717, 45738, 40505, 40509, 40470, 45778, {40513, 0, 0, 0}, 129, 129, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0424, 0x0024, 257, 98, 45781, 45787, 45808, 40582, 40586, 40555, 45834, {40590, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }},
-       {0x0425, 0x0025, 257, 29, 45837, 45843, 45862, 40630, 40634, 40612, 45876, {40638, 0, 0, 0}, 131, 131, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0426, 0x0026, 257, 66, 45879, 45885, 45902, 40679, 40683, 40658, 45922, {40687, 0, 0, 0}, 132, 132, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0427, 0x0027, 257, 64, 45925, 45931, 45954, 40730, 40734, 40706, 45974, {40738, 0, 0, 0}, 133, 133, { 1257, 500, 10029, 775, 0, ';' }},
-       {0x0428, 0x7C28, 257, 103, 45977, 45988, 46017, 40783, 40787, 40761, 46053, {0, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0429, 0x0029, 257, 50, 46056, 46062, 46077, 40813, 40817, 40791, 46101, {40821, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x042A, 0x002A, 257, 113, 46104, 46110, 46131, 40874, 35722, 40845, 46159, {40878, 0, 0, 0}, 136, 136, { 1258, 500, 10000, 1258, 0, ',' }},
-       {0x042B, 0x002B, 257, 3, 46162, 46168, 46187, 40920, 40924, 40893, 1929, {40928, 0, 0, 0}, 137, 137, { 0, 500, 2, 1, 0, ',' }},
-       {0x042C, 0x782C, 257, 7, 46221, 46232, 46264, 40985, 40989, 40958, 46290, {40993, 0, 0, 0}, 138, 138, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x042D, 0x002D, 257, 31, 46293, 46299, 46314, 41030, 41034, 41012, 44219, {41038, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x042F, 0x002F, 257, 71, 46333, 46339, 46362, 41093, 41097, 41058, 46406, {41101, 0, 0, 0}, 140, 140, { 1251, 500, 10007, 866, 0, ';' }},
-       {0x0432, 0x0032, 257, 115, 46409, 46415, 41155, 41164, 41168, 41145, 46437, {0, 0, 0, 0}, 141, 141, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0434, 0x0034, 257, 115, 46440, 46446, 41181, 41190, 41194, 41172, 46437, {0, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0435, 0x0035, 257, 115, 46467, 46473, 46493, 41214, 41218, 41198, 46437, {41222, 0, 0, 0}, 143, 143, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0436, 0x0036, 257, 115, 46518, 46524, 46549, 41256, 41260, 41243, 46437, {41264, 0, 0, 0}, 144, 144, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0437, 0x0037, 257, 37, 46573, 46579, 46598, 41318, 41322, 41284, 46653, {41326, 0, 0, 0}, 145, 145, { 0, 500, 2, 1, 0, ';' }},
-       {0x0438, 0x0038, 257, 34, 46656, 46662, 46686, 41412, 41416, 41391, 46707, {0, 0, 0, 0}, 146, 146, { 1252, 20277, 10079, 850, 0, ';' }},
-       {0x0439, 0x0039, 257, 48, 46710, 46716, 46730, 41445, 41449, 41420, 46761, {41453, 0, 0, 0}, 147, 147, { 0, 500, 2, 1, 0, ',' }},
-       {0x043A, 0x003A, 257, 73, 46764, 46770, 46786, 41523, 41527, 41506, 46800, {41531, 0, 0, 0}, 148, 148, { 0, 500, 2, 1, 0, ',' }},
-       {0x043B, 0x003B, 257, 78, 46803, 46809, 46832, 41586, 41590, 41552, 45006, {41594, 0, 0, 0}, 149, 149, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0441, 0x0041, 257, 56, 46857, 46863, 46879, 41881, 41885, 41860, 46897, {41889, 0, 0, 0}, 150, 150, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0443, 0x7C43, 257, 111, 46900, 46911, 46937, 41930, 41934, 41910, 46963, {41938, 0, 0, 0}, 151, 151, { 1254, 500, 10029, 857, 0, ';' }},
-       {0x0445, 0x0045, 257, 48, 46966, 46972, 46988, 41985, 41989, 41958, 46761, {41993, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }},
-       {0x0447, 0x0047, 257, 48, 47019, 47025, 47042, 42177, 42181, 42143, 46761, {42185, 0, 0, 0}, 153, 153, { 0, 500, 2, 1, 0, ',' }},
-       {0x0448, 0x0048, 257, 48, 47079, 47085, 47099, 42266, 42270, 42241, 46761, {0, 0, 0, 0}, 154, 154, { 0, 500, 2, 1, 0, ',' }},
-       {0x0449, 0x0049, 257, 48, 47130, 47136, 47150, 42299, 42303, 42274, 46761, {42307, 0, 0, 0}, 155, 155, { 0, 500, 2, 1, 0, ',' }},
-       {0x044A, 0x004A, 257, 48, 47190, 47196, 47211, 42401, 42405, 42372, 46761, {42409, 0, 0, 0}, 156, 156, { 0, 500, 2, 1, 0, ',' }},
-       {0x044B, 0x004B, 257, 48, 47258, 47264, 47280, 42498, 42502, 37890, 46761, {42506, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ',' }},
-       {0x044C, 0x004C, 257, 48, 47311, 47317, 47335, 42603, 42607, 42571, 46761, {42611, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ',' }},
-       {0x044D, 0x004D, 257, 48, 47375, 47381, 47398, 42689, 42693, 42655, 46761, {42697, 0, 0, 0}, 159, 159, { 0, 500, 2, 1, 0, ',' }},
-       {0x044E, 0x004E, 257, 48, 47435, 47441, 47457, 42777, 2530, 42750, 46761, {42781, 0, 0, 0}, 160, 160, { 0, 500, 2, 1, 0, ',' }},
-       {0x0451, 0x0051, 257, 20, 47488, 47494, 47510, 42945, 42949, 42909, 13857, {0, 0, 0, 0}, 161, 161, { 0, 500, 2, 1, 0, ',' }},
-       {0x0452, 0x0052, 257, 36, 47556, 47562, 47585, 42970, 42974, 42953, 47612, {42978, 0, 0, 0}, 162, 162, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0453, 0x0053, 257, 57, 47615, 47621, 47638, 43019, 43023, 42994, 47678, {43027, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ',' }},
-       {0x0454, 0x0054, 257, 60, 47681, 47687, 47698, 43099, 43103, 43082, 47720, {43107, 0, 0, 0}, 164, 164, { 0, 500, 2, 1, 0, ',' }},
-       {0x0456, 0x0056, 257, 31, 47723, 47729, 47746, 43172, 43176, 43153, 44219, {39518, 0, 0, 0}, 165, 165, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0457, 0x0057, 257, 48, 47763, 47770, 47786, 43211, 43180, 43180, 46761, {0, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ',' }},
-       {0x045B, 0x005B, 257, 63, 47820, 47826, 47846, 43242, 43246, 43215, 47896, {43250, 0, 0, 0}, 167, 167, { 0, 500, 2, 1, 0, ',' }},
-       {0x045E, 0x005E, 257, 32, 47899, 47905, 47924, 43330, 43334, 8151, 47955, {43338, 0, 0, 0}, 168, 168, { 0, 500, 2, 1, 0, ';' }},
-       {0x0461, 0x0061, 257, 79, 47958, 47964, 47979, 43451, 43455, 1992, 48016, {43459, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ',' }},
-       {0x0463, 0x0063, 1024, 1, 48019, 48025, 48046, 43528, 43532, 43509, 48076, {0, 0, 0, 0}, 170, 170, { 0, 500, 2, 1, 1, ';' }},
-       {0x0464, 0x0064, 257, 84, 48079, 48086, 48109, 43549, 43536, 43536, 48130, {43553, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x0468, 0x7C68, 257, 75, 48133, 48144, 48167, 43585, 43589, 43576, 48184, {0, 0, 0, 0}, 172, 172, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x046A, 0x006A, 257, 75, 48187, 48193, 48210, 43618, 43622, 43593, 48184, {0, 0, 0, 0}, 173, 173, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x046C, 0x006C, 257, 115, 48256, 48263, 43645, 43662, 43626, 43626, 46437, {0, 0, 0, 0}, 174, 174, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x046F, 0x006F, 257, 38, 48293, 48299, 48323, 43693, 43697, 43666, 48354, {43701, 0, 0, 0}, 175, 175, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0470, 0x0070, 257, 75, 48357, 48363, 48363, 43736, 43740, 43728, 48184, {0, 0, 0, 0}, 176, 176, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x0478, 0x0078, 257, 20, 48378, 48384, 48403, 43768, 43772, 43744, 13857, {43776, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }},
-       {0x047E, 0x007E, 257, 35, 48422, 48428, 48444, 43809, 43813, 43789, 44603, {43817, 0, 0, 0}, 178, 178, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0485, 0x0085, 257, 93, 48463, 48470, 43912, 43930, 43902, 43902, 45247, {0, 0, 0, 0}, 179, 179, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0487, 0x0087, 257, 94, 48485, 48491, 48491, 43949, 43953, 43934, 48512, {0, 0, 0, 0}, 180, 180, { 1252, 37, 10000, 437, 0, ';' }},
-       {0x0491, 0x0091, 257, 36, 48515, 48521, 48554, 43986, 43990, 43957, 47612, {43994, 0, 0, 0}, 181, 181, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x0801, 0x0001, 257, 49, 48590, 48596, 48610, 48640, 38670, 38641, 48644, {48647, 0, 0, 0}, 182, 182, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0804, 0x0004, 257, 20, 48679, 38899, 48685, 38873, 38877, 38881, 13857, {38884, 0, 0, 0}, 183, 183, { 936, 500, 10008, 936, 0, ',' }},
-       {0x0807, 0x0007, 257, 18, 48701, 48707, 48728, 48746, 39040, 39018, 13778, {39044, 0, 0, 0}, 184, 184, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0809, 0x0009, 257, 36, 48750, 48756, 48756, 48781, 39160, 39145, 47612, {39164, 0, 0, 0}, 185, 185, { 1252, 20285, 10000, 850, 0, ',' }},
-       {0x080A, 0x000A, 257, 74, 48785, 48791, 48808, 48827, 39207, 39183, 48831, {39518, 0, 0, 0}, 186, 186, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x080C, 0x000C, 257, 10, 48834, 48840, 48857, 48878, 39307, 39283, 48882, {39311, 0, 0, 0}, 187, 187, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0810, 0x0010, 257, 18, 48885, 48891, 48913, 48933, 39514, 39490, 13778, {39518, 0, 0, 0}, 188, 188, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0813, 0x0013, 257, 10, 48937, 48943, 48959, 48980, 39659, 39635, 48882, {39663, 0, 0, 0}, 189, 189, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x0814, 0x7814, 257, 78, 48984, 48990, 49017, 49033, 49037, 49041, 45006, {38997, 0, 0, 0}, 190, 190, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x0816, 0x0016, 257, 88, 49044, 49050, 49072, 49094, 39793, 39764, 49098, {39797, 0, 0, 0}, 191, 191, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x081D, 0x001D, 257, 33, 49101, 49107, 49125, 49143, 40169, 40146, 44559, {38997, 0, 0, 0}, 192, 192, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x082C, 0x742C, 257, 7, 49147, 49158, 46264, 49193, 40989, 40958, 46290, {40993, 0, 0, 0}, 193, 193, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x083C, 0x003C, 257, 46, 49197, 49203, 49219, 41630, 41634, 41613, 49235, {41638, 0, 0, 0}, 194, 194, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0843, 0x7843, 257, 111, 49238, 49249, 46937, 41930, 41934, 41910, 46963, {49278, 0, 0, 0}, 195, 195, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x0845, 0x0045, 257, 9, 49316, 49322, 49343, 49386, 41989, 41958, 49390, {41993, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 0, ',' }},
-       {0x0C01, 0x0001, 257, 30, 49393, 49399, 49414, 49438, 38670, 38641, 49442, {48647, 0, 0, 0}, 197, 197, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x0C04, 0x7C04, 257, 41, 49445, 49451, 49494, 49531, 38877, 38881, 49535, {44273, 0, 0, 0}, 198, 198, { 950, 500, 10002, 950, 0, ',' }},
-       {0x0C07, 0x0007, 257, 5, 49538, 49544, 49561, 49583, 39040, 39018, 49587, {39044, 0, 0, 0}, 199, 199, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x0C09, 0x0009, 257, 6, 49590, 49596, 49596, 49616, 39160, 39145, 49620, {39164, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x0C0A, 0x000A, 257, 31, 49623, 49629, 49645, 49664, 39207, 39183, 44219, {39211, 0, 0, 0}, 201, 201, { 1252, 20284, 10000, 850, 0, ';' }},
-       {0x0C0C, 0x000C, 257, 17, 49668, 49674, 49690, 49709, 39307, 39283, 49713, {49716, 0, 0, 0}, 202, 202, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x0C3B, 0x003B, 257, 33, 49738, 49744, 49768, 49794, 49798, 41552, 44559, {41594, 0, 0, 0}, 203, 203, { 1252, 20278, 10000, 850, 0, ';' }},
-       {0x1001, 0x0001, 257, 67, 49802, 49808, 49823, 49851, 38670, 38641, 49855, {48647, 0, 0, 0}, 204, 204, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1004, 0x0004, 257, 97, 49858, 49864, 49896, 49915, 38877, 38881, 49919, {38884, 0, 0, 0}, 205, 205, { 936, 500, 10008, 936, 0, ',' }},
-       {0x1007, 0x0007, 257, 65, 49922, 49928, 49948, 49968, 39040, 39018, 49972, {39044, 0, 0, 0}, 206, 206, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x1009, 0x0009, 257, 17, 49975, 49981, 49981, 49998, 39160, 39145, 49713, {39164, 0, 0, 0}, 207, 207, { 1252, 37, 10000, 850, 0, ',' }},
-       {0x100A, 0x000A, 257, 40, 50002, 50008, 50028, 50049, 39207, 39183, 50053, {39211, 0, 0, 0}, 208, 208, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x100C, 0x000C, 257, 18, 50056, 50062, 50083, 50102, 39307, 39283, 13778, {39311, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x101A, 0x001A, 257, 8, 50106, 50112, 50146, 50177, 50181, 39997, 50185, {40026, 0, 0, 0}, 210, 210, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x1401, 0x0001, 257, 27, 50188, 50194, 50211, 50243, 38670, 38641, 50247, {48647, 0, 0, 0}, 211, 211, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1404, 0x7C04, 257, 72, 50250, 50256, 50295, 50332, 38877, 38881, 50336, {44273, 0, 0, 0}, 212, 212, { 950, 500, 10002, 950, 0, ',' }},
-       {0x1407, 0x0007, 257, 62, 50339, 50345, 50368, 50392, 39040, 39018, 50396, {39044, 0, 0, 0}, 213, 213, { 1252, 20273, 10000, 850, 0, ';' }},
-       {0x1409, 0x0009, 257, 80, 50399, 50405, 50405, 50427, 39160, 39145, 50431, {39164, 0, 0, 0}, 214, 214, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x140A, 0x000A, 257, 22, 50434, 50440, 50461, 50483, 39207, 39183, 50487, {39211, 0, 0, 0}, 215, 215, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x140C, 0x000C, 257, 65, 50490, 50496, 50516, 50539, 39307, 39283, 49972, {39311, 0, 0, 0}, 216, 216, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x141A, 0x681A, 257, 8, 50543, 50554, 50594, 50625, 50629, 50633, 50185, {50636, 0, 0, 0}, 217, 217, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x1801, 0x0001, 257, 68, 50659, 50665, 50682, 50712, 38670, 38641, 50716, {48647, 0, 0, 0}, 218, 218, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1809, 0x0009, 257, 46, 50719, 50725, 50725, 50743, 39160, 39145, 49235, {39164, 0, 0, 0}, 219, 219, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x180A, 0x000A, 257, 82, 50747, 50753, 50770, 50789, 39207, 39183, 50793, {39211, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x180C, 0x000C, 257, 69, 50796, 50802, 50818, 50837, 39307, 39283, 50841, {39311, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x181A, 0x701A, 257, 8, 50844, 50855, 50895, 50947, 50951, 50955, 50185, {50636, 0, 0, 0}, 222, 222, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x1C01, 0x0001, 257, 104, 50958, 50964, 50981, 51007, 38670, 38641, 51011, {48647, 0, 0, 0}, 223, 223, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x1C09, 0x0009, 257, 115, 51014, 51020, 51020, 51043, 39160, 39145, 46437, {39164, 0, 0, 0}, 224, 224, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x1C0A, 0x000A, 257, 26, 51047, 51053, 51082, 51115, 39207, 39183, 51119, {39211, 0, 0, 0}, 225, 225, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x1C1A, 0x6C1A, 257, 8, 51122, 51133, 50895, 51176, 51180, 50955, 50185, {41101, 0, 0, 0}, 226, 226, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x2001, 0x0001, 257, 81, 51184, 51190, 51204, 51232, 38670, 38641, 51236, {48647, 0, 0, 0}, 227, 227, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x2009, 0x0009, 257, 53, 51239, 51245, 51245, 51263, 39160, 39145, 51267, {39164, 0, 0, 0}, 228, 228, { 1252, 500, 10000, 850, 0, ',' }},
-       {0x200A, 0x000A, 257, 112, 51270, 51276, 51296, 51317, 39207, 39183, 51321, {39211, 0, 0, 0}, 229, 229, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x201A, 0x641A, 257, 8, 51324, 51335, 50594, 51378, 51382, 50633, 50185, {41101, 0, 0, 0}, 230, 230, { 1251, 870, 10082, 855, 0, ';' }},
-       {0x2401, 0x0001, 257, 114, 51386, 51392, 51407, 51435, 38670, 38641, 51439, {48647, 0, 0, 0}, 231, 231, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x240A, 0x000A, 257, 21, 51442, 51448, 51467, 51487, 39207, 39183, 51491, {39211, 0, 0, 0}, 232, 232, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x241A, 0x701A, 257, 92, 51494, 51505, 51529, 51557, 2239, 50955, 51561, {50636, 0, 0, 0}, 233, 233, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x2801, 0x0001, 257, 101, 51564, 51570, 51585, 51613, 38670, 38641, 51617, {48647, 0, 0, 0}, 234, 234, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x2809, 0x0009, 257, 16, 51620, 51626, 51626, 51643, 39160, 39145, 51647, {39164, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x280A, 0x000A, 257, 83, 51650, 51656, 51671, 51688, 39207, 39183, 51692, {39211, 0, 0, 0}, 236, 236, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x281A, 0x6C1A, 257, 92, 51695, 51706, 51529, 51733, 2239, 50955, 51561, {41101, 0, 0, 0}, 237, 237, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x2C01, 0x0001, 257, 54, 51737, 51743, 51759, 51789, 38670, 38641, 51793, {48647, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x2C09, 0x0009, 257, 106, 51796, 51802, 51802, 51832, 39160, 39145, 51836, {39164, 0, 0, 0}, 239, 239, { 1252, 500, 10000, 850, 0, ';' }},
-       {0x2C0A, 0x000A, 257, 4, 51839, 51845, 51865, 51886, 39207, 39183, 51890, {39211, 0, 0, 0}, 240, 240, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x2C1A, 0x701A, 257, 70, 51893, 51904, 51932, 51965, 2239, 50955, 51969, {50636, 0, 0, 0}, 241, 241, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x3001, 0x0001, 257, 61, 51972, 51978, 51995, 52023, 38670, 38641, 52027, {48647, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x3009, 0x0009, 257, 116, 52030, 52036, 52036, 52055, 39160, 39145, 52059, {39164, 0, 0, 0}, 243, 243, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x300A, 0x000A, 257, 28, 52062, 52068, 52086, 52105, 39207, 39183, 52109, {39211, 0, 0, 0}, 244, 244, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x301A, 0x6C1A, 257, 70, 52112, 52123, 51932, 52154, 2239, 50955, 51969, {41101, 0, 0, 0}, 245, 245, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x3401, 0x0001, 257, 59, 52158, 52164, 52180, 52210, 38670, 38641, 52214, {48647, 0, 0, 0}, 246, 246, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x3409, 0x0009, 257, 84, 52217, 52223, 52223, 52245, 39160, 39145, 48130, {39164, 0, 0, 0}, 247, 247, { 1252, 500, 10000, 437, 0, ',' }},
-       {0x340A, 0x000A, 257, 19, 52249, 52255, 52271, 52288, 39207, 39183, 52292, {39211, 0, 0, 0}, 248, 248, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x3801, 0x0001, 257, 0, 52295, 52301, 52331, 52395, 38670, 38641, 52399, {48647, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x380A, 0x000A, 257, 110, 52402, 52408, 52426, 52445, 39207, 39183, 52449, {39211, 0, 0, 0}, 250, 250, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x3C01, 0x0001, 257, 12, 52452, 52458, 52475, 52507, 38670, 38641, 52511, {48647, 0, 0, 0}, 251, 251, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x3C0A, 0x000A, 257, 89, 52514, 52520, 52539, 52559, 39207, 39183, 52563, {39211, 0, 0, 0}, 252, 252, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x4001, 0x0001, 257, 90, 52566, 52572, 52587, 52611, 38670, 38641, 52615, {48647, 0, 0, 0}, 253, 253, { 1256, 20420, 10004, 720, 1, ';' }},
-       {0x4009, 0x0009, 257, 48, 52618, 52624, 52624, 52640, 39160, 39145, 46761, {39164, 0, 0, 0}, 254, 254, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x400A, 0x000A, 257, 13, 52644, 52650, 52668, 52687, 39207, 39183, 52691, {39211, 0, 0, 0}, 255, 255, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x440A, 0x000A, 257, 100, 52694, 52700, 52722, 52745, 39207, 39183, 52749, {39211, 0, 0, 0}, 256, 256, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x4809, 0x0009, 257, 97, 52752, 52758, 52758, 52778, 39160, 39145, 49919, {39164, 0, 0, 0}, 257, 257, { 1252, 37, 10000, 437, 0, ',' }},
-       {0x480A, 0x000A, 257, 42, 52782, 52788, 52807, 52827, 39207, 39183, 52831, {39211, 0, 0, 0}, 258, 258, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x4C0A, 0x000A, 257, 76, 52834, 52840, 52860, 52881, 39207, 39183, 52885, {39211, 0, 0, 0}, 259, 259, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x500A, 0x000A, 257, 87, 52888, 52894, 52916, 52939, 39207, 39183, 52943, {39211, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x540A, 0x000A, 257, 109, 52946, 52952, 52976, 53002, 39207, 39183, 44518, {39211, 0, 0, 0}, 261, 261, { 1252, 20284, 10000, 850, 0, ',' }},
-       {0x641A, 0x781A, 257, -1, 53006, 53014, 53033, 51378, 51382, 50633, 0, {41101, 0, 0, 0}, 262, 262, { 1251, 870, 10082, 855, 0, ';' }},
-       {0x681A, 0x781A, 257, -1, 53042, 53050, 53033, 50625, 50629, 50633, 0, {50636, 0, 0, 0}, 263, 263, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x6C1A, 0x7C1A, 257, -1, 53066, 53074, 53093, 51733, 2239, 50955, 0, {41101, 0, 0, 0}, 264, 264, { 1251, 21025, 10007, 855, 0, ';' }},
-       {0x701A, 0x7C1A, 257, -1, 53106, 53114, 53093, 51557, 2239, 50955, 0, {50636, 0, 0, 0}, 265, 265, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x742C, 0x002C, 257, -1, 53130, 53138, 40973, 49193, 40989, 40958, 0, {40993, 0, 0, 0}, 266, 266, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7804, 0x007F, 257, -1, 38881, 38899, 38866, 38873, 38877, 38881, 0, {38884, 0, 0, 0}, 267, 267, { 936, 500, 10008, 936, 0, ',' }},
-       {0x7814, 0x0014, 257, -1, 49041, 53161, 53179, 49033, 49037, 49041, 0, {38997, 0, 0, 0}, 268, 268, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x781A, 0x007F, 257, -1, 50633, 53187, 53033, 50625, 50629, 50633, 0, {50636, 0, 0, 0}, 269, 269, { 1250, 870, 10082, 852, 0, ';' }},
-       {0x782C, 0x002C, 257, -1, 53195, 53203, 40973, 40985, 40989, 40958, 0, {40993, 0, 0, 0}, 270, 270, { 1254, 20905, 10081, 857, 0, ';' }},
-       {0x7843, 0x0043, 257, -1, 53223, 53231, 41919, 41930, 41934, 41910, 0, {49278, 0, 0, 0}, 271, 271, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7850, 0x0050, 257, -1, 53248, 53256, 42856, 53277, 42873, 42843, 0, {42877, 0, 0, 0}, 272, 272, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7C04, 0x7804, 257, -1, 53281, 44228, 38866, 44266, 38877, 38881, 0, {44273, 0, 0, 0}, 273, 273, { 950, 500, 10002, 950, 0, ',' }},
-       {0x7C04, 0x7C04, 257, -1, 53289, 53296, 38866, 44266, 38877, 38881, 0, {44273, 0, 0, 0}, 274, 274, { 950, 500, 10002, 950, 0, ',' }},
-       {0x7C14, 0x0014, 257, -1, 39712, 53325, 53343, 39704, 39708, 39712, 0, {38997, 0, 0, 0}, 275, 275, { 1252, 20277, 10000, 850, 0, ';' }},
-       {0x7C1A, 0x007F, 257, -1, 50955, 53357, 53093, 53365, 2239, 50955, 0, {41101, 0, 0, 0}, 276, 276, { 1250, 500, 10029, 852, 0, ';' }},
-       {0x7C28, 0x0028, 257, -1, 53369, 53377, 40770, 40783, 40787, 40761, 0, {0, 0, 0, 0}, 277, 277, { 1251, 20880, 10007, 866, 0, ';' }},
-       {0x7C43, 0x0043, 257, -1, 53394, 53402, 41919, 41930, 41934, 41910, 0, {41938, 0, 0, 0}, 278, 278, { 1254, 500, 10029, 857, 0, ';' }},
-       {0x7C5F, 0x005F, 257, -1, 53416, 53425, 43411, 43421, 43383, 43383, 0, {0, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }},
-       {0x7C68, 0x0068, 257, -1, 53457, 53465, 43579, 43585, 43589, 43576, 0, {0, 0, 0, 0}, 280, 280, { 1252, 37, 10000, 437, 0, ',' }}
+       {0x0001, 0x007F, 768, -1, 38616, 38619, 38626, 38641, 38645, 38616, 0, {0, 0, 38649, 0}, 0, 0, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0002, 0x007F, 257, -1, 38677, 38680, 38690, 38709, 38713, 38677, 0, {38717, 0, 0, 0}, 1, 1, { 1251, 21025, 10007, 866, 0, ';' }},
+       {0x0003, 0x007F, 257, -1, 38759, 38762, 38770, 38778, 38782, 38759, 0, {38786, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0004, 0x0004, 257, -1, 38806, 38813, 38841, 38848, 38852, 38856, 0, {38859, 0, 0, 0}, 3, 3, { 936, 500, 10008, 936, 0, ',' }},
+       {0x0004, 0x7804, 257, -1, 38866, 38874, 38841, 38848, 38852, 38856, 0, {38859, 0, 0, 0}, 4, 4, { 936, 500, 10008, 936, 0, ',' }},
+       {0x0005, 0x007F, 257, -1, 38895, 38898, 38904, 38914, 38918, 38895, 0, {38922, 0, 0, 0}, 5, 5, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x0006, 0x007F, 257, -1, 38948, 38951, 38958, 38964, 38968, 38948, 0, {38972, 0, 0, 0}, 6, 6, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0007, 0x007F, 257, -1, 38993, 38996, 39003, 39011, 39015, 38993, 0, {39019, 0, 0, 0}, 7, 7, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0008, 0x007F, 257, -1, 39044, 39047, 39053, 39070, 39074, 39044, 0, {39078, 0, 0, 0}, 8, 8, { 1253, 20273, 10006, 737, 0, ';' }},
+       {0x0009, 0x007F, 257, -1, 39120, 39123, 39123, 39131, 39135, 39120, 0, {39139, 0, 0, 0}, 9, 9, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x000A, 0x007F, 257, -1, 39158, 39161, 39169, 39178, 39182, 39158, 0, {39186, 0, 0, 0}, 10, 10, { 1252, 20284, 10000, 850, 0, ';' }},
+       {0x000B, 0x007F, 257, -1, 39208, 39211, 39219, 39225, 39229, 39208, 0, {39233, 0, 0, 0}, 11, 11, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x000C, 0x007F, 257, -1, 39258, 39261, 39268, 39278, 39282, 39258, 0, {39286, 0, 0, 0}, 12, 12, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x000D, 0x007F, 257, -1, 39308, 39311, 39318, 39329, 39333, 39308, 0, {39337, 0, 0, 0}, 13, 13, { 1255, 500, 10005, 862, 1, ',' }},
+       {0x000E, 0x007F, 257, -1, 39370, 39373, 39383, 39390, 39394, 39370, 0, {39398, 0, 0, 0}, 14, 14, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x000F, 0x007F, 257, -1, 39414, 39417, 39427, 39437, 39441, 39414, 0, {39445, 0, 0, 0}, 15, 15, { 1252, 20871, 10079, 850, 0, ';' }},
+       {0x0010, 0x007F, 257, -1, 39465, 39468, 39476, 39485, 39489, 39465, 0, {39493, 0, 0, 0}, 16, 16, { 1252, 20280, 10000, 850, 0, ';' }},
+       {0x0011, 0x007F, 257, -1, 39515, 39518, 39527, 39537, 39541, 39515, 0, {39545, 0, 0, 0}, 17, 17, { 932, 20290, 10001, 932, 0, ',' }},
+       {0x0012, 0x007F, 257, -1, 39572, 39575, 39582, 39592, 39596, 39572, 0, {39600, 0, 0, 0}, 18, 18, { 949, 20833, 10003, 949, 0, ',' }},
+       {0x0013, 0x007F, 257, -1, 39610, 39613, 39619, 39630, 39634, 39610, 0, {39638, 0, 0, 0}, 19, 19, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0014, 0x007F, 257, -1, 39660, 39663, 39673, 39679, 39683, 39687, 0, {38972, 0, 0, 0}, 20, 20, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0015, 0x007F, 257, -1, 39690, 39693, 39700, 39707, 39711, 39690, 0, {39715, 0, 0, 0}, 21, 21, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0016, 0x007F, 257, -1, 39739, 39742, 39753, 39764, 39768, 39739, 0, {39772, 0, 0, 0}, 22, 22, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0017, 0x007F, 257, -1, 39795, 39798, 39806, 39816, 39820, 39795, 0, {39824, 0, 0, 0}, 23, 23, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0018, 0x007F, 257, -1, 39844, 39847, 39856, 39865, 39869, 39844, 0, {39873, 0, 0, 0}, 24, 24, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0019, 0x007F, 257, -1, 39892, 39895, 39903, 39918, 39922, 39892, 0, {39926, 0, 0, 0}, 25, 25, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x001A, 0x007F, 257, -1, 39972, 39975, 39984, 39993, 39997, 39972, 0, {40001, 0, 0, 0}, 26, 26, { 1250, 500, 10082, 852, 0, ';' }},
+       {0x001B, 0x007F, 257, -1, 12799, 40024, 40031, 40043, 40047, 12799, 0, {40051, 0, 0, 0}, 27, 27, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x001C, 0x007F, 257, -1, 40075, 40078, 40087, 40093, 40097, 40075, 0, {40101, 0, 0, 0}, 28, 28, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x001D, 0x007F, 257, -1, 40121, 40124, 40132, 40140, 40144, 40121, 0, {38972, 0, 0, 0}, 29, 29, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x001E, 0x007F, 512, -1, 40148, 40151, 40156, 40166, 40170, 40148, 0, {0, 40174, 0, 0}, 30, 30, { 874, 20838, 10021, 874, 0, ',' }},
+       {0x001F, 0x007F, 257, -1, 12808, 40205, 40213, 40222, 40226, 12808, 0, {40230, 0, 0, 0}, 31, 31, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x0020, 0x007F, 257, -1, 40244, 40247, 40252, 40261, 40265, 40244, 0, {40269, 0, 0, 0}, 32, 32, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0021, 0x007F, 257, -1, 40299, 40302, 40313, 40330, 40334, 40299, 0, {40338, 0, 0, 0}, 33, 33, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0022, 0x007F, 257, -1, 40357, 40360, 40370, 40391, 40395, 40357, 0, {40399, 0, 0, 0}, 34, 34, { 1251, 500, 10017, 866, 0, ';' }},
+       {0x0023, 0x007F, 257, -1, 40445, 40448, 40459, 40480, 40484, 40445, 0, {40488, 0, 0, 0}, 35, 35, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0024, 0x007F, 257, -1, 40530, 40533, 40543, 40557, 40561, 40530, 0, {40565, 0, 0, 0}, 36, 36, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0025, 0x007F, 257, -1, 40587, 40590, 40599, 40605, 40609, 40587, 0, {40613, 0, 0, 0}, 37, 37, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0026, 0x007F, 257, -1, 40633, 40636, 40644, 40654, 40658, 40633, 0, {40662, 0, 0, 0}, 38, 38, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0027, 0x007F, 257, -1, 40681, 40684, 40695, 40705, 40709, 40681, 0, {40713, 0, 0, 0}, 39, 39, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0028, 0x007F, 257, -1, 40736, 40739, 40745, 40758, 40762, 40736, 0, {0, 0, 0, 0}, 40, 40, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0029, 0x007F, 257, -1, 40766, 40769, 40777, 40788, 40792, 40766, 0, {40796, 0, 0, 0}, 41, 41, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x002A, 0x007F, 257, -1, 40820, 40823, 40834, 40849, 35702, 40820, 0, {40853, 0, 0, 0}, 42, 42, { 1258, 500, 10000, 1258, 0, ',' }},
+       {0x002B, 0x007F, 257, -1, 40868, 40871, 40880, 40895, 40899, 40868, 0, {40903, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, 0, ',' }},
+       {0x002C, 0x007F, 257, -1, 40933, 40936, 40948, 40960, 40964, 40933, 0, {40968, 0, 0, 0}, 44, 44, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x002D, 0x007F, 257, -1, 40987, 40990, 40997, 41005, 41009, 40987, 0, {41013, 0, 0, 0}, 45, 45, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x002F, 0x007F, 257, -1, 41033, 41036, 41047, 41068, 41072, 41033, 0, {41076, 0, 0, 0}, 46, 46, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0032, 0x007F, 257, -1, 41120, 41123, 41130, 41139, 41143, 41120, 0, {0, 0, 0, 0}, 47, 47, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0034, 0x007F, 257, -1, 41147, 41150, 41156, 41165, 41169, 41147, 0, {0, 0, 0, 0}, 48, 48, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0035, 0x007F, 257, -1, 41173, 41176, 41181, 41189, 41193, 41173, 0, {41197, 0, 0, 0}, 49, 49, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0036, 0x007F, 257, -1, 41218, 41221, 41221, 41231, 41235, 41218, 0, {41239, 0, 0, 0}, 50, 50, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0037, 0x007F, 257, -1, 41259, 41262, 41271, 41293, 41297, 41259, 0, {41301, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, 0, ';' }},
+       {0x0038, 0x007F, 257, -1, 41366, 41369, 41377, 41387, 41391, 41366, 0, {0, 0, 0, 0}, 52, 52, { 1252, 20277, 10079, 850, 0, ';' }},
+       {0x0039, 0x007F, 257, -1, 41395, 41398, 41404, 41420, 41424, 41395, 0, {41428, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, 0, ',' }},
+       {0x003A, 0x007F, 257, -1, 41481, 41484, 41492, 41498, 41502, 41481, 0, {41506, 0, 0, 0}, 54, 54, { 0, 500, 2, 1, 0, ',' }},
+       {0x003B, 0x007F, 257, -1, 41527, 41530, 41544, 41561, 41565, 41527, 0, {41569, 0, 0, 0}, 55, 55, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x003C, 0x007F, 257, -1, 41588, 41591, 41597, 41605, 41609, 41588, 0, {41613, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x003E, 0x007F, 257, -1, 41634, 41637, 41643, 41657, 41661, 41634, 0, {41665, 0, 0, 0}, 57, 57, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x003F, 0x007F, 257, -1, 41682, 41685, 41692, 41712, 41716, 41682, 0, {41720, 0, 0, 0}, 58, 58, { 0, 500, 2, 1, 0, ';' }},
+       {0x0040, 0x007F, 257, -1, 41762, 41765, 41772, 41789, 41793, 41762, 0, {41797, 0, 0, 0}, 59, 59, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0041, 0x007F, 257, -1, 41835, 41838, 41846, 41856, 41860, 41835, 0, {41864, 0, 0, 0}, 60, 60, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0043, 0x007F, 257, -1, 41885, 41888, 41894, 41905, 41909, 41885, 0, {41913, 0, 0, 0}, 61, 61, { 1254, 500, 10029, 857, 0, ';' }},
+       {0x0045, 0x007F, 257, -1, 41933, 41936, 41944, 41960, 41964, 41933, 0, {41968, 0, 0, 0}, 62, 62, { 0, 500, 2, 1, 0, ',' }},
+       {0x0046, 0x007F, 257, -1, 42033, 42036, 42044, 42063, 42067, 42033, 0, {42071, 0, 0, 0}, 63, 63, { 0, 500, 2, 1, 0, ',' }},
+       {0x0047, 0x007F, 257, -1, 42118, 42121, 42130, 42152, 42156, 42118, 0, {42160, 0, 0, 0}, 64, 64, { 0, 500, 2, 1, 0, ',' }},
+       {0x0048, 0x007F, 257, -1, 42216, 42219, 42225, 42241, 42245, 42216, 0, {0, 0, 0, 0}, 65, 65, { 0, 500, 2, 1, 0, ',' }},
+       {0x0049, 0x007F, 257, -1, 42249, 42252, 42258, 42274, 42278, 42249, 0, {42282, 0, 0, 0}, 66, 66, { 0, 500, 2, 1, 0, ',' }},
+       {0x004A, 0x007F, 257, -1, 42347, 42350, 42357, 42376, 42380, 42347, 0, {42384, 0, 0, 0}, 67, 67, { 0, 500, 2, 1, 0, ',' }},
+       {0x004B, 0x007F, 257, -1, 37865, 42449, 42457, 42473, 42477, 37865, 0, {42481, 0, 0, 0}, 68, 68, { 0, 500, 2, 1, 0, ',' }},
+       {0x004C, 0x007F, 257, -1, 42546, 42549, 42559, 42578, 42582, 42546, 0, {42586, 0, 0, 0}, 69, 69, { 0, 500, 2, 1, 0, ',' }},
+       {0x004D, 0x007F, 257, -1, 42630, 42633, 42642, 42664, 42668, 42630, 0, {42672, 0, 0, 0}, 70, 70, { 0, 500, 2, 1, 0, ',' }},
+       {0x004E, 0x007F, 257, -1, 42725, 42728, 42736, 42752, 2530, 42725, 0, {42756, 0, 0, 0}, 71, 71, { 0, 500, 2, 1, 0, ',' }},
+       {0x0050, 0x007F, 257, -1, 42818, 42821, 42831, 42844, 42848, 42818, 0, {42852, 0, 0, 0}, 72, 72, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0051, 0x007F, 257, -1, 42884, 42887, 42895, 42920, 42924, 42884, 0, {0, 0, 0, 0}, 73, 73, { 0, 500, 2, 1, 0, ',' }},
+       {0x0052, 0x007F, 257, -1, 42928, 42931, 42937, 42945, 42949, 42928, 0, {42953, 0, 0, 0}, 74, 74, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0053, 0x007F, 257, -1, 42969, 42972, 42978, 42994, 42998, 42969, 0, {43002, 0, 0, 0}, 75, 75, { 0, 500, 2, 1, 0, ',' }},
+       {0x0054, 0x007F, 257, -1, 43057, 43060, 43064, 43074, 43078, 43057, 0, {43082, 0, 0, 0}, 76, 76, { 0, 500, 2, 1, 0, ',' }},
+       {0x0056, 0x007F, 257, -1, 43128, 43131, 43140, 43147, 43151, 43128, 0, {39493, 0, 0, 0}, 77, 77, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0057, 0x007F, 257, -1, 43155, 43159, 43167, 43186, 43155, 43155, 0, {0, 0, 0, 0}, 78, 78, { 0, 500, 2, 1, 0, ',' }},
+       {0x005B, 0x007F, 257, -1, 43190, 43193, 43201, 43217, 43221, 43190, 0, {43225, 0, 0, 0}, 79, 79, { 0, 500, 2, 1, 0, ',' }},
+       {0x005E, 0x007F, 257, -1, 8151, 43284, 43292, 43305, 43309, 8151, 0, {43313, 0, 0, 0}, 80, 80, { 0, 500, 2, 1, 0, ';' }},
+       {0x005F, 0x007F, 257, -1, 43358, 43362, 43386, 43396, 43358, 43358, 0, {0, 0, 0, 0}, 81, 81, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0061, 0x007F, 257, -1, 1992, 43400, 43407, 43426, 43430, 1992, 0, {43434, 0, 0, 0}, 82, 82, { 0, 500, 2, 1, 0, ',' }},
+       {0x0063, 0x007F, 1024, -1, 43484, 43487, 43494, 43503, 43507, 43484, 0, {0, 0, 0, 0}, 83, 83, { 0, 500, 2, 1, 1, ';' }},
+       {0x0064, 0x007F, 257, -1, 43511, 43515, 43515, 43524, 43511, 43511, 0, {43528, 0, 0, 0}, 84, 84, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0068, 0x007F, 257, -1, 43551, 43554, 43554, 43560, 43564, 43551, 0, {0, 0, 0, 0}, 85, 85, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x006A, 0x007F, 257, -1, 43568, 43571, 43578, 43593, 43597, 43568, 0, {0, 0, 0, 0}, 86, 86, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x006C, 0x007F, 257, -1, 43601, 43605, 43620, 43637, 43601, 43601, 0, {0, 0, 0, 0}, 87, 87, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x006F, 0x007F, 257, -1, 43641, 43644, 43656, 43668, 43672, 43641, 0, {43676, 0, 0, 0}, 88, 88, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0070, 0x007F, 257, -1, 43703, 43706, 43706, 43711, 43715, 43703, 0, {0, 0, 0, 0}, 89, 89, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x0078, 0x007F, 257, -1, 43719, 43722, 43733, 43743, 43747, 43719, 0, {43751, 0, 0, 0}, 90, 90, { 0, 500, 2, 1, 0, ',' }},
+       {0x007E, 0x007F, 257, -1, 43764, 43767, 43774, 43784, 43788, 43764, 0, {43792, 0, 0, 0}, 91, 91, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0084, 0x007F, 257, -1, 43812, 43816, 43829, 43848, 43812, 43812, 0, {43852, 0, 0, 0}, 92, 92, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0085, 0x007F, 257, -1, 43877, 43881, 43887, 43905, 43877, 43877, 0, {0, 0, 0, 0}, 93, 93, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0087, 0x007F, 257, -1, 43909, 43912, 43912, 43924, 43928, 43909, 0, {0, 0, 0, 0}, 94, 94, { 1252, 37, 10000, 437, 0, ';' }},
+       {0x0091, 0x007F, 257, -1, 43932, 43935, 43951, 43961, 43965, 43932, 0, {43969, 0, 0, 0}, 95, 95, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0401, 0x0001, 768, 95, 43994, 44000, 44022, 38641, 38645, 38616, 13750, {0, 0, 38649, 0}, 96, 96, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0402, 0x0002, 257, 11, 44086, 44092, 44113, 38709, 38713, 38677, 44151, {38717, 0, 0, 0}, 97, 97, { 1251, 21025, 10007, 866, 0, ';' }},
+       {0x0403, 0x0003, 257, 31, 44154, 44160, 44176, 38778, 38782, 38759, 44194, {38786, 0, 0, 0}, 98, 98, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0404, 0x7C04, 257, 107, 44197, 44203, 44225, 44241, 38852, 38856, 44245, {44248, 0, 0, 0}, 99, 99, { 950, 500, 10002, 950, 0, ',' }},
+       {0x0405, 0x0005, 257, 23, 44255, 44261, 44284, 38914, 38918, 38895, 44314, {38922, 0, 0, 0}, 100, 100, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x0406, 0x0006, 257, 25, 44317, 44323, 44340, 38964, 38968, 38948, 44356, {38972, 0, 0, 0}, 101, 101, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0407, 0x0007, 257, 24, 44359, 44365, 44382, 39011, 39015, 38993, 44404, {39019, 0, 0, 0}, 102, 102, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0408, 0x0008, 257, 39, 44407, 44413, 44428, 39070, 39074, 39044, 44460, {39078, 0, 0, 0}, 103, 103, { 1253, 20273, 10006, 737, 0, ';' }},
+       {0x0409, 0x0009, 257, 109, 44463, 44469, 44469, 39131, 39135, 39120, 44493, {39139, 0, 0, 0}, 104, 104, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x040B, 0x000B, 257, 33, 44496, 44502, 44520, 39225, 39229, 39208, 44534, {39233, 0, 0, 0}, 105, 105, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x040C, 0x000C, 257, 35, 44537, 44543, 44559, 39278, 39282, 39258, 44578, {39286, 0, 0, 0}, 106, 106, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x040D, 0x000D, 257, 47, 44581, 44587, 44603, 39329, 39333, 39308, 44627, {39337, 0, 0, 0}, 107, 107, { 1255, 500, 10005, 862, 1, ',' }},
+       {0x040E, 0x000E, 257, 44, 44630, 44636, 44656, 39390, 39394, 39370, 44679, {39398, 0, 0, 0}, 108, 108, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x040F, 0x000F, 257, 51, 44682, 44688, 44708, 39437, 39441, 39414, 44728, {39445, 0, 0, 0}, 109, 109, { 1252, 20871, 10079, 850, 0, ';' }},
+       {0x0410, 0x0010, 257, 52, 44731, 44737, 44753, 39485, 39489, 39465, 44771, {39493, 0, 0, 0}, 110, 110, { 1252, 20280, 10000, 850, 0, ';' }},
+       {0x0411, 0x0011, 257, 55, 44774, 44780, 44797, 39537, 39541, 39515, 44816, {39545, 0, 0, 0}, 111, 111, { 932, 20290, 10001, 932, 0, ',' }},
+       {0x0412, 0x0012, 257, 58, 44819, 44825, 44846, 39592, 39596, 39572, 44871, {39600, 0, 0, 0}, 112, 112, { 949, 20833, 10003, 949, 0, ',' }},
+       {0x0413, 0x0013, 257, 77, 44874, 44880, 44900, 39630, 39634, 39610, 44923, {39638, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0414, 0x7C14, 257, 78, 44926, 44932, 44959, 39679, 39683, 39687, 44981, {38972, 0, 0, 0}, 114, 114, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0415, 0x0015, 257, 86, 44984, 44990, 45006, 39707, 39711, 39690, 45022, {39715, 0, 0, 0}, 115, 115, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0416, 0x0016, 257, 14, 45025, 45031, 45051, 39764, 39768, 39739, 45071, {39772, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0417, 0x0017, 257, 18, 45074, 45080, 45102, 39816, 39820, 39795, 13753, {39824, 0, 0, 0}, 117, 117, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0418, 0x0018, 257, 91, 45121, 45127, 45146, 39865, 39869, 39844, 45166, {39873, 0, 0, 0}, 118, 118, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0419, 0x0019, 257, 93, 45169, 45175, 45192, 39918, 39922, 39892, 45222, {39926, 0, 0, 0}, 119, 119, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x041A, 0x001A, 257, 43, 45225, 45231, 45250, 39993, 39997, 39972, 45270, {40001, 0, 0, 0}, 120, 120, { 1250, 500, 10082, 852, 0, ';' }},
+       {0x041B, 0x001B, 257, 99, 45273, 45279, 45297, 40043, 40047, 12799, 45321, {40051, 0, 0, 0}, 121, 121, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x041C, 0x001C, 257, 2, 45324, 45330, 45349, 40093, 40097, 40075, 45367, {40101, 0, 0, 0}, 122, 122, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x041D, 0x001D, 257, 96, 45370, 45376, 45393, 40140, 40144, 40121, 45411, {38972, 0, 0, 0}, 123, 123, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x041E, 0x001E, 512, 102, 45414, 45420, 45436, 40166, 40170, 40148, 45458, {0, 40174, 0, 0}, 124, 124, { 874, 20838, 10021, 874, 0, ',' }},
+       {0x041F, 0x001F, 257, 105, 45461, 45467, 45484, 40222, 40226, 12808, 45504, {40230, 0, 0, 0}, 125, 125, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x0420, 0x0020, 257, 85, 45507, 45513, 45529, 40261, 40265, 40244, 45555, {40269, 0, 0, 0}, 126, 126, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0421, 0x0021, 257, 45, 45558, 45564, 45587, 40330, 40334, 40299, 45616, {40338, 0, 0, 0}, 127, 127, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0422, 0x0022, 257, 108, 45619, 45625, 45645, 40391, 40395, 40357, 45683, {40399, 0, 0, 0}, 128, 128, { 1251, 500, 10017, 866, 0, ';' }},
+       {0x0423, 0x0023, 257, 15, 45686, 45692, 45713, 40480, 40484, 40445, 45753, {40488, 0, 0, 0}, 129, 129, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0424, 0x0024, 257, 98, 45756, 45762, 45783, 40557, 40561, 40530, 45809, {40565, 0, 0, 0}, 130, 130, { 1250, 20880, 10029, 852, 0, ';' }},
+       {0x0425, 0x0025, 257, 29, 45812, 45818, 45837, 40605, 40609, 40587, 45851, {40613, 0, 0, 0}, 131, 131, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0426, 0x0026, 257, 66, 45854, 45860, 45877, 40654, 40658, 40633, 45897, {40662, 0, 0, 0}, 132, 132, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0427, 0x0027, 257, 64, 45900, 45906, 45929, 40705, 40709, 40681, 45949, {40713, 0, 0, 0}, 133, 133, { 1257, 500, 10029, 775, 0, ';' }},
+       {0x0428, 0x7C28, 257, 103, 45952, 45963, 45992, 40758, 40762, 40736, 46028, {0, 0, 0, 0}, 134, 134, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0429, 0x0029, 257, 50, 46031, 46037, 46052, 40788, 40792, 40766, 46076, {40796, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x042A, 0x002A, 257, 113, 46079, 46085, 46106, 40849, 35702, 40820, 46134, {40853, 0, 0, 0}, 136, 136, { 1258, 500, 10000, 1258, 0, ',' }},
+       {0x042B, 0x002B, 257, 3, 46137, 46143, 46162, 40895, 40899, 40868, 1929, {40903, 0, 0, 0}, 137, 137, { 0, 500, 2, 1, 0, ',' }},
+       {0x042C, 0x782C, 257, 7, 46196, 46207, 46239, 40960, 40964, 40933, 46265, {40968, 0, 0, 0}, 138, 138, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x042D, 0x002D, 257, 31, 46268, 46274, 46289, 41005, 41009, 40987, 44194, {41013, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x042F, 0x002F, 257, 71, 46308, 46314, 46337, 41068, 41072, 41033, 46381, {41076, 0, 0, 0}, 140, 140, { 1251, 500, 10007, 866, 0, ';' }},
+       {0x0432, 0x0032, 257, 115, 46384, 46390, 41130, 41139, 41143, 41120, 46412, {0, 0, 0, 0}, 141, 141, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0434, 0x0034, 257, 115, 46415, 46421, 41156, 41165, 41169, 41147, 46412, {0, 0, 0, 0}, 142, 142, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0435, 0x0035, 257, 115, 46442, 46448, 46468, 41189, 41193, 41173, 46412, {41197, 0, 0, 0}, 143, 143, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0436, 0x0036, 257, 115, 46493, 46499, 46524, 41231, 41235, 41218, 46412, {41239, 0, 0, 0}, 144, 144, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0437, 0x0037, 257, 37, 46548, 46554, 46573, 41293, 41297, 41259, 46628, {41301, 0, 0, 0}, 145, 145, { 0, 500, 2, 1, 0, ';' }},
+       {0x0438, 0x0038, 257, 34, 46631, 46637, 46661, 41387, 41391, 41366, 46682, {0, 0, 0, 0}, 146, 146, { 1252, 20277, 10079, 850, 0, ';' }},
+       {0x0439, 0x0039, 257, 48, 46685, 46691, 46705, 41420, 41424, 41395, 46736, {41428, 0, 0, 0}, 147, 147, { 0, 500, 2, 1, 0, ',' }},
+       {0x043A, 0x003A, 257, 73, 46739, 46745, 46761, 41498, 41502, 41481, 46775, {41506, 0, 0, 0}, 148, 148, { 0, 500, 2, 1, 0, ',' }},
+       {0x043B, 0x003B, 257, 78, 46778, 46784, 46807, 41561, 41565, 41527, 44981, {41569, 0, 0, 0}, 149, 149, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0441, 0x0041, 257, 56, 46832, 46838, 46854, 41856, 41860, 41835, 46872, {41864, 0, 0, 0}, 150, 150, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0443, 0x7C43, 257, 111, 46875, 46886, 46912, 41905, 41909, 41885, 46938, {41913, 0, 0, 0}, 151, 151, { 1254, 500, 10029, 857, 0, ';' }},
+       {0x0445, 0x0045, 257, 48, 46941, 46947, 46963, 41960, 41964, 41933, 46736, {41968, 0, 0, 0}, 152, 152, { 0, 500, 2, 1, 0, ',' }},
+       {0x0447, 0x0047, 257, 48, 46994, 47000, 47017, 42152, 42156, 42118, 46736, {42160, 0, 0, 0}, 153, 153, { 0, 500, 2, 1, 0, ',' }},
+       {0x0448, 0x0048, 257, 48, 47054, 47060, 47074, 42241, 42245, 42216, 46736, {0, 0, 0, 0}, 154, 154, { 0, 500, 2, 1, 0, ',' }},
+       {0x0449, 0x0049, 257, 48, 47105, 47111, 47125, 42274, 42278, 42249, 46736, {42282, 0, 0, 0}, 155, 155, { 0, 500, 2, 1, 0, ',' }},
+       {0x044A, 0x004A, 257, 48, 47165, 47171, 47186, 42376, 42380, 42347, 46736, {42384, 0, 0, 0}, 156, 156, { 0, 500, 2, 1, 0, ',' }},
+       {0x044B, 0x004B, 257, 48, 47233, 47239, 47255, 42473, 42477, 37865, 46736, {42481, 0, 0, 0}, 157, 157, { 0, 500, 2, 1, 0, ',' }},
+       {0x044C, 0x004C, 257, 48, 47286, 47292, 47310, 42578, 42582, 42546, 46736, {42586, 0, 0, 0}, 158, 158, { 0, 500, 2, 1, 0, ',' }},
+       {0x044D, 0x004D, 257, 48, 47350, 47356, 47373, 42664, 42668, 42630, 46736, {42672, 0, 0, 0}, 159, 159, { 0, 500, 2, 1, 0, ',' }},
+       {0x044E, 0x004E, 257, 48, 47410, 47416, 47432, 42752, 2530, 42725, 46736, {42756, 0, 0, 0}, 160, 160, { 0, 500, 2, 1, 0, ',' }},
+       {0x0451, 0x0051, 257, 20, 47463, 47469, 47485, 42920, 42924, 42884, 13832, {0, 0, 0, 0}, 161, 161, { 0, 500, 2, 1, 0, ',' }},
+       {0x0452, 0x0052, 257, 36, 47531, 47537, 47560, 42945, 42949, 42928, 47587, {42953, 0, 0, 0}, 162, 162, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0453, 0x0053, 257, 57, 47590, 47596, 47613, 42994, 42998, 42969, 47653, {43002, 0, 0, 0}, 163, 163, { 0, 500, 2, 1, 0, ',' }},
+       {0x0454, 0x0054, 257, 60, 47656, 47662, 47673, 43074, 43078, 43057, 47695, {43082, 0, 0, 0}, 164, 164, { 0, 500, 2, 1, 0, ',' }},
+       {0x0456, 0x0056, 257, 31, 47698, 47704, 47721, 43147, 43151, 43128, 44194, {39493, 0, 0, 0}, 165, 165, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0457, 0x0057, 257, 48, 47738, 47745, 47761, 43186, 43155, 43155, 46736, {0, 0, 0, 0}, 166, 166, { 0, 500, 2, 1, 0, ',' }},
+       {0x045B, 0x005B, 257, 63, 47795, 47801, 47821, 43217, 43221, 43190, 47871, {43225, 0, 0, 0}, 167, 167, { 0, 500, 2, 1, 0, ',' }},
+       {0x045E, 0x005E, 257, 32, 47874, 47880, 47899, 43305, 43309, 8151, 47930, {43313, 0, 0, 0}, 168, 168, { 0, 500, 2, 1, 0, ';' }},
+       {0x0461, 0x0061, 257, 79, 47933, 47939, 47954, 43426, 43430, 1992, 47991, {43434, 0, 0, 0}, 169, 169, { 0, 500, 2, 1, 0, ',' }},
+       {0x0463, 0x0063, 1024, 1, 47994, 48000, 48021, 43503, 43507, 43484, 48051, {0, 0, 0, 0}, 170, 170, { 0, 500, 2, 1, 1, ';' }},
+       {0x0464, 0x0064, 257, 84, 48054, 48061, 48084, 43524, 43511, 43511, 48105, {43528, 0, 0, 0}, 171, 171, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x0468, 0x7C68, 257, 75, 48108, 48119, 48142, 43560, 43564, 43551, 48159, {0, 0, 0, 0}, 172, 172, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x046A, 0x006A, 257, 75, 48162, 48168, 48185, 43593, 43597, 43568, 48159, {0, 0, 0, 0}, 173, 173, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x046C, 0x006C, 257, 115, 48231, 48238, 43620, 43637, 43601, 43601, 46412, {0, 0, 0, 0}, 174, 174, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x046F, 0x006F, 257, 38, 48268, 48274, 48298, 43668, 43672, 43641, 48329, {43676, 0, 0, 0}, 175, 175, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0470, 0x0070, 257, 75, 48332, 48338, 48338, 43711, 43715, 43703, 48159, {0, 0, 0, 0}, 176, 176, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x0478, 0x0078, 257, 20, 48353, 48359, 48378, 43743, 43747, 43719, 13832, {43751, 0, 0, 0}, 177, 177, { 0, 500, 2, 1, 0, ',' }},
+       {0x047E, 0x007E, 257, 35, 48397, 48403, 48419, 43784, 43788, 43764, 44578, {43792, 0, 0, 0}, 178, 178, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0485, 0x0085, 257, 93, 48438, 48445, 43887, 43905, 43877, 43877, 45222, {0, 0, 0, 0}, 179, 179, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0487, 0x0087, 257, 94, 48460, 48466, 48466, 43924, 43928, 43909, 48487, {0, 0, 0, 0}, 180, 180, { 1252, 37, 10000, 437, 0, ';' }},
+       {0x0491, 0x0091, 257, 36, 48490, 48496, 48529, 43961, 43965, 43932, 47587, {43969, 0, 0, 0}, 181, 181, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x0801, 0x0001, 257, 49, 48565, 48571, 48585, 48615, 38645, 38616, 48619, {48622, 0, 0, 0}, 182, 182, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0804, 0x0004, 257, 20, 48654, 38874, 48660, 38848, 38852, 38856, 13832, {38859, 0, 0, 0}, 183, 183, { 936, 500, 10008, 936, 0, ',' }},
+       {0x0807, 0x0007, 257, 18, 48676, 48682, 48703, 48721, 39015, 38993, 13753, {39019, 0, 0, 0}, 184, 184, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0809, 0x0009, 257, 36, 48725, 48731, 48731, 48756, 39135, 39120, 47587, {39139, 0, 0, 0}, 185, 185, { 1252, 20285, 10000, 850, 0, ',' }},
+       {0x080A, 0x000A, 257, 74, 48760, 48766, 48783, 48802, 39182, 39158, 48806, {39493, 0, 0, 0}, 186, 186, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x080C, 0x000C, 257, 10, 48809, 48815, 48832, 48853, 39282, 39258, 48857, {39286, 0, 0, 0}, 187, 187, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0810, 0x0010, 257, 18, 48860, 48866, 48888, 48908, 39489, 39465, 13753, {39493, 0, 0, 0}, 188, 188, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0813, 0x0013, 257, 10, 48912, 48918, 48934, 48955, 39634, 39610, 48857, {39638, 0, 0, 0}, 189, 189, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x0814, 0x7814, 257, 78, 48959, 48965, 48992, 49008, 49012, 49016, 44981, {38972, 0, 0, 0}, 190, 190, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x0816, 0x0016, 257, 88, 49019, 49025, 49047, 49069, 39768, 39739, 49073, {39772, 0, 0, 0}, 191, 191, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x081D, 0x001D, 257, 33, 49076, 49082, 49100, 49118, 40144, 40121, 44534, {38972, 0, 0, 0}, 192, 192, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x082C, 0x742C, 257, 7, 49122, 49133, 46239, 49168, 40964, 40933, 46265, {40968, 0, 0, 0}, 193, 193, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x083C, 0x003C, 257, 46, 49172, 49178, 49194, 41605, 41609, 41588, 49210, {41613, 0, 0, 0}, 194, 194, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0843, 0x7843, 257, 111, 49213, 49224, 46912, 41905, 41909, 41885, 46938, {49253, 0, 0, 0}, 195, 195, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x0845, 0x0045, 257, 9, 49291, 49297, 49318, 49361, 41964, 41933, 49365, {41968, 0, 0, 0}, 196, 196, { 0, 500, 2, 1, 0, ',' }},
+       {0x0C01, 0x0001, 257, 30, 49368, 49374, 49389, 49413, 38645, 38616, 49417, {48622, 0, 0, 0}, 197, 197, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x0C04, 0x7C04, 257, 41, 49420, 49426, 49469, 49506, 38852, 38856, 49510, {44248, 0, 0, 0}, 198, 198, { 950, 500, 10002, 950, 0, ',' }},
+       {0x0C07, 0x0007, 257, 5, 49513, 49519, 49536, 49558, 39015, 38993, 49562, {39019, 0, 0, 0}, 199, 199, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x0C09, 0x0009, 257, 6, 49565, 49571, 49571, 49591, 39135, 39120, 49595, {39139, 0, 0, 0}, 200, 200, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x0C0A, 0x000A, 257, 31, 49598, 49604, 49620, 49639, 39182, 39158, 44194, {39186, 0, 0, 0}, 201, 201, { 1252, 20284, 10000, 850, 0, ';' }},
+       {0x0C0C, 0x000C, 257, 17, 49643, 49649, 49665, 49684, 39282, 39258, 49688, {49691, 0, 0, 0}, 202, 202, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x0C3B, 0x003B, 257, 33, 49713, 49719, 49743, 49769, 49773, 41527, 44534, {41569, 0, 0, 0}, 203, 203, { 1252, 20278, 10000, 850, 0, ';' }},
+       {0x1001, 0x0001, 257, 67, 49777, 49783, 49798, 49826, 38645, 38616, 49830, {48622, 0, 0, 0}, 204, 204, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1004, 0x0004, 257, 97, 49833, 49839, 49871, 49890, 38852, 38856, 49894, {38859, 0, 0, 0}, 205, 205, { 936, 500, 10008, 936, 0, ',' }},
+       {0x1007, 0x0007, 257, 65, 49897, 49903, 49923, 49943, 39015, 38993, 49947, {39019, 0, 0, 0}, 206, 206, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x1009, 0x0009, 257, 17, 49950, 49956, 49956, 49973, 39135, 39120, 49688, {39139, 0, 0, 0}, 207, 207, { 1252, 37, 10000, 850, 0, ',' }},
+       {0x100A, 0x000A, 257, 40, 49977, 49983, 50003, 50024, 39182, 39158, 50028, {39186, 0, 0, 0}, 208, 208, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x100C, 0x000C, 257, 18, 50031, 50037, 50058, 50077, 39282, 39258, 13753, {39286, 0, 0, 0}, 209, 209, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x101A, 0x001A, 257, 8, 50081, 50087, 50121, 50152, 50156, 39972, 50160, {40001, 0, 0, 0}, 210, 210, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x1401, 0x0001, 257, 27, 50163, 50169, 50186, 50218, 38645, 38616, 50222, {48622, 0, 0, 0}, 211, 211, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1404, 0x7C04, 257, 72, 50225, 50231, 50270, 50307, 38852, 38856, 50311, {44248, 0, 0, 0}, 212, 212, { 950, 500, 10002, 950, 0, ',' }},
+       {0x1407, 0x0007, 257, 62, 50314, 50320, 50343, 50367, 39015, 38993, 50371, {39019, 0, 0, 0}, 213, 213, { 1252, 20273, 10000, 850, 0, ';' }},
+       {0x1409, 0x0009, 257, 80, 50374, 50380, 50380, 50402, 39135, 39120, 50406, {39139, 0, 0, 0}, 214, 214, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x140A, 0x000A, 257, 22, 50409, 50415, 50436, 50458, 39182, 39158, 50462, {39186, 0, 0, 0}, 215, 215, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x140C, 0x000C, 257, 65, 50465, 50471, 50491, 50514, 39282, 39258, 49947, {39286, 0, 0, 0}, 216, 216, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x141A, 0x681A, 257, 8, 50518, 50529, 50569, 50600, 50604, 50608, 50160, {50611, 0, 0, 0}, 217, 217, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x1801, 0x0001, 257, 68, 50634, 50640, 50657, 50687, 38645, 38616, 50691, {48622, 0, 0, 0}, 218, 218, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1809, 0x0009, 257, 46, 50694, 50700, 50700, 50718, 39135, 39120, 49210, {39139, 0, 0, 0}, 219, 219, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x180A, 0x000A, 257, 82, 50722, 50728, 50745, 50764, 39182, 39158, 50768, {39186, 0, 0, 0}, 220, 220, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x180C, 0x000C, 257, 69, 50771, 50777, 50793, 50812, 39282, 39258, 50816, {39286, 0, 0, 0}, 221, 221, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x181A, 0x701A, 257, 8, 50819, 50830, 50870, 50922, 50926, 50930, 50160, {50611, 0, 0, 0}, 222, 222, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x1C01, 0x0001, 257, 104, 50933, 50939, 50956, 50982, 38645, 38616, 50986, {48622, 0, 0, 0}, 223, 223, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x1C09, 0x0009, 257, 115, 50989, 50995, 50995, 51018, 39135, 39120, 46412, {39139, 0, 0, 0}, 224, 224, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x1C0A, 0x000A, 257, 26, 51022, 51028, 51057, 51090, 39182, 39158, 51094, {39186, 0, 0, 0}, 225, 225, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x1C1A, 0x6C1A, 257, 8, 51097, 51108, 50870, 51151, 51155, 50930, 50160, {41076, 0, 0, 0}, 226, 226, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x2001, 0x0001, 257, 81, 51159, 51165, 51179, 51207, 38645, 38616, 51211, {48622, 0, 0, 0}, 227, 227, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x2009, 0x0009, 257, 53, 51214, 51220, 51220, 51238, 39135, 39120, 51242, {39139, 0, 0, 0}, 228, 228, { 1252, 500, 10000, 850, 0, ',' }},
+       {0x200A, 0x000A, 257, 112, 51245, 51251, 51271, 51292, 39182, 39158, 51296, {39186, 0, 0, 0}, 229, 229, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x201A, 0x641A, 257, 8, 51299, 51310, 50569, 51353, 51357, 50608, 50160, {41076, 0, 0, 0}, 230, 230, { 1251, 870, 10082, 855, 0, ';' }},
+       {0x2401, 0x0001, 257, 114, 51361, 51367, 51382, 51410, 38645, 38616, 51414, {48622, 0, 0, 0}, 231, 231, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x240A, 0x000A, 257, 21, 51417, 51423, 51442, 51462, 39182, 39158, 51466, {39186, 0, 0, 0}, 232, 232, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x241A, 0x701A, 257, 92, 51469, 51480, 51504, 51532, 2239, 50930, 51536, {50611, 0, 0, 0}, 233, 233, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x2801, 0x0001, 257, 101, 51539, 51545, 51560, 51588, 38645, 38616, 51592, {48622, 0, 0, 0}, 234, 234, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x2809, 0x0009, 257, 16, 51595, 51601, 51601, 51618, 39135, 39120, 51622, {39139, 0, 0, 0}, 235, 235, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x280A, 0x000A, 257, 83, 51625, 51631, 51646, 51663, 39182, 39158, 51667, {39186, 0, 0, 0}, 236, 236, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x281A, 0x6C1A, 257, 92, 51670, 51681, 51504, 51708, 2239, 50930, 51536, {41076, 0, 0, 0}, 237, 237, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x2C01, 0x0001, 257, 54, 51712, 51718, 51734, 51764, 38645, 38616, 51768, {48622, 0, 0, 0}, 238, 238, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x2C09, 0x0009, 257, 106, 51771, 51777, 51777, 51807, 39135, 39120, 51811, {39139, 0, 0, 0}, 239, 239, { 1252, 500, 10000, 850, 0, ';' }},
+       {0x2C0A, 0x000A, 257, 4, 51814, 51820, 51840, 51861, 39182, 39158, 51865, {39186, 0, 0, 0}, 240, 240, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x2C1A, 0x701A, 257, 70, 51868, 51879, 51907, 51940, 2239, 50930, 51944, {50611, 0, 0, 0}, 241, 241, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x3001, 0x0001, 257, 61, 51947, 51953, 51970, 51998, 38645, 38616, 52002, {48622, 0, 0, 0}, 242, 242, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x3009, 0x0009, 257, 116, 52005, 52011, 52011, 52030, 39135, 39120, 52034, {39139, 0, 0, 0}, 243, 243, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x300A, 0x000A, 257, 28, 52037, 52043, 52061, 52080, 39182, 39158, 52084, {39186, 0, 0, 0}, 244, 244, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x301A, 0x6C1A, 257, 70, 52087, 52098, 51907, 52129, 2239, 50930, 51944, {41076, 0, 0, 0}, 245, 245, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x3401, 0x0001, 257, 59, 52133, 52139, 52155, 52185, 38645, 38616, 52189, {48622, 0, 0, 0}, 246, 246, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x3409, 0x0009, 257, 84, 52192, 52198, 52198, 52220, 39135, 39120, 48105, {39139, 0, 0, 0}, 247, 247, { 1252, 500, 10000, 437, 0, ',' }},
+       {0x340A, 0x000A, 257, 19, 52224, 52230, 52246, 52263, 39182, 39158, 52267, {39186, 0, 0, 0}, 248, 248, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x3801, 0x0001, 257, 0, 52270, 52276, 52306, 52370, 38645, 38616, 52374, {48622, 0, 0, 0}, 249, 249, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x380A, 0x000A, 257, 110, 52377, 52383, 52401, 52420, 39182, 39158, 52424, {39186, 0, 0, 0}, 250, 250, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x3C01, 0x0001, 257, 12, 52427, 52433, 52450, 52482, 38645, 38616, 52486, {48622, 0, 0, 0}, 251, 251, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x3C0A, 0x000A, 257, 89, 52489, 52495, 52514, 52534, 39182, 39158, 52538, {39186, 0, 0, 0}, 252, 252, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x4001, 0x0001, 257, 90, 52541, 52547, 52562, 52586, 38645, 38616, 52590, {48622, 0, 0, 0}, 253, 253, { 1256, 20420, 10004, 720, 1, ';' }},
+       {0x4009, 0x0009, 257, 48, 52593, 52599, 52599, 52615, 39135, 39120, 46736, {39139, 0, 0, 0}, 254, 254, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x400A, 0x000A, 257, 13, 52619, 52625, 52643, 52662, 39182, 39158, 52666, {39186, 0, 0, 0}, 255, 255, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x440A, 0x000A, 257, 100, 52669, 52675, 52697, 52720, 39182, 39158, 52724, {39186, 0, 0, 0}, 256, 256, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x4809, 0x0009, 257, 97, 52727, 52733, 52733, 52753, 39135, 39120, 49894, {39139, 0, 0, 0}, 257, 257, { 1252, 37, 10000, 437, 0, ',' }},
+       {0x480A, 0x000A, 257, 42, 52757, 52763, 52782, 52802, 39182, 39158, 52806, {39186, 0, 0, 0}, 258, 258, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x4C0A, 0x000A, 257, 76, 52809, 52815, 52835, 52856, 39182, 39158, 52860, {39186, 0, 0, 0}, 259, 259, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x500A, 0x000A, 257, 87, 52863, 52869, 52891, 52914, 39182, 39158, 52918, {39186, 0, 0, 0}, 260, 260, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x540A, 0x000A, 257, 109, 52921, 52927, 52951, 52977, 39182, 39158, 44493, {39186, 0, 0, 0}, 261, 261, { 1252, 20284, 10000, 850, 0, ',' }},
+       {0x641A, 0x781A, 257, -1, 52981, 52989, 53008, 51353, 51357, 50608, 0, {41076, 0, 0, 0}, 262, 262, { 1251, 870, 10082, 855, 0, ';' }},
+       {0x681A, 0x781A, 257, -1, 53017, 53025, 53008, 50600, 50604, 50608, 0, {50611, 0, 0, 0}, 263, 263, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x6C1A, 0x7C1A, 257, -1, 53041, 53049, 53068, 51708, 2239, 50930, 0, {41076, 0, 0, 0}, 264, 264, { 1251, 21025, 10007, 855, 0, ';' }},
+       {0x701A, 0x7C1A, 257, -1, 53081, 53089, 53068, 51532, 2239, 50930, 0, {50611, 0, 0, 0}, 265, 265, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x742C, 0x002C, 257, -1, 53105, 53113, 40948, 49168, 40964, 40933, 0, {40968, 0, 0, 0}, 266, 266, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7804, 0x007F, 257, -1, 38856, 38874, 38841, 38848, 38852, 38856, 0, {38859, 0, 0, 0}, 267, 267, { 936, 500, 10008, 936, 0, ',' }},
+       {0x7814, 0x0014, 257, -1, 49016, 53136, 53154, 49008, 49012, 49016, 0, {38972, 0, 0, 0}, 268, 268, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x781A, 0x007F, 257, -1, 50608, 53162, 53008, 50600, 50604, 50608, 0, {50611, 0, 0, 0}, 269, 269, { 1250, 870, 10082, 852, 0, ';' }},
+       {0x782C, 0x002C, 257, -1, 53170, 53178, 40948, 40960, 40964, 40933, 0, {40968, 0, 0, 0}, 270, 270, { 1254, 20905, 10081, 857, 0, ';' }},
+       {0x7843, 0x0043, 257, -1, 53198, 53206, 41894, 41905, 41909, 41885, 0, {49253, 0, 0, 0}, 271, 271, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7850, 0x0050, 257, -1, 53223, 53231, 42831, 53252, 42848, 42818, 0, {42852, 0, 0, 0}, 272, 272, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7C04, 0x7804, 257, -1, 53256, 44203, 38841, 44241, 38852, 38856, 0, {44248, 0, 0, 0}, 273, 273, { 950, 500, 10002, 950, 0, ',' }},
+       {0x7C04, 0x7C04, 257, -1, 53264, 53271, 38841, 44241, 38852, 38856, 0, {44248, 0, 0, 0}, 274, 274, { 950, 500, 10002, 950, 0, ',' }},
+       {0x7C14, 0x0014, 257, -1, 39687, 53300, 53318, 39679, 39683, 39687, 0, {38972, 0, 0, 0}, 275, 275, { 1252, 20277, 10000, 850, 0, ';' }},
+       {0x7C1A, 0x007F, 257, -1, 50930, 53332, 53068, 53340, 2239, 50930, 0, {41076, 0, 0, 0}, 276, 276, { 1250, 500, 10029, 852, 0, ';' }},
+       {0x7C28, 0x0028, 257, -1, 53344, 53352, 40745, 40758, 40762, 40736, 0, {0, 0, 0, 0}, 277, 277, { 1251, 20880, 10007, 866, 0, ';' }},
+       {0x7C43, 0x0043, 257, -1, 53369, 53377, 41894, 41905, 41909, 41885, 0, {41913, 0, 0, 0}, 278, 278, { 1254, 500, 10029, 857, 0, ';' }},
+       {0x7C5F, 0x005F, 257, -1, 53391, 53400, 43386, 43396, 43358, 43358, 0, {0, 0, 0, 0}, 279, 279, { 1252, 20297, 10000, 850, 0, ';' }},
+       {0x7C68, 0x0068, 257, -1, 53432, 53440, 43554, 43560, 43564, 43551, 0, {0, 0, 0, 0}, 280, 280, { 1252, 37, 10000, 437, 0, ',' }}
 };
 
 
 static const CultureInfoNameEntry culture_name_entries [] = {
-       {41243, 50},     /* af */
-       {53479, 144},    /* af-za */
+       {41218, 50},     /* af */
+       {53454, 144},    /* af-za */
        {8151, 80},      /* am */
-       {53485, 168},    /* am-et */
-       {38641, 0},      /* ar */
-       {53491, 249},    /* ar-ae */
-       {53497, 251},    /* ar-bh */
-       {53503, 211},    /* ar-dz */
-       {53509, 197},    /* ar-eg */
-       {53515, 182},    /* ar-iq */
-       {53521, 238},    /* ar-jo */
-       {53527, 246},    /* ar-kw */
-       {53533, 242},    /* ar-lb */
-       {53539, 204},    /* ar-ly */
-       {53545, 218},    /* ar-ma */
-       {53551, 227},    /* ar-om */
-       {53557, 253},    /* ar-qa */
-       {53563, 96},     /* ar-sa */
-       {53569, 234},    /* ar-sy */
-       {53575, 223},    /* ar-tn */
-       {53581, 231},    /* ar-ye */
-       {42655, 70},     /* as */
-       {53587, 159},    /* as-in */
-       {40958, 44},     /* az */
-       {53593, 266},    /* az-cyrl */
-       {53601, 193},    /* az-cyrl-az */
-       {53612, 270},    /* az-latn */
-       {53620, 138},    /* az-latn-az */
-       {40470, 35},     /* be */
-       {53631, 129},    /* be-by */
-       {38702, 1},      /* bg */
-       {53637, 97},     /* bg-bg */
-       {41958, 62},     /* bn */
-       {53643, 196},    /* bn-bd */
-       {53649, 152},    /* bn-in */
-       {42909, 73},     /* bo */
-       {53655, 161},    /* bo-cn */
-       {43789, 91},     /* br */
-       {53661, 178},    /* br-fr */
-       {50633, 269},    /* bs */
-       {53667, 262},    /* bs-cyrl */
-       {53675, 230},    /* bs-cyrl-ba */
-       {53686, 263},    /* bs-latn */
-       {53694, 217},    /* bs-latn-ba */
-       {38784, 2},      /* ca */
-       {53705, 98},     /* ca-es */
-       {38920, 5},      /* cs */
-       {53711, 100},    /* cs-cz */
-       {42953, 74},     /* cy */
-       {53717, 162},    /* cy-gb */
-       {38973, 6},      /* da */
-       {53723, 101},    /* da-dk */
-       {39018, 7},      /* de */
-       {53729, 199},    /* de-at */
-       {53735, 184},    /* de-ch */
-       {53741, 102},    /* de-de */
-       {53747, 213},    /* de-li */
-       {53753, 206},    /* de-lu */
-       {39069, 8},      /* el */
-       {53759, 103},    /* el-gr */
-       {39145, 9},      /* en */
-       {53765, 200},    /* en-au */
-       {53771, 235},    /* en-bz */
-       {53777, 207},    /* en-ca */
-       {53783, 185},    /* en-gb */
-       {53789, 219},    /* en-ie */
-       {53795, 254},    /* en-in */
-       {53801, 228},    /* en-jm */
-       {53807, 214},    /* en-nz */
-       {53813, 247},    /* en-ph */
-       {53819, 257},    /* en-sg */
-       {53825, 239},    /* en-tt */
-       {53831, 104},    /* en-us */
-       {53837, 224},    /* en-za */
-       {53843, 243},    /* en-zw */
-       {39183, 10},     /* es */
-       {53849, 240},    /* es-ar */
-       {53855, 255},    /* es-bo */
-       {53861, 248},    /* es-cl */
-       {53867, 232},    /* es-co */
-       {53873, 215},    /* es-cr */
-       {53879, 225},    /* es-do */
-       {53885, 244},    /* es-ec */
-       {53891, 201},    /* es-es */
-       {53897, 208},    /* es-gt */
-       {53903, 258},    /* es-hn */
-       {53909, 186},    /* es-mx */
-       {53915, 259},    /* es-ni */
-       {53921, 220},    /* es-pa */
-       {53927, 236},    /* es-pe */
-       {53933, 260},    /* es-pr */
-       {53939, 252},    /* es-py */
-       {53945, 256},    /* es-sv */
-       {53951, 261},    /* es-us */
-       {53957, 250},    /* es-uy */
-       {53963, 229},    /* es-ve */
-       {40612, 37},     /* et */
-       {53969, 131},    /* et-ee */
-       {41012, 45},     /* eu */
-       {53975, 139},    /* eu-es */
-       {40791, 41},     /* fa */
-       {53981, 135},    /* fa-ir */
-       {39233, 11},     /* fi */
-       {53987, 105},    /* fi-fi */
-       {43536, 84},     /* fil */
-       {53993, 171},    /* fil-ph */
-       {41391, 52},     /* fo */
-       {54000, 146},    /* fo-fo */
-       {39283, 12},     /* fr */
-       {54006, 187},    /* fr-be */
-       {54012, 202},    /* fr-ca */
-       {54018, 209},    /* fr-ch */
-       {54024, 106},    /* fr-fr */
-       {54030, 216},    /* fr-lu */
-       {54036, 221},    /* fr-mc */
-       {41613, 56},     /* ga */
-       {54042, 194},    /* ga-ie */
-       {43957, 95},     /* gd */
-       {54048, 181},    /* gd-gb */
-       {43153, 77},     /* gl */
-       {54054, 165},    /* gl-es */
-       {43837, 92},     /* gsw */
-       {42143, 64},     /* gu */
-       {54060, 153},    /* gu-in */
-       {43576, 85},     /* ha */
-       {54066, 280},    /* ha-latn */
-       {54074, 172},    /* ha-latn-ng */
-       {39333, 13},     /* he */
-       {54085, 107},    /* he-il */
-       {41420, 53},     /* hi */
-       {54091, 147},    /* hi-in */
-       {39997, 26},     /* hr */
-       {54097, 210},    /* hr-ba */
-       {54103, 120},    /* hr-hr */
-       {39395, 14},     /* hu */
-       {54109, 108},    /* hu-hu */
-       {40893, 43},     /* hy */
-       {54115, 137},    /* hy-am */
-       {40324, 33},     /* id */
-       {54121, 127},    /* id-id */
-       {43728, 89},     /* ig */
-       {54127, 176},    /* ig-ng */
-       {43744, 90},     /* ii */
-       {54133, 177},    /* ii-cn */
-       {39439, 15},     /* is */
-       {54139, 109},    /* is-is */
-       {39490, 16},     /* it */
-       {54145, 188},    /* it-ch */
-       {54151, 110},    /* it-it */
-       {39540, 17},     /* ja */
-       {54157, 111},    /* ja-jp */
-       {41284, 51},     /* ka */
-       {54163, 145},    /* ka-ge */
-       {41707, 58},     /* kk */
-       {43666, 88},     /* kl */
-       {54169, 175},    /* kl-gl */
-       {42994, 75},     /* km */
-       {54175, 163},    /* km-kh */
-       {37890, 68},     /* kn */
-       {54181, 157},    /* kn-in */
-       {39597, 18},     /* ko */
-       {54187, 112},    /* ko-kr */
-       {43180, 78},     /* kok */
-       {54193, 166},    /* kok-in */
-       {41787, 59},     /* ky */
-       {43082, 76},     /* lo */
-       {54200, 164},    /* lo-la */
-       {40706, 39},     /* lt */
-       {54206, 133},    /* lt-lt */
-       {40658, 38},     /* lv */
-       {54212, 132},    /* lv-lv */
-       {41058, 46},     /* mk */
-       {54218, 140},    /* mk-mk */
-       {42571, 69},     /* ml */
-       {54224, 158},    /* ml-in */
-       {42843, 72},     /* mn */
-       {54230, 272},    /* mn-cyrl */
-       {42750, 71},     /* mr */
-       {54238, 160},    /* mr-in */
-       {41659, 57},     /* ms */
-       {41506, 54},     /* mt */
-       {54244, 148},    /* mt-mt */
-       {39712, 275},    /* nb */
-       {54250, 114},    /* nb-no */
+       {53460, 168},    /* am-et */
+       {38616, 0},      /* ar */
+       {53466, 249},    /* ar-ae */
+       {53472, 251},    /* ar-bh */
+       {53478, 211},    /* ar-dz */
+       {53484, 197},    /* ar-eg */
+       {53490, 182},    /* ar-iq */
+       {53496, 238},    /* ar-jo */
+       {53502, 246},    /* ar-kw */
+       {53508, 242},    /* ar-lb */
+       {53514, 204},    /* ar-ly */
+       {53520, 218},    /* ar-ma */
+       {53526, 227},    /* ar-om */
+       {53532, 253},    /* ar-qa */
+       {53538, 96},     /* ar-sa */
+       {53544, 234},    /* ar-sy */
+       {53550, 223},    /* ar-tn */
+       {53556, 231},    /* ar-ye */
+       {42630, 70},     /* as */
+       {53562, 159},    /* as-in */
+       {40933, 44},     /* az */
+       {53568, 266},    /* az-cyrl */
+       {53576, 193},    /* az-cyrl-az */
+       {53587, 270},    /* az-latn */
+       {53595, 138},    /* az-latn-az */
+       {40445, 35},     /* be */
+       {53606, 129},    /* be-by */
+       {38677, 1},      /* bg */
+       {53612, 97},     /* bg-bg */
+       {41933, 62},     /* bn */
+       {53618, 196},    /* bn-bd */
+       {53624, 152},    /* bn-in */
+       {42884, 73},     /* bo */
+       {53630, 161},    /* bo-cn */
+       {43764, 91},     /* br */
+       {53636, 178},    /* br-fr */
+       {50608, 269},    /* bs */
+       {53642, 262},    /* bs-cyrl */
+       {53650, 230},    /* bs-cyrl-ba */
+       {53661, 263},    /* bs-latn */
+       {53669, 217},    /* bs-latn-ba */
+       {38759, 2},      /* ca */
+       {53680, 98},     /* ca-es */
+       {38895, 5},      /* cs */
+       {53686, 100},    /* cs-cz */
+       {42928, 74},     /* cy */
+       {53692, 162},    /* cy-gb */
+       {38948, 6},      /* da */
+       {53698, 101},    /* da-dk */
+       {38993, 7},      /* de */
+       {53704, 199},    /* de-at */
+       {53710, 184},    /* de-ch */
+       {53716, 102},    /* de-de */
+       {53722, 213},    /* de-li */
+       {53728, 206},    /* de-lu */
+       {39044, 8},      /* el */
+       {53734, 103},    /* el-gr */
+       {39120, 9},      /* en */
+       {53740, 200},    /* en-au */
+       {53746, 235},    /* en-bz */
+       {53752, 207},    /* en-ca */
+       {53758, 185},    /* en-gb */
+       {53764, 219},    /* en-ie */
+       {53770, 254},    /* en-in */
+       {53776, 228},    /* en-jm */
+       {53782, 214},    /* en-nz */
+       {53788, 247},    /* en-ph */
+       {53794, 257},    /* en-sg */
+       {53800, 239},    /* en-tt */
+       {53806, 104},    /* en-us */
+       {53812, 224},    /* en-za */
+       {53818, 243},    /* en-zw */
+       {39158, 10},     /* es */
+       {53824, 240},    /* es-ar */
+       {53830, 255},    /* es-bo */
+       {53836, 248},    /* es-cl */
+       {53842, 232},    /* es-co */
+       {53848, 215},    /* es-cr */
+       {53854, 225},    /* es-do */
+       {53860, 244},    /* es-ec */
+       {53866, 201},    /* es-es */
+       {53872, 208},    /* es-gt */
+       {53878, 258},    /* es-hn */
+       {53884, 186},    /* es-mx */
+       {53890, 259},    /* es-ni */
+       {53896, 220},    /* es-pa */
+       {53902, 236},    /* es-pe */
+       {53908, 260},    /* es-pr */
+       {53914, 252},    /* es-py */
+       {53920, 256},    /* es-sv */
+       {53926, 261},    /* es-us */
+       {53932, 250},    /* es-uy */
+       {53938, 229},    /* es-ve */
+       {40587, 37},     /* et */
+       {53944, 131},    /* et-ee */
+       {40987, 45},     /* eu */
+       {53950, 139},    /* eu-es */
+       {40766, 41},     /* fa */
+       {53956, 135},    /* fa-ir */
+       {39208, 11},     /* fi */
+       {53962, 105},    /* fi-fi */
+       {43511, 84},     /* fil */
+       {53968, 171},    /* fil-ph */
+       {41366, 52},     /* fo */
+       {53975, 146},    /* fo-fo */
+       {39258, 12},     /* fr */
+       {53981, 187},    /* fr-be */
+       {53987, 202},    /* fr-ca */
+       {53993, 209},    /* fr-ch */
+       {53999, 106},    /* fr-fr */
+       {54005, 216},    /* fr-lu */
+       {54011, 221},    /* fr-mc */
+       {41588, 56},     /* ga */
+       {54017, 194},    /* ga-ie */
+       {43932, 95},     /* gd */
+       {54023, 181},    /* gd-gb */
+       {43128, 77},     /* gl */
+       {54029, 165},    /* gl-es */
+       {43812, 92},     /* gsw */
+       {42118, 64},     /* gu */
+       {54035, 153},    /* gu-in */
+       {43551, 85},     /* ha */
+       {54041, 280},    /* ha-latn */
+       {54049, 172},    /* ha-latn-ng */
+       {39308, 13},     /* he */
+       {54060, 107},    /* he-il */
+       {41395, 53},     /* hi */
+       {54066, 147},    /* hi-in */
+       {39972, 26},     /* hr */
+       {54072, 210},    /* hr-ba */
+       {54078, 120},    /* hr-hr */
+       {39370, 14},     /* hu */
+       {54084, 108},    /* hu-hu */
+       {40868, 43},     /* hy */
+       {54090, 137},    /* hy-am */
+       {40299, 33},     /* id */
+       {54096, 127},    /* id-id */
+       {43703, 89},     /* ig */
+       {54102, 176},    /* ig-ng */
+       {43719, 90},     /* ii */
+       {54108, 177},    /* ii-cn */
+       {39414, 15},     /* is */
+       {54114, 109},    /* is-is */
+       {39465, 16},     /* it */
+       {54120, 188},    /* it-ch */
+       {54126, 110},    /* it-it */
+       {39515, 17},     /* ja */
+       {54132, 111},    /* ja-jp */
+       {41259, 51},     /* ka */
+       {54138, 145},    /* ka-ge */
+       {41682, 58},     /* kk */
+       {43641, 88},     /* kl */
+       {54144, 175},    /* kl-gl */
+       {42969, 75},     /* km */
+       {54150, 163},    /* km-kh */
+       {37865, 68},     /* kn */
+       {54156, 157},    /* kn-in */
+       {39572, 18},     /* ko */
+       {54162, 112},    /* ko-kr */
+       {43155, 78},     /* kok */
+       {54168, 166},    /* kok-in */
+       {41762, 59},     /* ky */
+       {43057, 76},     /* lo */
+       {54175, 164},    /* lo-la */
+       {40681, 39},     /* lt */
+       {54181, 133},    /* lt-lt */
+       {40633, 38},     /* lv */
+       {54187, 132},    /* lv-lv */
+       {41033, 46},     /* mk */
+       {54193, 140},    /* mk-mk */
+       {42546, 69},     /* ml */
+       {54199, 158},    /* ml-in */
+       {42818, 72},     /* mn */
+       {54205, 272},    /* mn-cyrl */
+       {42725, 71},     /* mr */
+       {54213, 160},    /* mr-in */
+       {41634, 57},     /* ms */
+       {41481, 54},     /* mt */
+       {54219, 148},    /* mt-mt */
+       {39687, 275},    /* nb */
+       {54225, 114},    /* nb-no */
        {1992, 82},      /* ne */
-       {54256, 169},    /* ne-np */
-       {39635, 19},     /* nl */
-       {54262, 189},    /* nl-be */
-       {54268, 113},    /* nl-nl */
-       {49041, 268},    /* nn */
-       {54274, 190},    /* nn-no */
-       {39685, 20},     /* no */
-       {43626, 87},     /* nso */
-       {54280, 174},    /* nso-za */
-       {42241, 65},     /* or */
-       {54287, 154},    /* or-in */
-       {42058, 63},     /* pa */
-       {39715, 21},     /* pl */
-       {54293, 115},    /* pl-pl */
-       {43509, 83},     /* ps */
-       {54299, 170},    /* ps-af */
-       {39764, 22},     /* pt */
-       {54305, 116},    /* pt-br */
-       {54311, 191},    /* pt-pt */
-       {39820, 23},     /* rm */
-       {54317, 117},    /* rm-ch */
-       {39869, 24},     /* ro */
-       {54323, 118},    /* ro-ro */
-       {39917, 25},     /* ru */
-       {54329, 119},    /* ru-ru */
-       {43934, 94},     /* rw */
-       {54335, 180},    /* rw-rw */
-       {43902, 93},     /* sah */
-       {54341, 179},    /* sah-ru */
-       {41552, 55},     /* se */
-       {54348, 203},    /* se-fi */
-       {54354, 149},    /* se-no */
-       {43215, 79},     /* si */
-       {54360, 167},    /* si-lk */
-       {12824, 27},     /* sk */
-       {54366, 121},    /* sk-sk */
-       {40555, 36},     /* sl */
-       {54372, 130},    /* sl-si */
-       {40100, 28},     /* sq */
-       {54378, 122},    /* sq-al */
-       {50955, 276},    /* sr */
-       {54384, 264},    /* sr-cyrl */
-       {54392, 226},    /* sr-cyrl-ba */
-       {54403, 245},    /* sr-cyrl-me */
-       {54414, 237},    /* sr-cyrl-rs */
-       {54425, 265},    /* sr-latn */
-       {54433, 222},    /* sr-latn-ba */
-       {54444, 241},    /* sr-latn-me */
-       {54455, 233},    /* sr-latn-rs */
-       {40146, 29},     /* sv */
-       {54466, 192},    /* sv-fi */
-       {54472, 123},    /* sv-se */
-       {41860, 60},     /* sw */
-       {54478, 150},    /* sw-ke */
-       {42274, 66},     /* ta */
-       {54484, 155},    /* ta-in */
-       {42372, 67},     /* te */
-       {54490, 156},    /* te-in */
-       {40761, 40},     /* tg */
-       {54496, 277},    /* tg-cyrl */
-       {54504, 134},    /* tg-cyrl-tj */
-       {40173, 30},     /* th */
-       {54515, 124},    /* th-th */
-       {41145, 47},     /* tn */
-       {54521, 141},    /* tn-za */
-       {12833, 31},     /* tr */
-       {54527, 125},    /* tr-tr */
-       {43383, 81},     /* tzm */
-       {54533, 279},    /* tzm-latn */
-       {40382, 34},     /* uk */
-       {54542, 128},    /* uk-ua */
-       {40269, 32},     /* ur */
-       {54548, 126},    /* ur-pk */
-       {41910, 61},     /* uz */
-       {54554, 271},    /* uz-cyrl */
-       {54562, 195},    /* uz-cyrl-uz */
-       {54573, 278},    /* uz-latn */
-       {54581, 151},    /* uz-latn-uz */
-       {40845, 42},     /* vi */
-       {54592, 136},    /* vi-vn */
-       {41172, 48},     /* xh */
-       {54598, 142},    /* xh-za */
-       {43593, 86},     /* yo */
-       {54604, 173},    /* yo-ng */
-       {38881, 267},    /* zh */
-       {54610, 3},      /* zh-chs */
-       {54617, 274},    /* zh-cht */
-       {54624, 183},    /* zh-cn */
-       {54630, 4},      /* zh-hans */
-       {54638, 273},    /* zh-hant */
-       {54646, 198},    /* zh-hk */
-       {54652, 212},    /* zh-mo */
-       {54658, 205},    /* zh-sg */
-       {54664, 99},     /* zh-tw */
-       {41198, 49},     /* zu */
-       {54670, 143}     /* zu-za */
+       {54231, 169},    /* ne-np */
+       {39610, 19},     /* nl */
+       {54237, 189},    /* nl-be */
+       {54243, 113},    /* nl-nl */
+       {49016, 268},    /* nn */
+       {54249, 190},    /* nn-no */
+       {39660, 20},     /* no */
+       {43601, 87},     /* nso */
+       {54255, 174},    /* nso-za */
+       {42216, 65},     /* or */
+       {54262, 154},    /* or-in */
+       {42033, 63},     /* pa */
+       {39690, 21},     /* pl */
+       {54268, 115},    /* pl-pl */
+       {43484, 83},     /* ps */
+       {54274, 170},    /* ps-af */
+       {39739, 22},     /* pt */
+       {54280, 116},    /* pt-br */
+       {54286, 191},    /* pt-pt */
+       {39795, 23},     /* rm */
+       {54292, 117},    /* rm-ch */
+       {39844, 24},     /* ro */
+       {54298, 118},    /* ro-ro */
+       {39892, 25},     /* ru */
+       {54304, 119},    /* ru-ru */
+       {43909, 94},     /* rw */
+       {54310, 180},    /* rw-rw */
+       {43877, 93},     /* sah */
+       {54316, 179},    /* sah-ru */
+       {41527, 55},     /* se */
+       {54323, 203},    /* se-fi */
+       {54329, 149},    /* se-no */
+       {43190, 79},     /* si */
+       {54335, 167},    /* si-lk */
+       {12799, 27},     /* sk */
+       {54341, 121},    /* sk-sk */
+       {40530, 36},     /* sl */
+       {54347, 130},    /* sl-si */
+       {40075, 28},     /* sq */
+       {54353, 122},    /* sq-al */
+       {50930, 276},    /* sr */
+       {54359, 264},    /* sr-cyrl */
+       {54367, 226},    /* sr-cyrl-ba */
+       {54378, 245},    /* sr-cyrl-me */
+       {54389, 237},    /* sr-cyrl-rs */
+       {54400, 265},    /* sr-latn */
+       {54408, 222},    /* sr-latn-ba */
+       {54419, 241},    /* sr-latn-me */
+       {54430, 233},    /* sr-latn-rs */
+       {40121, 29},     /* sv */
+       {54441, 192},    /* sv-fi */
+       {54447, 123},    /* sv-se */
+       {41835, 60},     /* sw */
+       {54453, 150},    /* sw-ke */
+       {42249, 66},     /* ta */
+       {54459, 155},    /* ta-in */
+       {42347, 67},     /* te */
+       {54465, 156},    /* te-in */
+       {40736, 40},     /* tg */
+       {54471, 277},    /* tg-cyrl */
+       {54479, 134},    /* tg-cyrl-tj */
+       {40148, 30},     /* th */
+       {54490, 124},    /* th-th */
+       {41120, 47},     /* tn */
+       {54496, 141},    /* tn-za */
+       {12808, 31},     /* tr */
+       {54502, 125},    /* tr-tr */
+       {43358, 81},     /* tzm */
+       {54508, 279},    /* tzm-latn */
+       {40357, 34},     /* uk */
+       {54517, 128},    /* uk-ua */
+       {40244, 32},     /* ur */
+       {54523, 126},    /* ur-pk */
+       {41885, 61},     /* uz */
+       {54529, 271},    /* uz-cyrl */
+       {54537, 195},    /* uz-cyrl-uz */
+       {54548, 278},    /* uz-latn */
+       {54556, 151},    /* uz-latn-uz */
+       {40820, 42},     /* vi */
+       {54567, 136},    /* vi-vn */
+       {41147, 48},     /* xh */
+       {54573, 142},    /* xh-za */
+       {43568, 86},     /* yo */
+       {54579, 173},    /* yo-ng */
+       {38856, 267},    /* zh */
+       {54585, 3},      /* zh-chs */
+       {54592, 274},    /* zh-cht */
+       {54599, 183},    /* zh-cn */
+       {54605, 4},      /* zh-hans */
+       {54613, 273},    /* zh-hant */
+       {54621, 198},    /* zh-hk */
+       {54627, 212},    /* zh-mo */
+       {54633, 205},    /* zh-sg */
+       {54639, 99},     /* zh-tw */
+       {41173, 49},     /* zu */
+       {54645, 143}     /* zu-za */
 };
 
 
 static const RegionInfoEntry region_entries [] = {
-       { 224,52399,49438,49438,54676,54697,38584,54744,54748,54776},
-       { 3,48076,54800,54800,54804,54816,38355,54835,54839,54854},
-       { 6,45392,54867,54867,54871,54879,37893,54889,54893,54906},
-       { 7,1929,50712,50712,54920,54928,38136,54945,54949,54963},
-       { 11,51890,50243,50243,54989,54989,37626,51613,54999,55014},
-       { 14,49587,55029,55029,55033,55041,37522,55053,55057,55057},
-       { 12,49620,55062,55062,55066,55066,37626,55076,55080,55080},
-       { 5,46290,40985,40985,55098,55109,38390,55121,55125,55143},
-       { 25,50185,55163,55163,55167,55190,38452,55210,55214,55250},
-       { 23,49390,55270,55270,55274,55285,38428,55310,55314,55331},
-       { 21,48882,40505,40505,55372,55380,37522,55053,55057,55389},
-       { 35,44176,38734,38734,55394,55403,37504,55420,55424,55438},
-       { 17,52511,55464,55464,55468,55476,38594,55491,55495,55510},
-       { 26,52691,55534,55534,55538,55538,38618,42945,55546,55565},
-       { 32,45096,55575,55575,55579,55586,37781,55593,55597,55612},
-       { 29,45778,55628,55628,55632,55640,37996,55657,55661,55678},
-       { 24,51647,55710,55710,55714,55714,37626,55721,55725,55725},
-       { 39,49713,55739,55739,55743,55743,37626,55750,55754,55770},
-       { 223,13778,55786,55786,55790,55802,37788,37788,55809,55821},
-       { 46,52292,55835,55835,55839,55839,37626,55845,55849,55862},
-       { 45,13857,55875,55875,55879,55885,37543,55904,55908,55921},
-       { 51,51491,55940,55940,55944,55944,37626,55953,55957,55972},
-       { 54,50487,55988,55988,55992,55992,38470,56003,56007,56026},
-       { 75,44339,56047,56047,56051,56066,37546,56084,56088,56110},
-       { 94,44429,39036,39036,56125,56133,37522,55053,55057,55057},
-       { 61,44381,56145,56145,56149,56157,37574,56165,56169,56182},
-       { 65,51119,56194,56194,56198,56217,37626,56239,56243,56258},
-       { 4,50247,56274,56274,56278,56286,38455,56301,56305,56320},
-       { 66,52109,56344,56344,56348,56348,37626,56356,56360,56370},
-       { 70,45876,53002,53002,56392,56400,37522,55053,55057,55389},
-       { 67,49442,56406,56406,56410,56416,38432,56423,56427,56442},
-       { 217,44219,39203,39203,56460,56466,37522,55053,55057,55389},
-       { 73,47955,56474,56474,56478,56487,38335,56503,56507,56522},
-       { 77,44559,39250,39250,56548,56556,37522,55053,55057,55389},
-       { 81,46707,56562,56562,56566,56580,37574,56165,56169,56589},
-       { 84,44603,39303,39303,56602,56602,37522,55053,55057,55389},
-       { 242,47612,56609,56609,56613,56628,38279,56645,56649,56672},
-       { 88,46653,56694,56694,56698,56706,0,56737,56741,56755},
-       { 93,48354,56790,56790,56794,56804,37574,56165,56169,56821},
-       { 98,44485,56841,56841,56845,56852,37522,55053,55057,56865},
-       { 99,50053,56874,56874,56878,56878,8056,56888,56892,56911},
-       { 104,49535,56932,56932,56936,56956,37626,56984,56988,57005},
-       { 106,52831,57012,57012,57016,57016,2436,57025,57029,57046},
-       { 108,45295,40018,40018,57065,57073,37890,57082,57086,57100},
-       { 109,44704,39415,39415,57114,57122,37699,57136,57140,57157},
-       { 111,45641,57171,57171,57175,57175,37972,57185,57189,57207},
-       { 68,49235,57224,57224,57228,57236,37522,55053,55057,55057},
-       { 117,44652,57242,57242,57246,57253,37672,57264,57268,57287},
-       { 113,46761,40355,40355,57294,57300,38215,57313,57317,57330},
-       { 121,48644,57365,57365,57369,57374,38401,57387,57391,57403},
-       { 116,46101,57425,57425,57429,57434,38090,57445,57449,57462},
-       { 110,44753,39462,39462,57482,57490,37574,57498,57502,57519},
-       { 118,44796,39510,39510,57535,57541,37522,55053,55057,55057},
-       { 124,51267,57548,57548,57552,57552,37626,57560,57564,57564},
-       { 126,51793,57580,57580,57584,57591,38554,57604,57608,57624},
-       { 122,44841,39562,39562,57646,57652,37712,57659,57663,57676},
-       { 129,46897,57686,57686,57690,57690,38239,57696,57700,57716},
-       { 40,47678,43019,43019,57734,57743,38282,57765,57769,57784},
-       { 134,44896,39617,39617,57816,57828,37716,57841,57845,57862},
-       { 136,52214,57879,57879,57883,57890,38574,57903,57907,57921},
-       { 138,47720,43099,43099,57943,43089,38286,57948,57952,57964},
-       { 139,52027,57984,57984,57988,57996,38564,58007,58011,58026},
-       { 145,50396,58048,58048,58052,58052,0,37788,55809,58066},
-       { 42,47896,58084,58084,58088,58098,38327,58130,58134,58151},
-       { 141,45974,58199,58199,58203,58213,38066,58221,58225,58242},
-       { 147,49972,58257,58257,58261,58272,37522,55053,55057,55057},
-       { 140,45922,58282,58282,58286,58293,37522,55053,55057,58301},
-       { 148,49855,58306,58306,58310,58316,38442,58327,58331,58344},
-       { 159,50716,42777,42777,58364,58372,38474,58385,58389,58405},
-       { 158,50841,58425,58425,58429,58429,37522,55053,55057,55389},
-       { 270,51969,58436,58436,58440,58451,37522,55053,55057,58469},
-       { 19618,46406,58474,58474,58478,58488,38161,58474,58509,58526},
-       { 151,50336,58558,58558,58562,58578,38465,58606,58610,58626},
-       { 163,46800,41523,41523,58636,58636,37522,55053,55057,58642},
-       { 166,48831,58647,58647,58651,58658,37626,58666,58670,58683},
-       { 175,48184,58697,58697,58701,58709,38362,58718,58722,58737},
-       { 182,52885,58743,58743,58747,58747,38621,58757,58761,58781},
-       { 176,44948,39655,39655,58804,58816,37522,55053,55057,55057},
-       { 177,45006,39704,39704,58826,58833,37574,58839,58843,58859},
-       { 178,48016,58873,58873,58877,58883,38342,58899,58903,58918},
-       { 183,50431,58959,58959,58963,58963,37626,58975,58979,58979},
-       { 164,51236,58998,58998,59002,59007,38503,59018,59022,59033},
-       { 192,50793,42088,42088,59053,59060,38484,59068,59072,59090},
-       { 187,51692,59107,59107,59111,59116,38542,59122,59126,59145},
-       { 201,48130,59163,59163,59167,59179,38358,59189,59193,59193},
-       { 190,45580,59209,59209,59213,59222,37914,59237,59241,59257},
-       { 191,45047,59285,59285,59289,59296,37739,59303,59307,59320},
-       { 202,52943,59334,59334,59338,59338,37626,56356,56360,56370},
-       { 193,49098,59350,59350,59354,59354,37522,55053,55057,55057},
-       { 185,52563,59363,59363,59367,59367,38604,59376,59380,59399},
-       { 197,52615,59418,59418,59422,59428,38608,59435,59439,59451},
-       { 200,45191,59469,59469,59473,59481,0,59490,59494,59507},
-       { 271,51561,53365,53365,59521,59528,38527,59541,59545,59559},
-       { 203,45247,39943,39943,59572,59579,37810,59592,59596,59610},
-       { 204,48512,59642,59642,59646,59646,38366,59653,59657,0},
-       { 205,13775,59671,59671,59675,59688,37446,59735,59739,59751},
-       { 221,45436,59771,59771,59775,59782,37574,59790,59794,59808},
-       { 215,49919,59821,59821,59825,59835,37626,59845,59849,59866},
-       { 212,45834,59879,59879,59883,59892,37522,55053,55057,59902},
-       { 143,45346,59907,59907,59911,59920,37522,55053,55057,55057},
-       { 72,52749,40582,40582,59930,59930,37626,56356,56360,56370},
-       { 222,51617,59942,59942,59946,59952,38532,59963,59967,59980},
-       { 227,45483,40191,40191,60000,40181,37906,60009,60013,60023},
-       { 228,46053,60042,60042,60046,60057,38383,60078,60082,60101},
-       { 234,51011,60114,60114,60118,60126,38488,60135,60139,60154},
-       { 235,45529,60175,60175,60179,60186,37910,60195,60199,60212},
-       { 225,51836,60226,60226,60230,60230,37626,60250,60254,60254},
-       { 237,44270,60281,60281,60285,60292,38369,60299,60303,60321},
-       { 241,45708,40416,40416,60331,60339,37975,60354,60358,60376},
-       { 244,44518,60410,60410,60414,60414,37626,56356,56360,56360},
-       { 246,52449,60428,60428,60432,60432,37626,60440,60444,60459},
-       { 247,46963,41930,41930,60473,60484,38395,60497,60501,60516},
-       { 249,51321,60535,60535,60539,60539,38513,60549,60553,60573},
-       { 251,46159,60593,60593,60597,60605,38132,60616,60620,60636},
-       { 261,51439,60655,60655,60659,60665,38517,60676,60680,60692},
-       { 209,46437,60710,60710,60714,0,10836,60727,60731,0},
-       { 264,52059,60750,60750,60754,60754,37626,56356,56360,56360}
+       { 224,52374,49413,49413,54651,54672,38559,54719,54723,54751},
+       { 3,48051,54775,54775,54779,54791,38330,54810,54814,54829},
+       { 6,45367,54842,54842,54846,54854,37868,54864,54868,54881},
+       { 7,1929,50687,50687,54895,54903,38111,54920,54924,54938},
+       { 11,51865,50218,50218,54964,54964,37601,51588,54974,54989},
+       { 14,49562,55004,55004,55008,55016,37497,55028,55032,55032},
+       { 12,49595,55037,55037,55041,55041,37601,55051,55055,55055},
+       { 5,46265,40960,40960,55073,55084,38365,55096,55100,55118},
+       { 25,50160,55138,55138,55142,55165,38427,55185,55189,55225},
+       { 23,49365,55245,55245,55249,55260,38403,55285,55289,55306},
+       { 21,48857,40480,40480,55347,55355,37497,55028,55032,55364},
+       { 35,44151,38709,38709,55369,55378,37479,55395,55399,55413},
+       { 17,52486,55439,55439,55443,55451,38569,55466,55470,55485},
+       { 26,52666,55509,55509,55513,55513,38593,42920,55521,55540},
+       { 32,45071,55550,55550,55554,55561,37756,55568,55572,55587},
+       { 29,45753,55603,55603,55607,55615,37971,55632,55636,55653},
+       { 24,51622,55685,55685,55689,55689,37601,55696,55700,55700},
+       { 39,49688,55714,55714,55718,55718,37601,55725,55729,55745},
+       { 223,13753,55761,55761,55765,55777,37763,37763,55784,55796},
+       { 46,52267,55810,55810,55814,55814,37601,55820,55824,55837},
+       { 45,13832,55850,55850,55854,55860,37518,55879,55883,55896},
+       { 51,51466,55915,55915,55919,55919,37601,55928,55932,55947},
+       { 54,50462,55963,55963,55967,55967,38445,55978,55982,56001},
+       { 75,44314,56022,56022,56026,56041,37521,56059,56063,56085},
+       { 94,44404,39011,39011,56100,56108,37497,55028,55032,55032},
+       { 61,44356,56120,56120,56124,56132,37549,56140,56144,56157},
+       { 65,51094,56169,56169,56173,56192,37601,56214,56218,56233},
+       { 4,50222,56249,56249,56253,56261,38430,56276,56280,56295},
+       { 66,52084,56319,56319,56323,56323,37601,56331,56335,56345},
+       { 70,45851,52977,52977,56367,56375,37497,55028,55032,55364},
+       { 67,49417,56381,56381,56385,56391,38407,56398,56402,56417},
+       { 217,44194,39178,39178,56435,56441,37497,55028,55032,55364},
+       { 73,47930,56449,56449,56453,56462,38310,56478,56482,56497},
+       { 77,44534,39225,39225,56523,56531,37497,55028,55032,55364},
+       { 81,46682,56537,56537,56541,56555,37549,56140,56144,56564},
+       { 84,44578,39278,39278,56577,56577,37497,55028,55032,55364},
+       { 242,47587,56584,56584,56588,56603,38254,56620,56624,56647},
+       { 88,46628,56669,56669,56673,56681,0,56712,56716,56730},
+       { 93,48329,56765,56765,56769,56779,37549,56140,56144,56796},
+       { 98,44460,56816,56816,56820,56827,37497,55028,55032,56840},
+       { 99,50028,56849,56849,56853,56853,8056,56863,56867,56886},
+       { 104,49510,56907,56907,56911,56931,37601,56959,56963,56980},
+       { 106,52806,56987,56987,56991,56991,2436,57000,57004,57021},
+       { 108,45270,39993,39993,57040,57048,37865,57057,57061,57075},
+       { 109,44679,39390,39390,57089,57097,37674,57111,57115,57132},
+       { 111,45616,57146,57146,57150,57150,37947,57160,57164,57182},
+       { 68,49210,57199,57199,57203,57211,37497,55028,55032,55032},
+       { 117,44627,57217,57217,57221,57228,37647,57239,57243,57262},
+       { 113,46736,40330,40330,57269,57275,38190,57288,57292,57305},
+       { 121,48619,57340,57340,57344,57349,38376,57362,57366,57378},
+       { 116,46076,57400,57400,57404,57409,38065,57420,57424,57437},
+       { 110,44728,39437,39437,57457,57465,37549,57473,57477,57494},
+       { 118,44771,39485,39485,57510,57516,37497,55028,55032,55032},
+       { 124,51242,57523,57523,57527,57527,37601,57535,57539,57539},
+       { 126,51768,57555,57555,57559,57566,38529,57579,57583,57599},
+       { 122,44816,39537,39537,57621,57627,37687,57634,57638,57651},
+       { 129,46872,57661,57661,57665,57665,38214,57671,57675,57691},
+       { 40,47653,42994,42994,57709,57718,38257,57740,57744,57759},
+       { 134,44871,39592,39592,57791,57803,37691,57816,57820,57837},
+       { 136,52189,57854,57854,57858,57865,38549,57878,57882,57896},
+       { 138,47695,43074,43074,57918,43064,38261,57923,57927,57939},
+       { 139,52002,57959,57959,57963,57971,38539,57982,57986,58001},
+       { 145,50371,58023,58023,58027,58027,0,37763,55784,58041},
+       { 42,47871,58059,58059,58063,58073,38302,58105,58109,58126},
+       { 141,45949,58174,58174,58178,58188,38041,58196,58200,58217},
+       { 147,49947,58232,58232,58236,58247,37497,55028,55032,55032},
+       { 140,45897,58257,58257,58261,58268,37497,55028,55032,58276},
+       { 148,49830,58281,58281,58285,58291,38417,58302,58306,58319},
+       { 159,50691,42752,42752,58339,58347,38449,58360,58364,58380},
+       { 158,50816,58400,58400,58404,58404,37497,55028,55032,55364},
+       { 270,51944,58411,58411,58415,58426,37497,55028,55032,58444},
+       { 19618,46381,58449,58449,58453,58463,38136,58449,58484,58501},
+       { 151,50311,58533,58533,58537,58553,38440,58581,58585,58601},
+       { 163,46775,41498,41498,58611,58611,37497,55028,55032,58617},
+       { 166,48806,58622,58622,58626,58633,37601,58641,58645,58658},
+       { 175,48159,58672,58672,58676,58684,38337,58693,58697,58712},
+       { 182,52860,58718,58718,58722,58722,38596,58732,58736,58756},
+       { 176,44923,39630,39630,58779,58791,37497,55028,55032,55032},
+       { 177,44981,39679,39679,58801,58808,37549,58814,58818,58834},
+       { 178,47991,58848,58848,58852,58858,38317,58874,58878,58893},
+       { 183,50406,58934,58934,58938,58938,37601,58950,58954,58954},
+       { 164,51211,58973,58973,58977,58982,38478,58993,58997,59008},
+       { 192,50768,42063,42063,59028,59035,38459,59043,59047,59065},
+       { 187,51667,59082,59082,59086,59091,38517,59097,59101,59120},
+       { 201,48105,59138,59138,59142,59154,38333,59164,59168,59168},
+       { 190,45555,59184,59184,59188,59197,37889,59212,59216,59232},
+       { 191,45022,59260,59260,59264,59271,37714,59278,59282,59295},
+       { 202,52918,59309,59309,59313,59313,37601,56331,56335,56345},
+       { 193,49073,59325,59325,59329,59329,37497,55028,55032,55032},
+       { 185,52538,59338,59338,59342,59342,38579,59351,59355,59374},
+       { 197,52590,59393,59393,59397,59403,38583,59410,59414,59426},
+       { 200,45166,59444,59444,59448,59456,0,59465,59469,59482},
+       { 271,51536,53340,53340,59496,59503,38502,59516,59520,59534},
+       { 203,45222,39918,39918,59547,59554,37785,59567,59571,59585},
+       { 204,48487,59617,59617,59621,59621,38341,59628,59632,0},
+       { 205,13750,59646,59646,59650,59663,37421,59710,59714,59726},
+       { 221,45411,59746,59746,59750,59757,37549,59765,59769,59783},
+       { 215,49894,59796,59796,59800,59810,37601,59820,59824,59841},
+       { 212,45809,59854,59854,59858,59867,37497,55028,55032,59877},
+       { 143,45321,59882,59882,59886,59895,37497,55028,55032,55032},
+       { 72,52724,40557,40557,59905,59905,37601,56331,56335,56345},
+       { 222,51592,59917,59917,59921,59927,38507,59938,59942,59955},
+       { 227,45458,40166,40166,59975,40156,37881,59984,59988,59998},
+       { 228,46028,60017,60017,60021,60032,38358,60053,60057,60076},
+       { 234,50986,60089,60089,60093,60101,38463,60110,60114,60129},
+       { 235,45504,60150,60150,60154,60161,37885,60170,60174,60187},
+       { 225,51811,60201,60201,60205,60205,37601,60225,60229,60229},
+       { 237,44245,60256,60256,60260,60267,38344,60274,60278,60296},
+       { 241,45683,40391,40391,60306,60314,37950,60329,60333,60351},
+       { 244,44493,60385,60385,60389,60389,37601,56331,56335,56335},
+       { 246,52424,60403,60403,60407,60407,37601,60415,60419,60434},
+       { 247,46938,41905,41905,60448,60459,38370,60472,60476,60491},
+       { 249,51296,60510,60510,60514,60514,38488,60524,60528,60548},
+       { 251,46134,60568,60568,60572,60580,38107,60591,60595,60611},
+       { 261,51414,60630,60630,60634,60640,38492,60651,60655,60667},
+       { 209,46412,60685,60685,60689,0,10794,60702,60706,0},
+       { 264,52034,60725,60725,60729,60729,37601,56331,56335,56335}
 };
 
 
 static const RegionInfoNameEntry region_name_entries [] = {
-       {52399, 0},      /* AE */
-       {48076, 1},      /* AF */
-       {45392, 2},      /* AL */
+       {52374, 0},      /* AE */
+       {48051, 1},      /* AF */
+       {45367, 2},      /* AL */
        {1929, 3},       /* AM */
-       {51890, 4},      /* AR */
-       {49587, 5},      /* AT */
-       {49620, 6},      /* AU */
-       {46290, 7},      /* AZ */
-       {50185, 8},      /* BA */
-       {49390, 9},      /* BD */
-       {48882, 10},     /* BE */
-       {44176, 11},     /* BG */
-       {52511, 12},     /* BH */
-       {52691, 13},     /* BO */
-       {45096, 14},     /* BR */
-       {45778, 15},     /* BY */
-       {51647, 16},     /* BZ */
-       {49713, 17},     /* CA */
-       {13778, 18},     /* CH */
-       {52292, 19},     /* CL */
-       {13857, 20},     /* CN */
-       {51491, 21},     /* CO */
-       {50487, 22},     /* CR */
-       {44339, 23},     /* CZ */
-       {44429, 24},     /* DE */
-       {44381, 25},     /* DK */
-       {51119, 26},     /* DO */
-       {50247, 27},     /* DZ */
-       {52109, 28},     /* EC */
-       {45876, 29},     /* EE */
-       {49442, 30},     /* EG */
-       {44219, 31},     /* ES */
-       {47955, 32},     /* ET */
-       {44559, 33},     /* FI */
-       {46707, 34},     /* FO */
-       {44603, 35},     /* FR */
-       {47612, 36},     /* GB */
-       {46653, 37},     /* GE */
-       {48354, 38},     /* GL */
-       {44485, 39},     /* GR */
-       {50053, 40},     /* GT */
-       {49535, 41},     /* HK */
-       {52831, 42},     /* HN */
-       {45295, 43},     /* HR */
-       {44704, 44},     /* HU */
-       {45641, 45},     /* ID */
-       {49235, 46},     /* IE */
-       {44652, 47},     /* IL */
-       {46761, 48},     /* IN */
-       {48644, 49},     /* IQ */
-       {46101, 50},     /* IR */
-       {44753, 51},     /* IS */
-       {44796, 52},     /* IT */
-       {51267, 53},     /* JM */
-       {51793, 54},     /* JO */
-       {44841, 55},     /* JP */
-       {46897, 56},     /* KE */
-       {47678, 57},     /* KH */
-       {44896, 58},     /* KR */
-       {52214, 59},     /* KW */
-       {47720, 60},     /* LA */
-       {52027, 61},     /* LB */
-       {50396, 62},     /* LI */
-       {47896, 63},     /* LK */
-       {45974, 64},     /* LT */
-       {49972, 65},     /* LU */
-       {45922, 66},     /* LV */
-       {49855, 67},     /* LY */
-       {50716, 68},     /* MA */
-       {50841, 69},     /* MC */
-       {51969, 70},     /* ME */
-       {46406, 71},     /* MK */
-       {50336, 72},     /* MO */
-       {46800, 73},     /* MT */
-       {48831, 74},     /* MX */
-       {48184, 75},     /* NG */
-       {52885, 76},     /* NI */
-       {44948, 77},     /* NL */
-       {45006, 78},     /* NO */
-       {48016, 79},     /* NP */
-       {50431, 80},     /* NZ */
-       {51236, 81},     /* OM */
-       {50793, 82},     /* PA */
-       {51692, 83},     /* PE */
-       {48130, 84},     /* PH */
-       {45580, 85},     /* PK */
-       {45047, 86},     /* PL */
-       {52943, 87},     /* PR */
-       {49098, 88},     /* PT */
-       {52563, 89},     /* PY */
-       {52615, 90},     /* QA */
-       {45191, 91},     /* RO */
-       {51561, 92},     /* RS */
-       {45247, 93},     /* RU */
-       {48512, 94},     /* RW */
-       {13775, 95},     /* SA */
-       {45436, 96},     /* SE */
-       {49919, 97},     /* SG */
-       {45834, 98},     /* SI */
-       {45346, 99},     /* SK */
-       {52749, 100},    /* SV */
-       {51617, 101},    /* SY */
-       {45483, 102},    /* TH */
-       {46053, 103},    /* TJ */
-       {51011, 104},    /* TN */
-       {45529, 105},    /* TR */
-       {51836, 106},    /* TT */
-       {44270, 107},    /* TW */
-       {45708, 108},    /* UA */
-       {44518, 109},    /* US */
-       {52449, 110},    /* UY */
-       {46963, 111},    /* UZ */
-       {51321, 112},    /* VE */
-       {46159, 113},    /* VN */
-       {51439, 114},    /* YE */
-       {46437, 115},    /* ZA */
-       {52059, 116}     /* ZW */
+       {51865, 4},      /* AR */
+       {49562, 5},      /* AT */
+       {49595, 6},      /* AU */
+       {46265, 7},      /* AZ */
+       {50160, 8},      /* BA */
+       {49365, 9},      /* BD */
+       {48857, 10},     /* BE */
+       {44151, 11},     /* BG */
+       {52486, 12},     /* BH */
+       {52666, 13},     /* BO */
+       {45071, 14},     /* BR */
+       {45753, 15},     /* BY */
+       {51622, 16},     /* BZ */
+       {49688, 17},     /* CA */
+       {13753, 18},     /* CH */
+       {52267, 19},     /* CL */
+       {13832, 20},     /* CN */
+       {51466, 21},     /* CO */
+       {50462, 22},     /* CR */
+       {44314, 23},     /* CZ */
+       {44404, 24},     /* DE */
+       {44356, 25},     /* DK */
+       {51094, 26},     /* DO */
+       {50222, 27},     /* DZ */
+       {52084, 28},     /* EC */
+       {45851, 29},     /* EE */
+       {49417, 30},     /* EG */
+       {44194, 31},     /* ES */
+       {47930, 32},     /* ET */
+       {44534, 33},     /* FI */
+       {46682, 34},     /* FO */
+       {44578, 35},     /* FR */
+       {47587, 36},     /* GB */
+       {46628, 37},     /* GE */
+       {48329, 38},     /* GL */
+       {44460, 39},     /* GR */
+       {50028, 40},     /* GT */
+       {49510, 41},     /* HK */
+       {52806, 42},     /* HN */
+       {45270, 43},     /* HR */
+       {44679, 44},     /* HU */
+       {45616, 45},     /* ID */
+       {49210, 46},     /* IE */
+       {44627, 47},     /* IL */
+       {46736, 48},     /* IN */
+       {48619, 49},     /* IQ */
+       {46076, 50},     /* IR */
+       {44728, 51},     /* IS */
+       {44771, 52},     /* IT */
+       {51242, 53},     /* JM */
+       {51768, 54},     /* JO */
+       {44816, 55},     /* JP */
+       {46872, 56},     /* KE */
+       {47653, 57},     /* KH */
+       {44871, 58},     /* KR */
+       {52189, 59},     /* KW */
+       {47695, 60},     /* LA */
+       {52002, 61},     /* LB */
+       {50371, 62},     /* LI */
+       {47871, 63},     /* LK */
+       {45949, 64},     /* LT */
+       {49947, 65},     /* LU */
+       {45897, 66},     /* LV */
+       {49830, 67},     /* LY */
+       {50691, 68},     /* MA */
+       {50816, 69},     /* MC */
+       {51944, 70},     /* ME */
+       {46381, 71},     /* MK */
+       {50311, 72},     /* MO */
+       {46775, 73},     /* MT */
+       {48806, 74},     /* MX */
+       {48159, 75},     /* NG */
+       {52860, 76},     /* NI */
+       {44923, 77},     /* NL */
+       {44981, 78},     /* NO */
+       {47991, 79},     /* NP */
+       {50406, 80},     /* NZ */
+       {51211, 81},     /* OM */
+       {50768, 82},     /* PA */
+       {51667, 83},     /* PE */
+       {48105, 84},     /* PH */
+       {45555, 85},     /* PK */
+       {45022, 86},     /* PL */
+       {52918, 87},     /* PR */
+       {49073, 88},     /* PT */
+       {52538, 89},     /* PY */
+       {52590, 90},     /* QA */
+       {45166, 91},     /* RO */
+       {51536, 92},     /* RS */
+       {45222, 93},     /* RU */
+       {48487, 94},     /* RW */
+       {13750, 95},     /* SA */
+       {45411, 96},     /* SE */
+       {49894, 97},     /* SG */
+       {45809, 98},     /* SI */
+       {45321, 99},     /* SK */
+       {52724, 100},    /* SV */
+       {51592, 101},    /* SY */
+       {45458, 102},    /* TH */
+       {46028, 103},    /* TJ */
+       {50986, 104},    /* TN */
+       {45504, 105},    /* TR */
+       {51811, 106},    /* TT */
+       {44245, 107},    /* TW */
+       {45683, 108},    /* UA */
+       {44493, 109},    /* US */
+       {52424, 110},    /* UY */
+       {46938, 111},    /* UZ */
+       {51296, 112},    /* VE */
+       {46134, 113},    /* VN */
+       {51414, 114},    /* YE */
+       {46412, 115},    /* ZA */
+       {52034, 116}     /* ZW */
 };
 
 
@@ -2607,17 +2607,10 @@ static const char locale_strings [] = {
        "m\xc3\xa5ndag\0"
        "tisdag\0"
        "l\xc3\xb6rdag\0"
-       "S\xc3\xb6n\0"
-       "M\xc3\xa5n\0"
-       "Tis\0"
-       "Ons\0"
-       "Tor\0"
-       "Fre\0"
-       "L\xc3\xb6r\0"
-       "Januari\0"
-       "Februari\0"
-       "Mars\0"
-       "Augusti\0"
+       "s\xc3\xb6n\0"
+       "m\xc3\xa5n\0"
+       "tis\0"
+       "l\xc3\xb6r\0"
        "augusti\0"
        "'den 'd MMMM yyyy\0"
        "dddd' den 'd MMMM yyyy\0"
@@ -2702,6 +2695,8 @@ static const char locale_strings [] = {
        "Jum\0"
        "Sab\0"
        "R\0"
+       "Januari\0"
+       "Februari\0"
        "Maret\0"
        "Mei\0"
        "Agustus\0"
@@ -4408,6 +4403,7 @@ static const char locale_strings [] = {
        "As\xe1\xb8\x8d\0"
        "Yennayer\0"
        "Yebrayer\0"
+       "Mars\0"
        "Ibrir\0"
        "Mayyu\0"
        "Yunyu\0"
@@ -4907,7 +4903,6 @@ static const char locale_strings [] = {
        "e.m.\0"
        "tysdag\0"
        "laurdag\0"
-       "m\xc3\xa5n\0"
        "tys\0"
        "lau\0"
        "Janeiro\0"
index db0421ec9ffbab9d2b9a6f2ba9d502672a06268b..8edf619c8d5b80df1c07177f10cfdbf1424d5685 100644 (file)
@@ -100,13 +100,7 @@ typedef struct {
  * Contains information about the type arguments for generic shared methods.
  */
 typedef struct {
-       /*
-        * If not NULL, determines whenever the class type arguments of the gshared method are references or vtypes.
-        * The array length is equal to class_inst->type_argv.
-        */
-       gboolean *var_is_vt;
-       /* Same for method type parameters */
-       gboolean *mvar_is_vt;
+       gboolean is_gsharedvt;
 } MonoGenericSharingContext;
 
 /* Simplified DWARF location list entry */
index 227b3cc96971a800e71c7a85bae27f3c8dcd2859..3de44d7a1db89342a2bd1282f14545a232ac12ed 100644 (file)
@@ -408,22 +408,26 @@ void *
 mono_mmap_open_handle (void *input_fd, MonoString *mapName, gint64 *capacity, int access, int options, int *error)
 {
        MmapHandle *handle;
-       char *c_mapName = mono_string_to_utf8 (mapName);
-
-       named_regions_lock ();
-       handle = (MmapHandle*)g_hash_table_lookup (named_regions, c_mapName);
-       if (handle) {
-               *error = FILE_ALREADY_EXISTS;
-               handle = NULL;
-       } else {
-               //XXX we're exploiting wapi HANDLE == FD equivalence. THIS IS FRAGILE, create a _wapi_handle_to_fd call
+       if (!mapName) {
                handle = open_file_map (NULL, GPOINTER_TO_INT (input_fd), FILE_MODE_OPEN, capacity, access, options, error);
-               handle->name = g_strdup (c_mapName);
-               g_hash_table_insert (named_regions, handle->name, handle);
-       }
-       named_regions_unlock ();
+       } else {
+               char *c_mapName = mono_string_to_utf8 (mapName);
 
-       g_free (c_mapName);
+               named_regions_lock ();
+               handle = (MmapHandle*)g_hash_table_lookup (named_regions, c_mapName);
+               if (handle) {
+                       *error = FILE_ALREADY_EXISTS;
+                       handle = NULL;
+               } else {
+                       //XXX we're exploiting wapi HANDLE == FD equivalence. THIS IS FRAGILE, create a _wapi_handle_to_fd call
+                       handle = open_file_map (NULL, GPOINTER_TO_INT (input_fd), FILE_MODE_OPEN, capacity, access, options, error);
+                       handle->name = g_strdup (c_mapName);
+                       g_hash_table_insert (named_regions, handle->name, handle);
+               }
+               named_regions_unlock ();
+
+               g_free (c_mapName);
+       }
        return handle;
 }
 
index d4f5a2628f0ab8d233d0df1ad12001a5bd64a09a..af735ac67b93c11e9eadc738a1b3a5591c842551 100644 (file)
@@ -2026,6 +2026,14 @@ fill_iface_array (gpointer key, gpointer value, gpointer user_data)
                mono_metadata_free_type (inflated);
 }
 
+static guint
+get_interfaces_hash (gconstpointer v1)
+{
+       MonoClass *k = (MonoClass*)v1;
+
+       return k->type_token;
+}
+
 ICALL_EXPORT MonoArray*
 ves_icall_Type_GetInterfaces (MonoReflectionType* type)
 {
@@ -2035,7 +2043,7 @@ ves_icall_Type_GetInterfaces (MonoReflectionType* type)
        FillIfaceArrayData data = { 0 };
        int len;
 
-       GHashTable *iface_hash = g_hash_table_new (NULL, NULL);
+       GHashTable *iface_hash = g_hash_table_new (get_interfaces_hash, NULL);
 
        if (class->generic_class && class->generic_class->context.class_inst->is_open) {
                data.context = mono_class_get_context (class);
@@ -4904,7 +4912,7 @@ mono_module_get_types (MonoDomain *domain, MonoImage *image, MonoArray **excepti
                if (!exportedOnly || mono_module_type_is_visible (tdef, image, i + 1)) {
                        MonoError error;
                        klass = mono_class_get_checked (image, (i + 1) | MONO_TOKEN_TYPE_DEF, &error);
-                       g_assert (!mono_loader_get_last_error ()); /* Plug any leaks */
+                       mono_loader_assert_no_error (); /* Plug any leaks */
                        
                        if (klass) {
                                mono_array_setref (res, count, mono_type_get_object (domain, &klass->byval_arg));
index 05cc3f7f83358d9caa035fb1985d7caf4a648938..d9ae9d6fde02568d9854d795c587b31ca8c8043c 100644 (file)
@@ -287,6 +287,17 @@ mono_loader_get_last_error (void)
        return (MonoLoaderError*)mono_native_tls_get_value (loader_error_thread_id);
 }
 
+void
+mono_loader_assert_no_error (void)
+{
+       MonoLoaderError *error = mono_loader_get_last_error ();
+
+       if (error) {
+               g_print ("Unhandled loader error: %x, %s %s %s\n", error->exception_type, error->msg, error->assembly_name, error->class_name);
+               g_assert_not_reached ();
+       }
+}
+
 /**
  * mono_loader_clear_error:
  *
@@ -511,7 +522,7 @@ field_from_memberref (MonoImage *image, guint32 token, MonoClass **retklass,
        field = mono_class_get_field_from_name_full (klass, fname, sig_type);
 
        if (!field) {
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
                mono_error_set_field_load (error, klass, fname, "Could not find field '%s'", fname);
        }
 
@@ -527,7 +538,7 @@ mono_field_from_token (MonoImage *image, guint32 token, MonoClass **retklass, Mo
 {
        MonoError error;
        MonoClassField *res = mono_field_from_token_checked (image, token, retklass, context, &error);
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        if (!mono_error_ok (&error)) {
                mono_loader_set_error_from_mono_error (&error);
                mono_error_cleanup (&error);
@@ -566,7 +577,7 @@ mono_field_from_token_checked (MonoImage *image, guint32 token, MonoClass **retk
 
        if (mono_metadata_token_table (token) == MONO_TABLE_MEMBERREF) {
                field = field_from_memberref (image, token, retklass, context, error);
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
        } else {
                type = mono_metadata_typedef_from_field (image, mono_metadata_token_index (token));
                if (!type) {
@@ -592,7 +603,7 @@ mono_field_from_token_checked (MonoImage *image, guint32 token, MonoClass **retk
        if (field && field->parent && !field->parent->generic_class && !field->parent->generic_container)
                mono_conc_hashtable_insert (image->field_cache, GUINT_TO_POINTER (token), field);
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return field;
 }
 
@@ -890,7 +901,7 @@ mono_method_get_signature_full (MonoMethod *method, MonoImage *image, guint32 to
        MonoError error;
        MonoMethodSignature *res = mono_method_get_signature_checked (method, image, token, context, &error);
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
 
        if (!res) {
                g_assert (!mono_error_ok (&error));
@@ -991,7 +1002,7 @@ mono_method_get_signature (MonoMethod *method, MonoImage *image, guint32 token)
        MonoError error;
        MonoMethodSignature *res = mono_method_get_signature_checked (method, image, token, NULL, &error);
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
 
        if (!res) {
                g_assert (!mono_error_ok (&error));
@@ -1143,11 +1154,11 @@ method_from_memberref (MonoImage *image, guint32 idx, MonoGenericContext *typesp
                g_free (msig);
        }
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return method;
 
 fail:
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        g_assert (!mono_error_ok (error));
        return NULL;
 }
@@ -1183,7 +1194,7 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i
 
        inst = mono_metadata_parse_generic_inst (image, NULL, param_count, ptr, &ptr);
        if (!inst) {
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
                mono_error_set_bad_image (error, image, "Cannot parse generic instance for methodspec 0x%08x", idx);
                return NULL;
        }
@@ -1216,7 +1227,7 @@ method_from_methodspec (MonoImage *image, MonoGenericContext *context, guint32 i
        new_context.method_inst = inst;
 
        method = mono_class_inflate_generic_method_full_checked (method, klass, &new_context, error);
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return method;
 }
 
@@ -1488,7 +1499,7 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char
        /*
         * Try loading the module using a variety of names
         */
-       for (i = 0; i < 4; ++i) {
+       for (i = 0; i < 5; ++i) {
                char *base_name = NULL, *dir_name = NULL;
                gboolean is_absolute = is_absolute_path (new_scope);
                
@@ -1522,6 +1533,14 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char
                                break;
                        }
                        continue;
+               case 3:
+                       if (!is_absolute && mono_dl_get_system_dir ()) {
+                               dir_name = (char*)mono_dl_get_system_dir ();
+                               file_name = g_path_get_basename (new_scope);
+                               base_name = NULL;
+                       } else
+                               continue;
+                       break;
                default:
 #ifndef TARGET_WIN32
                        if (!g_ascii_strcasecmp ("user32.dll", new_scope) ||
@@ -1784,7 +1803,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass,
                MonoClass *handle_class;
 
                result = mono_lookup_dynamic_token_class (image, token, TRUE, &handle_class, context);
-               g_assert (!mono_loader_get_last_error ());
+               mono_loader_assert_no_error ();
 
                // This checks the memberref type as well
                if (result && handle_class != mono_defaults.methodhandle_class) {
@@ -1855,7 +1874,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass,
         */
        if (*sig & 0x10) {
                generic_container = mono_metadata_load_generic_params (image, token, container);
-               g_assert (!mono_loader_get_last_error ()); /* FIXME don't swallow this error. */
+               mono_loader_assert_no_error (); /* FIXME don't swallow this error. */
        }
        if (generic_container) {
                result->is_generic = TRUE;
@@ -1889,7 +1908,7 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass,
        if (generic_container)
                mono_method_set_generic_container (result, generic_container);
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return result;
 }
 
@@ -1905,7 +1924,7 @@ mono_get_method_full (MonoImage *image, guint32 token, MonoClass *klass,
 {
        MonoError error;
        MonoMethod *result = mono_get_method_checked (image, token, klass, context, &error);
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        if (!mono_error_ok (&error)) {
                mono_loader_set_error_from_mono_error (&error);
                mono_error_cleanup (&error);
@@ -2053,7 +2072,7 @@ mono_get_method_constrained (MonoImage *image, guint32 token, MonoClass *constra
        MonoError error;
        MonoMethod *result = mono_get_method_constrained_checked (image, token, constrained_class, context, cil_method, &error);
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        if (!mono_error_ok (&error)) {
                mono_loader_set_error_from_mono_error (&error);
                mono_error_cleanup (&error);
@@ -2403,7 +2422,7 @@ async_stack_walk_adapter (MonoStackFrameInfo *frame, MonoContext *ctx, gpointer
                if (frame->ji->async)
                        return d->func (NULL, frame->domain, frame->ji->code_start, frame->native_offset, d->user_data);
                else
-                       return d->func (mono_jit_info_get_method (frame->ji), frame->domain, frame->ji->code_start, frame->native_offset, d->user_data);
+                       return d->func (frame->actual_method, frame->domain, frame->ji->code_start, frame->native_offset, d->user_data);
                break;
        default:
                g_assert_not_reached ();
index 5697b59d3380fd4e18ed4fb82b3d808ace99e8c3..696d48e781adff3e168e079440db275b3be65a9d 100644 (file)
@@ -1979,13 +1979,13 @@ mono_metadata_parse_method_signature_full (MonoImage *m, MonoGenericContainer *c
        for (i = 0; i < method->param_count; ++i) {
                if (*ptr == MONO_TYPE_SENTINEL) {
                        if (method->call_convention != MONO_CALL_VARARG || def) {
-                               g_assert (!mono_loader_get_last_error ());
+                               mono_loader_assert_no_error ();
                                mono_error_set_bad_image (error, m, "Found sentinel for methoddef or no vararg");
                                g_free (pattrs);
                                return NULL;
                        }
                        if (method->sentinelpos >= 0) {
-                               g_assert (!mono_loader_get_last_error ());
+                               mono_loader_assert_no_error ();
                                mono_error_set_bad_image (error, m, "Found sentinel twice in the same signature.");
                                g_free (pattrs);
                                return NULL;
@@ -2024,7 +2024,7 @@ mono_metadata_parse_method_signature_full (MonoImage *m, MonoGenericContainer *c
         * Add signature to a cache and increase ref count...
         */
 
-       g_assert (!mono_loader_get_last_error ());
+       mono_loader_assert_no_error ();
        return method;
 }
 
@@ -6065,7 +6065,7 @@ mono_metadata_load_generic_param_constraints_checked (MonoImage *image, guint32
                return TRUE;
        for (i = 0; i < container->type_argc; i++) {
                if (!get_constraints (image, start_row + i, &mono_generic_container_get_param_info (container, i)->constraints, container, error)) {
-                       g_assert (!mono_loader_get_last_error ());
+                       mono_loader_assert_no_error ();
                        return FALSE;
                }
        }
index cc42ab867a124b20915b2bd4ad431e0571da77a6..2e753bcfe5d4e0ecd7b7c10f0a3bf7c472a63565 100644 (file)
@@ -191,6 +191,7 @@ DECL_OFFSET(MonoLMF, fregs)
 #elif defined(TARGET_ARM64)
 DECL_OFFSET(MonoLMF, pc)
 DECL_OFFSET(MonoLMF, gregs)
+DECL_OFFSET(DynCallArgs, regs)
 DECL_OFFSET(DynCallArgs, fpregs)
 DECL_OFFSET(DynCallArgs, n_fpargs)
 DECL_OFFSET(DynCallArgs, n_fpret)
index 64d6543aca9adc31201430081967578eddec89c7..d1ca2c423651574f6c4333d71e74a5490e65eaed 100755 (executable)
@@ -766,7 +766,7 @@ patch-libtool:
        chmod a+x ../../libtool
 
 # Utility target for patching libtool to get rid of the 'ranlib: file <file> has no symbols" warnings
-patch-libtool-osx:
+patch-osx-libtool:
        sed -e 's/old_archive_cmds=.*/old_archive_cmds="libtool -no_warning_for_no_symbols -static -o \\$$oldlib \\$$oldobjs"/g' < ../../libtool > 2; mv 2 ../../libtool
        chmod a+x ../../libtool
 
index c779920808f702cc341dc7231d0c80b6385a8b9f..64372e06c24db1d9043a75eadb017f15150238b6 100644 (file)
@@ -2,6 +2,7 @@ using System;
 using System.Reflection;
 using System.Collections.Generic;
 
+[AttributeUsageAttribute(AttributeTargets.All, Inherited = true, AllowMultiple = true)]
 public class CategoryAttribute : Attribute
 {
        public CategoryAttribute (string category) {
index c8d3372fe70dd577fcb1046dd0b8a4980a59b96e..8e4bab4984aaa42d0219decfba810b53429e12d0 100644 (file)
@@ -1167,24 +1167,25 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg)
        guint8 *code;
        guint8 *loop_start, *loop_branch_back, *loop_end_check, *imt_found_check;
        int i;
+       int pagesize = MONO_AOT_TRAMP_PAGE_SIZE;
 #define COMMON_TRAMP_SIZE 16
-       int count = (mono_pagesize () - COMMON_TRAMP_SIZE) / 8;
+       int count = (pagesize - COMMON_TRAMP_SIZE) / 8;
        int imm8, rot_amount;
        char symbol [128];
 
        if (!acfg->aot_opts.use_trampolines_page)
                return;
 
-       acfg->tramp_page_size = mono_pagesize ();
+       acfg->tramp_page_size = pagesize;
 
        sprintf (symbol, "%sspecific_trampolines_page", acfg->user_symbol_prefix);
-       emit_alignment (acfg, mono_pagesize ());
+       emit_alignment (acfg, pagesize);
        emit_global (acfg, symbol, TRUE);
        emit_label (acfg, symbol);
 
        /* emit the generic code first, the trampoline address + 8 is in the lr register */
        code = buf;
-       imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount);
+       imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount);
        ARM_SUB_REG_IMM (code, ARMREG_LR, ARMREG_LR, imm8, rot_amount);
        ARM_LDR_IMM (code, ARMREG_R1, ARMREG_LR, -8);
        ARM_LDR_IMM (code, ARMREG_PC, ARMREG_LR, -4);
@@ -1212,7 +1213,7 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg)
        emit_global (acfg, symbol, TRUE);
        emit_label (acfg, symbol);
        code = buf;
-       imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount);
+       imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount);
        ARM_SUB_REG_IMM (code, ARMREG_IP, ARMREG_IP, imm8, rot_amount);
        ARM_LDR_IMM (code, MONO_ARCH_RGCTX_REG, ARMREG_IP, -8);
        ARM_LDR_IMM (code, ARMREG_PC, ARMREG_IP, -4);
@@ -1239,7 +1240,7 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg)
        emit_label (acfg, symbol);
        code = buf;
        ARM_PUSH (code, (1 << ARMREG_R0) | (1 << ARMREG_R1) | (1 << ARMREG_R2) | (1 << ARMREG_R3));
-       imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount);
+       imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount);
        ARM_SUB_REG_IMM (code, ARMREG_IP, ARMREG_IP, imm8, rot_amount);
        ARM_LDR_IMM (code, ARMREG_R0, ARMREG_IP, -8);
        ARM_LDR_IMM (code, ARMREG_PC, ARMREG_IP, -4);
@@ -1269,7 +1270,7 @@ arch_emit_specific_trampoline_pages (MonoAotCompile *acfg)
        /* Need at least two free registers, plus a slot for storing the pc */
        ARM_PUSH (code, (1 << ARMREG_R0)|(1 << ARMREG_R1)|(1 << ARMREG_R2));
 
-       imm8 = mono_arm_is_rotated_imm8 (mono_pagesize (), &rot_amount);
+       imm8 = mono_arm_is_rotated_imm8 (pagesize, &rot_amount);
        ARM_SUB_REG_IMM (code, ARMREG_IP, ARMREG_IP, imm8, rot_amount);
        ARM_LDR_IMM (code, ARMREG_R0, ARMREG_IP, -8);
 
@@ -3261,7 +3262,7 @@ add_method (MonoAotCompile *acfg, MonoMethod *method)
 static void
 add_extra_method_with_depth (MonoAotCompile *acfg, MonoMethod *method, int depth)
 {
-       if (mono_method_is_generic_sharable_full (method, FALSE, TRUE, FALSE))
+       if (mono_method_is_generic_sharable_full (method, TRUE, TRUE, FALSE))
                method = mini_get_shared_method (method);
        else if ((acfg->opts & MONO_OPT_GSHAREDVT) && prefer_gsharedvt_method (acfg, method) && mono_method_is_generic_sharable_full (method, FALSE, FALSE, TRUE))
                /* Use the gsharedvt version */
@@ -4249,6 +4250,24 @@ add_generic_class_with_depth (MonoAotCompile *acfg, MonoClass *klass, int depth,
                        add_generic_class (acfg, mono_class_inflate_generic_class (enum_comparer, &ctx), FALSE, "EqualityComparer<T>");
                }
        }
+
+       /* Add an instance of ObjectComparer<T> which is created dynamically by Comparer<T> for enums */
+       if (klass->image == mono_defaults.corlib && !strcmp (klass->name_space, "System.Collections.Generic") && !strcmp (klass->name, "Comparer`1")) {
+               MonoClass *comparer;
+               MonoClass *tclass = mono_class_from_mono_type (klass->generic_class->context.class_inst->type_argv [0]);
+               MonoGenericContext ctx;
+               MonoType *args [16];
+
+               if (mono_class_is_enum (tclass)) {
+                       memset (&ctx, 0, sizeof (ctx));
+                       args [0] = &tclass->byval_arg;
+                       ctx.class_inst = mono_metadata_get_generic_inst (1, args);
+
+                       comparer = mono_class_from_name (mono_defaults.corlib, "System.Collections.Generic", "ObjectComparer`1");
+                       g_assert (comparer);
+                       add_generic_class (acfg, mono_class_inflate_generic_class (comparer, &ctx), FALSE, "Comparer<T>");
+               }
+       }
 }
 
 static void
@@ -5377,7 +5396,6 @@ static void
 emit_method_info (MonoAotCompile *acfg, MonoCompile *cfg)
 {
        MonoMethod *method;
-       GList *l;
        int pindex, buf_size, n_patches;
        GPtrArray *patches;
        MonoJumpInfo *patch_info;
@@ -5410,16 +5428,7 @@ emit_method_info (MonoAotCompile *acfg, MonoCompile *cfg)
                /* Not needed when loading the method */
                encode_value (0, p, &p);
 
-       /* String table */
-       if (cfg->opt & MONO_OPT_SHARED) {
-               encode_value (g_list_length (cfg->ldstr_list), p, &p);
-               for (l = cfg->ldstr_list; l; l = l->next) {
-                       encode_value ((long)l->data, p, &p);
-               }
-       }
-       else
-               /* Used only in shared mode */
-               g_assert (!cfg->ldstr_list);
+       g_assert (!(cfg->opt & MONO_OPT_SHARED));
 
        n_patches = 0;
        for (pindex = 0; pindex < patches->len; ++pindex) {
@@ -5704,34 +5713,8 @@ emit_exception_debug_info (MonoAotCompile *acfg, MonoCompile *cfg, gboolean stor
                p += p2 - buf2;
                g_free (buf2);
 
-               if (gsctx && (gsctx->var_is_vt || gsctx->mvar_is_vt)) {
-                       MonoMethodInflated *inflated;
-                       MonoGenericContext *context;
-                       MonoGenericInst *inst;
-
-                       g_assert (jinfo->d.method->is_inflated);
-                       inflated = (MonoMethodInflated*)jinfo->d.method;
-                       context = &inflated->context;
-
+               if (gsctx && gsctx->is_gsharedvt) {
                        encode_value (1, p, &p);
-                       if (context->class_inst) {
-                               inst = context->class_inst;
-
-                               encode_value (inst->type_argc, p, &p);
-                               for (i = 0; i < inst->type_argc; ++i)
-                                       encode_value (gsctx->var_is_vt [i], p, &p);
-                       } else {
-                               encode_value (0, p, &p);
-                       }
-                       if (context->method_inst) {
-                               inst = context->method_inst;
-
-                               encode_value (inst->type_argc, p, &p);
-                               for (i = 0; i < inst->type_argc; ++i)
-                                       encode_value (gsctx->mvar_is_vt [i], p, &p);
-                       } else {
-                               encode_value (0, p, &p);
-                       }
                } else {
                        encode_value (0, p, &p);
                }
@@ -6193,8 +6176,6 @@ emit_trampolines (MonoAotCompile *acfg)
                        emit_trampoline (acfg, acfg->got_offset, info);
                }
 
-               mono_arch_get_nullified_class_init_trampoline (&info);
-               emit_trampoline (acfg, acfg->got_offset, info);
 #if defined(MONO_ARCH_MONITOR_OBJECT_REG)
                mono_arch_create_monitor_enter_trampoline (&info, FALSE, TRUE);
                emit_trampoline (acfg, acfg->got_offset, info);
@@ -6936,9 +6917,9 @@ compile_method (MonoAotCompile *acfg, MonoMethod *method)
                                if (m->is_inflated) {
                                        if (!(mono_class_generic_sharing_enabled (m->klass) &&
                                                  mono_method_is_generic_sharable_full (m, FALSE, FALSE, FALSE)) &&
-                                               !method_has_type_vars (m)) {
+                                               (!method_has_type_vars (m) || mono_method_is_generic_sharable_full (m, TRUE, TRUE, FALSE))) {
                                                if (m->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) {
-                                                       if (mono_aot_mode_is_full (&acfg->aot_opts))
+                                                       if (mono_aot_mode_is_full (&acfg->aot_opts) && !method_has_type_vars (m))
                                                                add_extra_method_with_depth (acfg, mono_marshal_get_native_wrapper (m, TRUE, TRUE), depth + 1);
                                                } else {
                                                        add_extra_method_with_depth (acfg, m, depth + 1);
@@ -7300,8 +7281,10 @@ execute_system (const char * command)
        g_free (wstr);
 
        g_free (command);
-#else
+#elif defined (HAVE_SYSTEM)
        status = system (command);
+#else
+       g_assert_not_reached ();
 #endif
 
        return status;
@@ -8731,6 +8714,10 @@ collect_methods (MonoAotCompile *acfg)
                }
                */
 
+               if (method->is_generic || method->klass->generic_container)
+                       /* Compile the ref shared version instead */
+                       method = mini_get_shared_method (method);
+
                /* Since we add the normal methods first, their index will be equal to their zero based token index */
                add_method_with_index (acfg, method, i, FALSE);
                acfg->method_index ++;
@@ -8748,14 +8735,6 @@ collect_methods (MonoAotCompile *acfg)
                method = mono_get_method_checked (acfg->image, token, NULL, NULL, &error);
                report_loader_error (acfg, &error, "Failed to load method token 0x%x due to %s\n", i, mono_error_get_message (&error));
 
-               /*
-               if (strcmp (method->name, "gshared2"))
-                       continue;
-               */
-               /*
-               if (!strstr (method->klass->image->name, "mini"))
-                       continue;
-               */
                if (method->is_generic || method->klass->generic_container) {
                        MonoMethod *gshared;
 
index fceb9fb9184ceb3e6ec28f73d00d18c90dd60532..75f332eb9e45a54d314d4c95975b704f249572a2 100644 (file)
@@ -206,6 +206,9 @@ init_plt (MonoAotModule *info);
 static void
 compute_llvm_code_range (MonoAotModule *amodule, guint8 **code_start, guint8 **code_end);
 
+static gboolean
+mono_aot_init_method (MonoAotModule *amodule, guint32 method_index, MonoMethod *method, MonoClass **klass);
+
 /*****************************************************/
 /*                 AOT RUNTIME                       */
 /*****************************************************/
@@ -837,7 +840,10 @@ decode_method_ref_with_target (MonoAotModule *module, MethodRef *ref, MonoMethod
                        if (!m)
                                return FALSE;
                        mono_class_init (m->klass);
-                       ref->method = mono_marshal_get_remoting_invoke_with_check (m);
+                       if (mono_aot_only)
+                               ref->method = m;
+                       else
+                               ref->method = mono_marshal_get_remoting_invoke_with_check (m);
                        break;
                }
                case MONO_WRAPPER_PROXY_ISINST: {
@@ -2835,21 +2841,9 @@ decode_exception_debug_info (MonoAotModule *amodule, MonoDomain *domain,
                gi->generic_sharing_context = g_new0 (MonoGenericSharingContext, 1);
                if (decode_value (p, &p)) {
                        /* gsharedvt */
-                       int i, n;
                        MonoGenericSharingContext *gsctx = gi->generic_sharing_context;
 
-                       n = decode_value (p, &p);
-                       if (n) {
-                               gsctx->var_is_vt = alloc0_jit_info_data (domain, sizeof (gboolean) * n, async);
-                               for (i = 0; i < n; ++i)
-                                       gsctx->var_is_vt [i] = decode_value (p, &p);
-                       }
-                       n = decode_value (p, &p);
-                       if (n) {
-                               gsctx->mvar_is_vt = alloc0_jit_info_data (domain, sizeof (gboolean) * n, async);
-                               for (i = 0; i < n; ++i)
-                                       gsctx->mvar_is_vt [i] = decode_value (p, &p);
-                       }
+                       gsctx->is_gsharedvt = TRUE;
                }
        }
 
@@ -3573,12 +3567,9 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM
 {
        MonoClass *klass;
        gboolean from_plt = method == NULL;
-       MonoMemPool *mp;
-       int i, pindex, n_patches, used_strings;
-       gboolean keep_patches = TRUE;
-       guint8 *p;
        MonoJitInfo *jinfo = NULL;
        guint8 *code, *info;
+       gboolean res;
 
        if (mono_profiler_get_events () & MONO_PROFILE_ENTER_LEAVE) {
                if (mono_aot_only)
@@ -3587,7 +3578,7 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM
                return NULL;
        }
 
-       if ((domain != mono_get_root_domain ()) && (!(amodule->info.opts & MONO_OPT_SHARED)))
+       if (domain != mono_get_root_domain ())
                /* Non shared AOT code can't be used in other appdomains */
                return NULL;
 
@@ -3642,85 +3633,9 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM
                }
        }
 
-       p = info;
-
-       if (method) {
-               klass = method->klass;
-               decode_klass_ref (amodule, p, &p);
-       } else {
-               klass = decode_klass_ref (amodule, p, &p);
-       }
-
-       if (amodule->info.opts & MONO_OPT_SHARED)
-               used_strings = decode_value (p, &p);
-       else
-               used_strings = 0;
-
-       for (i = 0; i < used_strings; i++) {
-               guint token = decode_value (p, &p);
-               mono_ldstr (mono_get_root_domain (), image, mono_metadata_token_index (token));
-       }
-
-       if (amodule->info.opts & MONO_OPT_SHARED)       
-               keep_patches = FALSE;
-
-       n_patches = decode_value (p, &p);
-
-       keep_patches = FALSE;
-
-       if (n_patches) {
-               MonoJumpInfo *patches;
-               guint32 *got_slots;
-               gboolean llvm;
-               gpointer *got;
-
-               if (keep_patches)
-                       mp = domain->mp;
-               else
-                       mp = mono_mempool_new ();
-
-               if ((gpointer)code >= amodule->info.jit_code_start && (gpointer)code <= amodule->info.jit_code_end) {
-                       llvm = FALSE;
-                       got = amodule->got;
-               } else {
-                       llvm = TRUE;
-                       got = amodule->llvm_got;
-                       g_assert (got);
-               }
-
-               patches = load_patch_info (amodule, mp, n_patches, llvm, &got_slots, p, &p);
-               if (patches == NULL)
-                       goto cleanup;
-
-               for (pindex = 0; pindex < n_patches; ++pindex) {
-                       MonoJumpInfo *ji = &patches [pindex];
-                       gpointer addr;
-
-                       /*
-                        * For SFLDA, we need to call resolve_patch_target () since the GOT slot could have
-                        * been initialized by load_method () for a static cctor before the cctor has
-                        * finished executing (#23242).
-                        */
-                       if (!got [got_slots [pindex]] || ji->type == MONO_PATCH_INFO_SFLDA) {
-                               addr = mono_resolve_patch_target (method, domain, code, ji, TRUE);
-                               if (ji->type == MONO_PATCH_INFO_METHOD_JUMP)
-                                       addr = mono_create_ftnptr (domain, addr);
-                               mono_memory_barrier ();
-                               got [got_slots [pindex]] = addr;
-                               if (ji->type == MONO_PATCH_INFO_METHOD_JUMP)
-                                       register_jump_target_got_slot (domain, ji->data.method, &(got [got_slots [pindex]]));
-                       }
-                       ji->type = MONO_PATCH_INFO_NONE;
-               }
-
-               g_free (got_slots);
-
-               if (!keep_patches)
-                       mono_mempool_destroy (mp);
-       }
-
-       if (mini_get_debug_options ()->load_aot_jit_info_eagerly)
-               jinfo = mono_aot_find_jit_info (domain, amodule->assembly->image, code);
+       res = mono_aot_init_method (amodule, method_index, method, &klass);
+       if (!res)
+               goto cleanup;
 
        if (mono_trace_is_traced (G_LOG_LEVEL_DEBUG, MONO_TRACE_AOT)) {
                char *full_name;
@@ -3754,7 +3669,7 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM
                MonoJitInfo *jinfo;
 
                if (!method) {
-                       method = mono_get_method (image, token, NULL);
+                       method = mono_get_method (amodule->assembly->image, token, NULL);
                        g_assert (method);
                }
                mono_profiler_method_jit (method);
@@ -3769,11 +3684,6 @@ load_method (MonoDomain *domain, MonoAotModule *amodule, MonoImage *image, MonoM
        return code;
 
  cleanup:
-       /* FIXME: The space in domain->mp is wasted */  
-       if (amodule->info.opts & MONO_OPT_SHARED)
-               /* No need to cache patches */
-               mono_mempool_destroy (mp);
-
        if (jinfo)
                g_free (jinfo);
 
@@ -3921,6 +3831,89 @@ mono_aot_find_method_index (MonoMethod *method)
        return find_aot_method (method, &out_amodule);
 }
 
+static gboolean
+mono_aot_init_method (MonoAotModule *amodule, guint32 method_index, MonoMethod *method, MonoClass **klass)
+{
+       MonoDomain *domain = mono_domain_get ();
+       MonoMemPool *mp;
+       int pindex, n_patches;
+       guint8 *p;
+       MonoJitInfo *jinfo = NULL;
+       guint8 *code, *info;
+
+       code = &amodule->code [amodule->code_offsets [method_index]];
+       info = &amodule->blob [mono_aot_get_offset (amodule->method_info_offsets, method_index)];
+
+       p = info;
+
+       if (method) {
+               *klass = method->klass;
+               decode_klass_ref (amodule, p, &p);
+       } else {
+               *klass = decode_klass_ref (amodule, p, &p);
+       }
+
+       n_patches = decode_value (p, &p);
+
+       if (n_patches) {
+               MonoJumpInfo *patches;
+               guint32 *got_slots;
+               gboolean llvm;
+               gpointer *got;
+
+               mp = mono_mempool_new ();
+
+               if ((gpointer)code >= amodule->info.jit_code_start && (gpointer)code <= amodule->info.jit_code_end) {
+                       llvm = FALSE;
+                       got = amodule->got;
+               } else {
+                       llvm = TRUE;
+                       got = amodule->llvm_got;
+                       g_assert (got);
+               }
+
+               patches = load_patch_info (amodule, mp, n_patches, llvm, &got_slots, p, &p);
+               if (patches == NULL)
+                       goto cleanup;
+
+               for (pindex = 0; pindex < n_patches; ++pindex) {
+                       MonoJumpInfo *ji = &patches [pindex];
+                       gpointer addr;
+
+                       /*
+                        * For SFLDA, we need to call resolve_patch_target () since the GOT slot could have
+                        * been initialized by load_method () for a static cctor before the cctor has
+                        * finished executing (#23242).
+                        */
+                       if (!got [got_slots [pindex]] || ji->type == MONO_PATCH_INFO_SFLDA) {
+                               addr = mono_resolve_patch_target (method, domain, code, ji, TRUE);
+                               if (ji->type == MONO_PATCH_INFO_METHOD_JUMP)
+                                       addr = mono_create_ftnptr (domain, addr);
+                               mono_memory_barrier ();
+                               got [got_slots [pindex]] = addr;
+                               if (ji->type == MONO_PATCH_INFO_METHOD_JUMP)
+                                       register_jump_target_got_slot (domain, ji->data.method, &(got [got_slots [pindex]]));
+                       }
+                       ji->type = MONO_PATCH_INFO_NONE;
+               }
+
+               g_free (got_slots);
+
+               mono_mempool_destroy (mp);
+       }
+
+       if (mini_get_debug_options ()->load_aot_jit_info_eagerly)
+               jinfo = mono_aot_find_jit_info (domain, amodule->assembly->image, code);
+
+       return TRUE;
+
+ cleanup:
+       if (jinfo)
+               g_free (jinfo);
+
+       return FALSE;
+}
+
 /*
  * mono_aot_get_method:
  *
@@ -4647,16 +4640,15 @@ get_new_trampoline_from_page (int tramp_type)
                return code;
        }
        mono_aot_page_unlock ();
-       psize = mono_pagesize ();
        /* the trampoline template page is in the mscorlib module */
        image = mono_defaults.corlib;
        g_assert (image);
 
+       psize = MONO_AOT_TRAMP_PAGE_SIZE;
+
        amodule = image->aot_module;
        g_assert (amodule);
 
-       g_assert (amodule->info.tramp_page_size == psize);
-
        if (tramp_type == MONO_AOT_TRAMP_SPECIFIC)
                tpage = load_function (amodule, "specific_trampolines_page");
        else if (tramp_type == MONO_AOT_TRAMP_STATIC_RGCTX)
@@ -4738,7 +4730,7 @@ get_new_specific_trampoline_from_page (gpointer tramp, gpointer arg)
 
        code = get_new_trampoline_from_page (MONO_AOT_TRAMP_SPECIFIC);
 
-       data = (gpointer*)((char*)code - mono_pagesize ());
+       data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE);
        data [0] = arg;
        data [1] = tramp;
        /*g_warning ("new trampoline at %p for data %p, tramp %p (stored at %p)", code, arg, tramp, data);*/
@@ -4754,7 +4746,7 @@ get_new_rgctx_trampoline_from_page (gpointer tramp, gpointer arg)
 
        code = get_new_trampoline_from_page (MONO_AOT_TRAMP_STATIC_RGCTX);
 
-       data = (gpointer*)((char*)code - mono_pagesize ());
+       data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE);
        data [0] = arg;
        data [1] = tramp;
        /*g_warning ("new rgctx trampoline at %p for data %p, tramp %p (stored at %p)", code, arg, tramp, data);*/
@@ -4770,7 +4762,7 @@ get_new_imt_trampoline_from_page (gpointer arg)
 
        code = get_new_trampoline_from_page (MONO_AOT_TRAMP_IMT_THUNK);
 
-       data = (gpointer*)((char*)code - mono_pagesize ());
+       data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE);
        data [0] = arg;
        /*g_warning ("new imt trampoline at %p for data %p, (stored at %p)", code, arg, data);*/
        return code;
@@ -4785,7 +4777,7 @@ get_new_gsharedvt_arg_trampoline_from_page (gpointer tramp, gpointer arg)
 
        code = get_new_trampoline_from_page (MONO_AOT_TRAMP_GSHAREDVT_ARG);
 
-       data = (gpointer*)((char*)code - mono_pagesize ());
+       data = (gpointer*)((char*)code - MONO_AOT_TRAMP_PAGE_SIZE);
        data [0] = arg;
        data [1] = tramp;
        /*g_warning ("new rgctx trampoline at %p for data %p, tramp %p (stored at %p)", code, arg, tramp, data);*/
index 7324fe21f370de11f66557651213a618dbf2ff89..17e3cfafee9a6476951c576492969fa282691f5b 100644 (file)
@@ -106,6 +106,7 @@ class Tests
                return 0;
        }
 
+       [Category ("DYNCALL")]
        [Category ("GSHAREDVT")]
        static int test_0_arm64_dyncall_gsharedvt_out_hfa_double () {
                /* gsharedvt out trampoline with double hfa argument */
@@ -124,6 +125,7 @@ class Tests
                return 0;
        }
 
+       [Category ("DYNCALL")]
        [Category ("GSHAREDVT")]
        static int test_0_arm64_dyncall_gsharedvt_out_hfa_float () {
                /* gsharedvt out trampoline with double hfa argument */
@@ -240,4 +242,19 @@ class Tests
                        return 3;
                return 0;
        }
+
+       enum AnEnum {
+               A = 0,
+               B = 1
+       }
+
+       public static int test_0_enum_eq_comparer () {
+               var c = EqualityComparer<AnEnum>.Default;
+               return (!c.Equals (AnEnum.A, AnEnum.B) && c.Equals (AnEnum.A, AnEnum.A)) ? 0 : 1;
+       }
+
+       public static int test_0_enum_comparer () {
+               var c = Comparer<AnEnum>.Default;
+               return c.Compare (AnEnum.A, AnEnum.A);
+       }
 }
index caf10c5552f22b803c64f5bc7df56b7ae61e8a0a..0d63141cf8a39ca3ce675910996a8872575206c4 100644 (file)
@@ -357,7 +357,7 @@ long_conv_to_ovf_i4_2: dest:i src1:i src2:i len:36
 vcall2: len:64 clob:c
 vcall2_reg: src1:i len:64 clob:c
 vcall2_membase: src1:b len:64 clob:c
-dyn_call: src1:i src2:i len:120 clob:c
+dyn_call: src1:i src2:i len:136 clob:c
 
 # This is different from the original JIT opcodes
 float_beq: len:32
index 25dd97da870ef5c821a31e1b0c15a3c3dc6aa438..5a2fdde7d91e0ebf1740c32a3cb8e5fc5b40a398 100644 (file)
@@ -299,7 +299,7 @@ decompose_long_opcode (MonoCompile *cfg, MonoInst *ins, MonoInst **repl_ins)
  * Sets the cfg exception if an opcode is not supported.
  */
 MonoInst*
-mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins, MonoBasicBlock **out_cbb)
+mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins)
 {
        MonoInst *repl = NULL;
        int type = ins->type;
@@ -556,7 +556,7 @@ mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins, MonoBasicBlock **out_cbb
                                }
                        }
 
-                       call = mono_emit_jit_icall_by_info (cfg, info, args, out_cbb);
+                       call = mono_emit_jit_icall_by_info (cfg, info, args);
                        call->dreg = ins->dreg;
 
                        NULLIFY_INS (ins);
index b2c99a04ad70c087e981883ff9ffaf24f3915cdb..decdd5ec10e092bf8f0eccbdf31d72b5174171d7 100644 (file)
@@ -817,7 +817,9 @@ emit_all_line_number_info (MonoDwarfWriter *w)
                MethodLineNumberInfo *info = l->data;
                MonoDebugMethodJitInfo *dmji;
 
-               dmji = mono_debug_find_method (info->method, mono_domain_get ());;
+               dmji = mono_debug_find_method (info->method, mono_domain_get ());
+               if (!dmji)
+                       continue;
                emit_line_number_info (w, info->method, info->start_symbol, info->end_symbol, info->code, info->code_size, dmji);
                mono_debug_free_method_jit_info (dmji);
        }
@@ -1643,8 +1645,12 @@ emit_line_number_info (MonoDwarfWriter *w, MonoMethod *method,
                prev_il_offset = il_offset;
 
                loc = mono_debug_symfile_lookup_location (minfo, il_offset);
-               if (!(loc && loc->source_file))
+               if (!loc)
+                       continue;
+               if (!loc->source_file) {
+                       mono_debug_symfile_free_location (loc);
                        continue;
+               }
 
                line_diff = (gint32)loc->row - (gint32)prev_line;
                addr_diff = i - prev_native_offset;
@@ -1875,6 +1881,9 @@ mono_dwarf_writer_emit_method (MonoDwarfWriter *w, MonoCompile *cfg, MonoMethod
                int file_index = add_line_number_file_name (w, loc->source_file, 0, 0);
                emit_uleb128 (w, file_index + 1);
                emit_uleb128 (w, loc->row);
+
+               mono_debug_symfile_free_location (loc);
+               loc = NULL;
        } else {
                emit_uleb128 (w, 0);
                emit_uleb128 (w, 0);
index b9534ae395bc7604c1b9182bb0a32075e2915a6a..2a4aae744e1fce2678c83e74d4c3d1f47d89c76d 100644 (file)
@@ -12,6 +12,9 @@
 #include <glib.h>
 #include <signal.h>
 #include <string.h>
+#ifdef HAVE_UCONTEXT_H
+#include <ucontext.h>
+#endif
 
 #include <mono/metadata/abi-details.h>
 #include <mono/arch/x86/x86-codegen.h>
index d9b0adec2f1341ec9f7a076d8c2231d5bef07b97..fed9002320487da1e5088867e4905881ca99a3f9 100644 (file)
@@ -336,10 +336,14 @@ mono_draw_graph (MonoCompile *cfg, MonoGraphOptions draw_options)
 
        fclose (fp);
 
+#ifdef HAVE_SYSTEM
        //com = g_strdup_printf ("dot %s -Tpng -o %s.png; eog %s.png", fn, fn, fn);
        com = g_strdup_printf ("dot %s -Tps -o %s.ps;gv %s.ps", fn, fn, fn);
        _i = system (com);
        g_free (com);
+#else
+       g_assert_not_reached ();
+#endif
 }
 
 #endif /* DISABLE_JIT */
index b48962fd08dcd0a4dce94a2abd0b1d07f0729d22..65b234486b1dae91a3f3840b17e770fa1961caf3 100644 (file)
@@ -271,6 +271,7 @@ mono_disassemble_code (MonoCompile *cfg, guint8 *code, int size, char *id)
        close (i);
 #endif
 
+#ifdef HAVE_SYSTEM
        cmd = g_strdup_printf (ARCH_PREFIX AS_CMD " %s -o %s", as_file, o_file);
        unused = system (cmd); 
        g_free (cmd);
@@ -292,6 +293,9 @@ mono_disassemble_code (MonoCompile *cfg, guint8 *code, int size, char *id)
        cmd = g_strdup_printf (ARCH_PREFIX DIS_CMD " %s %s", objdump_args, o_file);
        unused = system (cmd);
        g_free (cmd);
+#else
+       g_assert_not_reached ();
+#endif /* HAVE_SYSTEM */
 
 #ifndef HOST_WIN32
        unlink (o_file);
index fe05ecca2d36a5569abfd30b622b71bf3868d86b..eeea8d938145942265353fe04d3a117800ff2d37 100644 (file)
@@ -754,8 +754,8 @@ handle_gsharedvt_ldaddr (MonoCompile *cfg)
                (b)->real_offset = cfg->real_offset;    \
        } while (0)
 
-/* Emit a one-way conditional branch */
-/* 
+/*
+ * Emit a one-way conditional branch and start a new bblock.
  * The inst_false_bb field of the cond branch will not be set, the JIT code should be
  * prepared to deal with this.
  */
index 1e94b262df7a9a40b61b8501e7aed244a1bc40b2..9b05034f316c7468b614a8474e3ef432c6d31c3c 100644 (file)
@@ -1285,3 +1285,15 @@ mono_generic_class_init (MonoVTable *vtable)
 {
        mono_runtime_class_init (vtable);
 }
+
+gpointer
+mono_fill_class_rgctx (MonoVTable *vtable, int index)
+{
+       return mono_class_fill_runtime_generic_context (vtable, index);
+}
+
+gpointer
+mono_fill_method_rgctx (MonoMethodRuntimeGenericContext *mrgctx, int index)
+{
+       return mono_method_fill_runtime_generic_context (mrgctx, index);
+}
index 9ec1a4f60e709b203d5d1d8665f93483161afc86..d31e06e63c5f99dd4511a227031563398f31594f 100644 (file)
@@ -189,5 +189,9 @@ mono_gsharedvt_constrained_call (gpointer mp, MonoMethod *cmethod, MonoClass *kl
 
 void mono_gsharedvt_value_copy (gpointer dest, gpointer src, MonoClass *klass);
 
+gpointer mono_fill_class_rgctx (MonoVTable *vtable, int index);
+
+gpointer mono_fill_method_rgctx (MonoMethodRuntimeGenericContext *mrgctx, int index);
+
 #endif /* __MONO_JIT_ICALLS_H__ */
 
index d27e1fda45c473ac244f5078f8090db9d79f94dc..ff72fe750f2f9bbce18c2034a0aa954fee8cd5b8 100644 (file)
@@ -144,7 +144,7 @@ int mono_op_to_op_imm_noemul (int opcode);
 MONO_API MonoInst* mono_emit_native_call (MonoCompile *cfg, gconstpointer func, MonoMethodSignature *sig, MonoInst **args);
 
 static int inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp,
-                                                 guchar *ip, guint real_offset, gboolean inline_always, MonoBasicBlock **out_cbb);
+                                                 guchar *ip, guint real_offset, gboolean inline_always);
 
 /* helper methods signatures */
 static MonoMethodSignature *helper_sig_class_init_trampoline;
@@ -508,7 +508,7 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a
         add_widen_op (cfg, ins, &sp [0], &sp [1]);              \
         ins->dreg = alloc_dreg ((cfg), (ins)->type); \
         MONO_ADD_INS ((cfg)->cbb, (ins)); \
-        *sp++ = mono_decompose_opcode ((cfg), (ins), &bblock); \
+        *sp++ = mono_decompose_opcode ((cfg), (ins));  \
        } while (0)
 
 #define ADD_UNOP(op) do {      \
@@ -519,7 +519,7 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a
                CHECK_TYPE (ins);       \
         (ins)->dreg = alloc_dreg ((cfg), (ins)->type); \
         MONO_ADD_INS ((cfg)->cbb, (ins)); \
-               *sp++ = mono_decompose_opcode (cfg, ins, &bblock);      \
+               *sp++ = mono_decompose_opcode (cfg, ins);       \
        } while (0)
 
 #define ADD_BINCOND(next_block) do {   \
@@ -534,15 +534,15 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a
                type_from_op (cfg, ins, sp [0], sp [1]);                                                        \
                ins->inst_many_bb = mono_mempool_alloc (cfg->mempool, sizeof(gpointer)*2);      \
                GET_BBLOCK (cfg, tblock, target);               \
-               link_bblock (cfg, bblock, tblock);      \
+               link_bblock (cfg, cfg->cbb, tblock);    \
                ins->inst_true_bb = tblock;     \
                if ((next_block)) {     \
-                       link_bblock (cfg, bblock, (next_block));        \
+                       link_bblock (cfg, cfg->cbb, (next_block));      \
                        ins->inst_false_bb = (next_block);      \
                        start_new_bblock = 1;   \
                } else {        \
                        GET_BBLOCK (cfg, tblock, ip);           \
-                       link_bblock (cfg, bblock, tblock);      \
+                       link_bblock (cfg, cfg->cbb, tblock);    \
                        ins->inst_false_bb = tblock;    \
                        start_new_bblock = 2;   \
                }       \
@@ -550,8 +550,8 @@ add_widen_op (MonoCompile *cfg, MonoInst *ins, MonoInst **arg1_ref, MonoInst **a
                    handle_stack_args (cfg, stack_start, sp - stack_start); \
                        CHECK_UNVERIFIABLE (cfg); \
                } \
-        MONO_ADD_INS (bblock, cmp); \
-               MONO_ADD_INS (bblock, ins);     \
+        MONO_ADD_INS (cfg->cbb, cmp); \
+               MONO_ADD_INS (cfg->cbb, ins);   \
        } while (0)
 
 /* *
@@ -2966,7 +2966,7 @@ direct_icalls_enabled (MonoCompile *cfg)
 }
 
 MonoInst*
-mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args, MonoBasicBlock **out_cbb)
+mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args)
 {
        /*
         * Call the jit icall without a wrapper if possible.
@@ -2993,7 +2993,7 @@ mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst
                 * an exception check.
                 */
                costs = inline_method (cfg, info->wrapper_method, NULL,
-                                                          args, NULL, cfg->real_offset, TRUE, out_cbb);
+                                                          args, NULL, cfg->real_offset, TRUE);
                g_assert (costs > 0);
                g_assert (!MONO_TYPE_IS_VOID (info->sig->ret));
 
@@ -3368,6 +3368,12 @@ mini_emit_initobj (MonoCompile *cfg, MonoInst *dest, const guchar *ip, MonoClass
        }
 }
 
+/*
+ * emit_get_rgctx:
+ *
+ *   Emit IR to return either the this pointer for instance method,
+ * or the mrgctx for static methods.
+ */
 static MonoInst*
 emit_get_rgctx (MonoCompile *cfg, MonoMethod *method, int context_used)
 {
@@ -3432,10 +3438,106 @@ mono_patch_info_rgctx_entry_new (MonoMemPool *mp, MonoMethod *method, gboolean i
        return res;
 }
 
+/*
+ * emit_rgctx_fetch:
+ *
+ *   Emit IR to load the value of the rgctx entry ENTRY from the rgctx
+ * given by RGCTX.
+ */
 static inline MonoInst*
 emit_rgctx_fetch (MonoCompile *cfg, MonoInst *rgctx, MonoJumpInfoRgctxEntry *entry)
 {
+       /* Inline version, not currently used */
+       // FIXME: This can be called from mono_decompose_vtype_opts (), which can't create new bblocks
+#if 0
+       int i, slot, depth, index, rgctx_reg, val_reg, res_reg;
+       gboolean mrgctx;
+       MonoBasicBlock *is_null_bb, *end_bb;
+       MonoInst *res, *ins, *call;
+       MonoInst *args[16];
+
+       slot = mini_get_rgctx_entry_slot (entry);
+
+       mrgctx = MONO_RGCTX_SLOT_IS_MRGCTX (slot);
+       index = MONO_RGCTX_SLOT_INDEX (slot);
+       if (mrgctx)
+               index += MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT / sizeof (gpointer);
+       for (depth = 0; ; ++depth) {
+               int size = mono_class_rgctx_get_array_size (depth, mrgctx);
+
+               if (index < size - 1)
+                       break;
+               index -= size - 1;
+       }
+
+       NEW_BBLOCK (cfg, end_bb);
+       NEW_BBLOCK (cfg, is_null_bb);
+
+       if (mrgctx) {
+               rgctx_reg = rgctx->dreg;
+       } else {
+               rgctx_reg = alloc_preg (cfg);
+
+               MONO_EMIT_NEW_LOAD_MEMBASE (cfg, rgctx_reg, rgctx->dreg, MONO_STRUCT_OFFSET (MonoVTable, runtime_generic_context));
+               // FIXME: Avoid this check by allocating the table when the vtable is created etc.
+               NEW_BBLOCK (cfg, is_null_bb);
+
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rgctx_reg, 0);
+               MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb);
+       }
+
+       for (i = 0; i < depth; ++i) {
+               int array_reg = alloc_preg (cfg);
+
+               /* load ptr to next array */
+               if (mrgctx && i == 0)
+                       MONO_EMIT_NEW_LOAD_MEMBASE (cfg, array_reg, rgctx_reg, MONO_SIZEOF_METHOD_RUNTIME_GENERIC_CONTEXT);
+               else
+                       MONO_EMIT_NEW_LOAD_MEMBASE (cfg, array_reg, rgctx_reg, 0);
+               rgctx_reg = array_reg;
+               /* is the ptr null? */
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, rgctx_reg, 0);
+               /* if yes, jump to actual trampoline */
+               MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb);
+       }
+
+       /* fetch slot */
+       val_reg = alloc_preg (cfg);
+       MONO_EMIT_NEW_LOAD_MEMBASE (cfg, val_reg, rgctx_reg, (index + 1) * sizeof (gpointer));
+       /* is the slot null? */
+       MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, val_reg, 0);
+       /* if yes, jump to actual trampoline */
+       MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb);
+
+       /* Fastpath */
+       res_reg = alloc_preg (cfg);
+       MONO_INST_NEW (cfg, ins, OP_MOVE);
+       ins->dreg = res_reg;
+       ins->sreg1 = val_reg;
+       MONO_ADD_INS (cfg->cbb, ins);
+       res = ins;
+       MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb);
+
+       /* Slowpath */
+       MONO_START_BB (cfg, is_null_bb);
+       args [0] = rgctx;
+       EMIT_NEW_ICONST (cfg, args [1], index);
+       if (mrgctx)
+               call = mono_emit_jit_icall (cfg, mono_fill_method_rgctx, args);
+       else
+               call = mono_emit_jit_icall (cfg, mono_fill_class_rgctx, args);
+       MONO_INST_NEW (cfg, ins, OP_MOVE);
+       ins->dreg = res_reg;
+       ins->sreg1 = call->dreg;
+       MONO_ADD_INS (cfg->cbb, ins);
+       MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb);
+
+       MONO_START_BB (cfg, end_bb);
+
+       return res;
+#else
        return mono_emit_abs_call (cfg, MONO_PATCH_INFO_RGCTX_FETCH, entry, helper_sig_rgctx_lazy_fetch_trampoline, &rgctx);
+#endif
 }
 
 static MonoInst*
@@ -3619,14 +3721,12 @@ emit_get_gsharedvt_info_klass (MonoCompile *cfg, MonoClass *klass, MonoRgctxInfo
  * On return the caller must check @klass for load errors.
  */
 static void
-emit_generic_class_init (MonoCompile *cfg, MonoClass *klass, MonoBasicBlock **out_bblock)
+emit_generic_class_init (MonoCompile *cfg, MonoClass *klass)
 {
        MonoInst *vtable_arg;
        int context_used;
        gboolean use_op_generic_class_init = FALSE;
 
-       *out_bblock = cfg->cbb;
-
        context_used = mini_class_check_context_used (cfg, klass);
 
        if (context_used) {
@@ -3680,18 +3780,19 @@ emit_generic_class_init (MonoCompile *cfg, MonoClass *klass, MonoBasicBlock **ou
                mono_emit_jit_icall (cfg, mono_generic_class_init, args);
 
                MONO_START_BB (cfg, inited_bb);
-               *out_bblock = inited_bb;
        }
 }
 
 
 static void
-emit_class_init (MonoCompile *cfg, MonoClass *klass, MonoBasicBlock **out_bblock)
+emit_class_init (MonoCompile *cfg, MonoClass *klass)
 {
        /* This could be used as a fallback if needed */
-       //emit_generic_class_init (cfg, klass, out_bblock);
-
-       *out_bblock = cfg->cbb;
+       if (cfg->compile_aot) {
+               /* With the overhead of plt entries, the inline version is comparable in size/speed */
+               emit_generic_class_init (cfg, klass);
+               return;
+       }
 
        mono_emit_abs_call (cfg, MONO_PATCH_INFO_CLASS_INIT, klass, helper_sig_class_init_trampoline, NULL);
 }
@@ -3710,7 +3811,7 @@ emit_seq_point (MonoCompile *cfg, MonoMethod *method, guint8* ip, gboolean intr_
 }
 
 static void
-save_cast_details (MonoCompile *cfg, MonoClass *klass, int obj_reg, gboolean null_check, MonoBasicBlock **out_bblock)
+save_cast_details (MonoCompile *cfg, MonoClass *klass, int obj_reg, gboolean null_check)
 {
        if (mini_get_debug_options ()->better_cast_details) {
                int vtable_reg = alloc_preg (cfg);
@@ -3750,11 +3851,8 @@ save_cast_details (MonoCompile *cfg, MonoClass *klass, int obj_reg, gboolean nul
                }
                MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORE_MEMBASE_REG, tls_get->dreg, MONO_STRUCT_OFFSET (MonoJitTlsData, class_cast_to), to_klass_reg);
 
-               if (null_check) {
+               if (null_check)
                        MONO_START_BB (cfg, is_null_bb);
-                       if (out_bblock)
-                               *out_bblock = cfg->cbb;
-               }
        }
 }
 
@@ -3782,7 +3880,7 @@ mini_emit_check_array_type (MonoCompile *cfg, MonoInst *obj, MonoClass *array_cl
 
        context_used = mini_class_check_context_used (cfg, array_class);
 
-       save_cast_details (cfg, array_class, obj->dreg, FALSE, NULL);
+       save_cast_details (cfg, array_class, obj->dreg, FALSE);
 
        MONO_EMIT_NEW_LOAD_MEMBASE_FAULT (cfg, vtable_reg, obj->dreg, MONO_STRUCT_OFFSET (MonoObject, vtable));
 
@@ -3899,7 +3997,7 @@ handle_unbox (MonoCompile *cfg, MonoClass *klass, MonoInst **sp, int context_use
                MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, eclass_reg, element_class->dreg);
                MONO_EMIT_NEW_COND_EXC (cfg, NE_UN, "InvalidCastException");
        } else {
-               save_cast_details (cfg, klass->element_class, obj_reg, FALSE, NULL);
+               save_cast_details (cfg, klass->element_class, obj_reg, FALSE);
                mini_emit_class_check (cfg, eclass_reg, klass->element_class);
                reset_cast_details (cfg);
        }
@@ -3913,7 +4011,7 @@ handle_unbox (MonoCompile *cfg, MonoClass *klass, MonoInst **sp, int context_use
 }
 
 static MonoInst*
-handle_unbox_gsharedvt (MonoCompile *cfg, MonoClass *klass, MonoInst *obj, MonoBasicBlock **out_cbb)
+handle_unbox_gsharedvt (MonoCompile *cfg, MonoClass *klass, MonoInst *obj)
 {
        MonoInst *addr, *klass_inst, *is_ref, *args[16];
        MonoBasicBlock *is_ref_bb, *is_nullable_bb, *end_bb;
@@ -3987,8 +4085,6 @@ handle_unbox_gsharedvt (MonoCompile *cfg, MonoClass *klass, MonoInst *obj, MonoB
        /* LDOBJ */
        EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &klass->byval_arg, addr_reg, 0);
 
-       *out_cbb = cfg->cbb;
-
        return ins;
 }
 
@@ -4091,12 +4187,10 @@ handle_alloc (MonoCompile *cfg, MonoClass *klass, gboolean for_box, int context_
  * Returns NULL and set the cfg exception on error.
  */    
 static MonoInst*
-handle_box (MonoCompile *cfg, MonoInst *val, MonoClass *klass, int context_used, MonoBasicBlock **out_cbb)
+handle_box (MonoCompile *cfg, MonoInst *val, MonoClass *klass, int context_used)
 {
        MonoInst *alloc, *ins;
 
-       *out_cbb = cfg->cbb;
-
        if (mono_class_is_nullable (klass)) {
                MonoMethod* method = mono_class_get_method_from_name (klass, "Box", 1);
 
@@ -4193,8 +4287,6 @@ handle_box (MonoCompile *cfg, MonoInst *val, MonoClass *klass, int context_used,
 
                MONO_START_BB (cfg, end_bb);
 
-               *out_cbb = cfg->cbb;
-
                return res;
        } else {
                alloc = handle_alloc (cfg, klass, TRUE, context_used);
@@ -4268,17 +4360,16 @@ icall_is_direct_callable (MonoCompile *cfg, MonoMethod *cmethod)
 #define is_complex_isinst(klass) ((klass->flags & TYPE_ATTRIBUTE_INTERFACE) || klass->rank || mono_class_is_nullable (klass) || mono_class_is_marshalbyref (klass) || (klass->flags & TYPE_ATTRIBUTE_SEALED) || klass->byval_arg.type == MONO_TYPE_VAR || klass->byval_arg.type == MONO_TYPE_MVAR)
 
 static MonoInst*
-emit_castclass_with_cache (MonoCompile *cfg, MonoClass *klass, MonoInst **args, MonoBasicBlock **out_bblock)
+emit_castclass_with_cache (MonoCompile *cfg, MonoClass *klass, MonoInst **args)
 {
        MonoMethod *mono_castclass;
        MonoInst *res;
 
        mono_castclass = mono_marshal_get_castclass_with_cache ();
 
-       save_cast_details (cfg, klass, args [0]->dreg, TRUE, out_bblock);
+       save_cast_details (cfg, klass, args [0]->dreg, TRUE);
        res = mono_emit_method_call (cfg, mono_castclass, args, NULL);
        reset_cast_details (cfg);
-       *out_bblock = cfg->cbb;
 
        return res;
 }
@@ -4292,7 +4383,7 @@ get_castclass_cache_idx (MonoCompile *cfg)
 }
 
 static MonoInst*
-emit_castclass_with_cache_nonshared (MonoCompile *cfg, MonoInst *obj, MonoClass *klass, MonoBasicBlock **out_bblock)
+emit_castclass_with_cache_nonshared (MonoCompile *cfg, MonoInst *obj, MonoClass *klass)
 {
        MonoInst *args [3];
        int idx;
@@ -4312,31 +4403,26 @@ emit_castclass_with_cache_nonshared (MonoCompile *cfg, MonoInst *obj, MonoClass
        }
 
        /*The wrapper doesn't inline well so the bloat of inlining doesn't pay off.*/
-
-       return emit_castclass_with_cache (cfg, klass, args, out_bblock);
+       return emit_castclass_with_cache (cfg, klass, args);
 }
 
 /*
  * Returns NULL and set the cfg exception on error.
  */
 static MonoInst*
-handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, MonoBasicBlock **out_bb, int *inline_costs)
+handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip, int *inline_costs)
 {
        MonoBasicBlock *is_null_bb;
        int obj_reg = src->dreg;
        int vtable_reg = alloc_preg (cfg);
        int context_used;
        MonoInst *klass_inst = NULL, *res;
-       MonoBasicBlock *bblock;
-
-       *out_bb = cfg->cbb;
 
        context_used = mini_class_check_context_used (cfg, klass);
 
        if (!context_used && mini_class_has_reference_variant_generic_argument (cfg, klass, context_used)) {
-               res = emit_castclass_with_cache_nonshared (cfg, src, klass, &bblock);
+               res = emit_castclass_with_cache_nonshared (cfg, src, klass);
                (*inline_costs) += 2;
-               *out_bb = cfg->cbb;
                return res;
        } else if (!context_used && (mono_class_is_marshalbyref (klass) || klass->flags & TYPE_ATTRIBUTE_INTERFACE)) {
                MonoMethod *mono_castclass;
@@ -4346,9 +4432,9 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip,
                mono_castclass = mono_marshal_get_castclass (klass); 
                iargs [0] = src;
                                
-               save_cast_details (cfg, klass, src->dreg, TRUE, &bblock);
+               save_cast_details (cfg, klass, src->dreg, TRUE);
                costs = inline_method (cfg, mono_castclass, mono_method_signature (mono_castclass), 
-                                                          iargs, ip, cfg->real_offset, TRUE, &bblock);
+                                                          iargs, ip, cfg->real_offset, TRUE);
                reset_cast_details (cfg);
                CHECK_CFG_EXCEPTION;
                g_assert (costs > 0);
@@ -4357,7 +4443,6 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip,
 
                (*inline_costs) += costs;
 
-               *out_bb = cfg->cbb;
                return src;
        }
 
@@ -4378,7 +4463,7 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip,
                        /* cache */
                        args [2] = cache_ins;
 
-                       return emit_castclass_with_cache (cfg, klass, args, out_bb);
+                       return emit_castclass_with_cache (cfg, klass, args);
                }
 
                klass_inst = emit_get_rgctx_klass (cfg, context_used, klass, MONO_RGCTX_INFO_KLASS);
@@ -4389,7 +4474,7 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip,
        MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0);
        MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb);
 
-       save_cast_details (cfg, klass, obj_reg, FALSE, NULL);
+       save_cast_details (cfg, klass, obj_reg, FALSE);
 
        if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
                MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, MONO_STRUCT_OFFSET (MonoObject, vtable));
@@ -4424,8 +4509,6 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, guint8 *ip,
 
        reset_cast_details (cfg);
 
-       *out_bb = cfg->cbb;
-
        return src;
 
 exception_exit:
@@ -4704,7 +4787,7 @@ handle_ccastclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src)
        MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0);
        MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, ok_result_bb);
 
-       save_cast_details (cfg, klass, obj_reg, FALSE, NULL);
+       save_cast_details (cfg, klass, obj_reg, FALSE);
 
        if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
 #ifndef DISABLE_REMOTING
@@ -4814,10 +4897,10 @@ handle_enum_has_flag (MonoCompile *cfg, MonoClass *klass, MonoInst *enum_this, M
                ceq->type = STACK_I4;
 
                if (!is_i4) {
-                       load = mono_decompose_opcode (cfg, load, NULL);
-                       and = mono_decompose_opcode (cfg, and, NULL);
-                       cmp = mono_decompose_opcode (cfg, cmp, NULL);
-                       ceq = mono_decompose_opcode (cfg, ceq, NULL);
+                       load = mono_decompose_opcode (cfg, load);
+                       and = mono_decompose_opcode (cfg, and);
+                       cmp = mono_decompose_opcode (cfg, cmp);
+                       ceq = mono_decompose_opcode (cfg, ceq);
                }
 
                return ceq;
@@ -4955,10 +5038,9 @@ handle_array_new (MonoCompile *cfg, int rank, MonoInst **sp, unsigned char *ip)
  */
 static MonoInst*
 handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp, MonoClass *constrained_class,
-                                                                  gboolean *ref_emit_widen, MonoBasicBlock **ref_bblock)
+                                                                  gboolean *ref_emit_widen)
 {
        MonoInst *ins = NULL;
-       MonoBasicBlock *bblock = *ref_bblock;
        gboolean emit_widen = *ref_emit_widen;
 
        /*
@@ -5015,7 +5097,7 @@ handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMe
                emit_widen = FALSE;
 
                if (mini_is_gsharedvt_type (cfg, fsig->ret)) {
-                       ins = handle_unbox_gsharedvt (cfg, mono_class_from_mono_type (fsig->ret), ins, &bblock);
+                       ins = handle_unbox_gsharedvt (cfg, mono_class_from_mono_type (fsig->ret), ins);
                } else if (MONO_TYPE_IS_PRIMITIVE (fsig->ret) || MONO_TYPE_ISSTRUCT (fsig->ret)) {
                        MonoInst *add;
 
@@ -5032,7 +5114,6 @@ handle_constrained_gsharedvt_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMe
        }
 
        *ref_emit_widen = emit_widen;
-       *ref_bblock = bblock;
 
        return ins;
 
@@ -5278,7 +5359,7 @@ mini_emit_ldelema_1_ins (MonoCompile *cfg, MonoClass *klass, MonoInst *arr, Mono
                g_assert (cfg->generic_sharing_context);
                context_used = mini_class_check_context_used (cfg, klass);
                g_assert (context_used);
-               rgctx_ins = emit_get_gsharedvt_info (cfg, &klass->byval_arg, MONO_RGCTX_INFO_ARRAY_ELEMENT_SIZE);
+               rgctx_ins = emit_get_gsharedvt_info_klass (cfg, klass, MONO_RGCTX_INFO_ARRAY_ELEMENT_SIZE);
                MONO_EMIT_NEW_BIALU (cfg, OP_IMUL, mult_reg, index2_reg, rgctx_ins->dreg);
        } else {
                MONO_EMIT_NEW_BIALU_IMM (cfg, OP_MUL_IMM, mult_reg, index2_reg, size);
@@ -5546,10 +5627,12 @@ emit_array_unsafe_access (MonoCompile *cfg, MonoMethodSignature *fsig, MonoInst
 }
 
 static gboolean
-is_unsafe_mov_compatible (MonoClass *param_klass, MonoClass *return_klass)
+is_unsafe_mov_compatible (MonoCompile *cfg, MonoClass *param_klass, MonoClass *return_klass)
 {
        uint32_t align;
 
+       param_klass = mono_class_from_mono_type (mini_get_underlying_type (cfg, &param_klass->byval_arg));
+
        //Only allow for valuetypes
        if (!param_klass->valuetype || !return_klass->valuetype)
                return FALSE;
@@ -5580,11 +5663,11 @@ emit_array_unsafe_mov (MonoCompile *cfg, MonoMethodSignature *fsig, MonoInst **a
        MonoClass *return_klass = mono_class_from_mono_type (fsig->ret);
 
        //Valuetypes that are semantically equivalent
-       if (is_unsafe_mov_compatible (param_klass, return_klass))
+       if (is_unsafe_mov_compatible (cfg, param_klass, return_klass))
                return args [0];
 
        //Arrays of valuetypes that are semantically equivalent
-       if (param_klass->rank == 1 && return_klass->rank == 1 && is_unsafe_mov_compatible (param_klass->element_class, return_klass->element_class))
+       if (param_klass->rank == 1 && return_klass->rank == 1 && is_unsafe_mov_compatible (cfg, param_klass->element_class, return_klass->element_class))
                return args [0];
 
        return NULL;
@@ -5926,7 +6009,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                }
 
                                if (opcode == OP_LOADI8_MEMBASE)
-                                       ins = mono_decompose_opcode (cfg, ins, NULL);
+                                       ins = mono_decompose_opcode (cfg, ins);
 
                                emit_memory_barrier (cfg, MONO_MEMORY_BARRIER_ACQ);
 
@@ -5961,7 +6044,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
                                MONO_ADD_INS (cfg->cbb, ins);
 
                                if (opcode == OP_STOREI8_MEMBASE_REG)
-                                       ins = mono_decompose_opcode (cfg, ins, NULL);
+                                       ins = mono_decompose_opcode (cfg, ins);
 
                                return ins;
                        }
@@ -6795,7 +6878,7 @@ emit_init_local (MonoCompile *cfg, int local, MonoType *type, gboolean init)
  */
 static int
 inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **sp,
-                          guchar *ip, guint real_offset, gboolean inline_always, MonoBasicBlock **out_cbb)
+                          guchar *ip, guint real_offset, gboolean inline_always)
 {
        MonoInst *ins, *rvar = NULL;
        MonoMethodHeader *cheader;
@@ -6967,9 +7050,6 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig,
                        cfg->cbb = ebblock;
                }
 
-               if (out_cbb)
-                       *out_cbb = cfg->cbb;
-
                if (rvar) {
                        /*
                         * If the inlined method contains only a throw, then the ret var is not 
@@ -7244,8 +7324,7 @@ get_original_method (MonoMethod *method)
 }
 
 static void
-ensure_method_is_allowed_to_access_field (MonoCompile *cfg, MonoMethod *caller, MonoClassField *field,
-                                         MonoBasicBlock *bblock, unsigned char *ip)
+ensure_method_is_allowed_to_access_field (MonoCompile *cfg, MonoMethod *caller, MonoClassField *field)
 {
        /* we can't get the coreclr security level on wrappers since they don't have the attributes */
        MonoException *ex = mono_security_core_clr_is_field_access_allowed (get_original_method (caller), field);
@@ -7254,8 +7333,7 @@ ensure_method_is_allowed_to_access_field (MonoCompile *cfg, MonoMethod *caller,
 }
 
 static void
-ensure_method_is_allowed_to_call_method (MonoCompile *cfg, MonoMethod *caller, MonoMethod *callee,
-                                        MonoBasicBlock *bblock, unsigned char *ip)
+ensure_method_is_allowed_to_call_method (MonoCompile *cfg, MonoMethod *caller, MonoMethod *callee)
 {
        /* we can't get the coreclr security level on wrappers since they don't have the attributes */
        MonoException *ex = mono_security_core_clr_is_call_allowed (get_original_method (caller), callee);
@@ -7567,15 +7645,12 @@ emit_managed_static_data_access (MonoCompile *cfg, MonoInst *thread_ins, int off
  * handle_ctor_call:
  *
  *   Handle calls made to ctors from NEWOBJ opcodes.
- *
- *   REF_BBLOCK will point to the current bblock after the call.
  */
 static void
 handle_ctor_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, int context_used,
-                                 MonoInst **sp, guint8 *ip, MonoBasicBlock **ref_bblock, int *inline_costs)
+                                 MonoInst **sp, guint8 *ip, int *inline_costs)
 {
        MonoInst *vtable_arg = NULL, *callvirt_this_arg = NULL, *ins;
-       MonoBasicBlock *bblock = *ref_bblock;
 
        if (cmethod->klass->valuetype && mono_class_generic_sharing_enabled (cmethod->klass) &&
                                        mono_method_is_generic_sharable (cmethod, TRUE)) {
@@ -7610,11 +7685,10 @@ handle_ctor_call (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fs
                           !mono_class_is_subclass_of (cmethod->klass, mono_defaults.exception_class, FALSE)) {
                int costs;
 
-               if ((costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, FALSE, &bblock))) {
+               if ((costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, FALSE))) {
                        cfg->real_offset += 5;
 
                        *inline_costs += costs - 5;
-                       *ref_bblock = bblock;
                } else {
                        INLINE_FAILURE ("inline failure");
                        // FIXME-VT: Clean this up
@@ -7659,7 +7733,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 {
        MonoError error;
        MonoInst *ins, **sp, **stack_start;
-       MonoBasicBlock *bblock, *tblock = NULL, *init_localsbb = NULL;
+       MonoBasicBlock *tblock = NULL, *init_localsbb = NULL;
        MonoSimpleBasicBlock *bb = NULL, *original_bb = NULL;
        MonoMethod *cmethod, *method_definition;
        MonoInst **arg_array;
@@ -7958,18 +8032,18 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
        }
 
        /* FIRST CODE BLOCK */
-       NEW_BBLOCK (cfg, bblock);
-       bblock->cil_code = ip;
-       cfg->cbb = bblock;
+       NEW_BBLOCK (cfg, tblock);
+       tblock->cil_code = ip;
+       cfg->cbb = tblock;
        cfg->ip = ip;
 
-       ADD_BBLOCK (cfg, bblock);
+       ADD_BBLOCK (cfg, tblock);
 
        if (cfg->method == method) {
                breakpoint_id = mono_debugger_method_has_breakpoint (method);
                if (breakpoint_id) {
                        MONO_INST_NEW (cfg, ins, OP_BREAK);
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                }
        }
 
@@ -7978,9 +8052,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
        cfg->bb_init = init_localsbb;
        init_localsbb->real_offset = cfg->real_offset;
        start_bblock->next_bb = init_localsbb;
-       init_localsbb->next_bb = bblock;
+       init_localsbb->next_bb = cfg->cbb;
        link_bblock (cfg, start_bblock, init_localsbb);
-       link_bblock (cfg, init_localsbb, bblock);
+       link_bblock (cfg, init_localsbb, cfg->cbb);
                
        cfg->cbb = init_localsbb;
 
@@ -8056,7 +8130,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
        }
 
        if (cfg->method == method)
-               mono_debug_init_method (cfg, bblock, breakpoint_id);
+               mono_debug_init_method (cfg, cfg->cbb, breakpoint_id);
 
        for (n = 0; n < header->num_locals; ++n) {
                if (header->locals [n]->type == MONO_TYPE_VOID && !header->locals [n]->byref)
@@ -8101,7 +8175,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
        ins_flag = 0;
        start_new_bblock = 0;
-       cfg->cbb = bblock;
        while (ip < end) {
                if (cfg->method == method)
                        cfg->real_offset = ip - header->code;
@@ -8110,42 +8183,40 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                cfg->ip = ip;
 
                context_used = 0;
-               
+
                if (start_new_bblock) {
-                       bblock->cil_length = ip - bblock->cil_code;
+                       cfg->cbb->cil_length = ip - cfg->cbb->cil_code;
                        if (start_new_bblock == 2) {
                                g_assert (ip == tblock->cil_code);
                        } else {
                                GET_BBLOCK (cfg, tblock, ip);
                        }
-                       bblock->next_bb = tblock;
-                       bblock = tblock;
-                       cfg->cbb = bblock;
+                       cfg->cbb->next_bb = tblock;
+                       cfg->cbb = tblock;
                        start_new_bblock = 0;
-                       for (i = 0; i < bblock->in_scount; ++i) {
+                       for (i = 0; i < cfg->cbb->in_scount; ++i) {
                                if (cfg->verbose_level > 3)
-                                       printf ("loading %d from temp %d\n", i, (int)bblock->in_stack [i]->inst_c0);                                            
-                               EMIT_NEW_TEMPLOAD (cfg, ins, bblock->in_stack [i]->inst_c0);
+                                       printf ("loading %d from temp %d\n", i, (int)cfg->cbb->in_stack [i]->inst_c0);
+                               EMIT_NEW_TEMPLOAD (cfg, ins, cfg->cbb->in_stack [i]->inst_c0);
                                *sp++ = ins;
                        }
                        if (class_inits)
                                g_slist_free (class_inits);
                        class_inits = NULL;
                } else {
-                       if ((tblock = cfg->cil_offset_to_bb [ip - cfg->cil_start]) && (tblock != bblock)) {
-                               link_bblock (cfg, bblock, tblock);
+                       if ((tblock = cfg->cil_offset_to_bb [ip - cfg->cil_start]) && (tblock != cfg->cbb)) {
+                               link_bblock (cfg, cfg->cbb, tblock);
                                if (sp != stack_start) {
                                        handle_stack_args (cfg, stack_start, sp - stack_start);
                                        sp = stack_start;
                                        CHECK_UNVERIFIABLE (cfg);
                                }
-                               bblock->next_bb = tblock;
-                               bblock = tblock;
-                               cfg->cbb = bblock;
-                               for (i = 0; i < bblock->in_scount; ++i) {
+                               cfg->cbb->next_bb = tblock;
+                               cfg->cbb = tblock;
+                               for (i = 0; i < cfg->cbb->in_scount; ++i) {
                                        if (cfg->verbose_level > 3)
-                                               printf ("loading %d from temp %d\n", i, (int)bblock->in_stack [i]->inst_c0);                                            
-                                       EMIT_NEW_TEMPLOAD (cfg, ins, bblock->in_stack [i]->inst_c0);
+                                               printf ("loading %d from temp %d\n", i, (int)cfg->cbb->in_stack [i]->inst_c0);
+                                       EMIT_NEW_TEMPLOAD (cfg, ins, cfg->cbb->in_stack [i]->inst_c0);
                                        *sp++ = ins;
                                }
                                g_slist_free (class_inits);
@@ -8167,7 +8238,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                                if (ip_offset + op_size == bb->end) {
                                        MONO_INST_NEW (cfg, ins, OP_NOP);
-                                       MONO_ADD_INS (bblock, ins);
+                                       MONO_ADD_INS (cfg->cbb, ins);
                                        start_new_bblock = 1;
                                }
 
@@ -8204,7 +8275,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                mono_bitset_set_fast (seq_point_set_locs, ip - header->code);
                }
 
-               bblock->real_offset = cfg->real_offset;
+               cfg->cbb->real_offset = cfg->real_offset;
 
                if ((cfg->method == method) && cfg->coverage_info) {
                        guint32 cil_offset = ip - header->code;
@@ -8223,7 +8294,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                }
 
                if (cfg->verbose_level > 3)
-                       printf ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
+                       printf ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
 
                switch (*ip) {
                case CEE_NOP:
@@ -8240,7 +8311,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        else
                                MONO_INST_NEW (cfg, ins, OP_NOP);
                        ip++;
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        break;
                case CEE_BREAK:
                        if (should_insert_brekpoint (cfg->method)) {
@@ -8249,7 +8320,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                MONO_INST_NEW (cfg, ins, OP_NOP);
                        }
                        ip++;
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        break;
                case CEE_LDARG_0:
                case CEE_LDARG_1:
@@ -8405,7 +8476,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        ins->dreg = alloc_dreg (cfg, STACK_I8);
                        ++ip;
                        ins->inst_l = (gint64)read64 (ip);
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        ip += 8;
                        *sp++ = ins;
                        break;
@@ -8438,7 +8509,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                ins->type = cfg->r4_stack_type;
                                ins->dreg = alloc_dreg (cfg, STACK_R8);
                                ins->inst_p0 = f;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                        }
                        ++ip;
                        readr4 (ip, f);
@@ -8475,7 +8546,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                ins->type = STACK_R8;
                                ins->dreg = alloc_dreg (cfg, STACK_R8);
                                ins->inst_p0 = d;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                        }
                        ++ip;
                        readr8 (ip, d);
@@ -8555,7 +8626,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                                mono_arch_emit_call (cfg, call);
                                cfg->param_area = MAX(cfg->param_area, call->stack_usage);
-                               MONO_ADD_INS (bblock, (MonoInst*)call);
+                               MONO_ADD_INS (cfg->cbb, (MonoInst*)call);
                        } else {
                                for (i = 0; i < num_args; ++i)
                                        /* Prevent arguments from being optimized away */
@@ -8564,7 +8635,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                MONO_INST_NEW_CALL (cfg, call, OP_JMP);
                                ins = (MonoInst*)call;
                                ins->inst_p0 = cmethod;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                        }
 
                        ip += 5;
@@ -8760,7 +8831,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        }
 
                        if (mono_security_core_clr_enabled ())
-                               ensure_method_is_allowed_to_call_method (cfg, method, cil_method, bblock, ip);
+                               ensure_method_is_allowed_to_call_method (cfg, method, cil_method);
 
                        if (!virtual && (cmethod->flags & METHOD_ATTRIBUTE_ABSTRACT))
                                /* MS.NET seems to silently convert this to a callvirt */
@@ -8838,7 +8909,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        } else if (cmethod->klass->image != mono_defaults.corlib && !(cmethod->klass->flags & TYPE_ATTRIBUTE_INTERFACE) && !cmethod->klass->valuetype) {
                                                /* 'The type parameter is instantiated as a reference type' case below. */
                                        } else {
-                                               ins = handle_constrained_gsharedvt_call (cfg, cmethod, fsig, sp, constrained_class, &emit_widen, &bblock);
+                                               ins = handle_constrained_gsharedvt_call (cfg, cmethod, fsig, sp, constrained_class, &emit_widen);
                                                CHECK_CFG_EXCEPTION;
                                                g_assert (ins);
                                                goto call_end;
@@ -8895,13 +8966,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                MONO_START_BB (cfg, is_ref_bb);
                                                EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &constrained_class->byval_arg, sp [0]->dreg, 0);
                                                ins->klass = constrained_class;
-                                               sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class), &bblock);
+                                               sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class));
                                                ins = (MonoInst*)mono_emit_calli (cfg, fsig, sp, addr, NULL, NULL);
 
                                                MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_BR, end_bb);
 
                                                MONO_START_BB (cfg, end_bb);
-                                               bblock = end_bb;
+                                               cfg->cbb = end_bb;
 
                                                nonbox_call->dreg = ins->dreg;
                                        } else {
@@ -8918,7 +8989,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                         */
                                        EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &constrained_class->byval_arg, sp [0]->dreg, 0);
                                        ins->klass = constrained_class;
-                                       sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class), &bblock);
+                                       sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class));
                                        CHECK_CFG_EXCEPTION;
                                } else if (!constrained_class->valuetype) {
                                        int dreg = alloc_ireg_ref (cfg);
@@ -8952,7 +9023,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                        /* Enum implements some interfaces, so treat this as the first case */
                                                        EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &constrained_class->byval_arg, sp [0]->dreg, 0);
                                                        ins->klass = constrained_class;
-                                                       sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class), &bblock);
+                                                       sp [0] = handle_box (cfg, ins, constrained_class, mono_class_check_context_used (constrained_class));
                                                        CHECK_CFG_EXCEPTION;
                                                }
                                        }
@@ -8968,7 +9039,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                delegate_invoke = TRUE;
 
                        if ((cfg->opt & MONO_OPT_INTRINS) && (ins = mini_emit_inst_for_sharable_method (cfg, cmethod, fsig, sp))) {
-                               bblock = cfg->cbb;
                                if (!MONO_TYPE_IS_VOID (fsig->ret)) {
                                        type_to_eval_stack_type ((cfg), fsig->ret, ins);
                                        emit_widen = FALSE;
@@ -8982,7 +9052,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                         * might not get called after the call was patched.
                         */
                        if (cfg->generic_sharing_context && cmethod->klass != method->klass && cmethod->klass->generic_class && mono_method_is_generic_sharable (cmethod, TRUE) && mono_class_needs_cctor_run (cmethod->klass, method)) {
-                               emit_generic_class_init (cfg, cmethod->klass, &bblock);
+                               emit_generic_class_init (cfg, cmethod->klass);
                                CHECK_TYPELOAD (cmethod->klass);
                        }
 
@@ -9096,7 +9166,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                } else {
                                        this_temp = mono_compile_create_var (cfg, type_from_stack_type (sp [0]), OP_LOCAL);
                                        NEW_TEMPSTORE (cfg, store, this_temp->inst_c0, sp [0]);
-                                       MONO_ADD_INS (bblock, store);
+                                       MONO_ADD_INS (cfg->cbb, store);
 
                                        /* FIXME: This should be a managed pointer */
                                        this_arg_temp = mono_compile_create_var (cfg, &mono_defaults.int_class->byval_arg, OP_LOCAL);
@@ -9145,7 +9215,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        /* Conversion to a JIT intrinsic */
                        if ((cfg->opt & MONO_OPT_INTRINS) && (ins = mini_emit_inst_for_method (cfg, cmethod, fsig, sp))) {
-                               bblock = cfg->cbb;
                                if (!MONO_TYPE_IS_VOID (fsig->ret)) {
                                        type_to_eval_stack_type ((cfg), fsig->ret, ins);
                                        emit_widen = FALSE;
@@ -9168,7 +9237,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        always = TRUE;
                                }
 
-                               costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, always, &bblock);
+                               costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, always);
                                if (costs) {
                                        cfg->real_offset += 5;
 
@@ -9202,14 +9271,14 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        for (i = 0; i < n; ++i)
                                                EMIT_NEW_ARGSTORE (cfg, ins, i, sp [i]);
                                        MONO_INST_NEW (cfg, ins, OP_BR);
-                                       MONO_ADD_INS (bblock, ins);
+                                       MONO_ADD_INS (cfg->cbb, ins);
                                        tblock = start_bblock->out_bb [0];
-                                       link_bblock (cfg, bblock, tblock);
+                                       link_bblock (cfg, cfg->cbb, tblock);
                                        ins->inst_target_bb = tblock;
                                        start_new_bblock = 1;
 
                                        /* skip the CEE_RET, too */
-                                       if (ip_in_bb (cfg, bblock, ip + 5))
+                                       if (ip_in_bb (cfg, cfg->cbb, ip + 5))
                                                skip_ret = TRUE;
                                        push_res = FALSE;
                                        goto call_end;
@@ -9302,7 +9371,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                /* Inline the wrapper */
                                wrapper = mono_marshal_get_native_wrapper (cmethod, TRUE, cfg->compile_aot);
 
-                               costs = inline_method (cfg, wrapper, fsig, sp, ip, cfg->real_offset, TRUE, &bblock);
+                               costs = inline_method (cfg, wrapper, fsig, sp, ip, cfg->real_offset, TRUE);
                                g_assert (costs > 0);
                                cfg->real_offset += 5;
 
@@ -9403,8 +9472,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        ins = (MonoInst*)call;
                                        ins->inst_p0 = cmethod;
                                        ins->inst_p1 = arg_array [0];
-                                       MONO_ADD_INS (bblock, ins);
-                                       link_bblock (cfg, bblock, end_bblock);                  
+                                       MONO_ADD_INS (cfg->cbb, ins);
+                                       link_bblock (cfg, cfg->cbb, end_bblock);
                                        start_new_bblock = 1;
 
                                        // FIXME: Eliminate unreachable epilogs
@@ -9414,7 +9483,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                         * only reachable from this call.
                                         */
                                        GET_BBLOCK (cfg, tblock, ip + 5);
-                                       if (tblock == bblock || tblock->in_count == 0)
+                                       if (tblock == cfg->cbb || tblock->in_count == 0)
                                                skip_ret = TRUE;
                                        push_res = FALSE;
 
@@ -9442,7 +9511,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                                                          imt_arg, vtable_arg);
 
                        if (tail_call) {
-                               link_bblock (cfg, bblock, end_bblock);                  
+                               link_bblock (cfg, cfg->cbb, end_bblock);
                                start_new_bblock = 1;
 
                                // FIXME: Eliminate unreachable epilogs
@@ -9452,7 +9521,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                 * only reachable from this call.
                                 */
                                GET_BBLOCK (cfg, tblock, ip + 5);
-                               if (tblock == bblock || tblock->in_count == 0)
+                               if (tblock == cfg->cbb || tblock->in_count == 0)
                                        skip_ret = TRUE;
                                push_res = FALSE;
                        }
@@ -9576,8 +9645,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        MONO_INST_NEW (cfg, ins, OP_BR);
                        ip++;
                        ins->inst_target_bb = end_bblock;
-                       MONO_ADD_INS (bblock, ins);
-                       link_bblock (cfg, bblock, end_bblock);
+                       MONO_ADD_INS (cfg->cbb, ins);
+                       link_bblock (cfg, cfg->cbb, end_bblock);
                        start_new_bblock = 1;
                        break;
                case CEE_BR_S:
@@ -9587,14 +9656,14 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        target = ip + 1 + (signed char)(*ip);
                        ++ip;
                        GET_BBLOCK (cfg, tblock, target);
-                       link_bblock (cfg, bblock, tblock);
+                       link_bblock (cfg, cfg->cbb, tblock);
                        ins->inst_target_bb = tblock;
                        if (sp != stack_start) {
                                handle_stack_args (cfg, stack_start, sp - stack_start);
                                sp = stack_start;
                                CHECK_UNVERIFIABLE (cfg);
                        }
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        start_new_bblock = 1;
                        inline_costs += BRANCH_COST;
                        break;
@@ -9628,7 +9697,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        target = ip + 4 + (gint32)read32(ip);
                        ip += 4;
                        GET_BBLOCK (cfg, tblock, target);
-                       link_bblock (cfg, bblock, tblock);
+                       link_bblock (cfg, cfg->cbb, tblock);
                        ins->inst_target_bb = tblock;
                        if (sp != stack_start) {
                                handle_stack_args (cfg, stack_start, sp - stack_start);
@@ -9636,7 +9705,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                CHECK_UNVERIFIABLE (cfg);
                        }
 
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
 
                        start_new_bblock = 1;
                        inline_costs += BRANCH_COST;
@@ -9661,9 +9730,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        sp--;
 
                        GET_BBLOCK (cfg, tblock, target);
-                       link_bblock (cfg, bblock, tblock);
+                       link_bblock (cfg, cfg->cbb, tblock);
                        GET_BBLOCK (cfg, tblock, ip);
-                       link_bblock (cfg, bblock, tblock);
+                       link_bblock (cfg, cfg->cbb, tblock);
 
                        if (sp != stack_start) {
                                handle_stack_args (cfg, stack_start, sp - stack_start);
@@ -9682,16 +9751,16 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                ins->type = STACK_I8;
                                ins->dreg = alloc_dreg (cfg, STACK_I8);
                                ins->inst_l = 0;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                                cmp->opcode = OP_LCOMPARE;
                                cmp->sreg2 = ins->dreg;
                        }
 #endif
-                       MONO_ADD_INS (bblock, cmp);
+                       MONO_ADD_INS (cfg->cbb, cmp);
 
                        MONO_INST_NEW (cfg, ins, is_true ? CEE_BNE_UN : CEE_BEQ);
                        type_from_op (cfg, ins, sp [0], NULL);
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        ins->inst_many_bb = mono_mempool_alloc (cfg->mempool, sizeof(gpointer)*2);
                        GET_BBLOCK (cfg, tblock, target);
                        ins->inst_true_bb = tblock;
@@ -9764,9 +9833,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                 * Link the current bb with the targets as well, so handle_stack_args
                                 * will set their in_stack correctly.
                                 */
-                               link_bblock (cfg, bblock, default_bblock);
+                               link_bblock (cfg, cfg->cbb, default_bblock);
                                for (i = 0; i < n; ++i)
-                                       link_bblock (cfg, bblock, targets [i]);
+                                       link_bblock (cfg, cfg->cbb, targets [i]);
 
                                handle_stack_args (cfg, stack_start, sp - stack_start);
                                sp = stack_start;
@@ -9775,10 +9844,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ICOMPARE_IMM, -1, src1->dreg, n);
                        MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_IBGE_UN, default_bblock);
-                       bblock = cfg->cbb;
 
                        for (i = 0; i < n; ++i)
-                               link_bblock (cfg, bblock, targets [i]);
+                               link_bblock (cfg, cfg->cbb, targets [i]);
 
                        table = mono_mempool_alloc (cfg->mempool, sizeof (MonoJumpInfoBBTable));
                        table->table = targets;
@@ -9868,7 +9936,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        if (*ip == CEE_LDIND_R4)
                                ins->type = cfg->r4_stack_type;
                        ins->flags |= ins_flag;
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        *sp++ = ins;
                        if (ins_flag & MONO_INST_VOLATILE) {
                                /* Volatile loads have acquire semantics, see 12.6.7 in Ecma 335 */
@@ -9897,7 +9965,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        ins->flags |= ins_flag;
                        ins_flag = 0;
 
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
 
                        if (cfg->gen_write_barriers && *ip == CEE_STIND_REF && method->wrapper_type != MONO_WRAPPER_WRITE_BARRIER && !((sp [1]->opcode == OP_PCONST) && (sp [1]->inst_p0 == 0)))
                                emit_write_barrier (cfg, sp [0], sp [1]);
@@ -9931,7 +9999,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        MONO_ADD_INS ((cfg)->cbb, (ins));
 
-                       *sp++ = mono_decompose_opcode (cfg, ins, &bblock);
+                       *sp++ = mono_decompose_opcode (cfg, ins);
                        ip++;
                        break;
                case CEE_ADD:
@@ -9991,7 +10059,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        }
                        MONO_ADD_INS ((cfg)->cbb, (ins));
 
-                       *sp++ = mono_decompose_opcode (cfg, ins, &bblock);
+                       *sp++ = mono_decompose_opcode (cfg, ins);
                        ip++;
                        break;
                case CEE_NEG:
@@ -10146,7 +10214,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                break;
                        }
 
-                       if ((loc_index != -1) && ip_in_bb (cfg, bblock, ip + 5)) {
+                       if ((loc_index != -1) && ip_in_bb (cfg, cfg->cbb, ip + 5)) {
                                CHECK_LOCAL (loc_index);
 
                                EMIT_NEW_LOAD_MEMBASE_TYPE (cfg, ins, &klass->byval_arg, sp [0]->dreg, 0);
@@ -10165,7 +10233,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        /* Optimize the ldobj+stobj combination */
                        /* The reference case ends up being a load+store anyway */
                        /* Skip this if the operation is volatile. */
-                       if (((ip [5] == CEE_STOBJ) && ip_in_bb (cfg, bblock, ip + 5) && read32 (ip + 6) == token) && !generic_class_is_reference_type (cfg, klass) && !(ins_flag & MONO_INST_VOLATILE)) {
+                       if (((ip [5] == CEE_STOBJ) && ip_in_bb (cfg, cfg->cbb, ip + 5) && read32 (ip + 6) == token) && !generic_class_is_reference_type (cfg, klass) && !(ins_flag & MONO_INST_VOLATILE)) {
                                CHECK_STACK (1);
 
                                sp --;
@@ -10223,7 +10291,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        *sp = mono_emit_jit_icall (cfg, mono_ldstr, iargs);
                                        mono_ldstr (cfg->domain, image, mono_metadata_token_index (n));
                                } else {
-                                       if (bblock->out_of_line) {
+                                       if (cfg->cbb->out_of_line) {
                                                MonoInst *iargs [2];
 
                                                if (image == mono_defaults.corlib) {
@@ -10244,7 +10312,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        if (cfg->compile_aot) {
                                                NEW_LDSTRCONST (cfg, ins, image, n);
                                                *sp = ins;
-                                               MONO_ADD_INS (bblock, ins);
+                                               MONO_ADD_INS (cfg->cbb, ins);
                                        } 
                                        else {
                                                NEW_PCONST (cfg, ins, NULL);
@@ -10254,7 +10322,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                        OUT_OF_MEMORY_FAILURE;
 
                                                *sp = ins;
-                                               MONO_ADD_INS (bblock, ins);
+                                               MONO_ADD_INS (cfg->cbb, ins);
                                        }
                                }
                        }
@@ -10285,10 +10353,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        context_used = mini_method_check_context_used (cfg, cmethod);
 
                        if (mono_security_core_clr_enabled ())
-                               ensure_method_is_allowed_to_call_method (cfg, method, cmethod, bblock, ip);
+                               ensure_method_is_allowed_to_call_method (cfg, method, cmethod);
 
                        if (cfg->generic_sharing_context && cmethod && cmethod->klass != method->klass && cmethod->klass->generic_class && mono_method_is_generic_sharable (cmethod, TRUE) && mono_class_needs_cctor_run (cmethod->klass, method)) {
-                               emit_generic_class_init (cfg, cmethod->klass, &bblock);
+                               emit_generic_class_init (cfg, cmethod->klass);
                                CHECK_TYPELOAD (cmethod->klass);
                        }
 
@@ -10306,7 +10374,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                         * Generate smaller code for the common newobj <exception> instruction in
                         * argument checking code.
                         */
-                       if (bblock->out_of_line && cmethod->klass->image == mono_defaults.corlib &&
+                       if (cfg->cbb->out_of_line && cmethod->klass->image == mono_defaults.corlib &&
                                is_exception_class (cmethod->klass) && n <= 2 &&
                                ((n < 1) || (!fsig->params [0]->byref && fsig->params [0]->type == MONO_TYPE_STRING)) && 
                                ((n < 2) || (!fsig->params [1]->byref && fsig->params [1]->type == MONO_TYPE_STRING))) {
@@ -10402,7 +10470,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                         * As a workaround, we call class cctors before allocating objects.
                                         */
                                        if (mini_field_access_needs_cctor_run (cfg, method, cmethod->klass, vtable) && !(g_slist_find (class_inits, cmethod->klass))) {
-                                               emit_class_init (cfg, cmethod->klass, &bblock);
+                                               emit_class_init (cfg, cmethod->klass);
                                                if (cfg->verbose_level > 2)
                                                        printf ("class %s.%s needs init call for ctor\n", cmethod->klass->name_space, cmethod->klass->name);
                                                class_inits = g_slist_prepend (class_inits, cmethod->klass);
@@ -10417,7 +10485,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        MONO_EMIT_NEW_UNALU (cfg, OP_NOT_NULL, -1, alloc->dreg);
 
                                /* Now call the actual ctor */
-                               handle_ctor_call (cfg, cmethod, fsig, context_used, sp, ip, &bblock, &inline_costs);
+                               handle_ctor_call (cfg, cmethod, fsig, context_used, sp, ip, &inline_costs);
                                CHECK_CFG_EXCEPTION;
                        }
 
@@ -10446,7 +10514,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        if (sp [0]->type != STACK_OBJ)
                                UNVERIFIED;
 
-                       ins = handle_castclass (cfg, klass, *sp, ip, &bblock, &inline_costs);
+                       ins = handle_castclass (cfg, klass, *sp, ip, &inline_costs);
                        CHECK_CFG_EXCEPTION;
 
                        *sp ++ = ins;
@@ -10495,7 +10563,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                iargs [0] = sp [0];
 
                                costs = inline_method (cfg, mono_isinst, mono_method_signature (mono_isinst), 
-                                                                          iargs, ip, cfg->real_offset, TRUE, &bblock);
+                                                                          iargs, ip, cfg->real_offset, TRUE);
                                CHECK_CFG_EXCEPTION;
                                g_assert (costs > 0);
                                
@@ -10509,7 +10577,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        else {
                                ins = handle_isinst (cfg, klass, *sp, context_used);
                                CHECK_CFG_EXCEPTION;
-                               bblock = cfg->cbb;
                                *sp ++ = ins;
                                ip += 5;
                        }
@@ -10530,10 +10597,10 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        context_used = mini_class_check_context_used (cfg, klass);
 
                        if (mini_is_gsharedvt_klass (cfg, klass)) {
-                               res = handle_unbox_gsharedvt (cfg, klass, *sp, &bblock);
+                               res = handle_unbox_gsharedvt (cfg, klass, *sp);
                                inline_costs += 2;
                        } else if (generic_class_is_reference_type (cfg, klass)) {
-                               res = handle_castclass (cfg, klass, *sp, ip, &bblock, &inline_costs);
+                               res = handle_castclass (cfg, klass, *sp, ip, &inline_costs);
                                CHECK_CFG_EXCEPTION;
                        } else if (mono_class_is_nullable (klass)) {
                                res = handle_unbox_nullable (cfg, *sp, klass, context_used);
@@ -10597,7 +10664,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                            ip [5] == CEE_PREFIX1 &&
                            ip [6] == CEE_CONSTRAINED_ &&
                            ip [11] == CEE_CALLVIRT &&
-                           ip_in_bb (cfg, bblock, ip + 5 + 6 + 5) &&
+                           ip_in_bb (cfg, cfg->cbb, ip + 5 + 6 + 5) &&
                            mono_class_is_enum (klass) &&
                            (enum_class = mini_get_class (method, read32 (ip + 7), generic_context)) &&
                            (has_flag = mini_get_method (cfg, method, read32 (ip + 12), NULL, generic_context)) &&
@@ -10623,7 +10690,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        // FIXME: LLVM can't handle the inconsistent bb linking
                        if (!mono_class_is_nullable (klass) &&
-                               ip + 5 < end && ip_in_bb (cfg, bblock, ip + 5) &&
+                               ip + 5 < end && ip_in_bb (cfg, cfg->cbb, ip + 5) &&
                                (ip [5] == CEE_BRTRUE || 
                                 ip [5] == CEE_BRTRUE_S ||
                                 ip [5] == CEE_BRFALSE ||
@@ -10635,7 +10702,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                ip += 5;
 
                                if (cfg->verbose_level > 3) {
-                                       printf ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
+                                       printf ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
                                        printf ("<box+brtrue opt>\n");
                                }
 
@@ -10693,7 +10760,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                break;
                        }
 
-                       *sp++ = handle_box (cfg, val, klass, context_used, &bblock);
+                       *sp++ = handle_box (cfg, val, klass, context_used);
 
                        CHECK_CFG_EXCEPTION;
                        ip += 5;
@@ -10785,12 +10852,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                        /* if the class is Critical then transparent code cannot access it's fields */
                        if (!is_instance && mono_security_core_clr_enabled ())
-                               ensure_method_is_allowed_to_access_field (cfg, method, field, bblock, ip);
+                               ensure_method_is_allowed_to_access_field (cfg, method, field);
 
                        /* XXX this is technically required but, so far (SL2), no [SecurityCritical] types (not many exists) have
                           any visible *instance* field  (in fact there's a single case for a static field in Marshal) XXX
                        if (mono_security_core_clr_enabled ())
-                               ensure_method_is_allowed_to_access_field (cfg, method, field, bblock, ip);
+                               ensure_method_is_allowed_to_access_field (cfg, method, field);
                        */
 
                        /*
@@ -10838,7 +10905,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                                        if (cfg->opt & MONO_OPT_INLINE || cfg->compile_aot) {
                                                costs = inline_method (cfg, stfld_wrapper, mono_method_signature (stfld_wrapper), 
-                                                                                          iargs, ip, cfg->real_offset, TRUE, &bblock);
+                                                                                          iargs, ip, cfg->real_offset, TRUE);
                                                CHECK_CFG_EXCEPTION;
                                                g_assert (costs > 0);
                                                      
@@ -10901,7 +10968,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                EMIT_NEW_ICONST (cfg, iargs [3], klass->valuetype ? field->offset - sizeof (MonoObject) : field->offset);
                                if (cfg->opt & MONO_OPT_INLINE || cfg->compile_aot) {
                                        costs = inline_method (cfg, wrapper, mono_method_signature (wrapper), 
-                                                                                  iargs, ip, cfg->real_offset, TRUE, &bblock);
+                                                                                  iargs, ip, cfg->real_offset, TRUE);
                                        CHECK_CFG_EXCEPTION;
                                        g_assert (costs > 0);
                                                      
@@ -11073,7 +11140,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                */
 
                                if (mono_class_needs_cctor_run (klass, method))
-                                       emit_generic_class_init (cfg, klass, &bblock);
+                                       emit_generic_class_init (cfg, klass);
 
                                /*
                                 * The pointer we're computing here is
@@ -11112,7 +11179,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                if (!addr) {
                                        if (mini_field_access_needs_cctor_run (cfg, method, klass, vtable)) {
                                                if (!(g_slist_find (class_inits, klass))) {
-                                                       emit_class_init (cfg, klass, &bblock);
+                                                       emit_class_init (cfg, klass);
                                                        if (cfg->verbose_level > 2)
                                                                printf ("class %s.%s needs init call for %s\n", klass->name_space, klass->name, mono_field_get_name (field));
                                                        class_inits = g_slist_prepend (class_inits, klass);
@@ -11320,7 +11387,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                ins->type = STACK_I4;
                                ins->dreg = alloc_ireg (cfg);
                                MONO_ADD_INS (cfg->cbb, ins);
-                               *sp = mono_decompose_opcode (cfg, ins, &bblock);
+                               *sp = mono_decompose_opcode (cfg, ins);
                        }
 
                        if (context_used) {
@@ -11382,7 +11449,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                         * for small sizes open code the memcpy
                         * ensure the rva field is big enough
                         */
-                       if ((cfg->opt & MONO_OPT_INTRINS) && ip + 6 < end && ip_in_bb (cfg, bblock, ip + 6) && (len_ins->opcode == OP_ICONST) && (data_ptr = initialize_array_data (method, cfg->compile_aot, ip, klass, len_ins->inst_c0, &data_size, &field_token))) {
+                       if ((cfg->opt & MONO_OPT_INTRINS) && ip + 6 < end && ip_in_bb (cfg, cfg->cbb, ip + 6) && (len_ins->opcode == OP_ICONST) && (data_ptr = initialize_array_data (method, cfg->compile_aot, ip, klass, len_ins->inst_c0, &data_size, &field_token))) {
                                MonoMethod *memcpy_method = get_memcpy_method ();
                                MonoInst *iargs [3];
                                int add_reg = alloc_ireg_mp (cfg);
@@ -11543,9 +11610,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        ins->sreg1 = sp [0]->dreg;
                        ins->dreg = alloc_freg (cfg);
                        ins->type = STACK_R8;
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
 
-                       *sp++ = mono_decompose_opcode (cfg, ins, &bblock);
+                       *sp++ = mono_decompose_opcode (cfg, ins);
 
                        ++ip;
                        break;
@@ -11704,7 +11771,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
 
                                EMIT_NEW_TEMPLOAD (cfg, ins, vtvar->inst_c0);
                        } else {
-                               if ((ip + 5 < end) && ip_in_bb (cfg, bblock, ip + 5) && 
+                               if ((ip + 5 < end) && ip_in_bb (cfg, cfg->cbb, ip + 5) && 
                                        ((ip [5] == CEE_CALL) || (ip [5] == CEE_CALLVIRT)) && 
                                        (cmethod = mini_get_method (cfg, method, read32 (ip + 6), NULL, generic_context)) &&
                                        (cmethod->klass == mono_defaults.systemtype_class) &&
@@ -11776,13 +11843,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        --sp;
                        ins->sreg1 = sp [0]->dreg;
                        ip++;
-                       bblock->out_of_line = TRUE;
-                       MONO_ADD_INS (bblock, ins);
+                       cfg->cbb->out_of_line = TRUE;
+                       MONO_ADD_INS (cfg->cbb, ins);
                        MONO_INST_NEW (cfg, ins, OP_NOT_REACHED);
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        sp = stack_start;
                        
-                       link_bblock (cfg, bblock, end_bblock);
+                       link_bblock (cfg, cfg->cbb, end_bblock);
                        start_new_bblock = 1;
                        break;
                case CEE_ENDFINALLY:
@@ -11790,7 +11857,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        if (sp != stack_start)
                                emit_seq_point (cfg, method, ip, FALSE, FALSE);
                        MONO_INST_NEW (cfg, ins, OP_ENDFINALLY);
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        ip++;
                        start_new_bblock = 1;
 
@@ -11859,7 +11926,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        MONO_EMIT_NEW_UNALU (cfg, OP_THROW, -1, exc_ins->dreg);
 
                                        MONO_START_BB (cfg, dont_throw);
-                                       bblock = cfg->cbb;
                                }
                        }
 
@@ -11871,12 +11937,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        clause = tmp->data;
                                        tblock = cfg->cil_offset_to_bb [clause->handler_offset];
                                        g_assert (tblock);
-                                       link_bblock (cfg, bblock, tblock);
+                                       link_bblock (cfg, cfg->cbb, tblock);
                                        MONO_INST_NEW (cfg, ins, OP_CALL_HANDLER);
                                        ins->inst_target_bb = tblock;
                                        ins->inst_eh_block = clause;
-                                       MONO_ADD_INS (bblock, ins);
-                                       bblock->has_call_handler = 1;
+                                       MONO_ADD_INS (cfg->cbb, ins);
+                                       cfg->cbb->has_call_handler = 1;
                                        if (COMPILE_LLVM (cfg)) {
                                                MonoBasicBlock *target_bb;
 
@@ -11893,9 +11959,9 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        } 
 
                        MONO_INST_NEW (cfg, ins, OP_BR);
-                       MONO_ADD_INS (bblock, ins);
+                       MONO_ADD_INS (cfg->cbb, ins);
                        GET_BBLOCK (cfg, tblock, target);
-                       link_bblock (cfg, bblock, tblock);
+                       link_bblock (cfg, cfg->cbb, tblock);
                        ins->inst_target_bb = tblock;
                        start_new_bblock = 1;
 
@@ -12135,8 +12201,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                
                                MONO_INST_NEW (cfg, ins, OP_BR);
                                ins->inst_target_bb = end_bblock;
-                               MONO_ADD_INS (bblock, ins);
-                               link_bblock (cfg, bblock, end_bblock);
+                               MONO_ADD_INS (cfg->cbb, ins);
+                               link_bblock (cfg, cfg->cbb, end_bblock);
                                start_new_bblock = 1;
                                ip += 6;
                                break;
@@ -12153,7 +12219,6 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        ins = handle_cisinst (cfg, klass, sp [0]);
                                else
                                        ins = handle_ccastclass (cfg, klass, sp [0]);
-                               bblock = cfg->cbb;
                                *sp++ = ins;
                                ip += 6;
                                break;
@@ -12162,7 +12227,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                        case CEE_MONO_RESTORE_LMF:
 #ifdef MONO_ARCH_HAVE_LMF_OPS
                                MONO_INST_NEW (cfg, ins, (ip [1] == CEE_MONO_SAVE_LMF) ? OP_SAVE_LMF : OP_RESTORE_LMF);
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                                cfg->need_lmf_area = TRUE;
 #endif
                                ip += 2;
@@ -12177,7 +12242,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                inline_costs += 10 * num_calls++;
                                break;
                        case CEE_MONO_NOT_TAKEN:
-                               bblock->out_of_line = TRUE;
+                               cfg->cbb->out_of_line = TRUE;
                                ip += 2;
                                break;
                        case CEE_MONO_TLS: {
@@ -12200,7 +12265,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        }
                                }
                                ins->type = STACK_PTR;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                                *sp++ = ins;
                                ip += 6;
                                break;
@@ -12225,7 +12290,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                sp -= 2;
                                ins->sreg1 = sp [0]->dreg;
                                ins->sreg2 = sp [1]->dreg;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
 
                                cfg->param_area = MAX (cfg->param_area, MONO_ARCH_DYN_CALL_PARAM_AREA);
 
@@ -12284,10 +12349,8 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                ins = mono_emit_jit_icall (cfg, mono_jit_thread_attach, args);
                                MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, cfg->orig_domain_var->dreg, ins->dreg);
 
-                               if (next_bb) {
+                               if (next_bb)
                                        MONO_START_BB (cfg, next_bb);
-                                       bblock = cfg->cbb;
-                               }
                                ip += 2;
                                break;
                        }
@@ -12363,7 +12426,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        cmp->opcode = OP_FCOMPARE;
                                else
                                        cmp->opcode = OP_ICOMPARE;
-                               MONO_ADD_INS (bblock, cmp);
+                               MONO_ADD_INS (cfg->cbb, cmp);
                                ins->type = STACK_I4;
                                ins->dreg = alloc_dreg (cfg, ins->type);
                                type_from_op (cfg, ins, arg1, arg2);
@@ -12377,7 +12440,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        ins->sreg2 = cmp->sreg2;
                                        NULLIFY_INS (cmp);
                                }
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                                *sp++ = ins;
                                ip += 2;
                                break;
@@ -12403,12 +12466,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        METHOD_ACCESS_FAILURE (method, cil_method);
 
                                if (mono_security_core_clr_enabled ())
-                                       ensure_method_is_allowed_to_call_method (cfg, method, cmethod, bblock, ip);
+                                       ensure_method_is_allowed_to_call_method (cfg, method, cmethod);
 
                                /* 
                                 * Optimize the common case of ldftn+delegate creation
                                 */
-                               if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, bblock, ip + 6) && (ip [6] == CEE_NEWOBJ)) {
+                               if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, cfg->cbb, ip + 6) && (ip [6] == CEE_NEWOBJ)) {
                                        MonoMethod *ctor_method = mini_get_method (cfg, method, read32 (ip + 7), NULL, generic_context);
                                        if (ctor_method && (ctor_method->klass->parent == mono_defaults.multicastdelegate_class)) {
                                                MonoInst *target_ins, *handle_ins;
@@ -12424,7 +12487,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                target_ins = sp [-1];
 
                                                if (mono_security_core_clr_enabled ())
-                                                       ensure_method_is_allowed_to_call_method (cfg, method, ctor_method, bblock, ip);
+                                                       ensure_method_is_allowed_to_call_method (cfg, method, ctor_method);
 
                                                if (!(cmethod->flags & METHOD_ATTRIBUTE_STATIC)) {
                                                        /*LAME IMPL: We must not add a null check for virtual invoke delegates.*/
@@ -12438,7 +12501,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                if (invoke_context_used == 0) {
                                                        ip += 6;
                                                        if (cfg->verbose_level > 3)
-                                                               g_print ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
+                                                               g_print ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
                                                        if ((handle_ins = handle_delegate_ctor (cfg, ctor_method->klass, target_ins, cmethod, context_used, FALSE))) {
                                                                sp --;
                                                                *sp = handle_ins;
@@ -12474,12 +12537,12 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                context_used = mini_method_check_context_used (cfg, cmethod);
 
                                if (mono_security_core_clr_enabled ())
-                                       ensure_method_is_allowed_to_call_method (cfg, method, cmethod, bblock, ip);
+                                       ensure_method_is_allowed_to_call_method (cfg, method, cmethod);
 
                                /*
                                 * Optimize the common case of ldvirtftn+delegate creation
                                 */
-                               if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, bblock, ip + 6) && (ip [6] == CEE_NEWOBJ) && (ip > header->code && ip [-1] == CEE_DUP)) {
+                               if ((sp > stack_start) && (ip + 6 + 5 < end) && ip_in_bb (cfg, cfg->cbb, ip + 6) && (ip [6] == CEE_NEWOBJ) && (ip > header->code && ip [-1] == CEE_DUP)) {
                                        MonoMethod *ctor_method = mini_get_method (cfg, method, read32 (ip + 7), NULL, generic_context);
                                        if (ctor_method && (ctor_method->klass->parent == mono_defaults.multicastdelegate_class)) {
                                                MonoInst *target_ins, *handle_ins;
@@ -12496,13 +12559,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                                target_ins = sp [-1];
 
                                                if (mono_security_core_clr_enabled ())
-                                                       ensure_method_is_allowed_to_call_method (cfg, method, ctor_method, bblock, ip);
+                                                       ensure_method_is_allowed_to_call_method (cfg, method, ctor_method);
 
                                                /* FIXME: SGEN support */
                                                if (invoke_context_used == 0) {
                                                        ip += 6;
                                                        if (cfg->verbose_level > 3)
-                                                               g_print ("converting (in B%d: stack: %d) %s", bblock->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
+                                                               g_print ("converting (in B%d: stack: %d) %s", cfg->cbb->block_num, (int)(sp - stack_start), mono_disasm_code_one (NULL, method, ip, NULL));
                                                        if ((handle_ins = handle_delegate_ctor (cfg, ctor_method->klass, target_ins, cmethod, context_used, is_virtual))) {
                                                                sp -= 2;
                                                                *sp = handle_ins;
@@ -12636,7 +12699,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        UNVERIFIED;
                                MONO_INST_NEW (cfg, ins, OP_ENDFILTER);
                                ins->sreg1 = (*sp)->dreg;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
                                start_new_bblock = 1;
                                ip += 2;
 
@@ -12766,7 +12829,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                        }
                                }
 
-                               bblock->flags |= BB_EXCEPTION_UNSAFE;
+                               cfg->cbb->flags |= BB_EXCEPTION_UNSAFE;
 
                                if (handler_offset == -1)
                                        UNVERIFIED;
@@ -12774,13 +12837,13 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                                EMIT_NEW_TEMPLOAD (cfg, load, mono_find_exvar_for_offset (cfg, handler_offset)->inst_c0);
                                MONO_INST_NEW (cfg, ins, OP_RETHROW);
                                ins->sreg1 = load->dreg;
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
 
                                MONO_INST_NEW (cfg, ins, OP_NOT_REACHED);
-                               MONO_ADD_INS (bblock, ins);
+                               MONO_ADD_INS (cfg->cbb, ins);
 
                                sp = stack_start;
-                               link_bblock (cfg, bblock, end_bblock);
+                               link_bblock (cfg, cfg->cbb, end_bblock);
                                start_new_bblock = 1;
                                ip += 2;
                                break;
@@ -12859,16 +12922,16 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
        if (start_new_bblock != 1)
                UNVERIFIED;
 
-       bblock->cil_length = ip - bblock->cil_code;
-       if (bblock->next_bb) {
+       cfg->cbb->cil_length = ip - cfg->cbb->cil_code;
+       if (cfg->cbb->next_bb) {
                /* This could already be set because of inlining, #693905 */
-               MonoBasicBlock *bb = bblock;
+               MonoBasicBlock *bb = cfg->cbb;
 
                while (bb->next_bb)
                        bb = bb->next_bb;
                bb->next_bb = end_bblock;
        } else {
-               bblock->next_bb = end_bblock;
+               cfg->cbb->next_bb = end_bblock;
        }
 
        if (cfg->method == method && cfg->domainvar) {
index c1332ec3bc0272180edf7a4c8934975d356fcc98..744b42be16f8e8ebc3785dc684a64d5a2f980376 100644 (file)
@@ -7851,6 +7851,39 @@ get_delegate_invoke_impl (gboolean has_target, guint32 param_count, guint32 *cod
        return start;
 }
 
+#define MAX_VIRTUAL_DELEGATE_OFFSET 32
+
+static gpointer
+get_delegate_virtual_invoke_impl (gboolean load_imt_reg, int offset, guint32 *code_len)
+{
+       guint8 *code, *start;
+       int size = 20;
+
+       if (offset / sizeof (gpointer) > MAX_VIRTUAL_DELEGATE_OFFSET)
+               return NULL;
+
+       start = code = mono_global_codeman_reserve (size);
+
+       /* Replace the this argument with the target */
+       amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8);
+       amd64_mov_reg_membase (code, AMD64_ARG_REG1, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 8);
+
+       if (load_imt_reg) {
+               /* Load the IMT reg */
+               amd64_mov_reg_membase (code, MONO_ARCH_IMT_REG, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 8);
+       }
+
+       /* Load the vtable */
+       amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoObject, vtable), 8);
+       amd64_jump_membase (code, AMD64_RAX, offset);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL);
+
+       if (code_len)
+               *code_len = code - start;
+
+       return start;
+}
+
 /*
  * mono_arch_get_delegate_invoke_impls:
  *
@@ -7876,6 +7909,18 @@ mono_arch_get_delegate_invoke_impls (void)
                g_free (tramp_name);
        }
 
+       for (i = 0; i < MAX_VIRTUAL_DELEGATE_OFFSET; ++i) {
+               code = get_delegate_virtual_invoke_impl (TRUE, i * SIZEOF_VOID_P, &code_len);
+               tramp_name = g_strdup_printf ("delegate_virtual_invoke_imt_%d", i);
+               res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL));
+               g_free (tramp_name);
+
+               code = get_delegate_virtual_invoke_impl (FALSE, i * SIZEOF_VOID_P, &code_len);
+               tramp_name = g_strdup_printf ("delegate_virtual_invoke_%d", i);
+               res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL));
+               g_free (tramp_name);
+       }
+
        return res;
 }
 
@@ -7937,26 +7982,7 @@ mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_targe
 gpointer
 mono_arch_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *method, int offset, gboolean load_imt_reg)
 {
-       guint8 *code, *start;
-       int size = 20;
-
-       start = code = mono_global_codeman_reserve (size);
-
-       /* Replace the this argument with the target */
-       amd64_mov_reg_reg (code, AMD64_RAX, AMD64_ARG_REG1, 8);
-       amd64_mov_reg_membase (code, AMD64_ARG_REG1, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 8);
-
-       if (load_imt_reg) {
-               /* Load the IMT reg */
-               amd64_mov_reg_membase (code, MONO_ARCH_IMT_REG, AMD64_RAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 8);
-       }
-
-       /* Load the vtable */
-       amd64_mov_reg_membase (code, AMD64_RAX, AMD64_ARG_REG1, MONO_STRUCT_OFFSET (MonoObject, vtable), 8);
-       amd64_jump_membase (code, AMD64_RAX, offset);
-       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL);
-
-       return start;
+       return get_delegate_virtual_invoke_impl (load_imt_reg, offset, NULL);
 }
 
 void
index eb53c982951c4f75829d3451396b38abdbaa2b7c..baeb61fe85352adcddeb24b95da9c39f5130a031 100644 (file)
@@ -179,7 +179,7 @@ typedef struct {
 
 
 #define PARAM_REGS 4
-#define DYN_CALL_STACK_ARGS 6
+#define DYN_CALL_STACK_ARGS 10
 
 typedef struct {
        mgreg_t regs [PARAM_REGS + DYN_CALL_STACK_ARGS];
@@ -270,7 +270,7 @@ typedef struct MonoCompileArch {
 
 #define MONO_ARCH_GSHARED_SUPPORTED 1
 #define MONO_ARCH_DYN_CALL_SUPPORTED 1
-#define MONO_ARCH_DYN_CALL_PARAM_AREA 24
+#define MONO_ARCH_DYN_CALL_PARAM_AREA (DYN_CALL_STACK_ARGS * sizeof (mgreg_t))
 
 #ifndef MONO_CROSS_COMPILE
 #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1
index bc7d73d855363553958f1def7046ba0be999a304..c43da613f60e1eba364a30e409baef5541ccdeab 100644 (file)
 #include <sys/syscall.h>
 #endif
 
+#ifdef HAVE_SYS_PRCTL_H
+#include <sys/prctl.h>
+#endif
+
 #include <mono/metadata/appdomain.h>
 #include <mono/metadata/tabledefs.h>
 #include <mono/metadata/threads.h>
@@ -2214,7 +2218,15 @@ mono_handle_native_sigsegv (int signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *i
                 * it will deadlock. Call the syscall directly instead.
                 */
                pid = mono_runtime_syscall_fork ();
-
+#if defined (HAVE_PRCTL) && defined(PR_SET_PTRACER)
+               if (pid > 0) {
+                       // Allow gdb to attach to the process even if ptrace_scope sysctl variable is set to
+                       // a value other than 0 (the most permissive ptrace scope). Most modern Linux
+                       // distributions set the scope to 1 which allows attaching only to direct children of
+                       // the current process
+                       prctl (PR_SET_PTRACER, pid, 0, 0, 0);
+               }
+#endif
                if (pid == 0) {
                        dup2 (STDERR_FILENO, STDOUT_FILENO);
 
index fd7e005a82e5c6937678b93c3fc485c830fd061e..ed21c85287a71610c38b0c7d1cbe79e1bb693ba1 100644 (file)
@@ -1002,8 +1002,7 @@ class_type_info (MonoDomain *domain, MonoClass *class, MonoRgctxInfoType info_ty
 static gboolean
 ji_is_gsharedvt (MonoJitInfo *ji)
 {
-       if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->var_is_vt ||
-                                                                                  mono_jit_info_get_generic_sharing_context (ji)->mvar_is_vt))
+       if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->is_gsharedvt))
                return TRUE;
        else
                return FALSE;
@@ -1018,7 +1017,6 @@ typedef struct {
        gint32 vcall_offset;
        gpointer addr;
        MonoMethodSignature *sig, *gsig;
-       MonoGenericContext gsctx;
 } GSharedVtTrampInfo;
 
 static guint
@@ -1037,8 +1035,7 @@ tramp_info_equal (gconstpointer a, gconstpointer b)
 
        /* The signatures should be internalized */
        return tramp1->is_in == tramp2->is_in && tramp1->calli == tramp2->calli && tramp1->vcall_offset == tramp2->vcall_offset &&
-               tramp1->addr == tramp2->addr && tramp1->sig == tramp2->sig && tramp1->gsig == tramp2->gsig &&
-               tramp1->gsctx.class_inst == tramp2->gsctx.class_inst && tramp1->gsctx.method_inst == tramp2->gsctx.method_inst;
+               tramp1->addr == tramp2->addr && tramp1->sig == tramp2->sig && tramp1->gsig == tramp2->gsig;
 }
 
 /*
@@ -1063,13 +1060,13 @@ mini_get_gsharedvt_wrapper (gboolean gsharedvt_in, gpointer addr, MonoMethodSign
                inited = TRUE;
        }
 
+       memset (&tinfo, 0, sizeof (tinfo));
        tinfo.is_in = gsharedvt_in;
        tinfo.calli = calli;
        tinfo.vcall_offset = vcall_offset;
        tinfo.addr = addr;
        tinfo.sig = normal_sig;
        tinfo.gsig = gsharedvt_sig;
-       memcpy (&tinfo.gsctx, gsctx, sizeof (MonoGenericSharingContext));
 
        domain_info = domain_jit_info (domain);
 
@@ -1131,7 +1128,7 @@ mini_get_gsharedvt_wrapper (gboolean gsharedvt_in, gpointer addr, MonoMethodSign
 
 static gpointer
 instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti,
-                                 MonoGenericContext *context, MonoClass *class, guint8 *caller)
+                                 MonoGenericContext *context, MonoClass *class)
 {
        gpointer data;
        gboolean temporary;
@@ -1283,22 +1280,11 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                MonoMethodSignature *gsig = oti->data;
                MonoMethodSignature *sig = data;
                gpointer addr;
-               MonoJitInfo *caller_ji;
-               MonoGenericJitInfo *gji;
 
                /*
                 * This is an indirect call to the address passed by the caller in the rgctx reg.
                 */
-               //printf ("CALLI\n");
-
-               g_assert (caller);
-               caller_ji = mini_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (caller), NULL);
-               g_assert (caller_ji);
-               gji = mono_jit_info_get_generic_jit_info (caller_ji);
-               g_assert (gji);
-
-               addr = mini_get_gsharedvt_wrapper (FALSE, NULL, sig, gsig, gji->generic_sharing_context, -1, TRUE);
-
+               addr = mini_get_gsharedvt_wrapper (FALSE, NULL, sig, gsig, NULL, -1, TRUE);
                return addr;
        }
        case MONO_RGCTX_INFO_METHOD_GSHAREDVT_OUT_TRAMPOLINE:
@@ -1307,10 +1293,9 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                MonoMethodSignature *call_sig;
                MonoMethod *method;
                gpointer addr;
-               MonoJitInfo *caller_ji, *callee_ji;
+               MonoJitInfo *callee_ji;
                gboolean virtual = oti->info_type == MONO_RGCTX_INFO_METHOD_GSHAREDVT_OUT_TRAMPOLINE_VIRT;
                gint32 vcall_offset;
-               MonoGenericJitInfo *gji, *callee_gji = NULL;
                gboolean callee_gsharedvt;
 
                /* This is the original generic signature used by the caller */
@@ -1342,19 +1327,9 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                        vcall_offset = -1;
                }
 
-               g_assert (caller);
-               caller_ji = mini_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (caller), NULL);
-               g_assert (caller_ji);
-               gji = mono_jit_info_get_generic_jit_info (caller_ji);
-               g_assert (gji);
-
                // FIXME: This loads information in the AOT case
                callee_ji = mini_jit_info_table_find (mono_domain_get (), mono_get_addr_from_ftnptr (addr), NULL);
                callee_gsharedvt = ji_is_gsharedvt (callee_ji);
-               if (callee_gsharedvt) {
-                       callee_gji = mono_jit_info_get_generic_jit_info (callee_ji);
-                       g_assert (callee_gji);
-               }
 
                /*
                 * For gsharedvt calls made out of gsharedvt methods, the callee could end up being a gsharedvt method, or a normal
@@ -1375,7 +1350,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                        sig = mono_method_signature (method);
                        gsig = call_sig;
 
-                       addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, gji->generic_sharing_context, vcall_offset, FALSE);
+                       addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, NULL, vcall_offset, FALSE);
 #if 0
                        if (virtual)
                                printf ("OUT-VCALL: %s\n", mono_method_full_name (method, TRUE));
@@ -1407,12 +1382,12 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                                sig = mono_method_signature (method);
                                gsig = mono_method_signature (jinfo_get_method (callee_ji)); 
 
-                               addr = mini_get_gsharedvt_wrapper (TRUE, callee_ji->code_start, sig, gsig, callee_gji->generic_sharing_context, -1, FALSE);
+                               addr = mini_get_gsharedvt_wrapper (TRUE, callee_ji->code_start, sig, gsig, NULL, -1, FALSE);
 
                                sig = mono_method_signature (method);
                                gsig = call_sig;
 
-                               addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, gji->generic_sharing_context, -1, FALSE);
+                               addr = mini_get_gsharedvt_wrapper (FALSE, addr, sig, gsig, NULL, -1, FALSE);
 
                                //printf ("OUT-IN-RGCTX: %s\n", mono_method_full_name (method, TRUE));
                        }
@@ -1451,7 +1426,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
                                offset += size;
                                break;
                        default:
-                               res->entries [i] = instantiate_info (domain, template, context, class, NULL);
+                               res->entries [i] = instantiate_info (domain, template, context, class);
                                break;
                        }
                }
@@ -1817,7 +1792,7 @@ alloc_rgctx_array (MonoDomain *domain, int n, gboolean is_mrgctx)
 }
 
 static gpointer
-fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContext *rgctx, guint8 *caller, guint32 slot,
+fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContext *rgctx, guint32 slot,
                MonoGenericInst *method_inst)
 {
        gpointer info;
@@ -1872,7 +1847,7 @@ fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContex
        oti = class_get_rgctx_template_oti (get_shared_class (class),
                                                                                method_inst ? method_inst->type_argc : 0, slot, TRUE, TRUE, &do_free);
        /* This might take the loader lock */
-       info = instantiate_info (domain, &oti, &context, class, caller);
+       info = instantiate_info (domain, &oti, &context, class);
 
        /*
        if (method_inst)
@@ -1900,13 +1875,12 @@ fill_runtime_generic_context (MonoVTable *class_vtable, MonoRuntimeGenericContex
 /*
  * mono_class_fill_runtime_generic_context:
  * @class_vtable: a vtable
- * @caller: caller method address
  * @slot: a slot index to be instantiated
  *
  * Instantiates a slot in the RGCTX, returning its value.
  */
 gpointer
-mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *caller, guint32 slot)
+mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot)
 {
        static gboolean inited = FALSE;
        static int num_alloced = 0;
@@ -1931,7 +1905,7 @@ mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *calle
 
        mono_domain_unlock (domain);
 
-       info = fill_runtime_generic_context (class_vtable, rgctx, caller, slot, 0);
+       info = fill_runtime_generic_context (class_vtable, rgctx, slot, 0);
 
        DEBUG (printf ("get rgctx slot: %s %d -> %p\n", mono_type_full_name (&class_vtable->klass->byval_arg), slot, info));
 
@@ -1941,18 +1915,16 @@ mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *calle
 /*
  * mono_method_fill_runtime_generic_context:
  * @mrgctx: an MRGCTX
- * @caller: caller method address
  * @slot: a slot index to be instantiated
  *
  * Instantiates a slot in the MRGCTX.
  */
 gpointer
-mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint8* caller, guint32 slot)
+mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint32 slot)
 {
        gpointer info;
 
-       info = fill_runtime_generic_context (mrgctx->class_vtable, (MonoRuntimeGenericContext*)mrgctx, caller, slot,
-               mrgctx->method_inst);
+       info = fill_runtime_generic_context (mrgctx->class_vtable, (MonoRuntimeGenericContext*)mrgctx, slot, mrgctx->method_inst);
 
        return info;
 }
@@ -2734,20 +2706,12 @@ mono_generic_sharing_cleanup (void)
 gboolean
 mini_type_var_is_vt (MonoCompile *cfg, MonoType *type)
 {
-       if (type->type == MONO_TYPE_VAR) {
-               if (cfg->generic_sharing_context->var_is_vt && cfg->generic_sharing_context->var_is_vt [type->data.generic_param->num])
-                       return TRUE;
-               else
-                       return FALSE;
-       } else if (type->type == MONO_TYPE_MVAR) {
-               if (cfg->generic_sharing_context->mvar_is_vt && cfg->generic_sharing_context->mvar_is_vt [type->data.generic_param->num])
-                       return TRUE;
-               else
-                       return FALSE;
+       if (type->type == MONO_TYPE_VAR || type->type == MONO_TYPE_MVAR) {
+               return type->data.generic_param->gshared_constraint && type->data.generic_param->gshared_constraint->type == MONO_TYPE_VALUETYPE;
        } else {
                g_assert_not_reached ();
+               return FALSE;
        }
-       return FALSE;
 }
 
 gboolean
@@ -2955,14 +2919,21 @@ get_shared_type (MonoType *t, MonoType *type)
                k = mono_class_inflate_generic_class (gclass->container_class, &context);
 
                return get_shared_gparam (t, &k->byval_arg);
+       } else if (MONO_TYPE_ISSTRUCT (type)) {
+               return type;
        }
 
-       g_assert (!type->byref && (((type->type >= MONO_TYPE_BOOLEAN) && (type->type <= MONO_TYPE_R8)) || (type->type == MONO_TYPE_I) || (type->type == MONO_TYPE_U) || (type->type == MONO_TYPE_VALUETYPE && type->data.klass->enumtype)));
-
        /* Create a type variable with a constraint which encodes which types can match it */
        ttype = type->type;
-       if (type->type == MONO_TYPE_VALUETYPE)
+       if (type->type == MONO_TYPE_VALUETYPE) {
                ttype = mono_class_enum_basetype (type->data.klass)->type;
+       } else if (MONO_TYPE_IS_REFERENCE (type)) {
+               ttype = MONO_TYPE_OBJECT;
+       } else if (type->type == MONO_TYPE_VAR || type->type == MONO_TYPE_MVAR) {
+               if (type->data.generic_param->gshared_constraint)
+                       return get_shared_gparam (t, type->data.generic_param->gshared_constraint);
+               ttype = MONO_TYPE_OBJECT;
+       }
 
        {
                MonoType t2;
@@ -2992,18 +2963,11 @@ get_shared_inst (MonoGenericInst *inst, MonoGenericInst *shared_inst, MonoGeneri
 
        type_argv = g_new0 (MonoType*, inst->type_argc);
        for (i = 0; i < inst->type_argc; ++i) {
-               if (all_vt) {
+               if (all_vt || gsharedvt) {
                        type_argv [i] = get_gsharedvt_type (shared_inst->type_argv [i]);
-               } else if ((MONO_TYPE_IS_REFERENCE (inst->type_argv [i]) || inst->type_argv [i]->type == MONO_TYPE_VAR || inst->type_argv [i]->type == MONO_TYPE_MVAR)) {
-                       g_assert (shared_inst);
-                       type_argv [i] = get_shared_gparam (shared_inst->type_argv [i], &mono_defaults.object_class->byval_arg);
-               } else if (partial) {
+               } else {
                        /* These types match the ones in generic_inst_is_sharable () */
                        type_argv [i] = get_shared_type (shared_inst->type_argv [i], inst->type_argv [i]);
-               } else if (gsharedvt) {
-                       type_argv [i] = get_gsharedvt_type (shared_inst->type_argv [i]);
-               } else {
-                       type_argv [i] = inst->type_argv [i];
                }
        }
 
@@ -3073,6 +3037,8 @@ mini_get_shared_method_full (MonoMethod *method, gboolean all_vt, gboolean is_gs
        res = mono_class_inflate_generic_method_checked (declaring_method, &shared_context, &error);
        g_assert (mono_error_ok (&error)); /* FIXME don't swallow the error */
 
+       //printf ("%s\n", mono_method_full_name (res, 1));
+
        return res;
 }
 
@@ -3082,6 +3048,68 @@ mini_get_shared_method (MonoMethod *method)
        return mini_get_shared_method_full (method, FALSE, FALSE);
 }
 
+int
+mini_get_rgctx_entry_slot (MonoJumpInfoRgctxEntry *entry)
+{
+       guint32 slot = -1;
+
+       switch (entry->data->type) {
+       case MONO_PATCH_INFO_CLASS:
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, &entry->data->data.klass->byval_arg, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       case MONO_PATCH_INFO_METHOD:
+       case MONO_PATCH_INFO_METHODCONST:
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.method, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       case MONO_PATCH_INFO_FIELD:
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.field, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       case MONO_PATCH_INFO_SIGNATURE:
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.sig, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       case MONO_PATCH_INFO_GSHAREDVT_CALL: {
+               MonoJumpInfoGSharedVtCall *call_info = g_malloc0 (sizeof (MonoJumpInfoGSharedVtCall)); //mono_domain_alloc0 (domain, sizeof (MonoJumpInfoGSharedVtCall));
+
+               memcpy (call_info, entry->data->data.gsharedvt, sizeof (MonoJumpInfoGSharedVtCall));
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, call_info, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       }
+       case MONO_PATCH_INFO_GSHAREDVT_METHOD: {
+               MonoGSharedVtMethodInfo *info;
+               MonoGSharedVtMethodInfo *oinfo = entry->data->data.gsharedvt_method;
+               int i;
+
+               /* Make a copy into the domain mempool */
+               info = g_malloc0 (sizeof (MonoGSharedVtMethodInfo)); //mono_domain_alloc0 (domain, sizeof (MonoGSharedVtMethodInfo));
+               info->method = oinfo->method;
+               info->num_entries = oinfo->num_entries;
+               info->entries = g_malloc0 (sizeof (MonoRuntimeGenericContextInfoTemplate) * info->num_entries);
+               for (i = 0; i < oinfo->num_entries; ++i) {
+                       MonoRuntimeGenericContextInfoTemplate *otemplate = &oinfo->entries [i];
+                       MonoRuntimeGenericContextInfoTemplate *template = &info->entries [i];
+
+                       memcpy (template, otemplate, sizeof (MonoRuntimeGenericContextInfoTemplate));
+               }
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       }
+       case MONO_PATCH_INFO_VIRT_METHOD: {
+               MonoJumpInfoVirtMethod *info;
+               MonoJumpInfoVirtMethod *oinfo = entry->data->data.virt_method;
+
+               info = g_malloc0 (sizeof (MonoJumpInfoVirtMethod));
+               memcpy (info, oinfo, sizeof (MonoJumpInfoVirtMethod));
+               slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method));
+               break;
+       }
+       default:
+               g_assert_not_reached ();
+               break;
+       }
+
+       return slot;
+}
+
 #if defined(ENABLE_GSHAREDVT)
 
 #include "../../../mono-extensions/mono/mini/mini-generic-sharing-gsharedvt.c"
index 0cf56a986d5a435a545d2b028bc0c927c6d35f30..72e64a2c16980c17c26a097b88a177ec39b2aec0 100644 (file)
@@ -2147,11 +2147,8 @@ mono_arch_decompose_opts (MonoCompile *cfg, MonoInst *ins)
 {
        switch (ins->opcode) {
        case OP_ICONV_TO_R_UN: {
-#if G_BYTE_ORDER == G_BIG_ENDIAN
+               // This value is OK as-is for both big and little endian because of how it is stored
                static const guint64 adjust_val = 0x4330000000000000ULL;
-#else
-               static const guint64 adjust_val = 0x0000000000003043ULL;
-#endif
                int msw_reg = mono_alloc_ireg (cfg);
                int adj_reg = mono_alloc_freg (cfg);
                int tmp_reg = mono_alloc_freg (cfg);
@@ -2162,8 +2159,14 @@ mono_arch_decompose_opts (MonoCompile *cfg, MonoInst *ins)
                        basereg = mono_alloc_ireg (cfg);
                        MONO_EMIT_NEW_BIALU_IMM (cfg, OP_IADD_IMM, basereg, cfg->frame_reg, offset);
                }
+#if G_BYTE_ORDER == G_BIG_ENDIAN
                MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset, msw_reg);
                MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset + 4, ins->sreg1);
+#else
+               // For little endian the words are reversed
+               MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset + 4, msw_reg);
+               MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, basereg, offset, ins->sreg1);
+#endif
                MONO_EMIT_NEW_LOAD_R8 (cfg, adj_reg, &adjust_val);
                MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADR8_MEMBASE, tmp_reg, basereg, offset);
                MONO_EMIT_NEW_BIALU (cfg, OP_FSUB, ins->dreg, tmp_reg, adj_reg);
@@ -2213,7 +2216,11 @@ mono_arch_decompose_opts (MonoCompile *cfg, MonoInst *ins)
                        MONO_EMIT_NEW_BIALU_IMM (cfg, OP_IADD_IMM, basereg, cfg->frame_reg, offset);
                }
                MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STORER8_MEMBASE_REG, basereg, offset, ins->sreg1);
+#if G_BYTE_ORDER == G_BIG_ENDIAN
                MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, msw_reg, basereg, offset);
+#else
+               MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, msw_reg, basereg, offset+4);
+#endif
                MONO_EMIT_NEW_UNALU (cfg, OP_CHECK_FINITE, -1, msw_reg);
                MONO_EMIT_NEW_UNALU (cfg, OP_FMOVE, ins->dreg, ins->sreg1);
                ins->opcode = OP_NOP;
index dc83f788509399e4f201a71dc391d4aa4f971c59..0c611f251a54f7e70eb00d4d4671301c648dfb55 100644 (file)
@@ -145,6 +145,7 @@ typedef struct MonoCompileArch {
 #define PPC_LAST_FPARG_REG ppc_f13
 #define PPC_PASS_STRUCTS_BY_VALUE 1
 #define PPC_THREAD_PTR_REG ppc_r13
+#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1
 #else
 #define PPC_RET_ADDR_OFFSET 4
 #define PPC_STACK_PARAM_OFFSET 8
index 615d56bcc33a2fcb356c4fa794a6c23eb4d27966..264a99cdc6934ca8c05d5d60694acc8829dddc0f 100644 (file)
@@ -260,7 +260,7 @@ mono_print_method_from_ip (void *ip)
        gsctx = mono_jit_info_get_generic_sharing_context (ji);
        shared_type = "";
        if (gsctx) {
-               if (gsctx->var_is_vt || gsctx->mvar_is_vt)
+               if (gsctx->is_gsharedvt)
                        shared_type = "gsharedvt ";
                else
                        shared_type = "gshared ";
@@ -1591,62 +1591,7 @@ mono_resolve_patch_target (MonoMethod *method, MonoDomain *domain, guint8 *code,
        case MONO_PATCH_INFO_NONE:
                break;
        case MONO_PATCH_INFO_RGCTX_FETCH: {
-               MonoJumpInfoRgctxEntry *entry = patch_info->data.rgctx_entry;
-               guint32 slot = -1;
-
-               switch (entry->data->type) {
-               case MONO_PATCH_INFO_CLASS:
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, &entry->data->data.klass->byval_arg, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               case MONO_PATCH_INFO_METHOD:
-               case MONO_PATCH_INFO_METHODCONST:
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.method, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               case MONO_PATCH_INFO_FIELD:
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.field, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               case MONO_PATCH_INFO_SIGNATURE:
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, entry->data->data.sig, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               case MONO_PATCH_INFO_GSHAREDVT_CALL: {
-                       MonoJumpInfoGSharedVtCall *call_info = g_malloc0 (sizeof (MonoJumpInfoGSharedVtCall)); //mono_domain_alloc0 (domain, sizeof (MonoJumpInfoGSharedVtCall));
-
-                       memcpy (call_info, entry->data->data.gsharedvt, sizeof (MonoJumpInfoGSharedVtCall));
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, call_info, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               }
-               case MONO_PATCH_INFO_GSHAREDVT_METHOD: {
-                       MonoGSharedVtMethodInfo *info;
-                       MonoGSharedVtMethodInfo *oinfo = entry->data->data.gsharedvt_method;
-                       int i;
-
-                       /* Make a copy into the domain mempool */
-                       info = g_malloc0 (sizeof (MonoGSharedVtMethodInfo)); //mono_domain_alloc0 (domain, sizeof (MonoGSharedVtMethodInfo));
-                       info->method = oinfo->method;
-                       info->num_entries = oinfo->num_entries;
-                       info->entries = g_malloc0 (sizeof (MonoRuntimeGenericContextInfoTemplate) * info->num_entries);
-                       for (i = 0; i < oinfo->num_entries; ++i) {
-                               MonoRuntimeGenericContextInfoTemplate *otemplate = &oinfo->entries [i];
-                               MonoRuntimeGenericContextInfoTemplate *template = &info->entries [i];
-
-                               memcpy (template, otemplate, sizeof (MonoRuntimeGenericContextInfoTemplate));
-                       }
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               }
-               case MONO_PATCH_INFO_VIRT_METHOD: {
-                       MonoJumpInfoVirtMethod *info;
-                       MonoJumpInfoVirtMethod *oinfo = entry->data->data.virt_method;
-
-                       info = g_malloc0 (sizeof (MonoJumpInfoVirtMethod));
-                       memcpy (info, oinfo, sizeof (MonoJumpInfoVirtMethod));
-                       slot = mono_method_lookup_or_register_info (entry->method, entry->in_mrgctx, info, entry->info_type, mono_method_get_context (entry->method));
-                       break;
-               }
-               default:
-                       g_assert_not_reached ();
-                       break;
-               }
+               int slot = mini_get_rgctx_entry_slot (patch_info->data.rgctx_entry);
 
                target = mono_create_rgctx_lazy_fetch_trampoline (slot);
                break;
@@ -1741,34 +1686,21 @@ mini_init_gsctx (MonoDomain *domain, MonoMemPool *mp, MonoGenericContext *contex
 
        if (context && context->class_inst) {
                inst = context->class_inst;
-               if (domain)
-                       gsctx->var_is_vt = mono_domain_alloc0 (domain, sizeof (gboolean) * inst->type_argc);
-               else if (mp)
-                       gsctx->var_is_vt = mono_mempool_alloc0 (mp, sizeof (gboolean) * inst->type_argc);
-               else
-                       gsctx->var_is_vt = g_new0 (gboolean, inst->type_argc);
-
                for (i = 0; i < inst->type_argc; ++i) {
                        MonoType *type = inst->type_argv [i];
 
                        if (mini_is_gsharedvt_gparam (type))
-                               gsctx->var_is_vt [i] = TRUE;
+                               gsctx->is_gsharedvt = TRUE;
                }
        }
        if (context && context->method_inst) {
                inst = context->method_inst;
-               if (domain)
-                       gsctx->mvar_is_vt = mono_domain_alloc0 (domain, sizeof (gboolean) * inst->type_argc);
-               else if (mp)
-                       gsctx->mvar_is_vt = mono_mempool_alloc0 (mp, sizeof (gboolean) * inst->type_argc);
-               else
-                       gsctx->mvar_is_vt = g_new0 (gboolean, inst->type_argc);
 
                for (i = 0; i < inst->type_argc; ++i) {
                        MonoType *type = inst->type_argv [i];
 
                        if (mini_is_gsharedvt_gparam (type))
-                               gsctx->mvar_is_vt [i] = TRUE;
+                               gsctx->is_gsharedvt = TRUE;
                }
        }
 }
@@ -2633,10 +2565,6 @@ mono_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *met
        if (!method)
                return NULL;
 
-       /* FIXME Support more cases */
-       if (mono_aot_only)
-               return NULL;
-
        if (MONO_TYPE_ISSTRUCT (sig->ret))
                return NULL;
 
@@ -2674,7 +2602,17 @@ mono_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *met
        if (cache [idx])
                return cache [idx];
 
-       return cache [idx] = mono_arch_get_delegate_virtual_invoke_impl (sig, method, offset, load_imt_reg);
+       /* FIXME Support more cases */
+       if (mono_aot_only) {
+               char tramp_name [256];
+
+               sprintf (tramp_name, "delegate_virtual_invoke%s_%d", load_imt_reg ? "_imt" : "", offset / SIZEOF_VOID_P);
+               cache [idx] = mono_aot_get_trampoline (tramp_name);
+               g_assert (cache [idx]);
+       } else {
+               cache [idx] = mono_arch_get_delegate_virtual_invoke_impl (sig, method, offset, load_imt_reg);
+       }
+       return cache [idx];
 }
 
 static gpointer
@@ -3417,6 +3355,8 @@ register_icalls (void)
        register_icall (mono_object_castclass_with_cache, "mono_object_castclass_with_cache", "object object ptr ptr", FALSE);
        register_icall (mono_object_isinst_with_cache, "mono_object_isinst_with_cache", "object object ptr ptr", FALSE);
        register_icall (mono_generic_class_init, "mono_generic_class_init", "void ptr", FALSE);
+       register_icall (mono_fill_class_rgctx, "mono_class_fill_rgctx", "ptr ptr int", FALSE);
+       register_icall (mono_fill_method_rgctx, "mono_method_fill_rgctx", "ptr ptr int", FALSE);
 
        register_icall (mono_debugger_agent_user_break, "mono_debugger_agent_user_break", "void", FALSE);
        register_dyn_icall (mono_create_specific_trampoline (NULL, MONO_TRAMPOLINE_GENERIC_CLASS_INIT, mono_get_root_domain (), NULL),
index 085f56141f9063ad49d1b5f9acdf379efc724511..a8ed7aad6a5dc84c6c39e3fab6c0b409cf255ee2 100644 (file)
@@ -269,8 +269,7 @@ is_generic_method_definition (MonoMethod *m)
 gboolean
 mini_jit_info_is_gsharedvt (MonoJitInfo *ji)
 {
-       if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->var_is_vt ||
-                                                                                  mono_jit_info_get_generic_sharing_context (ji)->mvar_is_vt))
+       if (ji && ji->has_generic_jit_info && (mono_jit_info_get_generic_sharing_context (ji)->is_gsharedvt))
                return TRUE;
        else
                return FALSE;
@@ -957,9 +956,9 @@ mono_rgctx_lazy_fetch_trampoline (mgreg_t *regs, guint8 *code, gpointer data, gu
        num_lookups++;
 
        if (mrgctx)
-               return mono_method_fill_runtime_generic_context (arg, code, index);
+               return mono_method_fill_runtime_generic_context (arg, index);
        else
-               return mono_class_fill_runtime_generic_context (arg, code, index);
+               return mono_class_fill_runtime_generic_context (arg, index);
 }
 
 void
@@ -1822,7 +1821,9 @@ mini_get_nullified_class_init_trampoline (void)
                MonoTrampInfo *info;
 
                if (mono_aot_only) {
-                       tramp = mono_aot_get_trampoline ("nullified_class_init_trampoline");
+                       /* Not used */
+                       g_assert_not_reached ();
+                       tramp = NULL;
                } else {
                        tramp = mono_arch_get_nullified_class_init_trampoline (&info);
                        mono_tramp_info_register (info);
index 53e5d6fbbd100281e84f66b44ab3ee564b0ac1b2..b53f0a6bccf2d8fe72bc133dcb9ec66e6e163812 100644 (file)
@@ -6161,6 +6161,42 @@ get_delegate_invoke_impl (gboolean has_target, guint32 param_count, guint32 *cod
        return start;
 }
 
+#define MAX_VIRTUAL_DELEGATE_OFFSET 32
+
+static gpointer
+get_delegate_virtual_invoke_impl (gboolean load_imt_reg, int offset, guint32 *code_size)
+{
+       guint8 *code, *start;
+       int size = 24;
+
+       /*
+        * The stack contains:
+        * <delegate>
+        * <return addr>
+        */
+       start = code = mono_global_codeman_reserve (size);
+
+       /* Replace the this argument with the target */
+       x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4);
+       x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 4);
+       x86_mov_membase_reg (code, X86_ESP, 4, X86_ECX, 4);
+
+       if (load_imt_reg) {
+               /* Load the IMT reg */
+               x86_mov_reg_membase (code, MONO_ARCH_IMT_REG, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 4);
+       }
+
+       /* Load the vtable */
+       x86_mov_reg_membase (code, X86_EAX, X86_ECX, MONO_STRUCT_OFFSET (MonoObject, vtable), 4);
+       x86_jump_membase (code, X86_EAX, offset);
+       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL);
+
+       if (code_size)
+               *code_size = code - start;
+
+       return start;
+}
+
 GSList*
 mono_arch_get_delegate_invoke_impls (void)
 {
@@ -6180,6 +6216,18 @@ mono_arch_get_delegate_invoke_impls (void)
                g_free (tramp_name);
        }
 
+       for (i = 0; i < MAX_VIRTUAL_DELEGATE_OFFSET; ++i) {
+               code = get_delegate_virtual_invoke_impl (TRUE, i * SIZEOF_VOID_P, &code_len);
+               tramp_name = g_strdup_printf ("delegate_virtual_invoke_imt_%d", i);
+               res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL));
+               g_free (tramp_name);
+
+               code = get_delegate_virtual_invoke_impl (FALSE, i * SIZEOF_VOID_P, &code_len);
+               tramp_name = g_strdup_printf ("delegate_virtual_invoke_%d", i);
+               res = g_slist_prepend (res, mono_tramp_info_create (tramp_name, code, code_len, NULL, NULL));
+               g_free (tramp_name);
+       }
+
        return res;
 }
 
@@ -6245,32 +6293,7 @@ mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_targe
 gpointer
 mono_arch_get_delegate_virtual_invoke_impl (MonoMethodSignature *sig, MonoMethod *method, int offset, gboolean load_imt_reg)
 {
-       guint8 *code, *start;
-       int size = 24;
-
-       /*
-        * The stack contains:
-        * <delegate>
-        * <return addr>
-        */
-       start = code = mono_global_codeman_reserve (size);
-
-       /* Replace the this argument with the target */
-       x86_mov_reg_membase (code, X86_EAX, X86_ESP, 4, 4);
-       x86_mov_reg_membase (code, X86_ECX, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, target), 4);
-       x86_mov_membase_reg (code, X86_ESP, 4, X86_ECX, 4);
-
-       if (load_imt_reg) {
-               /* Load the IMT reg */
-               x86_mov_reg_membase (code, MONO_ARCH_IMT_REG, X86_EAX, MONO_STRUCT_OFFSET (MonoDelegate, method), 4);
-       }
-
-       /* Load the vtable */
-       x86_mov_reg_membase (code, X86_EAX, X86_ECX, MONO_STRUCT_OFFSET (MonoObject, vtable), 4);
-       x86_jump_membase (code, X86_EAX, offset);
-       mono_profiler_code_buffer_new (start, code - start, MONO_PROFILER_CODE_BUFFER_DELEGATE_INVOKE, NULL);
-
-       return start;
+       return get_delegate_virtual_invoke_impl (load_imt_reg, offset, NULL);
 }
 
 mgreg_t
index 98f4a155c77178f01a6645aa82045fa399156247..be741a249066a9f9e0b7b098fcee2776a681e4c4 100644 (file)
@@ -3162,21 +3162,30 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
        if (MONO_METHOD_COMPILE_BEGIN_ENABLED ())
                MONO_PROBE_METHOD_COMPILE_BEGIN (method);
 
+       gsharedvt_method = is_gsharedvt_method (method);
+
        /*
         * In AOT mode, method can be the following:
-        * - the generic method definition. In this case, we are compiling the fully shared
-        *   version of the method, i.e. the version where all the type parameters are
-        *   reference types.
         * - a gsharedvt method.
-        * - a method inflated with type parameters. This is for partial sharing.
+        * - a method inflated with type parameters. This is for ref/partial sharing.
         * - a method inflated with concrete types.
         */
-       if (compile_aot)
-               try_generic_shared = mono_class_generic_sharing_enabled (method->klass) &&
-                       (opts & MONO_OPT_GSHARED) && ((method->is_generic || method->klass->generic_container) || (!method->klass->generic_class && mono_method_is_generic_sharable_full (method, TRUE, FALSE, FALSE)));
-       else
+       if (compile_aot) {
+               if (is_open_method (method)) {
+                       try_generic_shared = TRUE;
+                       method_is_gshared = TRUE;
+               } else {
+                       try_generic_shared = FALSE;
+               }
+               g_assert (opts & MONO_OPT_GSHARED);
+       } else {
                try_generic_shared = mono_class_generic_sharing_enabled (method->klass) &&
                        (opts & MONO_OPT_GSHARED) && mono_method_is_generic_sharable (method, FALSE);
+               if (mini_is_gsharedvt_sharable_method (method)) {
+                       if (!mono_debug_count ())
+                               try_generic_shared = FALSE;
+               }
+       }
 
        /*
        if (try_generic_shared && !mono_debug_count ())
@@ -3190,21 +3199,6 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
                        mono_stats.generics_unsharable_methods++;
        }
 
-       if (mini_is_gsharedvt_sharable_method (method)) {
-               if (!mono_debug_count ())
-                       try_generic_shared = FALSE;
-               if (compile_aot)
-                       try_generic_shared = FALSE;
-       }
-
-       gsharedvt_method = is_gsharedvt_method (method);
-       if (gsharedvt_method || (compile_aot && is_open_method (method))) {
-               /* We are AOTing a gshared method directly */
-               method_is_gshared = TRUE;
-               g_assert (compile_aot);
-               try_generic_shared = TRUE;
-       }
-
 #ifdef ENABLE_LLVM
        try_llvm = mono_use_llvm || llvm;
 #endif
index a7b0533d7f6a0bec10e923a3e38f10f902dc729a..752d55eb051d75329198985714ece24cfe2f0c1e 100644 (file)
 
 #define MONO_TYPE_IS_PRIMITIVE(t) ((!(t)->byref && ((((t)->type >= MONO_TYPE_BOOLEAN && (t)->type <= MONO_TYPE_R8) || ((t)->type >= MONO_TYPE_I && (t)->type <= MONO_TYPE_U)))))
 
+#define MONO_AOT_TRAMP_PAGE_SIZE 16384
+
 /* Constants used to encode different types of methods in AOT */
 enum {
        MONO_AOT_METHODREF_MIN = 240,
@@ -2204,7 +2206,7 @@ MonoInst *mono_get_got_var (MonoCompile *cfg);
 void      mono_add_seq_point (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst *ins, int native_offset);
 void      mono_add_var_location (MonoCompile *cfg, MonoInst *var, gboolean is_reg, int reg, int offset, int from, int to);
 MonoInst* mono_emit_jit_icall (MonoCompile *cfg, gconstpointer func, MonoInst **args);
-MonoInst* mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args, MonoBasicBlock **out_cbb);
+MonoInst* mono_emit_jit_icall_by_info (MonoCompile *cfg, MonoJitICallInfo *info, MonoInst **args);
 MonoInst* mono_emit_method_call (MonoCompile *cfg, MonoMethod *method, MonoInst **args, MonoInst *this);
 void      mono_create_helper_signatures (void);
 
@@ -2432,7 +2434,7 @@ int               mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoB
                                                                         MonoInst *return_var, MonoInst **inline_args,
                                                                         guint inline_offset, gboolean is_virtual_call);
 
-MonoInst         *mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins, MonoBasicBlock **out_cbb);
+MonoInst         *mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins);
 void              mono_decompose_long_opts (MonoCompile *cfg);
 void              mono_decompose_vtype_opts (MonoCompile *cfg);
 void              mono_decompose_vtype_opts_llvm (MonoCompile *cfg);
@@ -2750,10 +2752,10 @@ gboolean
 mono_class_generic_sharing_enabled (MonoClass *class);
 
 gpointer
-mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint8 *caller, guint32 slot);
+mono_class_fill_runtime_generic_context (MonoVTable *class_vtable, guint32 slot);
 
 gpointer
-mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint8 *caller, guint32 slot);
+mono_method_fill_runtime_generic_context (MonoMethodRuntimeGenericContext *mrgctx, guint32 slot);
 
 MonoMethodRuntimeGenericContext*
 mono_method_lookup_rgctx (MonoVTable *class_vtable, MonoGenericInst *method_inst);
@@ -2835,6 +2837,7 @@ MonoType* mini_type_get_underlying_type (MonoGenericSharingContext *gsctx, MonoT
 MonoMethod* mini_get_shared_method (MonoMethod *method);
 MonoMethod* mini_get_shared_method_to_register (MonoMethod *method);
 MonoMethod* mini_get_shared_method_full (MonoMethod *method, gboolean all_vt, gboolean is_gsharedvt);
+int mini_get_rgctx_entry_slot (MonoJumpInfoRgctxEntry *entry);
 
 int mini_type_stack_size (MonoGenericSharingContext *gsctx, MonoType *t, int *align);
 int mini_type_stack_size_full (MonoGenericSharingContext *gsctx, MonoType *t, guint32 *align, gboolean pinvoke);
index e0fa41e3be6edcd05e31865b6cc491dfabe902e3..3ed9254036f8aa3bb9bc74f981f827ee22d808f4 100644 (file)
@@ -432,7 +432,7 @@ mono_trace_enter_method (MonoMethod *method, char *ebp)
                MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), RETURN_ADDRESS (), NULL);
                if (ji) {
                        gsctx = mono_jit_info_get_generic_sharing_context (ji);
-                       if (gsctx && (gsctx->var_is_vt || gsctx->mvar_is_vt)) {
+                       if (gsctx && gsctx->is_gsharedvt) {
                                /* Needs a ctx to get precise method */
                                printf (") <gsharedvt>\n");
                                return;
@@ -590,7 +590,7 @@ mono_trace_leave_method (MonoMethod *method, ...)
                MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), RETURN_ADDRESS (), NULL);
                if (ji) {
                        gsctx = mono_jit_info_get_generic_sharing_context (ji);
-                       if (gsctx && (gsctx->var_is_vt || gsctx->mvar_is_vt)) {
+                       if (gsctx && gsctx->is_gsharedvt) {
                                /* Needs a ctx to get precise method */
                                printf (") <gsharedvt>\n");
                                return;
index 60fd4038041bcc555156f6faeedf141e47438ec5..f350e4fa4be767c8e24385673a124040d34e02ce 100644 (file)
@@ -458,6 +458,11 @@ if POWERPC
 PLATFORM_DISABLED_TESTS=finalizer-abort.exe finalizer-exception.exe finalizer-exit.exe
 endif
 
+if POWERPC64
+# These tests hang
+PLATFORM_DISABLED_TESTS=monitor.exe finalizer-abort.exe finalizer-exception.exe finalizer-exit.exe
+endif
+
 if ARM
 PLATFORM_DISABLED_TESTS=filter-stack.exe
 endif
@@ -731,7 +736,7 @@ test-messages:
 else
 test-messages: w32message.exe
        > test_messages.zero
-       $(with_mono_path) $(JITTEST_PROG_RUN) w32message.exe >& w32message.allout && cmp test_messages.zero w32message.allout
+       $(with_mono_path) $(JITTEST_PROG_RUN) w32message.exe > w32message.allout 2>&1 && cmp test_messages.zero w32message.allout
 endif
 endif
 
index 0e48d9081c045dc93a7260d5534bfd6e74ec3e91..71f4b4cc20933647e7fcc1df7d36407ec6261ae7 100644 (file)
@@ -18,7 +18,8 @@ public class FinalizerException {
                int* values = stackalloc int [20];
                aptr = new IntPtr (values);
                if (depth <= 0) {
-                       new FinalizerException ();
+                       for (int i = 0; i < 10; i++)
+                               new FinalizerException ();
                        return;
                }
                MakeException (depth - 1);
index 322b9124be99e511e7195de1c57083bc0702cb00..d06a2143a02e6394146385c1a9bc377978701a50 100644 (file)
        : "=r" (offset))
 #endif
 #elif defined(__s390x__)
-# if defined(PIC)
+# if defined(__PIC__)
+#  if !defined(__PIE__)
 // This only works if libmono is linked into the application
-#  define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo;                                 \
-                                               __asm__ ("basr  %%r1,0\n\t"                     \
-                                                        "j     0f\n\t"                         \
-                                                        ".quad " #var "@TLSGD\n\t"             \
+#   define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo;                                \
+                                               __asm__ ("basr  %%r1,0\n\t"                     \
+                                                        "j     0f\n\t"                         \
+                                                        ".quad " #var "@TLSGD\n"               \
                                                         "0:\n\t"                               \
-                                                        "lg    %%r2,4(%%r1)\n\t"               \
+                                                        "lg    %%r2,4(%%r1)\n\t"               \
                                                         "brasl %%r14,__tls_get_offset@PLT:tls_gdcall:"#var"\n\t" \
                                                         "lgr   %0,%%r2\n\t"                    \
                                                        : "=r" (foo) :                          \
                                                        : "1", "2", "14", "cc");                \
                                                offset = foo; } while (0)
+#  elif __PIE__ == 1
+#   define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo;                                        \
+                                               __asm__ ("lg    %0," #var "@GOTNTPOFF(%%r12)\n\t"       \
+                                                        : "=r" (foo));                                 \
+                                               offset = foo; } while (0)
+#  elif __PIE__ == 2
+#   define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo;                                \
+                                               __asm__ ("larl  %%r1," #var "@INDNTPOFF\n\t"    \
+                                                        "lg    %0,0(%%r1)\n\t"                 \
+                                                        : "=r" (foo) :                         \
+                                                        : "1", "cc");                          \
+                                               offset = foo; } while (0)
+#  endif
 # else
-#  define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo;                                 \
-                                               __asm__ ("basr  %%r1,0\n\t"                     \
-                                                        "j     0f\n\t"                         \
-                                                        ".quad " #var "@NTPOFF\n"              \
-                                                        "0:\n\t"                               \
-                                                        "lg    %0,4(%%r1)\n\t"                 \
-                                                       : "=r" (foo) : : "1");                  \
+#  define MONO_THREAD_VAR_OFFSET(var,offset) do { guint64 foo;                         \
+                                               __asm__ ("basr  %%r1,0\n\t"             \
+                                                        "j     0f\n\t"                 \
+                                                        ".quad " #var "@NTPOFF\n"      \
+                                                        "0:\n\t"                       \
+                                                        "lg    %0,4(%%r1)\n\t"         \
+                                                       : "=r" (foo) : : "1");          \
                                                offset = foo; } while (0)
 # endif
-
 #else
 #define MONO_THREAD_VAR_OFFSET(var,offset) (offset) = -1
 #endif
index b1cd30f9045380899b30fbaf73bc20b224c24585..ff7028555c18d05f5a310a58a5caa2739e7cd4c0 100644 (file)
@@ -50,4 +50,15 @@ mono_dl_get_executable_path (char *buf, int buflen)
        return -1;
 }
 
+const char*
+mono_dl_get_system_dir (void)
+{
+#ifdef TARGET_IOS
+       /* IOS9 can't load system libraries using relative paths, i.e. 'libc' doesn't work, but '/usr/lib/libc' does. */
+       return "/usr/lib";
+#else
+       return NULL;
+#endif
+}
+
 #endif
index be52a3e6e4cad1fbc7514daf02da7a9b17382c88..09eed6222e2ff55103654335c72eed343cca79a1 100644 (file)
@@ -47,6 +47,13 @@ mono_dl_get_executable_path (char *buf, int buflen)
 {
        return readlink ("/proc/self/exe", buf, buflen - 1);
 }
+
+const char*
+mono_dl_get_system_dir (void)
+{
+       return NULL;
+}
+
 #endif
 
 void *
index 5dabce44835eac318bad847223314e7253ab8708..19ff818f733af5e40e54a74347a51b75a2a92201 100644 (file)
@@ -159,4 +159,10 @@ mono_dl_get_executable_path (char *buf, int buflen)
        return -1; //TODO
 }
 
+const char*
+mono_dl_get_system_dir (void)
+{
+       return NULL;
+}
+
 #endif
index c3c59c160785ee06c898fda10f3cec8f9575eb40..1da98cb8e1d0f812e6a8624ce706b9741a88efeb 100644 (file)
@@ -43,6 +43,7 @@ void* mono_dl_lookup_symbol (MonoDl *module, const char *name);
 int mono_dl_convert_flags (int flags);
 char* mono_dl_current_error_string (void);
 int mono_dl_get_executable_path (char *buf, int buflen);
+const char* mono_dl_get_system_dir (void);
 
 #endif /* __MONO_UTILS_DL_H__ */
 
index 4ac92196e07c5cdae57975616aa4c7f54c1e2ba0..6c857fe823951c21df058ba1773856689ac2d0cf 100644 (file)
@@ -55,22 +55,27 @@ mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, gboolean alertable)
 #endif
        ts.tv_sec = timeout_ms / 1000 + t.tv_sec;
        ts.tv_nsec = (timeout_ms % 1000) * 1000000 + t.tv_usec * 1000;
-       while (ts.tv_nsec > NSEC_PER_SEC) {
+       while (ts.tv_nsec >= NSEC_PER_SEC) {
                ts.tv_nsec -= NSEC_PER_SEC;
                ts.tv_sec++;
        }
 
        copy = ts;
-       while ((res = WAIT_BLOCK (sem, &ts)) == -1 && errno == EINTR) {
+#ifdef USE_MACH_SEMA
+       gettimeofday (&t, NULL);
+       while ((res = WAIT_BLOCK (sem, &ts)) == KERN_ABORTED)
+#else
+       while ((res = WAIT_BLOCK (sem, &ts)) == -1 && errno == EINTR)
+#endif
+       {
+#ifdef USE_MACH_SEMA
                struct timeval current;
+#endif
                if (alertable)
                        return -1;
+               ts = copy;
 #ifdef USE_MACH_SEMA
-               memset (&current, 0, sizeof (current));
-#else
                gettimeofday (&current, NULL);
-#endif
-               ts = copy;
                ts.tv_sec -= (current.tv_sec - t.tv_sec);
                ts.tv_nsec -= (current.tv_usec - t.tv_usec) * 1000;
                if (ts.tv_nsec < 0) {
@@ -85,6 +90,7 @@ mono_sem_timedwait (MonoSemType *sem, guint32 timeout_ms, gboolean alertable)
                        ts.tv_sec = 0;
                        ts.tv_nsec = 0;
                }
+#endif
        }
 
        /* OSX might return > 0 for error */
index dbf019cffaf6b3679c51f1156349e49ba4a964c1..edbf934ac9bf7321a524a47459231121c00d9f40 100644 (file)
@@ -88,7 +88,7 @@ and reduce the number of casts drastically.
 /* Logging - enable them below if you need specific logging for the category you need */
 #define MOSTLY_ASYNC_SAFE_PRINTF(...) do { \
        char __buff[1024];      __buff [0] = '\0'; \
-       snprintf (__buff, sizeof (__buff), __VA_ARGS__);        \
+       g_snprintf (__buff, sizeof (__buff), __VA_ARGS__);      \
        write (1, __buff, strlen (__buff));     \
 } while (0)
 
index 1f002a420686e30d559cd7231cb6ae5336289c50..ec5a9a9c9fcd130873547197a7d89f09027c385b 100644 (file)
@@ -12,7 +12,7 @@
     </project>
     <project dir="class/corlib" library="corlib-basic">
       <boot>true</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -resource:resources/charinfo.nlp -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -d:NET_4_0 -d:NET_4_5 -d:MONO -d:BOOTSTRAP_BASIC -nowarn:1699 -d:DISABLE_CAS_USE -lib:./../../class/lib/basic -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -resource:resources/charinfo.nlp -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
       <output>mscorlib.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/basic/mscorlib.dll</library_output>
@@ -72,7 +72,7 @@
     </project>
     <project dir="class/corlib" library="corlib-build">
       <boot>true</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -resource:resources/charinfo.nlp -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/build -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -resource:resources/charinfo.nlp -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
       <output>mscorlib.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/build/mscorlib.dll</library_output>
     </project>
     <project dir="class/corlib" library="corlib-net_4_5">
       <boot>true</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -resource:resources/charinfo.nlp -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize /noconfig -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -resource:resources/charinfo.nlp -resource:resources/collation.core.bin -resource:resources/collation.tailoring.bin -resource:resources/collation.cjkCHS.bin -resource:resources/collation.cjkCHT.bin -resource:resources/collation.cjkJA.bin -resource:resources/collation.cjkKO.bin -resource:resources/collation.cjkKOlv2.bin --runtime:v4</flags>
       <output>mscorlib.dll</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/net_4_5/mscorlib.dll</library_output>
     </project>
     <project dir="class/corlib" library="corlib-tests-net_4_5">
       <boot>false</boot>
-      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize -r:./../../class/lib/net_4_5/mscorlib.dll -debug -nowarn:168,219,618,672 -unsafe -r:Mono.Posix.dll -r:System.Core.dll -define:MONO_DATACONVERTER_STATIC_METHODS -resource:Test/resources/Resources.resources</flags>
+      <flags>/codepage:65001 -unsafe -nostdlib -nowarn:612,618 -d:INSIDE_CORLIB,MONO_CULTURE_DATA -d:LIBC -d:FEATURE_PAL,GENERICS_WORK,FEATURE_LIST_PREDICATES,FEATURE_SERIALIZATION,FEATURE_ASCII,FEATURE_LATIN1,FEATURE_UTF7,FEATURE_UTF32,MONO_HYBRID_ENCODING_SUPPORT,FEATURE_ASYNC_IO,NEW_EXPERIMENTAL_ASYNC_IO,FEATURE_UTF32,FEATURE_EXCEPTIONDISPATCHINFO,FEATURE_CORRUPTING_EXCEPTIONS,FEATURE_EXCEPTION_NOTIFICATIONS,FEATURE_STRONGNAME_MIGRATION,FEATURE_USE_LCID,FEATURE_FUSION,FEATURE_CRYPTO,FEATURE_X509_SECURESTRINGS,FEATURE_SYNCHRONIZATIONCONTEXT,FEATURE_SYNCHRONIZATIONCONTEXT_WAIT -d:FEATURE_REMOTING,MONO_COM,FEATURE_COMINTEROP,FEATURE_ROLE_BASED_SECURITY -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -debug -optimize -r:./../../class/lib/net_4_5/mscorlib.dll -debug -nowarn:168,219,618,672 -unsafe -r:Mono.Posix.dll -r:System.Core.dll -define:MONO_DATACONVERTER_STATIC_METHODS -resource:Test/resources/Resources.resources</flags>
       <output>corlib_test_net_4_5.dll</output>
       <built_sources></built_sources>
       <library_output>corlib_test_net_4_5.dll</library_output>
     </project>
     <project dir="tools/xbuild" library="xbuild-net_4_5">
       <boot></boot>
-      <flags>/codepage:65001 -r:./../../class/lib/net_4_5/Microsoft.Build.Framework.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Utilities.v4.0.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Engine.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig</flags>
+      <flags>/codepage:65001 -r:./../../class/lib/net_4_5/Microsoft.Build.Framework.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Utilities.v4.0.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Engine.dll -r:./../../class/lib/net_4_5/Microsoft.Build.Tasks.v4.0.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/net_4_5 -r:mscorlib.dll -debug -optimize /noconfig</flags>
       <output>xbuild.exe</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/net_4_5/xbuild.exe</library_output>
     </project>
     <project dir="tools/xbuild" library="xbuild-xbuild_12">
       <boot></boot>
-      <flags>/codepage:65001 -r:./../../class/lib/xbuild_12/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Utilities.v12.0.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Engine.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_12 -r:mscorlib.dll -debug -d:XBUILD_12 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig</flags>
+      <flags>/codepage:65001 -r:./../../class/lib/xbuild_12/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Utilities.v12.0.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Engine.dll -r:./../../class/lib/xbuild_12/Microsoft.Build.Tasks.v12.0.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_12 -r:mscorlib.dll -debug -d:XBUILD_12 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig</flags>
       <output>xbuild.exe</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/xbuild_12/xbuild.exe</library_output>
     </project>
     <project dir="tools/xbuild" library="xbuild-xbuild_14">
       <boot></boot>
-      <flags>/codepage:65001 -r:./../../class/lib/xbuild_14/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Utilities.Core.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Engine.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_14 -r:mscorlib.dll -debug -d:XBUILD_12 -d:XBUILD_14 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig</flags>
+      <flags>/codepage:65001 -r:./../../class/lib/xbuild_14/Microsoft.Build.Framework.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Utilities.Core.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Engine.dll -r:./../../class/lib/xbuild_14/Microsoft.Build.Tasks.Core.dll -d:NET_4_0 -d:NET_4_5 -d:MONO -d:DISABLE_CAS_USE -nowarn:1699 -nostdlib -lib:./../../class/lib/xbuild_14 -r:mscorlib.dll -debug -d:XBUILD_12 -d:XBUILD_14 -d:MONO -d:DISABLE_CAS_USE -lib:./../../class/lib/net_4_5 -optimize /noconfig</flags>
       <output>xbuild.exe</output>
       <built_sources></built_sources>
       <library_output>./../../class/lib/xbuild_14/xbuild.exe</library_output>
index 17d8a32c1625d1578a296638a719fb9002364a18..a8ec6d2f0e7771fcc9cd864db8fc221a66c884ff 100644 (file)
@@ -1000,6 +1000,12 @@ namespace Mono.Tools.LocaleBuilder
                                nodes = node.SelectNodes ("months/monthContext[@type='stand-alone']/monthWidth[@type='wide']/month");
                                ProcessAllNodes (nodes, df.MonthNames, AddOrReplaceValue);
 
+                               if (df.MonthNames != null) {
+                                       if (ci.Name == "sv" || ci.Name == "sv-SE") {
+                                               ToLower (df.MonthNames);
+                                       }
+                               }
+
                                // Apply global rule first <alias source="locale" path="../../monthContext[@type='format']/monthWidth[@type='abbreviated']"/>
                                if (ci.Name == "ja" || ci.Name == "ja-JP") {
                                        // Use common number style
@@ -1010,6 +1016,12 @@ namespace Mono.Tools.LocaleBuilder
                                        ProcessAllNodes (nodes, df.AbbreviatedMonthNames, AddOrReplaceValue);
                                }
 
+                               if (df.AbbreviatedMonthNames != null) {
+                                       if (ci.Name == "sv" || ci.Name == "sv-SE") {
+                                               ToLower (df.AbbreviatedMonthNames);
+                                       }
+                               }
+
                                nodes = node.SelectNodes ("months/monthContext[@type='format']/monthWidth[@type='wide']/month");
                                if (nodes != null) {
                                        ProcessAllNodes (nodes, df.MonthGenitiveNames, AddOrReplaceValue);
@@ -1027,6 +1039,12 @@ namespace Mono.Tools.LocaleBuilder
                                nodes = node.SelectNodes ("days/dayContext[@type='stand-alone']/dayWidth[@type='abbreviated']/day");
                                ProcessAllNodes (nodes, df.AbbreviatedDayNames, AddOrReplaceDayValue);
 
+                               if (df.AbbreviatedDayNames != null) {
+                                       if (ci.Name == "sv" || ci.Name == "sv-SE") {
+                                               ToLower (df.AbbreviatedDayNames);
+                                       }
+                               }
+
                                // TODO: This is not really ShortestDayNames as .NET uses it
                                // Apply global rules first <alias source="locale" path="../../dayContext[@type='stand-alone']/dayWidth[@type='narrow']"/>
                                nodes = node.SelectNodes ("days/dayContext[@type='format']/dayWidth[@type='narrow']/day");
@@ -1171,6 +1189,19 @@ namespace Mono.Tools.LocaleBuilder
                        }
                }
 
+               static void ToLower (string[] values)
+               {
+                       if (values == null)
+                               return;
+
+                       for (int i = 0; i < values.Length; ++i) {
+                               if (values [i] == null)
+                                       continue;
+
+                               values [i] = values [i].ToLower ();
+                       }
+               }
+
                string GetInfinitySymbol (CultureInfoEntry ci)
                {
                        // TODO: Add more
index cbb134e68bbf453f9512c3056e6c78a864490c88..af1960918fc45fc49caee3b49435361aef9e0a6d 100644 (file)
@@ -97,6 +97,9 @@
 /* Define to 1 if you have the <complex.h> header file. */
 #define HAVE_COMPLEX_H 1
 
+/* Define to 1 if you have the `system' function. */
+#define HAVE_SYSTEM 1
+
 /* Have /dev/random */
 #define HAVE_CRYPT_RNG 1