Merge pull request #146 from flutos/207ce0bccceec3ff7860ea986086fedb5a92d822
authorAtsushi Eno <atsushieno@gmail.com>
Thu, 4 Aug 2011 00:05:06 +0000 (17:05 -0700)
committerAtsushi Eno <atsushieno@gmail.com>
Thu, 4 Aug 2011 00:05:06 +0000 (17:05 -0700)
fix for bug 708178 that would fail if the type wasnt IEnumerable, should check if it implement IEnumerable rather than is IEnumerable

82 files changed:
eglib/src/glib.h
libgc/include/private/gc_priv.h
libgc/pthread_support.c
mcs/class/System.IdentityModel/System.IdentityModel.Tokens/X509IssuerSerialKeyIdentifierClause.cs
mcs/class/System.IdentityModel/Test/Resources/test_neg_serial.cer [new file with mode: 0644]
mcs/class/System.IdentityModel/Test/System.IdentityModel.Tokens/X509IssuerSerialKeyIdentifierClauseTest.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels.Security/SecureMessageDecryptor.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels.Security/SecureMessageGenerator.cs
mcs/class/System.ServiceModel/System.ServiceModel.Channels/SecurityBindingElement.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/ContractDescription.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/ContractDescriptionGenerator.cs
mcs/class/System.ServiceModel/System.ServiceModel.Description/MessagePartDescription.cs
mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseMessagesFormatter.cs
mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/XmlMessagesFormatter.cs
mcs/class/System.ServiceModel/System.ServiceModel/BasicHttpBinding.cs
mcs/class/System.ServiceModel/System.ServiceModel_test.dll.sources
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/BugX41.cs [new file with mode: 0644]
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/ContractDescriptionTest.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/TypedMessageConverterTest.cs
mcs/class/System.XML/System.Xml.Serialization/XmlAttributes.cs
mcs/class/System.XML/System.Xml.Serialization/XmlReflectionImporter.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializationReaderTests.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
mcs/class/corlib/System.IO/MonoIO.cs
mcs/class/corlib/System.IO/Path.cs
mcs/mcs/anonymous.cs
mcs/mcs/async.cs
mcs/mcs/codegen.cs
mcs/mcs/context.cs
mcs/mcs/flowanalysis.cs
mcs/mcs/iterators.cs
mcs/mcs/lambda.cs
mcs/mcs/method.cs
mcs/mcs/statement.cs
mcs/mcs/typemanager.cs
mcs/tests/test-async-13.cs
mcs/tests/test-async-17.cs [new file with mode: 0644]
mcs/tests/ver-il-net_4_0.xml
mcs/tools/mkbundle/mkbundle.cs
mono/metadata/culture-info-tables.h
mono/mini/aot-compiler.c
mono/mini/dominators.c
mono/mini/mini-amd64.h
mono/mini/mini-x86.c
mono/utils/mono-sigcontext.h
tools/locale-builder/supp/ar_DZ.xml
tools/locale-builder/supp/ar_MA.xml
tools/locale-builder/supp/ar_TN.xml
tools/locale-builder/supp/be_BY.xml
tools/locale-builder/supp/bg.xml
tools/locale-builder/supp/cs_CZ.xml
tools/locale-builder/supp/da.xml
tools/locale-builder/supp/de.xml
tools/locale-builder/supp/de_AT.xml
tools/locale-builder/supp/es_CL.xml
tools/locale-builder/supp/et.xml
tools/locale-builder/supp/fi.xml
tools/locale-builder/supp/fo_FO.xml
tools/locale-builder/supp/fr_CA.xml
tools/locale-builder/supp/fr_CH.xml
tools/locale-builder/supp/hi_IN.xml
tools/locale-builder/supp/hr.xml
tools/locale-builder/supp/hu.xml
tools/locale-builder/supp/hy.xml
tools/locale-builder/supp/is.xml
tools/locale-builder/supp/it_CH.xml
tools/locale-builder/supp/ka_GE.xml
tools/locale-builder/supp/lt_LT.xml
tools/locale-builder/supp/lv.xml
tools/locale-builder/supp/mk.xml
tools/locale-builder/supp/nl_NL.xml
tools/locale-builder/supp/pl.xml
tools/locale-builder/supp/pt_PT.xml
tools/locale-builder/supp/ro.xml
tools/locale-builder/supp/ru.xml
tools/locale-builder/supp/sk.xml
tools/locale-builder/supp/sl.xml
tools/locale-builder/supp/sq.xml
tools/locale-builder/supp/sv_FI.xml
tools/locale-builder/supp/sv_SE.xml
tools/locale-builder/supp/tr.xml
tools/locale-builder/supp/uk.xml

index efd1806ff1d00d7f496d92a6a494039ddcfc3340..28e68d3e748c5b72f5291bdb57028f938763fea7 100644 (file)
@@ -129,7 +129,9 @@ typedef guint32 gunichar;
 
 #define G_USEC_PER_SEC  1000000
 
+#ifndef ABS
 #define ABS(a)         ((a) > 0 ? (a) : -(a))
+#endif
 
 #define G_STRUCT_OFFSET(p_type,field) offsetof(p_type,field)
 
index d1993d442594d50746da6a39ffb0865c03e9df24..da49c0a4952432511118edb1c15d8885bf4f4eae 100644 (file)
@@ -371,6 +371,8 @@ void GC_print_callers GC_PROTO((struct callinfo info[NFRAMES]));
 #              define GC_MACH_THREAD_STATE_FLAVOR PPC_THREAD_STATE
 #      elif defined(I386)
 #              define GC_MACH_THREAD_STATE_FLAVOR i386_THREAD_STATE
+#      elif defined(X86_64)
+#              define GC_MACH_THREAD_STATE_FLAVOR x86_THREAD_STATE64
 #      else
 #              define GC_MACH_THREAD_STATE_FLAVOR MACHINE_THREAD_STATE
 #      endif
index 3e588ace211abdcd0ed62b104f94f2a57d8b336b..96e8a011b2ca5ece50e39695416fa5fdedeb56a5 100644 (file)
@@ -729,7 +729,7 @@ void nacl_shutdown_gc_thread()
 /* Caller holds allocation lock.                                       */
 GC_thread GC_new_thread(pthread_t id)
 {
-    int hv = ((word)id) % THREAD_TABLE_SZ;
+    int hv = ((unsigned long)id) % THREAD_TABLE_SZ;
     GC_thread result;
     static GC_bool first_thread_used = FALSE;
     
@@ -760,7 +760,7 @@ GC_thread GC_new_thread(pthread_t id)
 /* Caller holds allocation lock.                               */
 void GC_delete_thread(pthread_t id)
 {
-    int hv = ((word)id) % THREAD_TABLE_SZ;
+    int hv = ((unsigned long)id) % THREAD_TABLE_SZ;
     register GC_thread p = GC_threads[hv];
     register GC_thread prev = 0;
     
@@ -796,7 +796,7 @@ void GC_delete_thread(pthread_t id)
 /* This is OK, but we need a way to delete a specific one.     */
 void GC_delete_gc_thread(pthread_t id, GC_thread gc_id)
 {
-    int hv = ((word)id) % THREAD_TABLE_SZ;
+    int hv = ((unsigned long)id) % THREAD_TABLE_SZ;
     register GC_thread p = GC_threads[hv];
     register GC_thread prev = 0;
 
@@ -825,7 +825,7 @@ void GC_delete_gc_thread(pthread_t id, GC_thread gc_id)
 /* return the most recent one.                                 */
 GC_thread GC_lookup_thread(pthread_t id)
 {
-    int hv = ((word)id) % THREAD_TABLE_SZ;
+    int hv = ((unsigned long)id) % THREAD_TABLE_SZ;
     register GC_thread p = GC_threads[hv];
     
     while (p != 0 && !pthread_equal(p -> id, id)) p = p -> next;
index 2ac8a097a85930a049b865597a703a749e23f9c7..f95ec9bb5d43c15b379adee5f9ee4f467477b909 100644 (file)
@@ -54,9 +54,24 @@ namespace System.IdentityModel.Tokens
 #if TARGET_DOTNET
                        throw new NotImplementedException ();
 #else                  
-                       return new BigInteger (FromBinHex (hexString)).ToString ();
+            // http://tools.ietf.org/html/rfc5280#section-4.1.2.2
+            // We SHOULD support negative numbers
+            var bytes = FromBinHex (hexString);
+                       
+            var negative = bytes.Length > 0 && bytes [0] >= 0x80;
+            if (negative) {
+                for (int i = 0; i < bytes.Length; i++)
+                    bytes [i] = (byte) ~ bytes [i];
+            }
+               
+                       var big = new BigInteger (bytes);
+                       if (negative) { 
+                               big = big + 1;
+                               return "-" + big.ToString ();
+                       } else 
+                               return big.ToString ();
 #endif
-               }
+        }
 
                public X509IssuerSerialKeyIdentifierClause (X509Certificate2 certificate)
                        : base (null)
diff --git a/mcs/class/System.IdentityModel/Test/Resources/test_neg_serial.cer b/mcs/class/System.IdentityModel/Test/Resources/test_neg_serial.cer
new file mode 100644 (file)
index 0000000..6906047
Binary files /dev/null and b/mcs/class/System.IdentityModel/Test/Resources/test_neg_serial.cer differ
index 97157e9ad97a1dcc2c52c9c332bbc3edd52b9871..80407857380211a1f911cd5727752c8ce27068ff 100644 (file)
@@ -40,6 +40,7 @@ namespace MonoTests.System.IdentityModel.Selectors
        {
                static readonly X509Certificate2 cert = new X509Certificate2 ("Test/Resources/test.pfx", "mono");
                static readonly X509Certificate2 cert2 = new X509Certificate2 ("Test/Resources/test2.pfx", "mono");
+        static readonly X509Certificate2 cert3 = new X509Certificate2("Test/Resources/test_neg_serial.cer");
 
                [Test]
                public void Properties ()
@@ -50,5 +51,14 @@ namespace MonoTests.System.IdentityModel.Selectors
                        Assert.AreEqual ("22491767666218099257720700881460366085", ic.IssuerSerialNumber, "#2");
                        Assert.AreEqual (null, ic.ClauseType, "#3");
                }
+
+        [Test]
+        public void NegativeSerialNumber ()
+        {
+            var clause = new X509IssuerSerialKeyIdentifierClause (cert3);
+            Assert.AreEqual ("CN=test, OU=cert, O=test, E=test@test.com", clause.IssuerName, "#1");
+            Assert.AreEqual ("-168428216848510272180165529369113665228", clause.IssuerSerialNumber, "#2");
+            Assert.AreEqual (null, clause.ClauseType, "#3");
+        }
        }
 }
index 6c8b3f8a3dd7ff75cbabcaf4eea68d35c68f643f..81b49d867864832e221c799a946cffaa0170bbcc 100644 (file)
@@ -132,7 +132,7 @@ namespace System.ServiceModel.Channels.Security
 
                        // FIXME: use proper max buffer
                        buf = source.CreateBufferedCopy (int.MaxValue);
-Console.WriteLine ("####### " + buf.CreateMessage ());
+                       //Console.WriteLine ("####### " + buf.CreateMessage ());
 
                        doc = new XmlDocument ();
                        doc.PreserveWhitespace = true;
@@ -162,10 +162,7 @@ Console.WriteLine ("####### " + buf.CreateMessage ());
                        if (srcmsg.Version.Envelope == EnvelopeVersion.None)
                                throw new ArgumentException ("The message to decrypt is not an expected SOAP envelope.");
 
-                       string action = GetAction ();
-                       if (action == null)
-                               throw new ArgumentException ("SOAP action could not be retrieved from the message to decrypt.");
-
+                       
                        XPathNavigator nav = doc.CreateNavigator ();
                        using (XmlWriter writer = nav.AppendChild ()) {
                                buf.CreateMessage ().WriteMessage (writer);
@@ -348,6 +345,9 @@ doc.PreserveWhitespace = true;
                        // and check if any of them can validate it.
                        SupportingTokenParameters supp;
                        string action = GetAction ();
+            if (action == null)
+                throw new ArgumentException ("SOAP action could not be retrieved from the message to decrypt.");
+
                        ValidateTokensByParameters (security.Element.EndpointSupportingTokenParameters, tokens, false);
                        if (security.Element.OperationSupportingTokenParameters.TryGetValue (action, out supp))
                                ValidateTokensByParameters (supp, tokens, false);
@@ -441,7 +441,7 @@ doc.PreserveWhitespace = true;
                        string ret = source_message.Headers.Action;
                        if (ret == null) {
                                HttpRequestMessageProperty reqprop =
-                                       source_message.Properties ["Action"] as HttpRequestMessageProperty;
+                    source_message.Properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
                                if (reqprop != null)
                                        ret = reqprop.Headers ["Action"];
                        }
index 4593992dd08229c2987905a328b92875f3092b8e..4080a6009b825d3a7031cb94a0869eef73c4efac 100644 (file)
@@ -233,8 +233,6 @@ namespace System.ServiceModel.Channels.Security
                                security.SigningToken;
                        MessageProtectionOrder protectionOrder =
                                security.MessageProtectionOrder;
-                       SecurityTokenSerializer serializer =
-                               security.TokenSerializer;
                        SecurityBindingElement element =
                                security.Element;
                        SecurityAlgorithmSuite suite = element.DefaultAlgorithmSuite;
@@ -243,26 +241,19 @@ namespace System.ServiceModel.Channels.Security
                        int identForMessageId = 1;
                        XmlDocument doc = new XmlDocument ();
                        doc.PreserveWhitespace = true;
+            var action = msg.Headers.Action;
 
-                       // FIXME: get correct ReplyTo value
-                       if (Direction == MessageDirection.Input)
-                               msg.Headers.ReplyTo = new EndpointAddress (Constants.WsaAnonymousUri);
-
-                       if (MessageTo != null)
-                               msg.Headers.To = MessageTo.Uri;
-
+                       if (msg.Version.Addressing != AddressingVersion.None) {
+                AddAddressingToHeader (msg.Headers);
+                       }
+                               
                        // wss:Security
                        WSSecurityMessageHeader header =
-                               new WSSecurityMessageHeader (serializer);
+                new WSSecurityMessageHeader (security.TokenSerializer);
                        msg.Headers.Add (header);
                        // 1. [Timestamp]
                        if (element.IncludeTimestamp) {
-                               WsuTimestamp timestamp = new WsuTimestamp ();
-                               timestamp.Id = messageId + "-" + identForMessageId++;
-                               timestamp.Created = DateTime.Now;
-                               // FIXME: on service side, use element.LocalServiceSettings.TimestampValidityDuration
-                               timestamp.Expires = timestamp.Created.Add (element.LocalClientSettings.TimestampValidityDuration);
-                               header.AddContent (timestamp);
+                AddTimestampToHeader (header, messageId + "-" + identForMessageId++);
                        }
 
                        XmlNamespaceManager nsmgr = new XmlNamespaceManager (doc.NameTable);
@@ -272,13 +263,10 @@ namespace System.ServiceModel.Channels.Security
                        nsmgr.AddNamespace ("o11", Constants.Wss11Namespace);
 
                        /*WrappedKey*/SecurityToken primaryToken = null;
-                       DerivedKeySecurityToken dkeyToken = null;
                        SecurityToken actualToken = null;
                        SecurityKeyIdentifierClause actualClause = null;
-                       Signature sig = null;
 
-                       List<DerivedKeySecurityToken> derivedKeys =
-                               new List<DerivedKeySecurityToken> ();
+                       
 
                        SymmetricAlgorithm masterKey = new RijndaelManaged ();
                        masterKey.KeySize = suite.DefaultSymmetricKeyLength;
@@ -303,7 +291,6 @@ namespace System.ServiceModel.Channels.Security
                        SecurityKeyIdentifierClause encClause = ShouldOutputEncryptedKey ?
                                CounterParameters.CallCreateKeyIdentifierClause (encToken, !ShouldOutputEncryptedKey ? SecurityTokenReferenceStyle.Internal : includeEncToken ? Parameters.ReferenceStyle : SecurityTokenReferenceStyle.External) : null;
 
-                       MessagePartSpecification sigSpec = SignaturePart;
                        MessagePartSpecification encSpec = EncryptionPart;
 
                        // encryption key (possibly also used for signing)
@@ -341,27 +328,11 @@ else
 
                        // generate derived key if needed
                        if (CounterParameters.RequireDerivedKeys) {
-                               RijndaelManaged deriv = new RijndaelManaged ();
-                               deriv.KeySize = suite.DefaultEncryptionKeyDerivationLength;
-                               deriv.Mode = CipherMode.CBC;
-                               deriv.Padding = PaddingMode.ISO10126;
-                               deriv.GenerateKey ();
-                               dkeyToken = new DerivedKeySecurityToken (
-                                       GenerateId (doc),
-                                       null, // algorithm
-                                       actualClause,
-                                       new InMemorySymmetricSecurityKey (actualKey.Key),
-                                       null, // name
-                                       null, // generation
-                                       null, // offset
-                                       deriv.Key.Length,
-                                       null, // label
-                                       deriv.Key);
-                               derivedKeys.Add (dkeyToken);
-                               actualToken = dkeyToken;
-                               actualKey.Key = ((SymmetricSecurityKey) dkeyToken.SecurityKeys [0]).GetSymmetricKey ();
-                               actualClause = new LocalIdKeyIdentifierClause (dkeyToken.Id);
-                               header.AddContent (dkeyToken);
+                var dkeyToken = CreateDerivedKey (GenerateId (doc), actualClause, actualKey);
+                actualToken = dkeyToken;
+                actualKey.Key = ((SymmetricSecurityKey)dkeyToken.SecurityKeys [0]).GetSymmetricKey ();
+                actualClause = new LocalIdKeyIdentifierClause (dkeyToken.Id);
+                header.AddContent (dkeyToken);
                        }
 
                        ReferenceList refList = new ReferenceList ();
@@ -397,7 +368,6 @@ else
 
                        XmlElement body = doc.SelectSingleNode ("/s:Envelope/s:Body/*", nsmgr) as XmlElement;
                        string bodyId = null;
-                       XmlElement secElem = null;
                        Collection<WSSignedXml> endorsedSignatures =
                                new Collection<WSSignedXml> ();
                        bool signatureProtection = (protectionOrder == MessageProtectionOrder.SignBeforeEncryptAndEncryptSignature);
@@ -413,110 +383,29 @@ else
                        case MessageProtectionOrder.SignBeforeEncrypt:
                        case MessageProtectionOrder.SignBeforeEncryptAndEncryptSignature:
 
-                               // sign
-                               // see clause 8 of WS-SecurityPolicy C.2.2
-                               WSSignedXml sxml = new WSSignedXml (doc);
-                               SecurityTokenReferenceKeyInfo sigKeyInfo;
-
-                               sig = sxml.Signature;
-                               sig.SignedInfo.CanonicalizationMethod =
-                                       suite.DefaultCanonicalizationAlgorithm;
-                               foreach (XmlElement elem in doc.SelectNodes ("/s:Envelope/s:Header/o:Security/u:Timestamp", nsmgr))
-                                       CreateReference (sig, elem, elem.GetAttribute ("Id", Constants.WsuNamespace));
-                               foreach (XmlElement elem in doc.SelectNodes ("/s:Envelope/s:Header/o:Security/o11:SignatureConfirmation", nsmgr))
-                                       CreateReference (sig, elem, elem.GetAttribute ("Id", Constants.WsuNamespace));
-                               foreach (SupportingTokenInfo tinfo in tokenInfos)
-                                       if (tinfo.Mode != SecurityTokenAttachmentMode.Endorsing) {
-                                               XmlElement el = sxml.GetIdElement (doc, tinfo.Token.Id);
-                                               CreateReference (sig, el, el.GetAttribute ("Id", Constants.WsuNamespace));
-                                       }
-                               XmlNodeList nodes = doc.SelectNodes ("/s:Envelope/s:Header/*", nsmgr);
-                               for (int i = 0; i < msg.Headers.Count; i++) {
-                                       MessageHeaderInfo h = msg.Headers [i];
-                                       if (h.Name == "Security" && h.Namespace == Constants.WssNamespace)
-                                               secElem = nodes [i] as XmlElement;
-                                       else if (sigSpec.HeaderTypes.Count == 0 ||
-                                           sigSpec.HeaderTypes.Contains (new XmlQualifiedName (h.Name, h.Namespace))) {
-                                               string id = GenerateId (doc);
-                                               h.Id = id;
-                                               CreateReference (sig, nodes [i] as XmlElement, id);
-                                       }
-                               }
-                               if (sigSpec.IsBodyIncluded) {
-                                       bodyId = GenerateId (doc);
-                                       CreateReference (sig, body.ParentNode as XmlElement, bodyId);
-                               }
-
-                               if (security.DefaultSignatureAlgorithm == SignedXml.XmlDsigHMACSHA1Url) {
-                                       // FIXME: use appropriate hash algorithm
-                                       sxml.ComputeSignature (new HMACSHA1 (actualKey.Key));
-                                       sigKeyInfo = new SecurityTokenReferenceKeyInfo (actualClause, serializer, doc);
-                               }
-                               else {
-                                       SecurityKeyIdentifierClause signClause =
-                                               CounterParameters.CallCreateKeyIdentifierClause (signToken, includeSigToken ? CounterParameters.ReferenceStyle : SecurityTokenReferenceStyle.External);
-                                       AsymmetricSecurityKey signKey = (AsymmetricSecurityKey) signToken.ResolveKeyIdentifierClause (signClause);
-                                       sxml.SigningKey = signKey.GetAsymmetricAlgorithm (security.DefaultSignatureAlgorithm, true);
-                                       sxml.ComputeSignature ();
-                                       sigKeyInfo = new SecurityTokenReferenceKeyInfo (signClause, serializer, doc);
-                               }
-
-                               sxml.KeyInfo = new KeyInfo ();
-                               sxml.KeyInfo.AddClause (sigKeyInfo);
-
-                               if (!signatureProtection)
-                                       header.AddContent (sig);
-
-                               // endorse the signature with (signed)endorsing
-                               // supporting tokens.
-
-                               foreach (SupportingTokenInfo tinfo in tokenInfos) {
-                                       switch (tinfo.Mode) {
-                                       case SecurityTokenAttachmentMode.Endorsing:
-                                       case SecurityTokenAttachmentMode.SignedEndorsing:
-                                               if (sxml.Signature.Id == null) {
-                                                       sig.Id = GenerateId (doc);
-                                                       secElem.AppendChild (sxml.GetXml ());
-                                               }
-                                               WSSignedXml ssxml = new WSSignedXml (doc);
-                                               ssxml.Signature.SignedInfo.CanonicalizationMethod = suite.DefaultCanonicalizationAlgorithm;
-                                               CreateReference (ssxml.Signature, doc, sig.Id);
-                                               SecurityToken sst = tinfo.Token;
-                                               SecurityKey ssk = sst.SecurityKeys [0]; // FIXME: could be different?
-                                               SecurityKeyIdentifierClause tclause = new LocalIdKeyIdentifierClause (sst.Id); // FIXME: could be different?
-                                               if (ssk is SymmetricSecurityKey) {
-                                                       SymmetricSecurityKey signKey = (SymmetricSecurityKey) ssk;
-                                                       ssxml.ComputeSignature (signKey.GetKeyedHashAlgorithm (suite.DefaultSymmetricSignatureAlgorithm));
-                                               } else {
-                                                       AsymmetricSecurityKey signKey = (AsymmetricSecurityKey) ssk;
-                                                       ssxml.SigningKey = signKey.GetAsymmetricAlgorithm (suite.DefaultAsymmetricSignatureAlgorithm, true);
-                                                       ssxml.ComputeSignature ();
-                                               }
-                                               ssxml.KeyInfo.AddClause (new SecurityTokenReferenceKeyInfo (tclause, serializer, doc));
-                                               if (!signatureProtection)
-                                                       header.AddContent (ssxml.Signature);
-                                               endorsedSignatures.Add (ssxml);
-
-                                               break;
-                                       }
-                               }
+               
+                var sig = CreateSignature (doc, body, nsmgr, tokenInfos, 
+                    actualClause, actualKey, signToken, includeSigToken, 
+                    signatureProtection, header, endorsedSignatures, 
+                    ref bodyId);
 
+                               
                                // encrypt
 
                                WSEncryptedXml exml = new WSEncryptedXml (doc);
 
-                               EncryptedData edata = Encrypt (body, actualKey, actualToken.Id, refList, actualClause, exml, doc);
+                               EncryptedData edata = Encrypt (body, actualKey, actualToken.Id, refList, actualClause, exml, doc, EncryptedXml.XmlEncElementContentUrl);
                                EncryptedXml.ReplaceElement (body, edata, false);
 
                                // encrypt signature
                                if (signatureProtection) {
                                        XmlElement sigxml = sig.GetXml ();
-                                       edata = Encrypt (sigxml, actualKey, actualToken.Id, refList, actualClause, exml, doc);
+                                       edata = Encrypt (sigxml, actualKey, actualToken.Id, refList, actualClause, exml, doc, EncryptedXml.XmlEncElementUrl);
                                        header.AddContent (edata);
 
                                        foreach (WSSignedXml ssxml in endorsedSignatures) {
                                                sigxml = ssxml.GetXml ();
-                                               edata = Encrypt (sigxml, actualKey, actualToken.Id, refList, actualClause, exml, doc);
+                                               edata = Encrypt (sigxml, actualKey, actualToken.Id, refList, actualClause, exml, doc, EncryptedXml.XmlEncElementUrl);
                                                header.AddContent (edata);
                                        }
 
@@ -524,7 +413,7 @@ else
                                                Collection<Wss11SignatureConfirmation> confs = header.FindAll<Wss11SignatureConfirmation> ();
                                                int count = 0;
                                                foreach (XmlElement elem in doc.SelectNodes ("/s:Envelope/s:Header/o:Security/o11:SignatureConfirmation", nsmgr)) {
-                                                       edata = Encrypt (elem, actualKey, confs [count].Id, refList, actualClause, exml, doc);
+                                                       edata = Encrypt (elem, actualKey, confs [count].Id, refList, actualClause, exml, doc, EncryptedXml.XmlEncElementUrl);
                                                        EncryptedXml.ReplaceElement (elem, edata, false);
                                                        header.Contents.Insert (header.Contents.IndexOf (confs [count]), edata);
                                                        header.Contents.Remove (confs [count++]);
@@ -532,11 +421,12 @@ else
                                        }
                                }
 
+
                                // encrypt Encrypted supporting tokens
                                foreach (SupportingTokenInfo tinfo in tokenInfos) {
                                        if (tinfo.Mode == SecurityTokenAttachmentMode.SignedEncrypted) {
                                                XmlElement el = exml.GetIdElement (doc, tinfo.Token.Id);
-                                               tinfo.Encrypted = Encrypt (el, actualKey, actualToken.Id, refList, actualClause, exml, doc);
+                                               tinfo.Encrypted = Encrypt (el, actualKey, actualToken.Id, refList, actualClause, exml, doc, EncryptedXml.XmlEncElementUrl);
                                                EncryptedXml.ReplaceElement (el, tinfo.Encrypted, false);
                                                header.Contents.Insert (header.Contents.IndexOf (tinfo.Token), tinfo.Encrypted);
                                                header.Contents.Remove (tinfo.Token);
@@ -545,7 +435,10 @@ else
                                break;
                        }
 
-                       Message ret = new WSSecurityMessage (Message.CreateMessage (msg.Version, msg.Headers.Action, new XmlNodeReader (doc.SelectSingleNode ("/s:Envelope/s:Body/*", nsmgr) as XmlElement)), bodyId);
+
+            
+
+                       Message ret = new WSSecurityMessage (Message.CreateMessage (msg.Version, action, new XmlNodeReader (doc.SelectSingleNode ("/s:Envelope/s:Body/*", nsmgr) as XmlElement)), bodyId);
                        ret.Properties.Security = (SecurityMessageProperty) secprop.CreateCopy ();
                        ret.Properties.Security.EncryptionKey = masterKey.Key;
 
@@ -559,7 +452,7 @@ else
 
                        ret.Headers.Clear ();
                        ret.Headers.CopyHeadersFrom (msg);
-
+            
                        // Header contents are:
                        //      - Timestamp
                        //      - SignatureConfirmation if required
@@ -589,6 +482,157 @@ else
                        return ret;
                }
 
+        Signature CreateSignature (XmlDocument doc, XmlElement body, 
+                                           XmlNamespaceManager nsmgr,
+                                           SupportingTokenInfoCollection tokenInfos,
+                                           SecurityKeyIdentifierClause actualClause,
+                                           SymmetricAlgorithm actualKey,
+                                           SecurityToken signToken,
+                                           bool includeSigToken,
+                                           bool signatureProtection,
+                                           WSSecurityMessageHeader header,
+                                           Collection<WSSignedXml> endorsedSignatures,
+                                           ref string bodyId)
+        {
+            // sign
+            // see clause 8 of WS-SecurityPolicy C.2.2
+            WSSignedXml sxml = new WSSignedXml (doc);
+            SecurityTokenReferenceKeyInfo sigKeyInfo;
+            XmlElement secElem = null;
+            var sigSpec = SignaturePart;
+            var serializer = security.TokenSerializer;
+            var suite = security.Element.DefaultAlgorithmSuite;
+
+            var sig = sxml.Signature;
+            sig.SignedInfo.CanonicalizationMethod =
+                suite.DefaultCanonicalizationAlgorithm;
+            foreach (XmlElement elem in doc.SelectNodes ("/s:Envelope/s:Header/o:Security/u:Timestamp", nsmgr))
+                CreateReference(sig, elem, elem.GetAttribute ("Id", Constants.WsuNamespace));
+            foreach (XmlElement elem in doc.SelectNodes ("/s:Envelope/s:Header/o:Security/o11:SignatureConfirmation", nsmgr))
+                CreateReference(sig, elem, elem.GetAttribute ("Id", Constants.WsuNamespace));
+            foreach (SupportingTokenInfo tinfo in tokenInfos)
+                if (tinfo.Mode != SecurityTokenAttachmentMode.Endorsing) {
+                    XmlElement el = sxml.GetIdElement (doc, tinfo.Token.Id);
+                    CreateReference (sig, el, el.GetAttribute ("Id", Constants.WsuNamespace));
+                }
+            XmlNodeList nodes = doc.SelectNodes ("/s:Envelope/s:Header/*", nsmgr);
+            for (int i = 0; i < msg.Headers.Count; i++) {
+                MessageHeaderInfo h = msg.Headers [i];
+                if (h.Name == "Security" && h.Namespace == Constants.WssNamespace)
+                    secElem = nodes [i] as XmlElement;
+                else if ((sigSpec.HeaderTypes.Count == 0 ||
+                    sigSpec.HeaderTypes.Contains (new XmlQualifiedName(h.Name, h.Namespace))) &&
+                    (msg.Version.Addressing != AddressingVersion.None ||
+                    !String.Equals (h.Name, "Action", StringComparison.Ordinal))) {
+                    string id = GenerateId (doc);
+                    h.Id = id;
+                    CreateReference (sig, nodes [i] as XmlElement, id);
+                }
+            }
+            if (sigSpec.IsBodyIncluded) {
+                bodyId = GenerateId (doc);
+                CreateReference (sig, body.ParentNode as XmlElement, bodyId);
+            }
+
+
+            if (security.DefaultSignatureAlgorithm == SignedXml.XmlDsigHMACSHA1Url) {
+                // FIXME: use appropriate hash algorithm
+                sxml.ComputeSignature (new HMACSHA1(actualKey.Key));
+                sigKeyInfo = new SecurityTokenReferenceKeyInfo (actualClause, serializer, doc);
+            } else  {
+                SecurityKeyIdentifierClause signClause =
+                    CounterParameters.CallCreateKeyIdentifierClause (signToken, includeSigToken ? CounterParameters.ReferenceStyle : SecurityTokenReferenceStyle.External);
+                AsymmetricSecurityKey signKey = (AsymmetricSecurityKey)signToken.ResolveKeyIdentifierClause (signClause);
+                sxml.SigningKey = signKey.GetAsymmetricAlgorithm (security.DefaultSignatureAlgorithm, true);
+                sxml.ComputeSignature ();
+                sigKeyInfo = new SecurityTokenReferenceKeyInfo (signClause, serializer, doc);
+            }
+
+            sxml.KeyInfo = new KeyInfo ();
+            sxml.KeyInfo.AddClause (sigKeyInfo);
+
+            if (!signatureProtection)
+                header.AddContent (sig);
+
+            // endorse the signature with (signed)endorsing
+            // supporting tokens.
+
+            foreach (SupportingTokenInfo tinfo in tokenInfos) {
+                switch (tinfo.Mode) {
+                case SecurityTokenAttachmentMode.Endorsing:
+                case SecurityTokenAttachmentMode.SignedEndorsing:
+                    if (sxml.Signature.Id == null) {
+                        sig.Id = GenerateId (doc);
+                        secElem.AppendChild (sxml.GetXml ());
+                    }
+                    WSSignedXml ssxml = new WSSignedXml (doc);
+                    ssxml.Signature.SignedInfo.CanonicalizationMethod = suite.DefaultCanonicalizationAlgorithm;
+                    CreateReference (ssxml.Signature, doc, sig.Id);
+                    SecurityToken sst = tinfo.Token;
+                    SecurityKey ssk = sst.SecurityKeys [0]; // FIXME: could be different?
+                    SecurityKeyIdentifierClause tclause = new LocalIdKeyIdentifierClause (sst.Id); // FIXME: could be different?
+                    if (ssk is SymmetricSecurityKey) {
+                        SymmetricSecurityKey signKey = (SymmetricSecurityKey)ssk;
+                        ssxml.ComputeSignature (signKey.GetKeyedHashAlgorithm(suite.DefaultSymmetricSignatureAlgorithm));
+                    } else {
+                        AsymmetricSecurityKey signKey = (AsymmetricSecurityKey)ssk;
+                        ssxml.SigningKey = signKey.GetAsymmetricAlgorithm (suite.DefaultAsymmetricSignatureAlgorithm, true);
+                        ssxml.ComputeSignature ();
+                    }
+                    ssxml.KeyInfo.AddClause (new SecurityTokenReferenceKeyInfo (tclause, serializer, doc));
+                    if (!signatureProtection)
+                        header.AddContent (ssxml.Signature);
+                    endorsedSignatures.Add (ssxml);
+
+                    break;
+                }
+            }
+            return sig;
+        }
+
+        void AddAddressingToHeader (MessageHeaders headers)
+        {
+            // FIXME: get correct ReplyTo value
+            if (Direction == MessageDirection.Input)
+                headers.ReplyTo = new EndpointAddress (Constants.WsaAnonymousUri);
+
+            if (MessageTo != null)
+                headers.To = MessageTo.Uri;
+        }
+
+        DerivedKeySecurityToken CreateDerivedKey (string id, 
+                                                          SecurityKeyIdentifierClause actualClause, 
+                                                          SymmetricAlgorithm actualKey)
+        {
+            RijndaelManaged deriv = new RijndaelManaged ();
+            deriv.KeySize = security.Element.DefaultAlgorithmSuite.DefaultEncryptionKeyDerivationLength;
+            deriv.Mode = CipherMode.CBC;
+            deriv.Padding = PaddingMode.ISO10126;
+            deriv.GenerateKey ();
+            var dkeyToken = new DerivedKeySecurityToken (
+                id,
+                null, // algorithm
+                actualClause,
+                new InMemorySymmetricSecurityKey (actualKey.Key),
+                null, // name
+                null, // generation
+                null, // offset
+                deriv.Key.Length,
+                null, // label
+                deriv.Key);
+            return dkeyToken;
+        }
+
+        void AddTimestampToHeader (WSSecurityMessageHeader header, string id)
+        {
+            WsuTimestamp timestamp = new WsuTimestamp ();
+            timestamp.Id = id;
+            timestamp.Created = DateTime.Now;
+            // FIXME: on service side, use element.LocalServiceSettings.TimestampValidityDuration
+            timestamp.Expires = timestamp.Created.Add (security.Element.LocalClientSettings.TimestampValidityDuration);
+            header.AddContent (timestamp);
+        }
+
                void CreateReference (Signature sig, XmlElement el, string id)
                {
                        CreateReference (sig, el.OwnerDocument, id);
@@ -626,7 +670,7 @@ else
                        throw new Exception (String.Format ("INTERNAL ERROR: Invalid canonicalization URL: {0}", url));
                }
 
-               EncryptedData Encrypt (XmlElement target, SymmetricAlgorithm actualKey, string ekeyId, ReferenceList refList, SecurityKeyIdentifierClause encClause, EncryptedXml exml, XmlDocument doc)
+               EncryptedData Encrypt (XmlElement target, SymmetricAlgorithm actualKey, string ekeyId, ReferenceList refList, SecurityKeyIdentifierClause encClause, EncryptedXml exml, XmlDocument doc, string elementType)
                {
                        SecurityAlgorithmSuite suite = security.Element.DefaultAlgorithmSuite;
                        SecurityTokenSerializer serializer = security.TokenSerializer;
@@ -634,7 +678,7 @@ else
                        byte [] encrypted = exml.EncryptData (target, actualKey, false);
                        EncryptedData edata = new EncryptedData ();
                        edata.Id = GenerateId (doc);
-                       edata.Type = EncryptedXml.XmlEncElementContentUrl;
+                       edata.Type = elementType;
                        edata.EncryptionMethod = new EncryptionMethod (suite.DefaultEncryptionAlgorithm);
                        // FIXME: here wsse:DigestMethod should be embedded 
                        // inside EncryptionMethod. Since it is not possible 
@@ -668,7 +712,7 @@ else
                        string ret = msg.Headers.Action;
                        if (ret == null) {
                                HttpRequestMessageProperty reqprop =
-                                       msg.Properties ["Action"] as HttpRequestMessageProperty;
+                    msg.Properties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
                                if (reqprop != null)
                                        ret = reqprop.Headers ["Action"];
                        }
@@ -716,8 +760,10 @@ else
                {
                        var dic = Constants.SoapDictionary;
                        writer.WriteStartElement ("s", dic.Add ("Body"), dic.Add (Version.Envelope.Namespace));
-                       if (body_id != null)
-                               writer.WriteAttributeString ("Id", Constants.WsuNamespace, body_id);
+
+            if (body_id != null)
+                               writer.WriteAttributeString ("u", "Id", Constants.WsuNamespace, body_id);
+            
                }
 
                protected override void OnWriteBodyContents (XmlDictionaryWriter w)
index 9b903392ecb07bb35abcc474857b6fe962df89e1..b82a6f0949f56eb236604db3422005efe6e1b9f4 100644 (file)
@@ -372,27 +372,59 @@ namespace System.ServiceModel.Channels
                        throw new NotImplementedException ();
                }
 
-               [MonoTODO]
                public static SecurityBindingElement 
                        CreateMutualCertificateBindingElement ()
                {
-                       throw new NotImplementedException ();
+                       return CreateMutualCertificateBindingElement (MessageSecurityVersion.Default, false);
                }
 
-               [MonoTODO]
                public static SecurityBindingElement 
                        CreateMutualCertificateBindingElement (MessageSecurityVersion version)
                {
-                       throw new NotImplementedException ();
+                       return CreateMutualCertificateBindingElement (version, false);
                }
 
-               [MonoTODO]
+               [MonoTODO("Does not support allowSerializedSigningTokenOnReply.")]
                public static SecurityBindingElement 
                        CreateMutualCertificateBindingElement (
                        MessageSecurityVersion version,
                        bool allowSerializedSigningTokenOnReply)
                {
-                       throw new NotImplementedException ();
+                       if (version == null)
+                               throw new ArgumentNullException ("version");
+                       
+                       if (allowSerializedSigningTokenOnReply)
+                               throw new NotSupportedException ("allowSerializedSigningTokenOnReply is not supported");
+                       
+                       if (version.SecurityVersion == SecurityVersion.WSSecurity10) {
+                       
+                               var recipient = new X509SecurityTokenParameters (
+                                       X509KeyIdentifierClauseType.Any,        
+                                   SecurityTokenInclusionMode.Never);
+                               recipient.RequireDerivedKeys = false;
+                               
+                               var initiator = new X509SecurityTokenParameters (
+                                   X509KeyIdentifierClauseType.Any, 
+                                   SecurityTokenInclusionMode.AlwaysToRecipient);
+                               initiator.RequireDerivedKeys = false;                                          
+                                                                                
+                               return new AsymmetricSecurityBindingElement (recipient, initiator) {
+                                       MessageSecurityVersion = version
+                               };
+                       } else {
+                               X509SecurityTokenParameters p =
+                                       new X509SecurityTokenParameters (X509KeyIdentifierClauseType.Thumbprint);
+                               p.RequireDerivedKeys = false;
+                                       
+                               var sym = new SymmetricSecurityBindingElement () {
+                                       MessageSecurityVersion = version,
+                                       RequireSignatureConfirmation = true
+                };
+                               
+                               sym.EndpointSupportingTokenParameters.Endorsing.Add (p);
+                               return sym;
+                       }
+                       
                }
 
                [MonoTODO]
index fef252edccf8584a6c8608284a6ae5a51e6a2272..dfafb9eaffb00dcc13a10c89da37fdf2af8f6961 100644 (file)
@@ -48,6 +48,13 @@ namespace System.ServiceModel.Description
                                return att;
                        return null;
                }
+
+               public static T GetCustomAttribute<T> (this ParameterInfo pi, bool inherit) where T : Attribute
+               {
+                       foreach (T att in pi.GetCustomAttributes (typeof (T), inherit))
+                               return att;
+                       return null;
+               }
        }
 
        [DebuggerDisplay ("Name={name}, Namespace={ns}, ContractType={contractType}")]
index f053e8bf0343c8eef10057a7221cba6488b58890..27874bbeac18277b3d83eaed07d70613f5c04dd4 100644 (file)
@@ -294,8 +294,21 @@ namespace System.ServiceModel.Description
                                        od.Behaviors.Add (new DataContractSerializerOperationBehavior (od, dfa));
 
                                od.Messages.Add (GetMessage (od, mi, oca, true, isCallback, null));
-                               if (!od.IsOneWay)
-                                       od.Messages.Add (GetMessage (od, mi, oca, false, isCallback, asyncReturnType));
+                               if (!od.IsOneWay) {
+                                       var md = GetMessage (od, mi, oca, false, isCallback, asyncReturnType);
+                                       od.Messages.Add (md);
+                                       var mpa = mi.ReturnParameter.GetCustomAttribute<MessageParameterAttribute> (true);
+                                       if (mpa != null) {
+                                               var mpd = md.Body.Parts.FirstOrDefault (pd => pd.Name == mpa.Name);
+                                               if (mpd != null) {
+                                                       md.Body.Parts.Remove (mpd);
+                                                       md.Body.ReturnValue = mpd;
+                                                       mpd.Name = mpa.Name;
+                                               }
+                                               else if (md.Body.ReturnValue == null)
+                                                       throw new InvalidOperationException (String.Format ("Specified message part '{0}' in MessageParameterAttribute on the return value, was not found", mpa.Name));
+                                       }
+                               }
                                var knownTypeAtts =
                                                    cd.ContractType.GetCustomAttributes (typeof (ServiceKnownTypeAttribute), false).Union (
                                                    mi.GetCustomAttributes (typeof (ServiceKnownTypeAttribute), false)).Union (
index f6fd256607f6a2bfb92016eb05fbfb7357cc3311..70e427a26c26d9d775cf5eca7ae20509ca1c1dcc 100644 (file)
@@ -52,9 +52,8 @@ namespace System.ServiceModel.Description
                
                public MessagePartDescription (string name, string ns)
                {
-                       this.name = name;
                        this.ns = ns;
-                       XmlName = new XmlName (name);
+                       this.Name = name;
                }
 
                public int Index {
@@ -69,6 +68,10 @@ namespace System.ServiceModel.Description
 
                public string Name {
                        get { return name; }
+                       internal set {
+                               name = value;
+                               XmlName = new XmlName (value);
+                       }
                }
 
                public string Namespace {
index 709e03b9bfd0ee6937472a514949e69bad410d62..250ceaf32282561809c8c04f87f8d49fc80e0e46 100644 (file)
@@ -300,7 +300,10 @@ namespace System.ServiceModel.Dispatcher
                                                ((PropertyInfo) mi).SetValue (msgObject, pair.Value, null);
                                }
 
-                       foreach (MessagePartDescription partDesc in md.Body.Parts)
+                       var l = new List<MessagePartDescription> (md.Body.Parts);
+                       if (md.Body.ReturnValue != null)
+                               l.Add (md.Body.ReturnValue);
+                       foreach (MessagePartDescription partDesc in l)
                                if (partDesc.MemberInfo is FieldInfo)
                                        ((FieldInfo) partDesc.MemberInfo).SetValue (msgObject, parts [partDesc.Index]);
                                else
@@ -317,7 +320,10 @@ namespace System.ServiceModel.Dispatcher
                                        headers [headDesc] = ((PropertyInfo) mi).GetValue (msgObject, null);
                        }
 
-                       foreach (MessagePartDescription partDesc in md.Body.Parts)
+                       var l = new List<MessagePartDescription> (md.Body.Parts);
+                       if (md.Body.ReturnValue != null)
+                               l.Add (md.Body.ReturnValue);
+                       foreach (MessagePartDescription partDesc in l)
                                if (partDesc.MemberInfo is FieldInfo)
                                        parts [partDesc.Index] = ((FieldInfo) partDesc.MemberInfo).GetValue (msgObject);
                                else
index 2e7d672315e734e64cfd5733c6117bb92d0438b2..859dacabe687e0033579e31762b36f99bce85cbe 100644 (file)
@@ -65,6 +65,7 @@ namespace System.ServiceModel.Dispatcher
                        m.IsReturnValue = isReturnValue;
                        m.MemberName = partDesc.Name;
                        m.MemberType = partDesc.Type;
+                       m.XmlAttributes = new XmlAttributes(partDesc.MemberInfo);
                        return m;
                }
 
index b1f18761be7a2fb0732d0d11dc7561c04d7a45d1..d462b0f7a01b1fe0fb2f9f53b60011c8e649c401 100644 (file)
@@ -181,33 +181,51 @@ namespace System.ServiceModel
                        CreateBindingElements ()
                {
                        var list = new List<BindingElement> ();
+                       
+                       var security = CreateSecurityBindingElement ();
+                       if (security != null)
+                               list.Add (security);
+
+#if NET_2_1
+                       if (EnableHttpCookieContainer)
+                               list.Add (new HttpCookieContainerBindingElement ());
+#endif
+
+                       list.Add (BuildMessageEncodingBindingElement ());
+                       list.Add (GetTransport ());
+
+                       return new BindingElementCollection (list.ToArray ());
+               }
+               
+               SecurityBindingElement CreateSecurityBindingElement () 
+               {
+            SecurityBindingElement element;
                        switch (Security.Mode) {
 #if !NET_2_1
                        case BasicHttpSecurityMode.Message:
                                if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
                                        throw new InvalidOperationException ("When Message security is enabled in a BasicHttpBinding, the message security credential type must be BasicHttpMessageCredentialType.Certificate.");
-                               goto case BasicHttpSecurityMode.TransportWithMessageCredential;
+                               element = SecurityBindingElement.CreateMutualCertificateBindingElement (
+                                   MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10);
+                               break;
+
                        case BasicHttpSecurityMode.TransportWithMessageCredential:
-                               SecurityBindingElement sec;
                                if (Security.Message.ClientCredentialType != BasicHttpMessageCredentialType.Certificate)
                                        // FIXME: pass proper security token parameters.
-                                       sec = SecurityBindingElement.CreateCertificateOverTransportBindingElement ();
+                                       element = SecurityBindingElement.CreateCertificateOverTransportBindingElement ();
                                else
-                                       sec = new AsymmetricSecurityBindingElement ();
-                               list.Add (sec);
+                                       element = new AsymmetricSecurityBindingElement ();
                                break;
 #endif
+                       default: 
+                               return null;
                        }
 
-#if NET_2_1
-                       if (EnableHttpCookieContainer)
-                               list.Add (new HttpCookieContainerBindingElement ());
+#if !NET_2_1
+                       element.SetKeyDerivation (false);
+                       element.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
 #endif
-
-                       list.Add (BuildMessageEncodingBindingElement ());
-                       list.Add (GetTransport ());
-
-                       return new BindingElementCollection (list.ToArray ());
+                       return element;
                }
 
                MessageEncodingBindingElement BuildMessageEncodingBindingElement ()
index 681ac1e3efdd5a2acf3df3675564180731a0499e..bd6d6c3438e2eb45ec2fb493b55de75a648d6707 100644 (file)
@@ -105,6 +105,7 @@ System.ServiceModel.Configuration/StandardBindingElementCollectionTest.cs
 System.ServiceModel.Configuration/StandardBindingElementTest.cs
 System.ServiceModel.Configuration/StandardEndpointsSectionTest.cs
 System.ServiceModel.Configuration/UserBinding.cs
+System.ServiceModel.Description/BugX41.cs
 System.ServiceModel.Description/ClientCredentialsTest.cs
 System.ServiceModel.Description/ContractDescriptionTest.cs
 System.ServiceModel.Description/FaultDescriptionTest.cs
diff --git a/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/BugX41.cs b/mcs/class/System.ServiceModel/Test/System.ServiceModel.Description/BugX41.cs
new file mode 100644 (file)
index 0000000..5bdd172
--- /dev/null
@@ -0,0 +1,288 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.235
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Dealerinfo.wsvDealerinfo {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(Namespace="http://programcallbean.accentry.accell.nl", ConfigurationName="wsvDealerinfo.WSVDealerInfoServices")]
+    public interface WSVDealerInfoServices {
+        
+        // CODEGEN: Parameter 'wsvdealerinfo_XMLReturn' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+        [System.ServiceModel.OperationContractAttribute(Action="wsvdealerinfo_XML", ReplyAction="*")]
+        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+        [return: System.ServiceModel.MessageParameterAttribute(Name="wsvdealerinfo_XMLReturn")]
+        Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLResponse wsvdealerinfo_XML(Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLRequest request);
+        
+        // CODEGEN: Parameter 'wsvdealerinfoReturn' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+        [System.ServiceModel.OperationContractAttribute(Action="wsvdealerinfo", ReplyAction="*")]
+        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+        [return: System.ServiceModel.MessageParameterAttribute(Name="wsvdealerinfoReturn")]
+        Dealerinfo.wsvDealerinfo.wsvdealerinfoResponse wsvdealerinfo(Dealerinfo.wsvDealerinfo.wsvdealerinfoRequest request);
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://programcallbean.accentry.accell.nl")]
+    public partial class WSVDealerInfoInput : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private string returncodeField;
+        
+        private string wSVBedrijfscodeField;
+        
+        private string wSVDealercodeField;
+        
+        private string wSVWachtwoordField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=0)]
+        public string returncode {
+            get {
+                return this.returncodeField;
+            }
+            set {
+                this.returncodeField = value;
+                this.RaisePropertyChanged("returncode");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
+        public string WSVBedrijfscode {
+            get {
+                return this.wSVBedrijfscodeField;
+            }
+            set {
+                this.wSVBedrijfscodeField = value;
+                this.RaisePropertyChanged("WSVBedrijfscode");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=2)]
+        public string WSVDealercode {
+            get {
+                return this.wSVDealercodeField;
+            }
+            set {
+                this.wSVDealercodeField = value;
+                this.RaisePropertyChanged("WSVDealercode");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=3)]
+        public string WSVWachtwoord {
+            get {
+                return this.wSVWachtwoordField;
+            }
+            set {
+                this.wSVWachtwoordField = value;
+                this.RaisePropertyChanged("WSVWachtwoord");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://programcallbean.accentry.accell.nl")]
+    public partial class WSVDealerInfoResult : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private string returncodeField;
+        
+        private string wSVFoutmeldingField;
+        
+        private string wSVDealerinfoField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=0)]
+        public string returncode {
+            get {
+                return this.returncodeField;
+            }
+            set {
+                this.returncodeField = value;
+                this.RaisePropertyChanged("returncode");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
+        public string WSVFoutmelding {
+            get {
+                return this.wSVFoutmeldingField;
+            }
+            set {
+                this.wSVFoutmeldingField = value;
+                this.RaisePropertyChanged("WSVFoutmelding");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=2)]
+        public string WSVDealerinfo {
+            get {
+                return this.wSVDealerinfoField;
+            }
+            set {
+                this.wSVDealerinfoField = value;
+                this.RaisePropertyChanged("WSVDealerinfo");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="wsvdealerinfo_XML", WrapperNamespace="http://programcallbean.accentry.accell.nl", IsWrapped=true)]
+    public partial class wsvdealerinfo_XMLRequest {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://programcallbean.accentry.accell.nl", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
+        public Dealerinfo.wsvDealerinfo.WSVDealerInfoInput inputData;
+        
+        public wsvdealerinfo_XMLRequest() {
+        }
+        
+        public wsvdealerinfo_XMLRequest(Dealerinfo.wsvDealerinfo.WSVDealerInfoInput inputData) {
+            this.inputData = inputData;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="wsvdealerinfo_XMLResponse", WrapperNamespace="http://programcallbean.accentry.accell.nl", IsWrapped=true)]
+    public partial class wsvdealerinfo_XMLResponse {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://programcallbean.accentry.accell.nl", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
+        public string wsvdealerinfo_XMLReturn;
+        
+        public wsvdealerinfo_XMLResponse() {
+        }
+        
+        public wsvdealerinfo_XMLResponse(string wsvdealerinfo_XMLReturn) {
+            this.wsvdealerinfo_XMLReturn = wsvdealerinfo_XMLReturn;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="wsvdealerinfo", WrapperNamespace="http://programcallbean.accentry.accell.nl", IsWrapped=true)]
+    public partial class wsvdealerinfoRequest {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://programcallbean.accentry.accell.nl", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
+        public Dealerinfo.wsvDealerinfo.WSVDealerInfoInput inputData;
+        
+        public wsvdealerinfoRequest() {
+        }
+        
+        public wsvdealerinfoRequest(Dealerinfo.wsvDealerinfo.WSVDealerInfoInput inputData) {
+            this.inputData = inputData;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="wsvdealerinfoResponse", WrapperNamespace="http://programcallbean.accentry.accell.nl", IsWrapped=true)]
+    public partial class wsvdealerinfoResponse {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://programcallbean.accentry.accell.nl", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
+        public Dealerinfo.wsvDealerinfo.WSVDealerInfoResult wsvdealerinfoReturn;
+        
+        public wsvdealerinfoResponse() {
+        }
+        
+        public wsvdealerinfoResponse(Dealerinfo.wsvDealerinfo.WSVDealerInfoResult wsvdealerinfoReturn) {
+            this.wsvdealerinfoReturn = wsvdealerinfoReturn;
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface WSVDealerInfoServicesChannel : Dealerinfo.wsvDealerinfo.WSVDealerInfoServices, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class WSVDealerInfoServicesClient : System.ServiceModel.ClientBase<Dealerinfo.wsvDealerinfo.WSVDealerInfoServices>, Dealerinfo.wsvDealerinfo.WSVDealerInfoServices {
+        
+        public WSVDealerInfoServicesClient() {
+        }
+        
+        public WSVDealerInfoServicesClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public WSVDealerInfoServicesClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public WSVDealerInfoServicesClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public WSVDealerInfoServicesClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLResponse Dealerinfo.wsvDealerinfo.WSVDealerInfoServices.wsvdealerinfo_XML(Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLRequest request) {
+            return base.Channel.wsvdealerinfo_XML(request);
+        }
+        
+        public string wsvdealerinfo_XML(Dealerinfo.wsvDealerinfo.WSVDealerInfoInput inputData) {
+            Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLRequest inValue = new Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLRequest();
+            inValue.inputData = inputData;
+            Dealerinfo.wsvDealerinfo.wsvdealerinfo_XMLResponse retVal = ((Dealerinfo.wsvDealerinfo.WSVDealerInfoServices)(this)).wsvdealerinfo_XML(inValue);
+            return retVal.wsvdealerinfo_XMLReturn;
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        Dealerinfo.wsvDealerinfo.wsvdealerinfoResponse Dealerinfo.wsvDealerinfo.WSVDealerInfoServices.wsvdealerinfo(Dealerinfo.wsvDealerinfo.wsvdealerinfoRequest request) {
+            return base.Channel.wsvdealerinfo(request);
+        }
+        
+        public Dealerinfo.wsvDealerinfo.WSVDealerInfoResult wsvdealerinfo(Dealerinfo.wsvDealerinfo.WSVDealerInfoInput inputData) {
+            Dealerinfo.wsvDealerinfo.wsvdealerinfoRequest inValue = new Dealerinfo.wsvDealerinfo.wsvdealerinfoRequest();
+            inValue.inputData = inputData;
+            Dealerinfo.wsvDealerinfo.wsvdealerinfoResponse retVal = ((Dealerinfo.wsvDealerinfo.WSVDealerInfoServices)(this)).wsvdealerinfo(inValue);
+            return retVal.wsvdealerinfoReturn;
+        }
+    }
+}
index 386e0beb6ecc968a5147d6fec56a00e7bd8a29d5..f35568a4c3d0699a6e109bd7f7b5f793cf060fb6 100644 (file)
@@ -544,6 +544,17 @@ namespace MonoTests.System.ServiceModel.Description
                        Assert.IsNotNull (xb, "#1");
                }
 
+               [Test]
+               public void MessageParameterDescriptionInUse ()
+               {
+                       // bug #41
+                       var cd = ContractDescription.GetContract (typeof (Dealerinfo.wsvDealerinfo.WSVDealerInfoServices));
+                       foreach (var od in cd.Operations)
+                               foreach (var md in od.Messages)
+                                       if (md.Action == "*") // return
+                                               Assert.IsNotNull (md.Body.ReturnValue, od.Name);
+               }
+
                // It is for testing attribute search in interfaces.
                public class Foo : IFoo
                {
index eb9b672ebdf5053bd9bb95f94657a711f20d150c..63f4ba55c3ec3e7154a304f0ed0ef77b7b45cdca 100644 (file)
@@ -34,7 +34,9 @@ using System.ServiceModel;
 using System.ServiceModel.Channels;
 using System.ServiceModel.Description;
 using System.ServiceModel.Dispatcher;
+using System.Text;
 using System.Xml;
+using System.Xml.Serialization;
 using NUnit.Framework;
 
 namespace MonoTests.System.ServiceModel.Description
@@ -119,6 +121,49 @@ namespace MonoTests.System.ServiceModel.Description
                        Assert.AreEqual ("test", t2.echo.msg, "#01");
                        Assert.AreEqual ("testtest", t2.body2, "#02");
                }
+
+
+               [Test]
+               public void XmlSerializerdWithXmlAttribute()
+               {
+                       TypedMessageConverter c = TypedMessageConverter.Create (
+                               typeof (Test3), "http://tempuri.org/MyTest",
+                new XmlSerializerFormatAttribute ());
+
+
+                       string xmlMessage = @"<s:Envelope xmlns:s='http://www.w3.org/2003/05/soap-envelope'
+                                                                       xmlns:a='http://www.w3.org/2005/08/addressing'>
+                               <s:Header><a:Action s:mustUnderstand='1'>http://tempuri.org/MyTest</a:Action></s:Header>
+                               <s:Body xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
+                                       <test xmlns='urn:foo'>
+                                               <Id>OneID</Id>
+                                               <Element>
+                                                       <Prop1 xmlns='urn:bar'>foo</Prop1>
+                                                       <Prop2 xmlns='urn:bar'>2</Prop2>
+                                               </Element>
+                                               <Element>
+                                                       <Prop1 xmlns='urn:bar'>bar</Prop1>
+                                                       <Prop2 xmlns='urn:bar'>3</Prop2>
+                                               </Element>
+                                       </test>
+                               </s:Body>
+                               </s:Envelope>";
+
+                       byte[] buffer = Encoding.UTF8.GetBytes(xmlMessage);
+                       using (XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(buffer, XmlDictionaryReaderQuotas.Max))
+                       {
+                               Message messagedisk = Message.CreateMessage(reader, int.MaxValue, MessageVersion.Soap12);
+                               Test3 obj = c.FromMessage(messagedisk) as Test3;
+                               Assert.IsNotNull(obj);
+                               Assert.AreEqual("OneID", obj.Id);
+                               Assert.IsNotNull(obj.ArrayOfElement);
+                               Assert.AreEqual(2, obj.ArrayOfElement.Length);
+                               Assert.AreEqual("foo", obj.ArrayOfElement[0].Prop1);
+                               Assert.AreEqual(3, obj.ArrayOfElement[1].Prop2);
+                       }
+               }
+
+
        }
 
        [MessageContract (WrapperNamespace = "space", WrapperName = "MyName")]
@@ -146,4 +191,32 @@ namespace MonoTests.System.ServiceModel.Description
                [MessageBodyMember (Name = "body", Namespace = "urn:foo")]
                public Echo Body { get; set; }
        }
+
+    [MessageContract(WrapperName = "test",
+        WrapperNamespace = "urn:foo",
+        IsWrapped = true)]
+       public class Test3
+       {
+
+               [MessageBodyMember()]
+               [XmlElementAttribute()]
+               public string Id;
+
+               [MessageBodyMember()]
+               [XmlElement(Type = typeof(ElementType), ElementName = "Element")]
+               public ElementType[] ArrayOfElement;
+
+       }
+
+       [Serializable]
+       [XmlType(Namespace = "urn:bar")]
+       public class ElementType
+       {
+               [XmlElement(Order = 0)]
+               public string Prop1 { get; set; }
+
+               [XmlElement(Order = 1)]
+               public int Prop2 { get; set; }
+       }
+
 }
index bff9afed5b1e652e491a20c82aa7170d8a686c54..17d5233e098d903a83cdf9e4f890e68a3365872f 100644 (file)
@@ -288,17 +288,21 @@ namespace System.Xml.Serialization
                        sb.Append ("|");
                }
 
-               public int Order {
+               internal int? Order {
                        get {
-                               int order = -1;
-                               if (XmlElements != null)
+                               int? order = null;
+                               if (XmlElements.Count > 0)
                                        order = XmlElements.Order;
-                               if (order < 0 && XmlArray != null)
+                               else if (XmlArray != null)
                                        order = XmlArray.Order;
-                               if (order < 0 && XmlAnyElements != null)
+                               else if (XmlAnyElements.Count > 0)
                                        order = XmlAnyElements.Order;
                                return order;
                        }
                }
+               
+               internal int SortableOrder {
+                       get { return Order != null ? (int) Order : int.MinValue; }
+               }
        }
 }
index 729381e739d64226c65e2da26c1fbf7dfe63b712..94bc14d81037a97e52385be650d84e6fed7bb43f 100644 (file)
@@ -352,13 +352,17 @@ namespace System.Xml.Serialization {
                        bool? isOrderExplicit = null;
                        foreach (XmlReflectionMember rmember in members)
                        {
+                               int? order = rmember.XmlAttributes.Order;
                                if (isOrderExplicit == null)
-                                       isOrderExplicit = rmember.XmlAttributes.Order >= 0;
-                               else if (isOrderExplicit != (rmember.XmlAttributes.Order >= 0))
+                               {
+                                       if (order != null)
+                                               isOrderExplicit = (int) order >= 0;
+                               }
+                               else if (order != null && isOrderExplicit != ((int) order >= 0))
                                        throw new InvalidOperationException ("Inconsistent XML sequence was detected. If there are XmlElement/XmlArray/XmlAnyElement attributes with explicit Order, then every other member must have an explicit order too.");
                        }
                        if (isOrderExplicit == true)
-                               members.Sort ((m1, m2) => m1.XmlAttributes.Order - m2.XmlAttributes.Order);
+                               members.Sort ((m1, m2) => (int) m1.XmlAttributes.SortableOrder - (int) m2.XmlAttributes.SortableOrder);
 
                        foreach (XmlReflectionMember rmember in members)
                        {
index ce86b3be0c51079500b680d4284ca52930e086cb..53e29d209c771ddf41db4af7f2d82c0097a4ea01 100644 (file)
@@ -183,6 +183,22 @@ namespace MonoTests.System.XmlSerialization
        <child>Hello</child>
        <child>World</child>
        <child0>test</child0>
+</root>"));
+                       Assert.AreEqual ("Hello", result.Child1, "#1");
+                       Assert.AreEqual ("World", result.Child2, "#2");
+                       Assert.IsNull (result.Child0, "#3"); // not "test"
+               }
+
+               [Test]
+               public void ExplicitlyOrderedMembers4 ()
+               {
+                       var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType4));
+                       //Would result in an Inconsistent XML sequence error , see Bug 707434
+                       var result = (ExplicitlyOrderedMembersType4) xs.Deserialize(new StringReader (@"
+<root>
+       <child>Hello</child>
+       <child>World</child>
+       <child0>test</child0>
 </root>"));
                        Assert.AreEqual ("Hello", result.Child1, "#1");
                        Assert.AreEqual ("World", result.Child2, "#2");
index f38cc76cfe75df900c22c92ae02fe855836af5d7..f478076c4fe18a8387201f5aec6b72ee085ef071 100644 (file)
@@ -1017,5 +1017,20 @@ namespace MonoTests.System.Xml.TestClasses
                public string Child2;
        }
 
+       [XmlRoot("root")]
+       public class ExplicitlyOrderedMembersType4
+       {
+               [XmlElement("child0", Order = 1)] // it's between 0 and 2. After two "child" elements, child0 is not recognized as this member.
+               public string Child0;
+               
+               [XmlElement("child", Order = 0)]
+               public string Child1;
+               
+               [XmlElement("child", Order = 2)]
+               public string Child2;
+               
+               [XmlAttribute]
+               public string Child3;
+       }
 }
 
index 399bdfcef5968d4681acf82818d7ef3969bbd6f6..9ca0624300f670747ff0dae1e954a365e7a88d66 100644 (file)
@@ -41,6 +41,8 @@ using System.IO.IsolatedStorage;
 namespace System.IO
 {
        unsafe internal sealed class MonoIO {
+               internal static int FileAlreadyExistsHResult = unchecked ((int) 0x80070000) | (int)MonoIOError.ERROR_FILE_EXISTS;
+
                public static readonly FileAttributes
                        InvalidFileAttributes = (FileAttributes)(-1);
 
@@ -61,7 +63,7 @@ namespace System.IO
                                return new UnauthorizedAccessException ("Access to the path is denied.");
                        case MonoIOError.ERROR_FILE_EXISTS:
                                string message = "Cannot create a file that already exist.";
-                               return new IOException (message, unchecked ((int) 0x80070000) | (int) error);
+                               return new IOException (message, FileAlreadyExistsHResult);
                        default:
                                /* Add more mappings here if other
                                 * errors trigger the named but empty
index 510859a94f4b3585bceecbdf925fc3864057b3a6..59cadf1c13ca9328d1409eb84a36316d7c9f070a 100644 (file)
@@ -439,6 +439,7 @@ namespace System.IO {
                        string path;
                        Random rnd;
                        int num = 0;
+                       int count = 0;
 
                        SecurityManager.EnsureElevatedPermissions (); // this is a no-op outside moonlight
 
@@ -452,19 +453,9 @@ namespace System.IO {
                                        f = new FileStream (path, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read,
                                                            8192, false, (FileOptions) 1);
                                }
-                               catch (SecurityException) {
-                                       // avoid an endless loop
-                                       throw;
-                               }
-                               catch (UnauthorizedAccessException) {
-                                       // This can happen if we don't have write permission to /tmp
-                                       throw;
-                               }
-                               catch (DirectoryNotFoundException) {
-                                       // This happens when TMPDIR does not exist
-                                       throw;
-                               }
-                               catch {
+                               catch (IOException ex){
+                                       if (ex.hresult != MonoIO.FileAlreadyExistsHResult || count ++ > 65536)
+                                               throw;
                                }
                        } while (f == null);
                        
index cae0e5c7b9ac4584eb300f53b997466e7bd6baf2..117974b3ecc4db8650d8852c82b02106e38eaea6 100644 (file)
@@ -1205,12 +1205,13 @@ namespace Mono.CSharp {
                        if (!DoResolveParameters (ec))
                                return null;
 
+#if !STATIC
                        // FIXME: The emitted code isn't very careful about reachability
                        // so, ensure we have a 'ret' at the end
                        BlockContext bc = ec as BlockContext;
                        if (bc != null && bc.CurrentBranching != null && bc.CurrentBranching.CurrentUsageVector.IsUnreachable)
                                bc.NeedReturnLabel ();
-
+#endif
                        return this;
                }
 
@@ -1290,11 +1291,6 @@ namespace Mono.CSharp {
                        {
                                EmitContext ec = new EmitContext (this, ig, ReturnType);
                                ec.CurrentAnonymousMethod = AnonymousMethod;
-                               if (AnonymousMethod.return_label != null) {
-                                       ec.HasReturnLabel = true;
-                                       ec.ReturnLabel = (Label) AnonymousMethod.return_label;
-                               }
-
                                return ec;
                        }
 
@@ -1340,8 +1336,6 @@ namespace Mono.CSharp {
 
                public TypeSpec ReturnType;
 
-               object return_label;
-
                protected AnonymousExpression (ParametersBlock block, TypeSpec return_type, Location loc)
                {
                        this.ReturnType = return_type;
@@ -1390,9 +1384,6 @@ namespace Mono.CSharp {
 
                        bool res = Block.Resolve (ec.CurrentBranching, aec, null);
 
-                       if (aec.HasReturnLabel)
-                               return_label = aec.ReturnLabel;
-
                        if (am != null && am.ReturnTypeInference != null) {
                                am.ReturnTypeInference.FixAllTypes (ec);
                                ReturnType = am.ReturnTypeInference.InferredTypeArguments [0];
index 7a6b8f4ff00d4e5fc8b13d79c8faca93645419bb..c0847e9fcf5695a1ee262a8da22a061f03687557 100644 (file)
@@ -52,16 +52,6 @@ namespace Mono.CSharp
 
                protected override Expression DoResolve (ResolveContext rc)
                {
-                       if (rc.HasSet (ResolveContext.Options.FinallyScope)) {
-                               rc.Report.Error (1984, loc,
-                                       "The `await' operator cannot be used in the body of a finally clause");
-                       }
-
-                       if (rc.HasSet (ResolveContext.Options.CatchScope)) {
-                               rc.Report.Error (1985, loc,
-                                       "The `await' operator cannot be used in the body of a catch clause");
-                       }
-
                        if (rc.HasSet (ResolveContext.Options.LockScope)) {
                                rc.Report.Error (1996, loc,
                                        "The `await' operator cannot be used in the body of a lock statement");
@@ -474,6 +464,7 @@ namespace Mono.CSharp
                        if (lambda != null)
                                return_inference = lambda.ReturnTypeInference;
 
+                       ctx.StartFlowBranching (this, rc.CurrentBranching);
                        return ctx;
                }
 
@@ -572,6 +563,7 @@ namespace Mono.CSharp
                Field builder, continuation;
                readonly TypeSpec return_type;
                MethodSpec set_result;
+               MethodSpec set_exception;
                PropertySpec task;
                LocalVariable hoisted_return;
                int locals_captured;
@@ -643,6 +635,7 @@ namespace Mono.CSharp
                        PredefinedType builder_type;
                        PredefinedMember<MethodSpec> bf;
                        PredefinedMember<MethodSpec> sr;
+                       PredefinedMember<MethodSpec> se;
                        bool has_task_return_type = false;
                        var pred_members = Module.PredefinedMembers;
 
@@ -650,23 +643,27 @@ namespace Mono.CSharp
                                builder_type = Module.PredefinedTypes.AsyncVoidMethodBuilder;
                                bf = pred_members.AsyncVoidMethodBuilderCreate;
                                sr = pred_members.AsyncVoidMethodBuilderSetResult;
+                               se = pred_members.AsyncVoidMethodBuilderSetException;
                        } else if (return_type == Module.PredefinedTypes.Task.TypeSpec) {
                                builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilder;
                                bf = pred_members.AsyncTaskMethodBuilderCreate;
                                sr = pred_members.AsyncTaskMethodBuilderSetResult;
+                               se = pred_members.AsyncTaskMethodBuilderSetException;
                                task = pred_members.AsyncTaskMethodBuilderTask.Resolve (Location);
                        } else {
                                builder_type = Module.PredefinedTypes.AsyncTaskMethodBuilderGeneric;
                                bf = pred_members.AsyncTaskMethodBuilderGenericCreate;
                                sr = pred_members.AsyncTaskMethodBuilderGenericSetResult;
+                               se = pred_members.AsyncTaskMethodBuilderGenericSetException;
                                task = pred_members.AsyncTaskMethodBuilderGenericTask.Resolve (Location);
                                has_task_return_type = true;
                        }
 
                        set_result = sr.Resolve (Location);
+                       set_exception = se.Resolve (Location);
                        var builder_factory = bf.Resolve (Location);
                        var bt = builder_type.Resolve ();
-                       if (bt == null || set_result == null || builder_factory == null)
+                       if (bt == null || set_result == null || builder_factory == null || set_exception == null)
                                return false;
 
                        //
@@ -680,6 +677,7 @@ namespace Mono.CSharp
                                bt = bt.MakeGenericType (Module, task_return_type);
                                builder_factory = MemberCache.GetMember<MethodSpec> (bt, builder_factory);
                                set_result = MemberCache.GetMember<MethodSpec> (bt, set_result);
+                               set_exception = MemberCache.GetMember<MethodSpec> (bt, set_exception);
 
                                if (task != null)
                                        task = MemberCache.GetMember<PropertySpec> (bt, task);
@@ -724,6 +722,22 @@ namespace Mono.CSharp
                        return true;
                }
 
+               public void EmitSetException (EmitContext ec, LocalVariableReference exceptionVariable)
+               {
+                       //
+                       // $builder.SetException (Exception)
+                       //
+                       var mg = MethodGroupExpr.CreatePredefined (set_exception, set_exception.DeclaringType, Location);
+                       mg.InstanceExpression = new FieldExpr (Builder, Location) {
+                               InstanceExpression = new CompilerGeneratedThis (ec.CurrentType, Location)
+                       };
+
+                       Arguments args = new Arguments (1);
+                       args.Add (new Argument (exceptionVariable));
+
+                       mg.EmitCall (ec, args);
+               }
+
                public void EmitSetResult (EmitContext ec)
                {
                        //
index a30ed926c69ad55fe823ea0243b8e62e639fc07a..8764c79fe9949c668341dc6e3ceeb0aa2419f893 100644 (file)
@@ -51,16 +51,6 @@ namespace Mono.CSharp
                /// </summary>
                public LocalBuilder return_value;
 
-               /// <summary>
-               ///   The location where return has to jump to return the
-               ///   value
-               /// </summary>
-               public Label ReturnLabel;
-
-               /// <summary>
-               ///   If we already defined the ReturnLabel
-               /// </summary>
-               public bool HasReturnLabel;
 
                /// <summary>
                ///   Current loop begin and end labels.
@@ -87,6 +77,8 @@ namespace Mono.CSharp
 
                DynamicSiteClass dynamic_site_container;
 
+               Label? return_label;
+
                public EmitContext (IMemberContext rc, ILGenerator ig, TypeSpec return_type)
                {
                        this.member_context = rc;
@@ -127,6 +119,12 @@ namespace Mono.CSharp
                        get { return member_context.CurrentMemberDefinition; }
                }
 
+               public bool HasReturnLabel {
+                       get {
+                               return return_label.HasValue;
+                       }
+               }
+
                public bool IsStatic {
                        get { return member_context.IsStatic; }
                }
@@ -165,6 +163,15 @@ namespace Mono.CSharp
                        }
                }
 
+               //
+               // The label where we have to jump before leaving the context
+               //
+               public Label ReturnLabel {
+                       get {
+                               return return_label.Value;
+                       }
+               }
+
                #endregion
 
                public void AssertEmptyStack ()
@@ -246,6 +253,14 @@ namespace Mono.CSharp
                        return dynamic_site_container;
                }
 
+               public Label CreateReturnLabel ()
+               {
+                       if (!return_label.HasValue)
+                               return_label = DefineLabel ();
+
+                       return return_label.Value;
+               }
+
                public LocalBuilder DeclareLocal (TypeSpec type, bool pinned)
                {
                        if (IsAnonymousStoreyMutateRequired)
@@ -815,10 +830,6 @@ namespace Mono.CSharp
                {
                        if (return_value == null){
                                return_value = DeclareLocal (return_type, false);
-                               if (!HasReturnLabel){
-                                       ReturnLabel = DefineLabel ();
-                                       HasReturnLabel = true;
-                               }
                        }
 
                        return return_value;
index ebb795c6fbcc1d2c447a48c31b5c6e1fd4aec3e8..921770cce7820a54293a952da7d94f83c30c18d4 100644 (file)
@@ -13,12 +13,6 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 
-#if STATIC
-using IKVM.Reflection.Emit;
-#else
-using System.Reflection.Emit;
-#endif
-
 namespace Mono.CSharp
 {
        public enum LookupMode
@@ -75,18 +69,7 @@ namespace Mono.CSharp
        {
                FlowBranching current_flow_branching;
 
-               TypeSpec return_type;
-
-               /// <summary>
-               ///   The location where return has to jump to return the
-               ///   value
-               /// </summary>
-               public Label ReturnLabel;       // TODO: It's emit dependant
-
-               /// <summary>
-               ///   If we already defined the ReturnLabel
-               /// </summary>
-               public bool HasReturnLabel;
+               readonly TypeSpec return_type;
 
                public int FlowOffset;
 
@@ -116,6 +99,10 @@ namespace Mono.CSharp
                        get { return current_flow_branching; }
                }
 
+               public TypeSpec ReturnType {
+                       get { return return_type; }
+               }
+
                // <summary>
                //   Starts a new code branching.  This inherits the state of all local
                //   variables and parameters from the current branching.
@@ -159,13 +146,20 @@ namespace Mono.CSharp
                        return branching;
                }
 
-               public FlowBranchingIterator StartFlowBranching (StateMachineInitializer iterator, FlowBranching parent)
+               public FlowBranchingIterator StartFlowBranching (Iterator iterator, FlowBranching parent)
                {
                        FlowBranchingIterator branching = new FlowBranchingIterator (parent, iterator);
                        current_flow_branching = branching;
                        return branching;
                }
 
+               public FlowBranchingAsync StartFlowBranching (AsyncInitializer asyncBody, FlowBranching parent)
+               {
+                       var branching = new FlowBranchingAsync (parent, asyncBody);
+                       current_flow_branching = branching;
+                       return branching;
+               }
+
                public FlowBranchingToplevel StartFlowBranching (ParametersBlock stmt, FlowBranching parent)
                {
                        FlowBranchingToplevel branching = new FlowBranchingToplevel (parent, stmt);
@@ -196,19 +190,11 @@ namespace Mono.CSharp
                        current_flow_branching = current_flow_branching.Parent;
                }
 
-               //
-               // This method is used during the Resolution phase to flag the
-               // need to define the ReturnLabel
-               //
+#if !STATIC
                public void NeedReturnLabel ()
                {
-                       if (!HasReturnLabel)
-                               HasReturnLabel = true;
-               }
-
-               public TypeSpec ReturnType {
-                       get { return return_type; }
                }
+#endif
        }
 
        //
index d864dc875e9ae6eadda6cf6eec676bf65b5483d1..3eba78a5374557a7ce1d0fe782effdb9588e8ca1 100644 (file)
@@ -415,9 +415,9 @@ namespace Mono.CSharp
                        return Parent.CheckRethrow (loc);
                }
 
-               public virtual bool AddResumePoint (ResumableStatement stmt, Location loc, out int pc)
+               public virtual bool AddResumePoint (ResumableStatement stmt, out int pc)
                {
-                       return Parent.AddResumePoint (stmt, loc, out pc);
+                       return Parent.AddResumePoint (stmt, out pc);
                }
 
                // returns true if we crossed an unwind-protected region (try/catch/finally, lock, using, ...)
@@ -636,15 +636,15 @@ namespace Mono.CSharp
 
        public class FlowBranchingIterator : FlowBranchingBlock
        {
-               readonly StateMachineInitializer iterator;
+               readonly Iterator iterator;
 
-               public FlowBranchingIterator (FlowBranching parent, StateMachineInitializer iterator)
+               public FlowBranchingIterator (FlowBranching parent, Iterator iterator)
                        : base (parent, BranchingType.Iterator, SiblingType.Block, iterator.Block, iterator.Location)
                {
                        this.iterator = iterator;
                }
 
-               public override bool AddResumePoint (ResumableStatement stmt, Location loc, out int pc)
+               public override bool AddResumePoint (ResumableStatement stmt, out int pc)
                {
                        pc = iterator.AddResumePoint (stmt);
                        return false;
@@ -666,7 +666,7 @@ namespace Mono.CSharp
                        return false;
                }
 
-               public override bool AddResumePoint (ResumableStatement stmt, Location loc, out int pc)
+               public override bool AddResumePoint (ResumableStatement stmt, out int pc)
                {
                        throw new InternalErrorException ("A yield in a non-iterator block");
                }
@@ -731,6 +731,7 @@ namespace Mono.CSharp
        public class FlowBranchingTryCatch : FlowBranchingBlock
        {
                TryCatch stmt;
+
                public FlowBranchingTryCatch (FlowBranching parent, TryCatch stmt)
                        : base (parent, BranchingType.Block, SiblingType.Try, null, stmt.loc)
                {
@@ -742,16 +743,23 @@ namespace Mono.CSharp
                        return CurrentUsageVector.Next != null || Parent.CheckRethrow (loc);
                }
 
-               public override bool AddResumePoint (ResumableStatement stmt, Location loc, out int pc)
+               public override bool AddResumePoint (ResumableStatement stmt, out int pc)
                {
                        int errors = Report.Errors;
-                       Parent.AddResumePoint (stmt, loc, out pc);
+                       Parent.AddResumePoint (stmt, out pc);
                        if (errors == Report.Errors) {
-                               if (CurrentUsageVector.Next == null)
-                                       Report.Error (1626, loc, "Cannot yield a value in the body of a try block with a catch clause");
-                               else
-                                       Report.Error (1631, loc, "Cannot yield a value in the body of a catch clause");
+                               if (stmt is AwaitStatement) {
+                                       if (CurrentUsageVector.Next != null) {
+                                               Report.Error (1985, stmt.loc, "The `await' operator cannot be used in the body of a catch clause");
+                                       }
+                               } else {
+                                       if (CurrentUsageVector.Next == null)
+                                               Report.Error (1626, stmt.loc, "Cannot yield a value in the body of a try block with a catch clause");
+                                       else
+                                               Report.Error (1631, stmt.loc, "Cannot yield a value in the body of a catch clause");
+                               }
                        }
+
                        return true;
                }
 
@@ -783,6 +791,52 @@ namespace Mono.CSharp
                }
        }
 
+       public  class FlowBranchingAsync : FlowBranchingBlock
+       {
+               readonly AsyncInitializer async_init;
+
+               public FlowBranchingAsync (FlowBranching parent, AsyncInitializer async_init)
+                       : base (parent, BranchingType.Block, SiblingType.Try, null, async_init.Location)
+               {
+                       this.async_init = async_init;
+               }
+/*
+               public override bool CheckRethrow (Location loc)
+               {
+                       return CurrentUsageVector.Next != null || Parent.CheckRethrow (loc);
+               }
+*/
+               public override bool AddResumePoint (ResumableStatement stmt, out int pc)
+               {
+                       pc = async_init.AddResumePoint (stmt);
+                       return true;
+               }
+
+               public override bool AddBreakOrigin (UsageVector vector, Location loc)
+               {
+                       Parent.AddBreakOrigin (vector, loc);
+                       return true;
+               }
+
+               public override bool AddContinueOrigin (UsageVector vector, Location loc)
+               {
+                       Parent.AddContinueOrigin (vector, loc);
+                       return true;
+               }
+
+               public override bool AddReturnOrigin (UsageVector vector, ExitStatement exit_stmt)
+               {
+                       Parent.AddReturnOrigin (vector, exit_stmt);
+                       return true;
+               }
+
+               public override bool AddGotoOrigin (UsageVector vector, Goto goto_stmt)
+               {
+                       Parent.AddGotoOrigin (vector, goto_stmt);
+                       return true;
+               }
+       }
+
        public class FlowBranchingException : FlowBranching
        {
                ExceptionStatement stmt;
@@ -906,15 +960,20 @@ namespace Mono.CSharp
                        return false;
                }
 
-               public override bool AddResumePoint (ResumableStatement stmt, Location loc, out int pc)
+               public override bool AddResumePoint (ResumableStatement stmt, out int pc)
                {
                        int errors = Report.Errors;
-                       Parent.AddResumePoint (this.stmt, loc, out pc);
+                       Parent.AddResumePoint (this.stmt, out pc);
                        if (errors == Report.Errors) {
                                if (finally_vector == null)
                                        this.stmt.AddResumePoint (stmt, pc);
-                               else
-                                       Report.Error (1625, loc, "Cannot yield in the body of a finally clause");
+                               else {
+                                       if (stmt is AwaitStatement) {
+                                               Report.Error (1984, stmt.loc, "The `await' operator cannot be used in the body of a finally clause");
+                                       } else {
+                                               Report.Error (1625, stmt.loc, "Cannot yield in the body of a finally clause");
+                                       }
+                               }
                        }
                        return true;
                }
index 2d8887ff943f996f55fc8f466078e37984127dbd..69ac4dec4f3ca9ec0d00f693e02255f3fd5caf34 100644 (file)
@@ -58,7 +58,7 @@ namespace Mono.CSharp
                        machine_initializer = bc.CurrentAnonymousMethod as T;
 
                        if (!bc.CurrentBranching.CurrentUsageVector.IsUnreachable)
-                               unwind_protect = bc.CurrentBranching.AddResumePoint (this, loc, out resume_pc);
+                               unwind_protect = bc.CurrentBranching.AddResumePoint (this, out resume_pc);
 
                        return true;
                }
@@ -609,7 +609,8 @@ namespace Mono.CSharp
                Label move_next_ok;
                Label iterator_body_end;
                protected Label move_next_error;
-               protected LocalBuilder skip_finally, current_pc;
+               LocalBuilder skip_finally;
+               LocalBuilder current_pc;
                List<ResumableStatement> resume_points;
 
                protected StateMachineInitializer (ParametersBlock block, TypeContainer host, TypeSpec returnType)
@@ -618,18 +619,35 @@ namespace Mono.CSharp
                        this.Host = host;
                }
 
+               #region Properties
+
                public Label BodyEnd {
                        get {
                                return iterator_body_end;
                        }
                }
 
+               public LocalBuilder CurrentPC
+               {
+                       get {
+                               return current_pc;
+                       }
+               }
+
+               public LocalBuilder SkipFinally {
+                       get {
+                               return skip_finally;
+                       }
+               }
+
                public override AnonymousMethodStorey Storey {
                        get {
                                return storey;
                        }
                }
 
+               #endregion
+
                public int AddResumePoint (ResumableStatement stmt)
                {
                        if (resume_points == null)
@@ -657,7 +675,6 @@ namespace Mono.CSharp
 
                        var ctx = CreateBlockContext (ec);
 
-                       ctx.StartFlowBranching (this, ec.CurrentBranching);
                        Block.Resolve (ctx);
 
                        //
@@ -774,7 +791,7 @@ namespace Mono.CSharp
                                EmitMoveNext_NoResumePoints (ec, block);
                                return;
                        }
-
+                       
                        current_pc = ec.GetTemporaryLocal (ec.BuiltinTypes.UInt);
                        ec.EmitThis ();
                        ec.Emit (OpCodes.Ldfld, storey.PC.Spec);
@@ -801,11 +818,15 @@ namespace Mono.CSharp
                                ec.Emit (OpCodes.Stloc, skip_finally);
                        }
 
+                       var async_init = this as AsyncInitializer;
+                       if (async_init != null)
+                               ec.BeginExceptionBlock ();
+
                        SymbolWriter.StartIteratorDispatcher (ec);
                        ec.Emit (OpCodes.Ldloc, current_pc);
                        ec.Emit (OpCodes.Switch, labels);
 
-                       ec.Emit (OpCodes.Br, move_next_error);
+                       ec.Emit (async_init != null ? OpCodes.Leave : OpCodes.Br, move_next_error);
                        SymbolWriter.EndIteratorDispatcher (ec);
 
                        ec.MarkLabel (labels[0]);
@@ -820,6 +841,16 @@ namespace Mono.CSharp
 
                        ec.MarkLabel (iterator_body_end);
 
+                       if (async_init != null) {
+                               var catch_value = LocalVariable.CreateCompilerGenerated (ec.Module.Compiler.BuiltinTypes.Exception, block, Location);
+
+                               ec.BeginCatchBlock (catch_value.Type);
+                               catch_value.EmitAssign (ec);
+
+                               ((AsyncTaskStorey) async_init.Storey).EmitSetException (ec, new LocalVariableReference (catch_value, Location));
+                               ec.EndExceptionBlock ();
+                       }
+
                        ec.EmitThis ();
                        ec.EmitInt ((int) IteratorStorey.State.After);
                        ec.Emit (OpCodes.Stfld, storey.PC.Spec);
@@ -827,7 +858,7 @@ namespace Mono.CSharp
                        EmitMoveNextEpilogue (ec);
 
                        ec.MarkLabel (move_next_error);
-
+                       
                        if (ReturnType.Kind != MemberKind.Void) {
                                ec.EmitInt (0);
                                ec.Emit (OpCodes.Ret);
@@ -900,14 +931,6 @@ namespace Mono.CSharp
                        this.type = method.ReturnType;
                }
 
-               public LocalBuilder SkipFinally {
-                       get { return skip_finally; }
-               }
-
-               public LocalBuilder CurrentPC {
-                   get { return current_pc; }
-               }
-
                public Block Container {
                        get { return OriginalMethod.Block; }
                }
@@ -976,6 +999,13 @@ namespace Mono.CSharp
                        ec.MarkLabel (resume_point);
                }
 
+               protected override BlockContext CreateBlockContext (ResolveContext rc)
+               {
+                       var bc = base.CreateBlockContext (rc);
+                       bc.StartFlowBranching (this, rc.CurrentBranching);
+                       return bc;
+               }
+
                public static void CreateIterator (IMethodData method, TypeContainer parent, Modifiers modifiers)
                {
                        bool is_enumerable;
index c73a54a10e89d08133d2d5148b456e19f02e3bb2..96acb4a4fe207f5021fdae70ce82beda7514a434 100644 (file)
@@ -194,7 +194,11 @@ namespace Mono.CSharp {
                {
                        if (statement != null) {
                                statement.EmitStatement (ec);
-                               ec.Emit (OpCodes.Ret);
+                               if (unwind_protect)
+                                       ec.Emit (OpCodes.Leave, ec.CreateReturnLabel ());
+                               else {
+                                       ec.Emit (OpCodes.Ret);
+                               }
                                return;
                        }
 
index 16e2740af8ae2ac92bb9382b95d7e1e5ec7dec61..130452b6da73410ce02f4cc0f9dcaa564e863d6e 100644 (file)
@@ -1630,11 +1630,6 @@ namespace Mono.CSharp {
                                        EmitContext ec = new EmitContext (this, ConstructorBuilder.GetILGenerator (), bc.ReturnType);
                                        ec.With (EmitContext.Options.ConstructorScope, true);
 
-                                       if (!ec.HasReturnLabel && bc.HasReturnLabel) {
-                                               ec.ReturnLabel = bc.ReturnLabel;
-                                               ec.HasReturnLabel = true;
-                                       }
-
                                        block.Emit (ec);
                                }
                        }
@@ -2033,10 +2028,6 @@ namespace Mono.CSharp {
                                BlockContext bc = new BlockContext (mc, block, method.ReturnType);
                                if (block.Resolve (null, bc, method)) {
                                        EmitContext ec = method.CreateEmitContext (MethodBuilder.GetILGenerator ());
-                                       if (!ec.HasReturnLabel && bc.HasReturnLabel) {
-                                               ec.ReturnLabel = bc.ReturnLabel;
-                                               ec.HasReturnLabel = true;
-                                       }
 
                                        block.Emit (ec);
                                }
index fb3f70fec48e005d5c7ff04341b9d2db91eb41d9..9420088039e644f803dfc4916dcf328bd738f537 100644 (file)
@@ -684,8 +684,6 @@ namespace Mono.CSharp {
                                return false;
 
                        unwind_protect = ec.CurrentBranching.AddReturnOrigin (ec.CurrentBranching.CurrentUsageVector, this);
-                       if (unwind_protect)
-                               ec.NeedReturnLabel ();
                        ec.CurrentBranching.CurrentUsageVector.Goto ();
                        return true;
                }
@@ -827,10 +825,7 @@ namespace Mono.CSharp {
                                        if (async_return != null) {
                                                async_return.EmitAssign (ec);
 
-                                               if (unwind_protect)
-                                                       throw new NotImplementedException ();
-
-                                               ec.Emit (OpCodes.Br, async_body.BodyEnd);
+                                               ec.Emit (unwind_protect ? OpCodes.Leave : OpCodes.Br, async_body.BodyEnd);
                                        }
 
                                        return;
@@ -841,7 +836,7 @@ namespace Mono.CSharp {
                        }
 
                        if (unwind_protect)
-                               ec.Emit (OpCodes.Leave, ec.ReturnLabel);
+                               ec.Emit (OpCodes.Leave, ec.CreateReturnLabel ());
                        else
                                ec.Emit (OpCodes.Ret);
                }
@@ -3018,8 +3013,6 @@ namespace Mono.CSharp {
 #if PRODUCTION
                        try {
 #endif
-                       if (ec.HasReturnLabel)
-                               ec.ReturnLabel = ec.DefineLabel ();
 
                        base.Emit (ec);
 
@@ -3960,8 +3953,9 @@ namespace Mono.CSharp {
        // Base class for statements that are implemented in terms of try...finally
        public abstract class ExceptionStatement : ResumableStatement
        {
+#if !STATIC
                bool code_follows;
-               Iterator iter;
+#endif
                List<ResumableStatement> resume_points;
                int first_resume_pc;
                protected Statement stmt;
@@ -3992,9 +3986,12 @@ namespace Mono.CSharp {
                {
                        EmitPreTryBody (ec);
 
+                       StateMachineInitializer state_machine = null;
                        if (resume_points != null) {
+                               state_machine = (StateMachineInitializer) ec.CurrentAnonymousMethod;
+
                                ec.EmitInt ((int) IteratorStorey.State.Running);
-                               ec.Emit (OpCodes.Stloc, iter.CurrentPC);
+                               ec.Emit (OpCodes.Stloc, state_machine.CurrentPC);
                        }
 
                        ec.BeginExceptionBlock ();
@@ -4004,7 +4001,7 @@ namespace Mono.CSharp {
 
                                // For normal control flow, we want to fall-through the Switch
                                // So, we use CurrentPC rather than the $PC field, and initialize it to an outside value above
-                               ec.Emit (OpCodes.Ldloc, iter.CurrentPC);
+                               ec.Emit (OpCodes.Ldloc, state_machine.CurrentPC);
                                ec.EmitInt (first_resume_pc);
                                ec.Emit (OpCodes.Sub);
 
@@ -4020,7 +4017,7 @@ namespace Mono.CSharp {
 
                        Label start_finally = ec.DefineLabel ();
                        if (resume_points != null) {
-                               ec.Emit (OpCodes.Ldloc, iter.SkipFinally);
+                               ec.Emit (OpCodes.Ldloc, state_machine.SkipFinally);
                                ec.Emit (OpCodes.Brfalse_S, start_finally);
                                ec.Emit (OpCodes.Endfinally);
                        }
@@ -4033,17 +4030,19 @@ namespace Mono.CSharp {
 
                public void SomeCodeFollows ()
                {
+#if !STATIC
                        code_follows = true;
+#endif
                }
 
                public override bool Resolve (BlockContext ec)
                {
+#if !STATIC
                        // System.Reflection.Emit automatically emits a 'leave' at the end of a try clause
                        // So, ensure there's some IL code after this statement.
                        if (!code_follows && resume_points == null && ec.CurrentBranching.CurrentUsageVector.IsUnreachable)
                                ec.NeedReturnLabel ();
-
-                       iter = ec.CurrentIterator;
+#endif
                        return true;
                }
 
@@ -4833,7 +4832,10 @@ namespace Mono.CSharp {
                public Block Block;
                public List<Catch> Specific;
                public Catch General;
-               bool inside_try_finally, code_follows;
+               bool inside_try_finally;
+#if !STATIC
+               bool code_follows;
+#endif
 
                public TryCatch (Block block, List<Catch> catch_clauses, Location l, bool inside_try_finally)
                {
@@ -4905,17 +4907,21 @@ namespace Mono.CSharp {
 
                        ec.EndFlowBranching ();
 
+#if !STATIC
                        // System.Reflection.Emit automatically emits a 'leave' at the end of a try/catch clause
                        // So, ensure there's some IL code after this statement
                        if (!inside_try_finally && !code_follows && ec.CurrentBranching.CurrentUsageVector.IsUnreachable)
                                ec.NeedReturnLabel ();
+#endif
 
                        return ok;
                }
 
                public void SomeCodeFollows ()
                {
+#if !STATIC
                        code_follows = true;
+#endif
                }
                
                protected override void DoEmit (EmitContext ec)
index 2e2d17064d2bfc3450f3879907e71dc8f3526755..708cace79dc4871ea6c17f7ba2d34bead19e2218 100644 (file)
@@ -310,9 +310,11 @@ namespace Mono.CSharp
                public readonly PredefinedMember<MethodSpec> ActivatorCreateInstance;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderCreate;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderSetResult;
+               public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderSetException;
                public readonly PredefinedMember<PropertySpec> AsyncTaskMethodBuilderTask;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderGenericCreate;
                public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderGenericSetResult;
+               public readonly PredefinedMember<MethodSpec> AsyncTaskMethodBuilderGenericSetException;
                public readonly PredefinedMember<PropertySpec> AsyncTaskMethodBuilderGenericTask;
                public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderCreate;
                public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderSetException;
@@ -366,6 +368,10 @@ namespace Mono.CSharp
                        AsyncTaskMethodBuilderSetResult = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilder,
                                MemberFilter.Method ("SetResult", 0, ParametersCompiled.EmptyReadOnlyParameters, btypes.Void));
 
+                       AsyncTaskMethodBuilderSetException = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilder,
+                               MemberFilter.Method ("SetException", 0,
+                               ParametersCompiled.CreateFullyResolved (btypes.Exception), btypes.Void));
+
                        AsyncTaskMethodBuilderTask = new PredefinedMember<PropertySpec> (module, types.AsyncTaskMethodBuilder,
                                MemberFilter.Property ("Task", null));
 
@@ -382,6 +388,10 @@ namespace Mono.CSharp
                                                                new TypeParameterSpec (0, null, SpecialConstraint.None, Variance.None, null)
                                                        }, false), btypes.Void));
 
+                       AsyncTaskMethodBuilderGenericSetException = new PredefinedMember<MethodSpec> (module, types.AsyncTaskMethodBuilderGeneric,
+                               MemberFilter.Method ("SetException", 0,
+                               ParametersCompiled.CreateFullyResolved (btypes.Exception), btypes.Void));
+
                        AsyncTaskMethodBuilderGenericTask = new PredefinedMember<PropertySpec> (module, types.AsyncTaskMethodBuilderGeneric,
                                MemberFilter.Property ("Task", null));
 
index bd72820d14245f088d8f63aa4466a2b05e9da7f6..d0283a75a050767a79a5077b7fb2a4b069ca1824 100644 (file)
@@ -657,7 +657,6 @@ class Tester : Base
        async Task<bool> NewArrayInitTest_6 ()
        {
                var a = new int[] { 2, 3, 2, 3, 5, 6, 7, 2, 4, await Task.Factory.StartNew (() => 5), 11, 23, 45 };
-               Console.WriteLine (a.Length);
                return a.Length == 13;
        }
        
diff --git a/mcs/tests/test-async-17.cs b/mcs/tests/test-async-17.cs
new file mode 100644 (file)
index 0000000..9d65ff7
--- /dev/null
@@ -0,0 +1,80 @@
+// Compiler options: -langversion:future
+
+using System;
+using System.Threading.Tasks;
+using System.Threading;
+using System.Reflection;
+using System.Linq;
+
+class Tester
+{
+       async Task<int> TestException_1 ()
+       {
+               await Task.Factory.StartNew (() => { throw new ApplicationException (); });
+               return 1;
+       }
+
+       async Task TestException_2 ()
+       {
+               await Task.Factory.StartNew (() => { throw new ApplicationException (); });
+       }
+
+       async Task TestException_3 ()
+       {
+               Func<Task> a = async () => await Task.Factory.StartNew (() => { throw new ApplicationException (); });
+               await a ();
+       }
+       
+       async Task<int> TestException_4 ()
+       {
+               try {
+                       await Task.Factory.StartNew (() => 5);
+               } finally {
+                       throw new ApplicationException ();
+               }
+       }
+       
+       static bool RunTest (MethodInfo test)
+       {
+               Console.Write ("Running test {0, -25}", test.Name);
+               try {
+                       Task t = test.Invoke (new Tester (), null) as Task;
+                       try {
+                               if (!Task.WaitAll (new[] { t }, 1000)) {
+                                       Console.WriteLine ("FAILED (Timeout)");
+                                       return false;
+                               }
+                       } catch (AggregateException) {
+                       }
+                       
+                       if (t.Status != TaskStatus.Faulted) {
+                               Console.WriteLine ("FAILED (Status={0})", t.Status);
+                               return false;
+                       }
+                       /*
+                       if (!(t.Exception.InnerException is ApplicationException)) {
+                               Console.WriteLine ("FAILED with wrong exception");
+                               return false;
+                       }
+                       */
+                       Console.WriteLine ("OK");
+                       return true;
+               } catch (Exception e) {
+                       Console.WriteLine ("FAILED");
+                       Console.WriteLine (e.ToString ());
+                       return false;
+               }
+       }
+
+       public static int Main ()
+       {
+               var tests = from test in typeof (Tester).GetMethods (BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)
+                                       where test.GetParameters ().Length == 0
+                                       orderby test.Name
+                                       select RunTest (test);
+
+               int failures = tests.Count (a => !a);
+               Console.WriteLine (failures + " tests failed");
+               return failures;
+       }       
+}
index a9493c8e7648391abeaeb606e9e5179a77ca8072..6ef4978d4761c7e05155c398da3e1e7256116f93 100644 (file)
         <size>30</size>
       </method>
       <method name="Int32 test19()">
-        <size>39</size>
+        <size>36</size>
       </method>
       <method name="Int32 test20()">
         <size>12</size>
         <size>17</size>
       </method>
       <method name="Void Test()">
-        <size>11</size>
+        <size>10</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 f()">
-        <size>18</size>
+        <size>16</size>
       </method>
       <method name="Void Main()">
         <size>33</size>
         <size>17</size>
       </method>
       <method name="Void f()">
-        <size>7</size>
+        <size>6</size>
       </method>
     </type>
   </test>
         <size>17</size>
       </method>
       <method name="Void f()">
-        <size>7</size>
+        <size>6</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>14</size>
+        <size>12</size>
       </method>
     </type>
   </test>
         <size>22</size>
       </method>
       <method name="Void f()">
-        <size>18</size>
+        <size>17</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 stuff()">
-        <size>15</size>
+        <size>13</size>
       </method>
       <method name="Int32 stuff2()">
-        <size>29</size>
+        <size>27</size>
       </method>
       <method name="Int32 stuff3()">
-        <size>29</size>
+        <size>27</size>
       </method>
       <method name="Void stuff4()">
-        <size>10</size>
+        <size>9</size>
       </method>
       <method name="Void stuff_finally()">
         <size>1</size>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>247</size>
+        <size>244</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 Main()">
-        <size>81</size>
+        <size>79</size>
       </method>
     </type>
   </test>
         <size>7</size>
       </method>
       <method name="Int32 test(Int32)">
-        <size>27</size>
+        <size>25</size>
       </method>
       <method name="Int32 Main()">
         <size>70</size>
         <size>7</size>
       </method>
       <method name="Void TestFunc()">
-        <size>2</size>
+        <size>1</size>
       </method>
       <method name="Void Main(System.String[])">
         <size>6</size>
     </type>
     <type name="Program+&lt;TestAsync&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>191</size>
+        <size>217</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="C+&lt;TestTask&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>141</size>
+        <size>167</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="C+&lt;TestTask2&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>141</size>
+        <size>167</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="C+&lt;TestTaskGeneric&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>148</size>
+        <size>174</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="A+&lt;Test1&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>219</size>
+        <size>245</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="A+&lt;Test2&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>140</size>
+        <size>166</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="A+&lt;Test3&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>132</size>
+        <size>158</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="C+&lt;TestTaskGeneric&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>161</size>
+        <size>187</size>
       </method>
       <method name="Int32 &lt;&gt;m__0()">
         <size>41</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>190</size>
+        <size>216</size>
       </method>
       <method name="Void &lt;&gt;m__5()">
         <size>38</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>190</size>
+        <size>216</size>
       </method>
       <method name="Void &lt;&gt;m__6()">
         <size>38</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async3">
       <method name="Void MoveNext()">
-        <size>171</size>
+        <size>197</size>
       </method>
       <method name="System.String &lt;&gt;m__7()">
         <size>44</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async4">
       <method name="Void MoveNext()">
-        <size>171</size>
+        <size>197</size>
       </method>
       <method name="Decimal &lt;&gt;m__8()">
         <size>44</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>159</size>
+        <size>185</size>
       </method>
       <method name="System.String &lt;&gt;m__4()">
         <size>44</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>152</size>
+        <size>178</size>
       </method>
       <method name="Void &lt;&gt;m__5()">
         <size>38</size>
     </type>
     <type name="Program+&lt;Main&gt;c__AnonStorey1+&lt;Main&gt;c__async4">
       <method name="Void MoveNext()">
-        <size>158</size>
+        <size>183</size>
       </method>
       <method name="Void &lt;&gt;m__6()">
         <size>55</size>
     </type>
     <type name="AsyncTypeInference+&lt;Main&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>176</size>
+        <size>202</size>
       </method>
       <method name="Int32 &lt;&gt;m__4()">
         <size>2</size>
     </type>
     <type name="AsyncTypeInference+&lt;Main&gt;c__async5">
       <method name="Void MoveNext()">
-        <size>176</size>
+        <size>202</size>
       </method>
       <method name="Int32 &lt;&gt;m__5()">
         <size>2</size>
     </type>
     <type name="AsyncTypeInference+&lt;Main&gt;c__async8">
       <method name="Void MoveNext()">
-        <size>135</size>
+        <size>161</size>
       </method>
       <method name="Void .ctor()">
         <size>36</size>
     </type>
     <type name="C+&lt;TestCompositionCall_1&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>304</size>
+        <size>330</size>
       </method>
       <method name="System.String &lt;&gt;m__1()">
         <size>13</size>
     </type>
     <type name="C+&lt;TestCompositionCall_2&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>218</size>
+        <size>246</size>
       </method>
       <method name="System.String &lt;&gt;m__3()">
         <size>6</size>
     </type>
     <type name="C+&lt;TestCompositionCall_3&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>289</size>
+        <size>318</size>
       </method>
       <method name="Byte &lt;&gt;m__4()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestCompositionPair_1&gt;c__async3">
       <method name="Void MoveNext()">
-        <size>178</size>
+        <size>204</size>
       </method>
       <method name="Int32 &lt;&gt;m__5()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestCompositionPair_2&gt;c__async4">
       <method name="Void MoveNext()">
-        <size>295</size>
+        <size>321</size>
       </method>
       <method name="Int32 &lt;&gt;m__6()">
         <size>9</size>
     </type>
     <type name="C+&lt;TestCompositionPair_3&gt;c__async5">
       <method name="Void MoveNext()">
-        <size>179</size>
+        <size>205</size>
       </method>
       <method name="Int32 &lt;&gt;m__8()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestCompositionPair_4&gt;c__async6">
       <method name="Void MoveNext()">
-        <size>428</size>
+        <size>456</size>
       </method>
       <method name="Int32 &lt;&gt;m__9()">
         <size>2</size>
     </type>
     <type name="G`1+&lt;TestStack_1&gt;c__async0[T]">
       <method name="Void MoveNext()">
-        <size>236</size>
+        <size>262</size>
       </method>
       <method name="Int32 &lt;&gt;m__0()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestStack_1&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>281</size>
+        <size>309</size>
       </method>
       <method name="Int32 &lt;&gt;m__1()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestStack_2&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>263</size>
+        <size>291</size>
       </method>
       <method name="Int32 &lt;&gt;m__2()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestStack_3&gt;c__async3">
       <method name="Void MoveNext()">
-        <size>435</size>
+        <size>464</size>
       </method>
       <method name="Int32 &lt;&gt;m__3()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestStack_4&gt;c__async4">
       <method name="Void MoveNext()">
-        <size>291</size>
+        <size>319</size>
       </method>
       <method name="Int32 &lt;&gt;m__4()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestStack_5&gt;c__async5">
       <method name="Void MoveNext()">
-        <size>269</size>
+        <size>297</size>
       </method>
       <method name="Int32 &lt;&gt;m__5()">
         <size>35</size>
     </type>
     <type name="C+&lt;TestNested_1&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>417</size>
+        <size>443</size>
       </method>
       <method name="Int32 &lt;&gt;m__0()">
         <size>9</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_1&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>321</size>
+        <size>347</size>
       </method>
       <method name="Boolean &lt;&gt;m__4()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_2&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>740</size>
+        <size>768</size>
       </method>
       <method name="Int32 &lt;&gt;m__6()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_3&gt;c__async2">
       <method name="Void MoveNext()">
-        <size>1082</size>
+        <size>1111</size>
       </method>
       <method name="Int32 &lt;&gt;m__A()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_4&gt;c__async3">
       <method name="Void MoveNext()">
-        <size>393</size>
+        <size>421</size>
       </method>
       <method name="Int32 &lt;&gt;m__F()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_5&gt;c__async4">
       <method name="Void MoveNext()">
-        <size>393</size>
+        <size>421</size>
       </method>
       <method name="Int32 &lt;&gt;m__11()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_6&gt;c__async5">
       <method name="Void MoveNext()">
-        <size>236</size>
+        <size>264</size>
       </method>
       <method name="Int64 &lt;&gt;m__13()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_7&gt;c__async6">
       <method name="Void MoveNext()">
-        <size>363</size>
+        <size>392</size>
       </method>
       <method name="Int32 &lt;&gt;m__14()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_8&gt;c__async7">
       <method name="Void MoveNext()">
-        <size>655</size>
+        <size>684</size>
       </method>
       <method name="Int32 &lt;&gt;m__15()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ArrayAccessTest_9&gt;c__async8">
       <method name="Void MoveNext()">
-        <size>1201</size>
+        <size>1230</size>
       </method>
       <method name="Int32 &lt;&gt;m__17()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;AssignTest_1&gt;c__async9">
       <method name="Void MoveNext()">
-        <size>202</size>
+        <size>228</size>
       </method>
       <method name="Int32 &lt;&gt;m__1E()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;AssignTest_2&gt;c__asyncA">
       <method name="Void MoveNext()">
-        <size>251</size>
+        <size>280</size>
       </method>
       <method name="Nullable`1 &lt;&gt;m__1F()">
         <size>10</size>
     </type>
     <type name="Tester+&lt;AssignTest_3&gt;c__asyncB">
       <method name="Void MoveNext()">
-        <size>350</size>
+        <size>376</size>
       </method>
       <method name="Int32 &lt;&gt;m__20()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;BinaryTest_1&gt;c__asyncC">
       <method name="Void MoveNext()">
-        <size>428</size>
+        <size>456</size>
       </method>
       <method name="Int32 &lt;&gt;m__22()">
         <size>9</size>
     </type>
     <type name="Tester+&lt;BinaryTest_2&gt;c__asyncD">
       <method name="Void MoveNext()">
-        <size>459</size>
+        <size>487</size>
       </method>
       <method name="Boolean &lt;&gt;m__25()">
         <size>16</size>
     </type>
     <type name="Tester+&lt;BinaryTest_3&gt;c__asyncE">
       <method name="Void MoveNext()">
-        <size>1095</size>
+        <size>1124</size>
       </method>
       <method name="Nullable`1 &lt;&gt;m__28()">
         <size>7</size>
     </type>
     <type name="Tester+&lt;BinaryTest_4&gt;c__asyncF">
       <method name="Void MoveNext()">
-        <size>808</size>
+        <size>837</size>
       </method>
       <method name="Nullable`1 &lt;&gt;m__2E()">
         <size>7</size>
     </type>
     <type name="Tester+&lt;CallTest_1&gt;c__async10">
       <method name="Void MoveNext()">
-        <size>423</size>
+        <size>449</size>
       </method>
       <method name="Int32 &lt;&gt;m__32()">
         <size>9</size>
     </type>
     <type name="Tester+&lt;CallTest_2&gt;c__async11">
       <method name="Void MoveNext()">
-        <size>246</size>
+        <size>274</size>
       </method>
       <method name="Int32 &lt;&gt;m__35()">
         <size>9</size>
     </type>
     <type name="Tester+&lt;CallTest_3&gt;c__async12">
       <method name="Void MoveNext()">
-        <size>216</size>
+        <size>244</size>
       </method>
       <method name="Int32 &lt;&gt;m__36()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;CallTest_4&gt;c__async13">
       <method name="Void MoveNext()">
-        <size>206</size>
+        <size>234</size>
       </method>
       <method name="E &lt;&gt;m__37()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;CallTest_5&gt;c__async14">
       <method name="Void MoveNext()">
-        <size>272</size>
+        <size>298</size>
       </method>
       <method name="Int32 &lt;&gt;m__38()">
         <size>18</size>
     </type>
     <type name="Tester+&lt;CastTest_1&gt;c__async15">
       <method name="Void MoveNext()">
-        <size>225</size>
+        <size>253</size>
       </method>
       <method name="Decimal &lt;&gt;m__39()">
         <size>8</size>
     </type>
     <type name="Tester+&lt;CastTest_2&gt;c__async16">
       <method name="Void MoveNext()">
-        <size>207</size>
+        <size>235</size>
       </method>
       <method name="Tester &lt;&gt;m__3A()">
         <size>7</size>
     </type>
     <type name="Tester+&lt;CoalescingTest_1&gt;c__async17">
       <method name="Void MoveNext()">
-        <size>337</size>
+        <size>365</size>
       </method>
       <method name="System.String &lt;&gt;m__3B()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;CoalescingTest_2&gt;c__async18">
       <method name="Void MoveNext()">
-        <size>349</size>
+        <size>378</size>
       </method>
       <method name="Nullable`1 &lt;&gt;m__3D()">
         <size>10</size>
     </type>
     <type name="Tester+&lt;ConditionalTest_2&gt;c__async1A">
       <method name="Void MoveNext()">
-        <size>315</size>
+        <size>341</size>
       </method>
       <method name="Int32 &lt;&gt;m__3F()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ConditionalTest_3&gt;c__async1B">
       <method name="Void MoveNext()">
-        <size>333</size>
+        <size>361</size>
       </method>
       <method name="Boolean &lt;&gt;m__41()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;ConditionalTest_4&gt;c__async1C">
       <method name="Void MoveNext()">
-        <size>222</size>
+        <size>250</size>
       </method>
       <method name="Int32 &lt;&gt;m__43()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;DelegateInvoke_4&gt;c__async1D">
       <method name="Void MoveNext()">
-        <size>250</size>
+        <size>278</size>
       </method>
       <method name="Int32 &lt;&gt;m__44(Int32)">
         <size>4</size>
     </type>
     <type name="Tester+&lt;EventInvoke_1&gt;c__async1E">
       <method name="Void MoveNext()">
-        <size>196</size>
+        <size>222</size>
       </method>
       <method name="System.Action &lt;&gt;m__46()">
         <size>15</size>
     </type>
     <type name="Tester+&lt;FieldTest_1&gt;c__async1F">
       <method name="Void MoveNext()">
-        <size>521</size>
+        <size>549</size>
       </method>
       <method name="Int32 &lt;&gt;m__48()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;IndexerTest_1&gt;c__async20">
       <method name="Void MoveNext()">
-        <size>204</size>
+        <size>230</size>
       </method>
       <method name="Int32 &lt;&gt;m__4A()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;IndexerTest_2&gt;c__async21">
       <method name="Void MoveNext()">
-        <size>321</size>
+        <size>347</size>
       </method>
       <method name="Int32 &lt;&gt;m__4B()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;IndexerTest_3&gt;c__async22">
       <method name="Void MoveNext()">
-        <size>350</size>
+        <size>378</size>
       </method>
       <method name="Int32 &lt;&gt;m__4D()">
         <size>18</size>
     </type>
     <type name="Tester+&lt;IndexerTest_4&gt;c__async23">
       <method name="Void MoveNext()">
-        <size>378</size>
+        <size>406</size>
       </method>
       <method name="Int32 &lt;&gt;m__4F()">
         <size>18</size>
     </type>
     <type name="Tester+&lt;IndexerTest_5&gt;c__async24">
       <method name="Void MoveNext()">
-        <size>481</size>
+        <size>510</size>
       </method>
       <method name="Int32 &lt;&gt;m__51()">
         <size>18</size>
     </type>
     <type name="Tester+&lt;IndexerTest_6&gt;c__async25">
       <method name="Void MoveNext()">
-        <size>537</size>
+        <size>565</size>
       </method>
       <method name="Int32 &lt;&gt;m__53()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;IndexerTest_7&gt;c__async26">
       <method name="Void MoveNext()">
-        <size>235</size>
+        <size>264</size>
       </method>
       <method name="Int32 &lt;&gt;m__56()">
         <size>18</size>
     </type>
     <type name="Tester+&lt;IsTest_1&gt;c__async27">
       <method name="Void MoveNext()">
-        <size>219</size>
+        <size>247</size>
       </method>
       <method name="Tester &lt;&gt;m__57()">
         <size>6</size>
     </type>
     <type name="Tester+&lt;IsTest_2&gt;c__async28">
       <method name="Void MoveNext()">
-        <size>211</size>
+        <size>240</size>
       </method>
       <method name="Nullable`1 &lt;&gt;m__58()">
         <size>7</size>
     </type>
     <type name="Tester+&lt;LogicalUserOperator_1&gt;c__async29">
       <method name="Void MoveNext()">
-        <size>370</size>
+        <size>398</size>
       </method>
       <method name="Base &lt;&gt;m__59()">
         <size>6</size>
     </type>
     <type name="Tester+&lt;LogicalUserOperator_2&gt;c__async2A">
       <method name="Void MoveNext()">
-        <size>271</size>
+        <size>299</size>
       </method>
       <method name="Base &lt;&gt;m__5B()">
         <size>6</size>
     </type>
     <type name="Tester+&lt;LogicalUserOperator_3&gt;c__async2B">
       <method name="Void MoveNext()">
-        <size>369</size>
+        <size>397</size>
       </method>
       <method name="Base &lt;&gt;m__5C()">
         <size>6</size>
     </type>
     <type name="Tester+&lt;NewTest_1&gt;c__async2C">
       <method name="Void MoveNext()">
-        <size>232</size>
+        <size>260</size>
       </method>
       <method name="Int32 &lt;&gt;m__5E()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;NewTest_2&gt;c__async2D">
       <method name="Void MoveNext()">
-        <size>334</size>
+        <size>362</size>
       </method>
       <method name="Int32 &lt;&gt;m__5F()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;NewInitTest_1&gt;c__async2E">
       <method name="Void MoveNext()">
-        <size>1019</size>
+        <size>1047</size>
       </method>
       <method name="Int32 &lt;&gt;m__61()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;NewInitTest_2&gt;c__async2F">
       <method name="Void MoveNext()">
-        <size>738</size>
+        <size>767</size>
       </method>
       <method name="System.String &lt;&gt;m__67()">
         <size>6</size>
     </type>
     <type name="Tester+&lt;NewArrayInitTest_1&gt;c__async30">
       <method name="Void MoveNext()">
-        <size>212</size>
+        <size>240</size>
       </method>
       <method name="Int32 &lt;&gt;m__6B()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;NewArrayInitTest_2&gt;c__async31">
       <method name="Void MoveNext()">
-        <size>334</size>
+        <size>362</size>
       </method>
       <method name="Int32 &lt;&gt;m__6C()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;NewArrayInitTest_3&gt;c__async32">
       <method name="Void MoveNext()">
-        <size>232</size>
+        <size>260</size>
       </method>
       <method name="Byte &lt;&gt;m__6E()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;NewArrayInitTest_4&gt;c__async33">
       <method name="Void MoveNext()">
-        <size>420</size>
+        <size>448</size>
       </method>
       <method name="UInt16 &lt;&gt;m__6F()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;NewArrayInitTest_5&gt;c__async34">
       <method name="Void MoveNext()">
-        <size>250</size>
+        <size>278</size>
       </method>
       <method name="S &lt;&gt;m__71()">
         <size>18</size>
     </type>
     <type name="Tester+&lt;NewArrayInitTest_6&gt;c__async35">
       <method name="Void MoveNext()">
-        <size>265</size>
+        <size>280</size>
       </method>
       <method name="Int32 &lt;&gt;m__72()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;PropertyTest_1&gt;c__async36">
       <method name="Void MoveNext()">
-        <size>201</size>
+        <size>227</size>
       </method>
       <method name="Int32 &lt;&gt;m__73()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;PropertyTest_2&gt;c__async37">
       <method name="Void MoveNext()">
-        <size>267</size>
+        <size>295</size>
       </method>
       <method name="Int32 &lt;&gt;m__74()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;PropertyTest_3&gt;c__async38">
       <method name="Void MoveNext()">
-        <size>630</size>
+        <size>659</size>
       </method>
       <method name="Int32 &lt;&gt;m__75()">
         <size>3</size>
     </type>
     <type name="Tester+&lt;StringConcatTest_1&gt;c__async39">
       <method name="Void MoveNext()">
-        <size>441</size>
+        <size>469</size>
       </method>
       <method name="System.String &lt;&gt;m__78()">
         <size>6</size>
     </type>
     <type name="Tester+&lt;UnaryTest_1&gt;c__async3A">
       <method name="Void MoveNext()">
-        <size>212</size>
+        <size>240</size>
       </method>
       <method name="Int32 &lt;&gt;m__7B()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;UnaryTest_2&gt;c__async3B">
       <method name="Void MoveNext()">
-        <size>311</size>
+        <size>340</size>
       </method>
       <method name="Nullable`1 &lt;&gt;m__7C()">
         <size>7</size>
     </type>
     <type name="Tester+&lt;UnaryTest_3&gt;c__async3C">
       <method name="Void MoveNext()">
-        <size>347</size>
+        <size>376</size>
       </method>
       <method name="Int32 &lt;&gt;m__7D()">
         <size>2</size>
     </type>
     <type name="C+&lt;TestResult&gt;c__async0">
       <method name="Void MoveNext()">
-        <size>191</size>
+        <size>217</size>
       </method>
       <method name="Int32 &lt;&gt;m__1()">
         <size>2</size>
     </type>
     <type name="C+&lt;Main&gt;c__async1">
       <method name="Void MoveNext()">
-        <size>202</size>
+        <size>228</size>
       </method>
       <method name="Int32 &lt;&gt;m__2()">
         <size>2</size>
     </type>
     <type name="Tester+&lt;NewInitTestGen&gt;c__async0`1[T]">
       <method name="Void MoveNext()">
-        <size>272</size>
+        <size>301</size>
       </method>
       <method name="Int32 &lt;&gt;m__0()">
         <size>3</size>
       </method>
     </type>
   </test>
+  <test name="test-async-17.cs">
+    <type name="Tester">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] TestException_1()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task TestException_2()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task TestException_3()">
+        <size>27</size>
+      </method>
+      <method name="Boolean RunTest(System.Reflection.MethodInfo)">
+        <size>175</size>
+      </method>
+      <method name="Int32 Main()">
+        <size>179</size>
+      </method>
+      <method name="Boolean &lt;Main&gt;m__0(System.Reflection.MethodInfo)">
+        <size>12</size>
+      </method>
+      <method name="System.String &lt;Main&gt;m__1(System.Reflection.MethodInfo)">
+        <size>7</size>
+      </method>
+      <method name="Boolean &lt;Main&gt;m__2(System.Reflection.MethodInfo)">
+        <size>7</size>
+      </method>
+      <method name="Boolean &lt;Main&gt;m__3(Boolean)">
+        <size>5</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;TestException_1&gt;c__async0">
+      <method name="Void MoveNext()">
+        <size>203</size>
+      </method>
+      <method name="Void &lt;&gt;m__4()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>36</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;TestException_2&gt;c__async1">
+      <method name="Void MoveNext()">
+        <size>195</size>
+      </method>
+      <method name="Void &lt;&gt;m__5()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>36</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;TestException_3&gt;c__async2">
+      <method name="Void MoveNext()">
+        <size>202</size>
+      </method>
+      <method name="System.Threading.Tasks.Task &lt;&gt;m__6()">
+        <size>27</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>36</size>
+      </method>
+    </type>
+    <type name="Tester">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] TestException_4()">
+        <size>27</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;TestException_4&gt;c__async3">
+      <method name="Void MoveNext()">
+        <size>233</size>
+      </method>
+      <method name="Int32 &lt;&gt;m__8()">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>36</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;TestException_3&gt;c__async2+&lt;TestException_3&gt;c__async4">
+      <method name="Void MoveNext()">
+        <size>195</size>
+      </method>
+      <method name="Void &lt;&gt;m__7()">
+        <size>6</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>36</size>
+      </method>
+    </type>
+  </test>
   <test name="test-cls-00.cs">
     <type name="CLSCLass_6">
       <method name="Void .ctor()">
index 8227c1cec0b57d5a11cdc52049731185b1032a5b..0d4dc93797967121ff1e82cbeb5fd56e590c8292 100644 (file)
@@ -206,6 +206,7 @@ class MakeBundle {
                        string prog = null;
 
                        tc.WriteLine ("/* This source code was produced by mkbundle, do not edit */");
+                       tc.WriteLine ("#include <mono/metadata/mono-config.h>");
                        tc.WriteLine ("#include <mono/metadata/assembly.h>\n");
 
                        if (compress) {
index b328319953bd43bd30ec6eb82c0b58c4532f7cc8..4a737b26637ee1c9f29ba081176c1f92c869d14a 100644 (file)
 
 static const DateTimeFormatEntry datetime_format_entries [] = {
        {1, 24, 37, 46, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37},{357,24},{370,56},{376,46}},
-       {387, 409, 422, 438, 370, 447, 457, 465, 468, {471, 484, 505, 520, 531, 550, 561}, {574, 582, 590, 596, 602, 612, 620}, {628, 641, 658, 667, 678, 685, 692, 699, 712, 731, 748, 763, 343}, {780, 786, 658, 794, 678, 685, 692, 802, 810, 818, 826, 836, 343}, 0, 1, 344, 346, {348,844,422},{357,409},{370},{376,438}},
-       {853, 876, 888, 376, 370, 447, 457, 465, 468, {897, 906, 914, 922, 931, 938, 948}, {957, 961, 965, 969, 973, 977, 981}, {985, 991, 998, 1004, 1010, 1015, 1020, 1027, 1033, 1042, 1050, 1059, 343}, {1068, 1073, 998, 1078, 1010, 1015, 1083, 1088, 1092, 1097, 1102, 1107, 343}, 0, 0, 344, 346, {348,888},{357,876},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1356, 1379, 1392, 1399, 1409, 447, 1414, 1422, 1427, {1432, 1440, 1450, 1458, 1466, 1475, 1482}, {1489, 1492, 1495, 1499, 1502, 1506, 1510}, {1513, 1519, 1525, 1533, 1539, 1547, 1555, 1565, 1571, 1579, 1587, 1596, 343}, {1605, 1607, 1610, 1614, 1617, 1619, 1622, 1626, 1631, 1634, 1636, 1639, 343}, 0, 1, 344, 346, {348,1392},{357,1379},{370,1409},{376,1399}},
-       {1643, 1664, 1676, 438, 370, 447, 1687, 465, 468, {1696, 1704, 1711, 1719, 1726, 1734, 1741}, {1749, 1754, 1758, 1762, 1766, 1770, 1774}, {1779, 1786, 1794, 1800, 1806, 1810, 1815, 1820, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,1907,1676},{357,1664},{370},{376,438}},
-       {1916, 1379, 1938, 438, 370, 447, 1414, 1949, 1955, {1962, 1970, 1977, 1986, 1995, 2006, 2014}, {2022, 2025, 2028, 2031, 2034, 2037, 2040}, {2043, 2050, 2058, 2064, 2070, 2074, 2079, 2084, 2091, 2101, 2109, 2118, 343}, {2127, 2131, 2135, 2139, 2070, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 343}, 0, 1, 344, 346, {348,844,1938},{357,1379},{370},{376,438}},
-       {2171, 409, 37, 2195, 56, 447, 457, 2206, 2211, {2216, 2231, 2246, 2257, 2272, 2285, 2304}, {2319, 2326, 2333, 2340, 2347, 2354, 2361}, {2368, 2389, 2412, 2427, 2444, 2455, 2470, 2485, 2504, 2527, 2546, 2565, 343}, {2586, 2593, 2600, 2607, 2614, 2621, 2630, 2639, 2646, 2653, 2660, 2667, 343}, 0, 1, 344, 346, {348,2674,37},{357,409},{370,56},{376,2685,2195}},
-       {2697, 2728, 2748, 2195, 2755, 447, 2763, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748},{2728,2728,2921,2935,2955},{2755,2755,2970,1409,370},{2195,2195,2979,2991,438}},
-       {2999, 3033, 3055, 2979, 370, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055},{357,3033},{370},{376,2979}},
-       {3281, 3306, 3323, 2991, 370, 3332, 3345, 465, 468, {3357, 3367, 3377, 3385, 3397, 3405, 3415}, {3424, 3427, 3430, 3433, 3436, 3439, 3442}, {3445, 3454, 3463, 3473, 3482, 3491, 3500, 3510, 3517, 3525, 3533, 3543, 343}, {3552, 3558, 3564, 3571, 3577, 3583, 3589, 3596, 3600, 3605, 3610, 3617, 343}, 0, 1, 344, 346, {348,3323},{357,3306},{370},{376,2991}},
-       {3623, 3649, 888, 438, 370, 447, 74, 465, 468, {3666, 3675, 3681, 3687, 3696, 3702, 3711}, {3718, 3723, 3728, 3733, 3738, 3743, 3748}, {3753, 3761, 3770, 3775, 3781, 3785, 3790, 3798, 3804, 3814, 1050, 3822, 343}, {3832, 3838, 3770, 3845, 3781, 3785, 3850, 3798, 3856, 1097, 1102, 3862, 343}, 0, 0, 344, 346, {888,3868,3273},{357,876,3649},{370},{376,438}},
-       {3878, 876, 2674, 438, 370, 447, 74, 465, 468, {3899, 3917, 3931, 3949, 3967, 3985, 4001}, {4008, 4011, 4014, 4017, 4020, 4023, 4026}, {4029, 4040, 4053, 4060, 4071, 4078, 4087, 4096, 4109, 4122, 4137, 4150, 343}, {4161, 4168, 4053, 4175, 4071, 4182, 4189, 4196, 4203, 4210, 4217, 4224, 343}, 0, 0, 344, 346, {348,888,2674},{357,876},{370},{376,438}},
-       {4231, 4253, 4267, 2991, 1409, 4281, 4292, 4300, 4303, {4306, 4316, 4324, 4329, 4336, 4349, 4357}, {1617, 4365, 4367, 4369, 4373, 4376, 4378}, {4382, 4390, 4399, 4408, 4417, 4424, 4432, 4440, 4450, 4461, 1845, 1854, 343}, {4470, 4475, 4481, 4488, 4494, 4500, 4506, 4512, 4517, 4524, 1102, 4529, 343}, 0, 1, 344, 346, {348,4534,4267},{357,4253},{370,1409},{376,1399,2991}},
-       {1916, 1379, 3323, 438, 370, 447, 1414, 465, 468, {4546, 4557, 4568, 4582, 4596, 4608, 4620}, {4632, 4636, 4641, 4646, 4651, 4655, 4660}, {4664, 4672, 3770, 4681, 4688, 4693, 4700, 4707, 1827, 4461, 4715, 4725, 343}, {1863, 1867, 1871, 1875, 4688, 4734, 4739, 4744, 1891, 1895, 4750, 4755, 343}, 0, 0, 344, 346, {348,3323},{357,1379},{370},{376,438}},
-       {4759, 409, 888, 376, 370, 447, 74, 4783, 4786, {4789, 4798, 4806, 4815, 4826, 4835, 4844}, {3148, 3152, 1871, 4851, 4855, 4859, 4863}, {4867, 4875, 3188, 4884, 4891, 4898, 4905, 3211, 4912, 4922, 1050, 4930, 343}, {4939, 1867, 1871, 1875, 4943, 4947, 4951, 3261, 4955, 4959, 1899, 3269, 343}, 0, 1, 344, 346, {348,888},{357,409},{370},{376}},
-       {4963, 4993, 5015, 2991, 1409, 5026, 5042, 5055, 5062, {5069, 5079, 5089, 5099, 5109, 5119, 5129}, {1238, 5139, 5143, 5147, 5151, 5155, 5159}, {5163, 5168, 5173, 5178, 5183, 5188, 5193, 5198, 5203, 5208, 5214, 5220, 343}, {5226, 5228, 5230, 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 343}, 0, 0, 344, 346, {5015,5015,348,5253,5260,5269,5288,5305},{4993,4993,5324,5348,5375},{1409,1409,370,5404,5412},{2991,438,5421,5432}},
-       {5444, 5497, 5524, 5533, 5559, 5577, 5594, 5608, 5615, {5622, 5632, 5642, 5652, 5662, 5672, 5682}, {5692, 5696, 5700, 5704, 5708, 5712, 5716}, {5720, 5725, 5730, 5735, 5740, 5745, 5750, 5755, 5760, 5765, 5771, 5777, 343}, {5720, 5725, 5730, 5735, 5740, 5745, 5750, 5755, 5760, 5765, 5771, 5777, 343}, 0, 0, 344, 346, {348,5524},{357,5497},{370,5559},{376,5533}},
-       {5783, 876, 5805, 1399, 1409, 447, 74, 465, 468, {5812, 5819, 5827, 5835, 5844, 5854, 5862}, {5871, 3427, 5874, 5877, 5880, 5883, 5886}, {5889, 5897, 5906, 1800, 5912, 1810, 1815, 5916, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 5925, 1875, 5912, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,5805},{357,876},{370,1409},{376,1399}},
-       {5929, 1379, 844, 5953, 5964, 447, 1414, 465, 468, {1696, 1704, 1711, 1719, 1726, 1734, 1741}, {5970, 3427, 3430, 5974, 3436, 5977, 5980}, {1779, 1786, 3770, 1800, 3781, 1810, 1815, 1820, 1827, 1837, 1845, 4725, 343}, {1863, 1867, 1871, 1875, 3781, 1879, 1883, 1887, 1891, 1895, 1899, 4755, 343}, 0, 1, 344, 346, {348,844},{357,1379},{370,5964},{376,5953}},
-       {5984, 876, 6005, 438, 370, 447, 74, 465, 468, {6016, 6026, 6040, 6047, 6054, 6063, 1482}, {6071, 6073, 6076, 6079, 6083, 6086, 2022}, {6089, 6098, 6103, 6110, 1806, 6120, 6129, 6136, 6146, 6156, 1587, 6169, 343}, {6179, 6183, 1871, 6187, 1806, 6191, 6195, 6199, 6203, 6207, 6212, 6216, 343}, 0, 1, 344, 346, {348,5524,6005},{357,876},{370},{376,438}},
-       {6220, 3033, 1676, 376, 370, 3066, 3071, 465, 468, {3093, 6253, 6267, 6280, 6293, 6306, 3140}, {3148, 6318, 6322, 6326, 6330, 6334, 3169}, {6338, 6346, 6356, 1004, 6363, 6368, 6374, 3211, 6380, 6389, 6397, 6406, 343}, {1863, 6415, 1871, 3253, 3781, 1879, 1883, 3261, 4955, 6419, 1899, 6423, 343}, 0, 0, 344, 346, {348,1676},{357,3033},{370},{376}},
-       {5984, 876, 1938, 438, 370, 447, 74, 465, 468, {6427, 6437, 6442, 6449, 6458, 6462, 6469}, {6480, 6482, 6484, 2031, 6487, 1617, 6489}, {6491, 6500, 6510, 6517, 3781, 6525, 6531, 1820, 6537, 6548, 6558, 6568, 343}, {6578, 2131, 2909, 2139, 2070, 6582, 6586, 2151, 2155, 2913, 2163, 2917, 343}, 0, 1, 344, 346, {348,1938},{357,876},{370},{376,438}},
-       {6590, 6616, 1938, 2991, 1409, 6634, 74, 465, 468, {6650, 6673, 505, 6696, 6707, 6722, 6737}, {6752, 6757, 6762, 6767, 6772, 6777, 6782}, {6787, 6800, 6815, 6824, 6837, 6844, 6853, 6862, 6875, 6892, 6907, 6920, 343}, {6935, 6942, 6949, 6956, 678, 6963, 6970, 6977, 6984, 6991, 6998, 7005, 343}, 0, 1, 344, 346, {348,844,1938},{357,6616},{370,1409},{376,1399,2991}},
-       {7012, 7034, 3323, 2991, 370, 4281, 1146, 465, 468, {7048, 7057, 7069, 7076, 7084, 7094, 7100}, {7107, 7111, 7115, 7119, 7123, 7128, 7132}, {7136, 7146, 7155, 7163, 7171, 7179, 7186, 7193, 7201, 1587, 7207, 7215, 343}, {7224, 7228, 7232, 7237, 7241, 6195, 7245, 7249, 7253, 6212, 7257, 7261, 343}, 0, 1, 344, 346, {348,7265,3323},{357,7034},{370},{376,2991}},
-       {7276, 1379, 7297, 2991, 1409, 447, 1414, 465, 468, {7308, 7316, 7325, 7332, 7339, 7348, 7355}, {7362, 7365, 7368, 7371, 7374, 7378, 2022}, {4382, 4390, 7381, 4681, 7387, 4734, 4739, 1820, 1827, 4461, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 7387, 4734, 4739, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,3323,7297},{357,1379},{370,1409},{376,1399,2991}},
-       {7392, 409, 6005, 7416, 7427, 447, 457, 7434, 7437, {7440, 7447, 7456, 7465, 7477, 7485, 7494}, {7504, 7508, 2909, 7513, 7518, 7522, 7526}, {7530, 7536, 3770, 7543, 1806, 7549, 7557, 7564, 7570, 7578, 7584, 7592, 343}, {2127, 7600, 2909, 7604, 7608, 7612, 7616, 7620, 7526, 7624, 7628, 7633, 343}, 0, 1, 344, 346, {348,5524,6005},{357,409},{370,7427},{376,7637,7416}},
-       {7649, 7677, 6005, 5953, 5964, 447, 74, 7694, 7697, {7700, 7708, 7716, 1719, 1726, 1734, 7723}, {7731, 7735, 3430, 5974, 3436, 5977, 7739}, {5889, 5897, 3770, 1800, 1806, 1810, 1815, 7743, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,6005},{357,7677},{370,5964},{376,5953}},
-       {7751, 876, 37, 2991, 1409, 447, 74, 7772, 7803, {7834, 7865, 7893, 7921, 7940, 7974, 7999}, {8024, 8032, 8037, 8042, 8047, 8055, 8060}, {8065, 8084, 8115, 8134, 8153, 8175, 8200, 8222, 8244, 8266, 8285, 8313, 343}, {8335, 8344, 8353, 8365, 8377, 8386, 8398, 8407, 8416, 8425, 8434, 8443, 343}, 0, 0, 344, 346, {348,37},{357,876},{370,1409},{376,8452,2991}},
-       {8492, 8519, 1938, 438, 370, 447, 457, 465, 468, {8537, 8543, 8553, 8559, 8570, 8580, 8585}, {8595, 8599, 8603, 8607, 8612, 8616, 8620}, {8624, 8629, 8636, 8641, 8647, 8654, 8662, 8669, 8678, 8685, 8690, 8697, 343}, {8705, 8709, 2909, 8714, 2878, 8718, 8722, 8726, 8731, 8735, 8739, 8743, 343}, 0, 1, 344, 346, {348,1938},{357,8519},{370},{376,438}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 465, 468, {8747, 8754, 8760, 8767, 8772, 8778, 8784}, {8790, 8794, 8798, 8802, 8806, 8810, 8814}, {8818, 8826, 8835, 2064, 8841, 2074, 2079, 8845, 2091, 2101, 2109, 8853, 343}, {2127, 2131, 2909, 2139, 8841, 2143, 2147, 8862, 2155, 2159, 2163, 8866, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {8870, 876, 1938, 2991, 370, 8890, 74, 465, 468, {8906, 8919, 8938, 8955, 8968, 8981, 8997}, {9010, 6757, 6762, 6767, 6772, 6777, 6782}, {9015, 9026, 9039, 9054, 9067, 9080, 9093, 9104, 9117, 9132, 9145, 9164, 343}, {9177, 9184, 9191, 9198, 9207, 9216, 9225, 9232, 9241, 9248, 9257, 9266, 343}, 0, 1, 344, 346, {348,844,1938},{357,876},{370},{376,2991}},
-       {9275, 876, 1392, 5953, 5964, 447, 74, 465, 468, {9298, 9313, 9334, 9349, 9362, 9375, 9390}, {9403, 9408, 9413, 9418, 9423, 9428, 9433}, {9438, 9455, 9464, 9479, 678, 9496, 9511, 9524, 9539, 9556, 9577, 9594, 343}, {9609, 9184, 9616, 9623, 678, 9630, 9637, 9644, 9241, 9651, 9658, 9665, 343}, 0, 1, 344, 346, {348,1392},{357,876},{370,5964},{376,5953}},
-       {9672, 9694, 3323, 2991, 1409, 447, 1687, 465, 468, {9708, 9716, 9727, 9733, 9739, 9748, 1482}, {7107, 7111, 1766, 9754, 7123, 7128, 9758}, {1779, 1786, 7381, 1800, 1806, 9762, 9768, 9774, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 9781, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,9785,3323},{357,9694},{370,1409},{376,1399,2991}},
-       {8870, 876, 9792, 2991, 1409, 447, 9802, 465, 468, {9810, 9821, 9832, 9843, 9854, 9865, 9871}, {4376, 9880, 9882, 4367, 6071, 9884, 6482}, {9886, 9894, 9903, 9910, 3781, 9917, 9923, 1820, 1827, 9929, 1845, 9938, 343}, {9948, 9953, 9903, 1875, 3781, 9917, 9923, 1887, 9959, 1895, 1899, 9964, 343}, 0, 1, 344, 346, {348,844,9792},{357,876},{370,1409},{376,1399,2991}},
-       {9969, 9998, 4534, 2991, 370, 10019, 1414, 465, 468, {10037, 10048, 10058, 10067, 10078, 10090, 10101}, {10111, 4376, 10114, 9882, 10116, 10118, 6489}, {10121, 10131, 1794, 10142, 10151, 10157, 10165, 10173, 10181, 10192, 10201, 10211, 343}, {2127, 2131, 2909, 2139, 2070, 10221, 10226, 2151, 2155, 2159, 2163, 2917, 343}, 0, 1, 344, 346, {348,10231,4534},{357,9998},{370},{376,2991}},
-       {10238, 10271, 7265, 376, 370, 10293, 10308, 465, 468, {10320, 10332, 10344, 10356, 10370, 10385, 10398}, {10412, 10415, 10418, 10421, 10424, 6073, 7374}, {10427, 10434, 10442, 10447, 10458, 10468, 10478, 10485, 10497, 10506, 10513, 10524, 343}, {10534, 10538, 10542, 10546, 10550, 10554, 10558, 10562, 10566, 10570, 10574, 10578, 343}, 0, 1, 344, 346, {348,7265},{357,10271},{370},{376}},
-       {10582, 876, 10606, 2979, 370, 447, 74, 10615, 10622, {10629, 10645, 10658, 10674, 10691, 10709, 10718}, {10727, 10731, 10735, 10739, 10743, 10747, 10751}, {10755, 10768, 229, 10779, 10790, 10795, 10804, 10815, 10822, 10837, 10848, 10861, 343}, {10874, 10881, 10888, 10895, 10902, 10909, 10916, 10815, 10923, 10930, 10937, 10944, 343}, 0, 0, 344, 346, {348,10951,10606},{357,876},{370},{376,10961,2979}},
-       {10974, 409, 2674, 2195, 370, 447, 457, 10998, 11001, {11004, 11017, 11027, 11036, 11046, 11057, 11068}, {11080, 11083, 11088, 11093, 11098, 11103, 11108}, {11113, 11126, 11137, 11147, 11158, 11170, 11182, 11195, 11207, 11220, 11235, 11256, 343}, {11275, 11281, 11287, 11293, 11299, 11305, 11311, 11317, 11323, 11329, 11336, 11343, 343}, 0, 1, 344, 346, {348,2674},{357,409},{370},{376,2195}},
-       {11350, 2921, 1938, 2991, 370, 447, 2763, 11372, 11380, {11388, 11401, 11422, 11441, 11462, 11481, 11494}, {11505, 11512, 11519, 11526, 11533, 11540, 11547}, {11554, 11571, 11588, 11597, 11608, 11619, 11632, 11645, 11660, 11679, 11698, 11715, 343}, {11734, 11741, 11748, 11755, 11762, 11769, 11776, 11783, 11790, 11797, 11804, 11811, 343}, 0, 1, 344, 346, {348,11818,1938},{357,2921},{370},{376,2991}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 465, 468, {11827, 11835, 11846, 11856, 11867, 11876, 11885}, {11895, 11898, 11901, 11904, 11907, 11910, 11913}, {11916, 11926, 11934, 11942, 11950, 11958, 11965, 11973, 11981, 11988, 11994, 12001, 343}, {12009, 12013, 1871, 12017, 3781, 12021, 12025, 12029, 12033, 12037, 12041, 12045, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {387, 409, 1938, 438, 370, 447, 457, 465, 468, {12049, 484, 505, 6696, 12062, 12079, 12090}, {574, 582, 590, 12103, 12111, 612, 12119}, {12127, 641, 658, 667, 12142, 12149, 12158, 699, 712, 731, 748, 763, 343}, {12167, 786, 12175, 794, 12183, 12191, 12199, 802, 12207, 818, 826, 12217, 343}, 0, 1, 344, 346, {348,12229,1938},{357,409},{370},{376,438}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 12237, 12240, {12243, 12250, 12258, 12266, 12275, 12285, 12292}, {2022, 6484, 2028, 12301, 2034, 12304, 2040}, {12307, 12316, 12326, 2064, 8841, 12332, 12338, 12344, 2091, 2101, 2109, 8853, 343}, {2127, 2131, 2909, 2139, 8841, 2143, 2147, 2151, 2155, 2159, 2163, 8866, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {12353, 12373, 348, 376, 370, 12382, 1146, 12389, 12405, {5226, 5228, 5230, 5232, 5234, 5236, 5238}, {5226, 5228, 5230, 5232, 5234, 5236, 5238}, {5226, 5228, 5230, 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 343}, {5226, 5228, 5230, 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 343}, 0, 0, 344, 346, {348},{357,12373},{370},{376}},
-       {12427, 1664, 1907, 376, 370, 447, 457, 465, 468, {4546, 12450, 12461, 12471, 12481, 12491, 12505}, {4632, 4636, 12517, 12522, 12526, 12531, 12536}, {1779, 1786, 3770, 4681, 3781, 1810, 1815, 1820, 1827, 1837, 1845, 4725, 343}, {1863, 1867, 1871, 1875, 3781, 1879, 1883, 1887, 1891, 1895, 1899, 4755, 343}, 0, 0, 344, 346, {348,1907},{357,1664},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 12540, 12568, {12590, 12609, 12628, 12650, 12669, 12691, 12716}, {12735, 12745, 12755, 12768, 12778, 12791, 12807}, {12817, 12833, 12849, 12865, 12884, 12891, 12901, 12917, 12933, 12955, 12977, 12996, 343}, {12817, 12833, 12849, 12865, 12884, 12891, 12901, 12917, 12933, 12955, 12977, 12996, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 465, 468, {13018, 13027, 13036, 13044, 13053, 13062, 13069}, {13078, 13082, 13086, 13090, 13094, 13098, 13102}, {8818, 8826, 13106, 13112, 8841, 2074, 13119, 13125, 13132, 13141, 13148, 13156, 343}, {2127, 2131, 2909, 2139, 8841, 2143, 2147, 13164, 2155, 2159, 2163, 8866, 343}, 0, 6, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 13168, 13210, {13252, 13271, 13290, 13312, 13331, 13353, 13378}, {13397, 13407, 13417, 13430, 13440, 13453, 13469}, {13479, 13507, 13535, 13551, 13570, 13577, 13587, 13603, 13619, 13647, 13669, 13691, 343}, {13716, 13735, 13535, 13551, 13570, 13577, 13587, 13603, 13754, 13770, 13786, 13796, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 13809, 13822, {13835, 13854, 13876, 13901, 13917, 13939, 13958}, {13968, 13975, 13982, 13989, 13996, 14003, 14010}, {14014, 14030, 14055, 14074, 14093, 14100, 14113, 14126, 14145, 14176, 14201, 14223, 343}, {14248, 14256, 14270, 14284, 14093, 14100, 14113, 14295, 14303, 14317, 14328, 14336, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 14347, 14375, {14397, 14419, 14441, 14466, 14488, 14513, 14541}, {14563, 14573, 14583, 14596, 14606, 14619, 14635}, {14645, 14661, 14686, 14705, 14727, 14734, 14747, 14760, 14779, 14810, 14835, 14854, 343}, {14645, 14661, 14686, 14705, 14727, 14734, 14747, 14760, 14779, 14810, 14835, 14854, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 14879, 14907, {14929, 14948, 14967, 14989, 15008, 15030, 15055}, {15074, 15079, 15087, 15095, 15103, 15111, 15119}, {15130, 15146, 15171, 15190, 15212, 15219, 15232, 15245, 15264, 15292, 15317, 15339, 343}, {15130, 15146, 15171, 15190, 15212, 15219, 15232, 15245, 15264, 15292, 15317, 15339, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 15364, 15376, {12590, 12609, 15388, 12650, 12669, 12691, 12716}, {12735, 12745, 15410, 12768, 12778, 12791, 12807}, {15423, 15448, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, {15423, 15448, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 465, 468, {15628, 15636, 15641, 15648, 15658, 15664, 15671}, {15679, 15683, 2909, 15687, 15692, 15696, 15700}, {15705, 15713, 15722, 15728, 15734, 15739, 15745, 15751, 15758, 15767, 15775, 15784, 343}, {15793, 2131, 2909, 15797, 2070, 15801, 15806, 13164, 15810, 15814, 2163, 2917, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 15364, 15376, {15818, 12609, 15846, 12650, 12669, 12691, 12716}, {12735, 12745, 15410, 12768, 12778, 12791, 12807}, {15423, 15865, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, {15423, 15448, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {387, 409, 422, 438, 370, 447, 457, 465, 468, {471, 484, 505, 520, 531, 550, 561}, {574, 582, 590, 596, 602, 612, 620}, {628, 641, 658, 667, 678, 685, 692, 699, 712, 731, 748, 763, 343}, {780, 786, 658, 794, 678, 685, 692, 802, 810, 818, 826, 836, 343}, 0, 1, 844, 346, {348,846,422},{357,409},{370},{376,438}},
+       {855, 878, 890, 376, 370, 447, 457, 465, 468, {899, 908, 916, 924, 933, 940, 950}, {959, 963, 967, 971, 975, 979, 983}, {987, 993, 1000, 1006, 1012, 1017, 1022, 1029, 1035, 1044, 1052, 1061, 343}, {1070, 1075, 1000, 1080, 1012, 1017, 1085, 1090, 1094, 1099, 1104, 1109, 343}, 0, 0, 344, 346, {348,890},{357,878},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1358, 1381, 1394, 1401, 1411, 447, 1416, 1424, 1429, {1434, 1442, 1452, 1460, 1468, 1477, 1484}, {1491, 1494, 1497, 1501, 1504, 1508, 1512}, {1515, 1521, 1527, 1535, 1541, 1549, 1557, 1567, 1573, 1581, 1589, 1598, 343}, {1607, 1609, 1612, 1616, 1619, 1621, 1624, 1628, 1633, 1636, 1638, 1641, 343}, 0, 1, 344, 346, {348,1394},{357,1381},{370,1411},{376,1401}},
+       {1645, 1666, 1678, 438, 370, 447, 1689, 465, 468, {1698, 1706, 1713, 1721, 1728, 1736, 1743}, {1751, 1756, 1760, 1764, 1768, 1772, 1776}, {1781, 1788, 1796, 1802, 1808, 1812, 1817, 1822, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 1909, 346, {348,1911,1678},{357,1666},{370},{376,438}},
+       {1920, 1381, 1942, 438, 370, 447, 1416, 1953, 1959, {1966, 1974, 1981, 1990, 1999, 2010, 2018}, {2026, 2029, 2032, 2035, 2038, 2041, 2044}, {2047, 2054, 2062, 2068, 2074, 2078, 2083, 2088, 2095, 2105, 2113, 2122, 343}, {2131, 2135, 2139, 2143, 2074, 2147, 2151, 2155, 2159, 2163, 2167, 2171, 343}, 0, 1, 844, 346, {348,846,1942},{357,1381},{370},{376,438}},
+       {2175, 409, 37, 2199, 56, 447, 457, 2210, 2215, {2220, 2235, 2250, 2261, 2276, 2289, 2308}, {2323, 2330, 2337, 2344, 2351, 2358, 2365}, {2372, 2393, 2416, 2431, 2448, 2459, 2474, 2489, 2508, 2531, 2550, 2569, 343}, {2590, 2597, 2604, 2611, 2618, 2625, 2634, 2643, 2650, 2657, 2664, 2671, 343}, 0, 1, 344, 346, {348,2678,37},{357,409},{370,56},{376,2689,2199}},
+       {2701, 2732, 2752, 2199, 2759, 447, 2767, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752},{2732,2732,2925,2939,2959},{2759,2759,2974,1411,370},{2199,2199,2983,2995,438}},
+       {3003, 3037, 3059, 2983, 370, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059},{357,3037},{370},{376,2983}},
+       {3285, 3310, 3327, 2995, 370, 3336, 3349, 465, 468, {3361, 3371, 3381, 3389, 3401, 3409, 3419}, {3428, 3431, 3434, 3437, 3440, 3443, 3446}, {3449, 3458, 3467, 3477, 3486, 3495, 3504, 3514, 3521, 3529, 3537, 3547, 343}, {3556, 3562, 3568, 3575, 3581, 3587, 3593, 3600, 3604, 3609, 3614, 3621, 343}, 0, 1, 844, 346, {348,3327},{357,3310},{370},{376,2995}},
+       {3627, 3653, 890, 438, 370, 447, 74, 465, 468, {3670, 3679, 3685, 3691, 3700, 3706, 3715}, {3722, 3727, 3732, 3737, 3742, 3747, 3752}, {3757, 3765, 3774, 3779, 3785, 3789, 3794, 3802, 3808, 3818, 1052, 3826, 343}, {3836, 3842, 3774, 3849, 3785, 3789, 3854, 3802, 3860, 1099, 1104, 3866, 343}, 0, 0, 344, 346, {890,3872,3277},{357,878,3653},{370},{376,438}},
+       {3882, 878, 2678, 438, 370, 447, 74, 465, 468, {3903, 3921, 3935, 3953, 3971, 3989, 4005}, {4012, 4015, 4018, 4021, 4024, 4027, 4030}, {4033, 4044, 4057, 4064, 4075, 4082, 4091, 4100, 4113, 4126, 4141, 4154, 343}, {4165, 4172, 4057, 4179, 4075, 4186, 4193, 4200, 4207, 4214, 4221, 4228, 343}, 0, 0, 344, 346, {348,890,2678},{357,878},{370},{376,438}},
+       {4235, 4257, 4271, 2995, 1411, 4285, 4296, 4304, 4307, {4310, 4320, 4328, 4333, 4340, 4353, 4361}, {1619, 4369, 4371, 4373, 4377, 4380, 4382}, {4386, 4394, 4403, 4412, 4421, 4428, 4436, 4444, 4454, 4465, 1847, 1856, 343}, {4474, 4479, 4485, 4492, 4498, 4504, 4510, 4516, 4521, 4528, 1104, 4533, 343}, 0, 1, 4538, 346, {348,4541,4271},{357,4257},{370,1411},{376,1401,2995}},
+       {1920, 1381, 3327, 438, 370, 447, 1416, 465, 468, {4553, 4564, 4575, 4589, 4603, 4615, 4627}, {4639, 4643, 4648, 4653, 4658, 4662, 4667}, {4671, 4679, 3774, 4688, 4695, 4700, 4707, 4714, 1829, 4465, 4722, 4732, 343}, {1865, 1869, 1873, 1877, 4695, 4741, 4746, 4751, 1893, 1897, 4757, 4762, 343}, 0, 0, 844, 346, {348,3327},{357,1381},{370},{376,438}},
+       {4766, 409, 890, 376, 370, 447, 74, 4790, 4793, {4796, 4805, 4813, 4822, 4833, 4842, 4851}, {3152, 3156, 1873, 4858, 4862, 4866, 4870}, {4874, 4882, 3192, 4891, 4898, 4905, 4912, 3215, 4919, 4929, 1052, 4937, 343}, {4946, 1869, 1873, 1877, 4950, 4954, 4958, 3265, 4962, 4966, 1901, 3273, 343}, 0, 1, 344, 346, {348,890},{357,409},{370},{376}},
+       {4970, 5000, 5022, 2995, 1411, 5033, 5049, 5062, 5069, {5076, 5086, 5096, 5106, 5116, 5126, 5136}, {1240, 5146, 5150, 5154, 5158, 5162, 5166}, {5170, 5175, 5180, 5185, 5190, 5195, 5200, 5205, 5210, 5215, 5221, 5227, 343}, {5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5254, 5257, 343}, 0, 0, 344, 346, {5022,5022,348,5260,5267,5276,5295,5312},{5000,5000,5331,5355,5382},{1411,1411,370,5411,5419},{2995,438,5428,5439}},
+       {5451, 5504, 5531, 5540, 5566, 5584, 5601, 5615, 5622, {5629, 5639, 5649, 5659, 5669, 5679, 5689}, {5699, 5703, 5707, 5711, 5715, 5719, 5723}, {5727, 5732, 5737, 5742, 5747, 5752, 5757, 5762, 5767, 5772, 5778, 5784, 343}, {5727, 5732, 5737, 5742, 5747, 5752, 5757, 5762, 5767, 5772, 5778, 5784, 343}, 0, 0, 344, 346, {348,5531},{357,5504},{370,5566},{376,5540}},
+       {5790, 878, 5812, 1401, 1411, 447, 74, 465, 468, {5819, 5826, 5834, 5842, 5851, 5861, 5869}, {5878, 3431, 5881, 5884, 5887, 5890, 5893}, {5896, 5904, 5913, 1802, 5919, 1812, 1817, 5923, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 5932, 1877, 5919, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 344, 346, {348,5812},{357,878},{370,1411},{376,1401}},
+       {5936, 1381, 846, 5960, 5971, 447, 1416, 465, 468, {1698, 1706, 1713, 1721, 1728, 1736, 1743}, {5977, 3431, 3434, 5981, 3440, 5984, 5987}, {1781, 1788, 3774, 1802, 3785, 1812, 1817, 1822, 1829, 1839, 1847, 4732, 343}, {1865, 1869, 1873, 1877, 3785, 1881, 1885, 1889, 1893, 1897, 1901, 4762, 343}, 0, 1, 344, 346, {348,846},{357,1381},{370,5971},{376,5960}},
+       {5991, 878, 6012, 438, 370, 447, 74, 465, 468, {6023, 6033, 6047, 6054, 6061, 6070, 1484}, {6078, 6080, 6083, 6086, 6090, 6093, 2026}, {6096, 6105, 6110, 6117, 1808, 6127, 6136, 6143, 6153, 6163, 1589, 6176, 343}, {6186, 6190, 1873, 6194, 1808, 6198, 6202, 6206, 6210, 6214, 6219, 6223, 343}, 0, 1, 1909, 346, {348,5531,6012},{357,878},{370},{376,438}},
+       {6227, 3037, 1678, 376, 370, 3070, 3075, 465, 468, {3097, 6260, 6274, 6287, 6300, 6313, 3144}, {3152, 6325, 6329, 6333, 6337, 6341, 3173}, {6345, 6353, 6363, 1006, 6370, 6375, 6381, 3215, 6387, 6396, 6404, 6413, 343}, {1865, 6422, 1873, 3257, 3785, 1881, 1885, 3265, 4962, 6426, 1901, 6430, 343}, 0, 0, 344, 346, {348,1678},{357,3037},{370},{376}},
+       {5991, 878, 1942, 438, 370, 447, 74, 465, 468, {6434, 6444, 6449, 6456, 6465, 6469, 6476}, {6487, 6489, 6491, 2035, 6494, 1619, 6496}, {6498, 6507, 6517, 6524, 3785, 6532, 6538, 1822, 6544, 6555, 6565, 6575, 343}, {6585, 2135, 2913, 2143, 2074, 6589, 6593, 2155, 2159, 2917, 2167, 2921, 343}, 0, 1, 844, 346, {348,1942},{357,878},{370},{376,438}},
+       {6597, 6623, 1942, 2995, 1411, 6641, 74, 465, 468, {6657, 6680, 505, 6703, 6714, 6729, 6744}, {6759, 6764, 6769, 6774, 6779, 6784, 6789}, {6794, 6807, 6822, 6831, 6844, 6851, 6860, 6869, 6882, 6899, 6914, 6927, 343}, {6942, 6949, 6956, 6963, 678, 6970, 6977, 6984, 6991, 6998, 7005, 7012, 343}, 0, 1, 844, 346, {348,846,1942},{357,6623},{370,1411},{376,1401,2995}},
+       {7019, 7041, 3327, 2995, 370, 4285, 1148, 465, 468, {7055, 7064, 7076, 7083, 7091, 7101, 7107}, {7114, 7118, 7122, 7126, 7130, 7135, 7139}, {7143, 7153, 7162, 7170, 7178, 7186, 7193, 7200, 7208, 1589, 7214, 7222, 343}, {7231, 7235, 7239, 7244, 7248, 6202, 7252, 7256, 7260, 6219, 7264, 7268, 343}, 0, 1, 844, 346, {348,7272,3327},{357,7041},{370},{376,2995}},
+       {7283, 1381, 7304, 2995, 1411, 447, 1416, 465, 468, {7315, 7323, 7332, 7339, 7346, 7355, 7362}, {7369, 7372, 7375, 7378, 7381, 7385, 2026}, {4386, 4394, 7388, 4688, 7394, 4741, 4746, 1822, 1829, 4465, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 7394, 4741, 4746, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 4538, 346, {348,3327,7304},{357,1381},{370,1411},{376,1401,2995}},
+       {7399, 409, 6012, 7423, 7434, 447, 457, 7441, 7444, {7447, 7454, 7463, 7472, 7484, 7492, 7501}, {7511, 7515, 2913, 7520, 7525, 7529, 7533}, {7537, 7543, 3774, 7550, 1808, 7556, 7564, 7571, 7577, 7585, 7591, 7599, 343}, {2131, 7607, 2913, 7611, 7615, 7619, 7623, 7627, 7533, 7631, 7635, 7640, 343}, 0, 1, 1909, 346, {348,5531,6012},{357,409},{370,7434},{376,7644,7423}},
+       {7656, 7684, 6012, 5960, 5971, 447, 74, 7701, 7704, {7707, 7715, 7723, 1721, 1728, 1736, 7730}, {7738, 7742, 3434, 5981, 3440, 5984, 7746}, {5896, 5904, 3774, 1802, 1808, 1812, 1817, 7750, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 344, 346, {348,6012},{357,7684},{370,5971},{376,5960}},
+       {7758, 878, 37, 2995, 1411, 447, 74, 7779, 7810, {7841, 7872, 7900, 7928, 7947, 7981, 8006}, {8031, 8039, 8044, 8049, 8054, 8062, 8067}, {8072, 8091, 8122, 8141, 8160, 8182, 8207, 8229, 8251, 8273, 8292, 8320, 343}, {8342, 8351, 8360, 8372, 8384, 8393, 8405, 8414, 8423, 8432, 8441, 8450, 343}, 0, 0, 344, 346, {348,37},{357,878},{370,1411},{376,8459,2995}},
+       {8499, 8526, 1942, 438, 370, 447, 457, 465, 468, {8544, 8550, 8560, 8566, 8577, 8587, 8592}, {8602, 8606, 8610, 8614, 8619, 8623, 8627}, {8631, 8636, 8643, 8648, 8654, 8661, 8669, 8676, 8685, 8692, 8697, 8704, 343}, {8712, 8716, 2913, 8721, 2882, 8725, 8729, 8733, 8738, 8742, 8746, 8750, 343}, 0, 1, 844, 346, {348,1942},{357,8526},{370},{376,438}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 465, 468, {8754, 8761, 8767, 8774, 8779, 8785, 8791}, {8797, 8801, 8805, 8809, 8813, 8817, 8821}, {8825, 8833, 8842, 2068, 8848, 2078, 2083, 8852, 2095, 2105, 2113, 8860, 343}, {2131, 2135, 2913, 2143, 8848, 2147, 2151, 8869, 2159, 2163, 2167, 8873, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {8877, 878, 1942, 2995, 370, 8897, 74, 465, 468, {8913, 8926, 8945, 8962, 8975, 8988, 9004}, {9017, 6764, 6769, 6774, 6779, 6784, 6789}, {9022, 9033, 9046, 9061, 9074, 9087, 9100, 9111, 9124, 9139, 9152, 9171, 343}, {9184, 9191, 9198, 9205, 9214, 9223, 9232, 9239, 9248, 9255, 9264, 9273, 343}, 0, 1, 844, 346, {348,846,1942},{357,878},{370},{376,2995}},
+       {9282, 878, 1394, 5960, 5971, 447, 74, 465, 468, {9305, 9320, 9341, 9356, 9369, 9382, 9397}, {9410, 9415, 9420, 9425, 9430, 9435, 9440}, {9445, 9462, 9471, 9486, 678, 9503, 9518, 9531, 9546, 9563, 9584, 9601, 343}, {9616, 9191, 9623, 9630, 678, 9637, 9644, 9651, 9248, 9658, 9665, 9672, 343}, 0, 1, 344, 346, {348,1394},{357,878},{370,5971},{376,5960}},
+       {9679, 9701, 3327, 2995, 1411, 447, 1689, 465, 468, {9715, 9723, 9734, 9740, 9746, 9755, 1484}, {7114, 7118, 1768, 9761, 7130, 7135, 9765}, {1781, 1788, 7388, 1802, 1808, 9769, 9775, 9781, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 9788, 1893, 1897, 1901, 1905, 343}, 0, 1, 844, 346, {348,9792,3327},{357,9701},{370,1411},{376,1401,2995}},
+       {8877, 878, 9799, 2995, 1411, 447, 9809, 465, 468, {9817, 9828, 9839, 9850, 9861, 9872, 9878}, {4380, 9887, 9889, 4371, 6078, 9891, 6489}, {9893, 9901, 9910, 9917, 3785, 9924, 9930, 1822, 1829, 9936, 1847, 9945, 343}, {9955, 9960, 9910, 1877, 3785, 9924, 9930, 1889, 9966, 1897, 1901, 9971, 343}, 0, 1, 844, 346, {348,846,9799},{357,878},{370,1411},{376,1401,2995}},
+       {9976, 10005, 4541, 2995, 370, 10026, 1416, 465, 468, {10044, 10055, 10065, 10074, 10085, 10097, 10108}, {10118, 4380, 10121, 9889, 10123, 10125, 6496}, {10128, 10138, 1796, 10149, 10158, 10164, 10172, 10180, 10188, 10199, 10208, 10218, 343}, {2131, 2135, 2913, 2143, 2074, 10228, 10233, 2155, 2159, 2163, 2167, 2921, 343}, 0, 1, 844, 346, {348,10238,4541},{357,10005},{370},{376,2995}},
+       {10245, 10278, 7272, 376, 370, 10300, 10315, 465, 468, {10327, 10339, 10351, 10363, 10377, 10392, 10405}, {10419, 10422, 10425, 10428, 10431, 6080, 7381}, {10434, 10441, 10449, 10454, 10465, 10475, 10485, 10492, 10504, 10513, 10520, 10531, 343}, {10541, 10545, 10549, 10553, 10557, 10561, 10565, 10569, 10573, 10577, 10581, 10585, 343}, 0, 1, 344, 346, {348,7272},{357,10278},{370},{376}},
+       {10589, 878, 10613, 2983, 370, 447, 74, 10622, 10629, {10636, 10652, 10665, 10681, 10698, 10716, 10725}, {10734, 10738, 10742, 10746, 10750, 10754, 10758}, {10762, 10775, 229, 10786, 10797, 10802, 10811, 10822, 10829, 10844, 10855, 10868, 343}, {10881, 10888, 10895, 10902, 10909, 10916, 10923, 10822, 10930, 10937, 10944, 10951, 343}, 0, 0, 344, 346, {348,10958,10613},{357,878},{370},{376,10968,2983}},
+       {10981, 409, 2678, 2199, 370, 447, 457, 11005, 11008, {11011, 11024, 11034, 11043, 11053, 11064, 11075}, {11087, 11090, 11095, 11100, 11105, 11110, 11115}, {11120, 11133, 11144, 11154, 11165, 11177, 11189, 11202, 11214, 11227, 11242, 11263, 343}, {11282, 11288, 11294, 11300, 11306, 11312, 11318, 11324, 11330, 11336, 11343, 11350, 343}, 0, 1, 344, 346, {348,2678},{357,409},{370},{376,2199}},
+       {11357, 2925, 1942, 2995, 370, 447, 2767, 11379, 11387, {11395, 11408, 11429, 11448, 11469, 11488, 11501}, {11512, 11519, 11526, 11533, 11540, 11547, 11554}, {11561, 11578, 11595, 11604, 11615, 11626, 11639, 11652, 11667, 11686, 11705, 11722, 343}, {11741, 11748, 11755, 11762, 11769, 11776, 11783, 11790, 11797, 11804, 11811, 11818, 343}, 0, 1, 844, 346, {348,11825,1942},{357,2925},{370},{376,2995}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 465, 468, {11834, 11842, 11853, 11863, 11874, 11883, 11892}, {11902, 11905, 11908, 11911, 11914, 11917, 11920}, {11923, 11933, 11941, 11949, 11957, 11965, 11972, 11980, 11988, 11995, 12001, 12008, 343}, {12016, 12020, 1873, 12024, 3785, 12028, 12032, 12036, 12040, 12044, 12048, 12052, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {387, 409, 1942, 438, 370, 447, 457, 465, 468, {12056, 484, 505, 6703, 12069, 12086, 12097}, {574, 582, 590, 12110, 12118, 612, 12126}, {12134, 641, 658, 667, 12149, 12156, 12165, 699, 712, 731, 748, 763, 343}, {12174, 786, 12182, 794, 12190, 12198, 12206, 802, 12214, 818, 826, 12224, 343}, 0, 1, 844, 346, {348,12236,1942},{357,409},{370},{376,438}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 12244, 12247, {12250, 12257, 12265, 12273, 12282, 12292, 12299}, {2026, 6491, 2032, 12308, 2038, 12311, 2044}, {12314, 12323, 12333, 2068, 8848, 12339, 12345, 12351, 2095, 2105, 2113, 8860, 343}, {2131, 2135, 2913, 2143, 8848, 2147, 2151, 2155, 2159, 2163, 2167, 8873, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {12360, 12380, 348, 376, 370, 12389, 1148, 12396, 12412, {5233, 5235, 5237, 5239, 5241, 5243, 5245}, {5233, 5235, 5237, 5239, 5241, 5243, 5245}, {5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5254, 5257, 343}, {5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5254, 5257, 343}, 0, 0, 344, 346, {348},{357,12380},{370},{376}},
+       {12434, 1666, 1911, 376, 370, 447, 457, 465, 468, {4553, 12457, 12468, 12478, 12488, 12498, 12512}, {4639, 4643, 12524, 12529, 12533, 12538, 12543}, {1781, 1788, 3774, 4688, 3785, 1812, 1817, 1822, 1829, 1839, 1847, 4732, 343}, {1865, 1869, 1873, 1877, 3785, 1881, 1885, 1889, 1893, 1897, 1901, 4762, 343}, 0, 0, 344, 346, {348,1911},{357,1666},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 12547, 12575, {12597, 12616, 12635, 12657, 12676, 12698, 12723}, {12742, 12752, 12762, 12775, 12785, 12798, 12814}, {12824, 12840, 12856, 12872, 12891, 12898, 12908, 12924, 12940, 12962, 12984, 13003, 343}, {12824, 12840, 12856, 12872, 12891, 12898, 12908, 12924, 12940, 12962, 12984, 13003, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 465, 468, {13025, 13034, 13043, 13051, 13060, 13069, 13076}, {13085, 13089, 13093, 13097, 13101, 13105, 13109}, {8825, 8833, 13113, 13119, 8848, 2078, 13126, 13132, 13139, 13148, 13155, 13163, 343}, {2131, 2135, 2913, 2143, 8848, 2147, 2151, 13171, 2159, 2163, 2167, 8873, 343}, 0, 6, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 13175, 13217, {13259, 13278, 13297, 13319, 13338, 13360, 13385}, {13404, 13414, 13424, 13437, 13447, 13460, 13476}, {13486, 13514, 13542, 13558, 13577, 13584, 13594, 13610, 13626, 13654, 13676, 13698, 343}, {13723, 13742, 13542, 13558, 13577, 13584, 13594, 13610, 13761, 13777, 13793, 13803, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 13816, 13829, {13842, 13861, 13883, 13908, 13924, 13946, 13965}, {13975, 13982, 13989, 13996, 14003, 14010, 14017}, {14021, 14037, 14062, 14081, 14100, 14107, 14120, 14133, 14152, 14183, 14208, 14230, 343}, {14255, 14263, 14277, 14291, 14100, 14107, 14120, 14302, 14310, 14324, 14335, 14343, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 14354, 14382, {14404, 14426, 14448, 14473, 14495, 14520, 14548}, {14570, 14580, 14590, 14603, 14613, 14626, 14642}, {14652, 14668, 14693, 14712, 14734, 14741, 14754, 14767, 14786, 14817, 14842, 14861, 343}, {14652, 14668, 14693, 14712, 14734, 14741, 14754, 14767, 14786, 14817, 14842, 14861, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 14886, 14914, {14936, 14955, 14974, 14996, 15015, 15037, 15062}, {15081, 15086, 15094, 15102, 15110, 15118, 15126}, {15137, 15153, 15178, 15197, 15219, 15226, 15239, 15252, 15271, 15299, 15324, 15346, 343}, {15137, 15153, 15178, 15197, 15219, 15226, 15239, 15252, 15271, 15299, 15324, 15346, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 15371, 15383, {12597, 12616, 15395, 12657, 12676, 12698, 12723}, {12742, 12752, 15417, 12775, 12785, 12798, 12814}, {15430, 15455, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, {15430, 15455, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 465, 468, {15635, 15643, 15648, 15655, 15665, 15671, 15678}, {15686, 15690, 2913, 15694, 15699, 15703, 15707}, {15712, 15720, 15729, 15735, 15741, 15746, 15752, 15758, 15765, 15774, 15782, 15791, 343}, {15800, 2135, 2913, 15804, 2074, 15808, 15813, 13171, 15817, 15821, 2167, 2921, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 15371, 15383, {15825, 12616, 15853, 12657, 12676, 12698, 12723}, {12742, 12752, 15417, 12775, 12785, 12798, 12814}, {15430, 15872, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, {15430, 15455, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, 0, 0, 344, 346, {348},{357},{370},{376}},
        {1, 24, 37, 46, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37},{357,24},{370,56},{376,46}},
-       {387, 409, 422, 438, 370, 447, 457, 465, 468, {471, 484, 505, 520, 531, 550, 561}, {574, 582, 590, 596, 602, 612, 620}, {628, 641, 658, 667, 678, 685, 692, 699, 712, 731, 748, 763, 343}, {780, 786, 658, 794, 678, 685, 692, 802, 810, 818, 826, 836, 343}, 0, 1, 344, 346, {348,844,422},{357,409},{370},{376,438}},
-       {5984, 876, 2674, 438, 370, 447, 457, 465, 468, {897, 906, 914, 922, 931, 938, 948}, {957, 961, 965, 969, 973, 977, 981}, {985, 991, 998, 1004, 1010, 1015, 1020, 1027, 1033, 1042, 1050, 1059, 343}, {1068, 1073, 998, 1078, 1010, 1015, 1083, 1088, 1092, 1097, 1102, 1107, 343}, 0, 1, 344, 346, {348,888,2674},{357,876},{370},{376,438}},
-       {15896, 4993, 5260, 15941, 15964, 5026, 5042, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, 0, 0, 344, 346, {348,5260},{357,4993},{370,15964},{376,15941}},
-       {7276, 1379, 3323, 2991, 1409, 447, 1414, 1422, 1427, {1432, 1440, 1450, 1458, 1466, 1475, 1482}, {1489, 1492, 1495, 1499, 1502, 1506, 1510}, {1513, 1519, 1525, 1533, 1539, 1547, 1555, 1565, 1571, 1579, 1587, 1596, 343}, {1605, 1607, 1610, 1614, 1617, 1619, 1622, 1626, 1631, 1634, 1636, 1639, 343}, 0, 1, 344, 346, {348,1392,3323},{357,1379},{370,1409},{376,1399,2991}},
-       {1643, 1664, 1676, 438, 370, 447, 1687, 465, 468, {1696, 1704, 1711, 1719, 1726, 1734, 1741}, {1749, 1754, 1758, 1762, 1766, 1770, 1774}, {1779, 1786, 1794, 1800, 1806, 1810, 1815, 1820, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,1907,1676},{357,1664},{370},{376,438}},
-       {1916, 1379, 1938, 438, 370, 447, 1414, 1949, 1955, {1962, 1970, 1977, 1986, 1995, 2006, 2014}, {2022, 2025, 2028, 2031, 2034, 2037, 2040}, {2043, 2050, 2058, 2064, 2070, 2074, 2079, 2084, 2091, 2101, 2109, 2118, 343}, {2127, 2131, 2135, 2139, 2070, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 343}, 0, 1, 344, 346, {348,844,1938},{357,1379},{370},{376,438}},
-       {2171, 409, 37, 2195, 56, 447, 457, 2206, 2211, {2216, 2231, 2246, 2257, 2272, 2285, 2304}, {2319, 2326, 2333, 2340, 2347, 2354, 2361}, {2368, 2389, 2412, 2427, 2444, 2455, 2470, 2485, 2504, 2527, 2546, 2565, 343}, {2586, 2593, 2600, 2607, 2614, 2621, 2630, 2639, 2646, 2653, 2660, 2667, 343}, 0, 1, 344, 346, {348,2674,37},{357,409},{370,56},{376,2685,2195}},
-       {2697, 2728, 10606, 2195, 2755, 63, 2763, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {10606,10606,2748,2748,11818,3055,348,6005,15971},{2728,2728,2921,2935,2955},{2755,2755,2970,1409,370},{2195,2195,2979,2991,438}},
-       {3281, 3306, 3323, 2991, 370, 3332, 3345, 465, 468, {3357, 3367, 3377, 3385, 3397, 3405, 3415}, {3424, 3427, 3430, 3433, 3436, 3439, 3442}, {3445, 3454, 3463, 3473, 3482, 3491, 3500, 3510, 3517, 3525, 3533, 3543, 343}, {3552, 3558, 3564, 3571, 3577, 3583, 3589, 3596, 3600, 3605, 3610, 3617, 343}, 0, 1, 344, 346, {348,3323},{357,3306},{370},{376,2991}},
-       {3623, 3649, 2674, 438, 370, 447, 74, 465, 468, {3666, 3675, 3681, 3687, 3696, 3702, 3711}, {3718, 3723, 3728, 3733, 3738, 3743, 3748}, {3753, 3761, 3770, 3775, 3781, 3785, 3790, 3798, 3804, 3814, 1050, 3822, 343}, {3832, 3838, 3770, 3845, 3781, 3785, 3850, 3798, 3856, 1097, 1102, 3862, 343}, 0, 1, 344, 346, {888,3868,3273,2674},{357,876,3649},{370},{376,438}},
-       {3878, 876, 2674, 438, 370, 447, 74, 465, 468, {3899, 3917, 3931, 3949, 3967, 3985, 4001}, {4008, 4011, 4014, 4017, 4020, 4023, 4026}, {4029, 4040, 4053, 4060, 4071, 4078, 4087, 4096, 4109, 4122, 4137, 4150, 343}, {4161, 4168, 4053, 4175, 4071, 4182, 4189, 4196, 4203, 4210, 4217, 4224, 343}, 0, 0, 344, 346, {348,888,2674},{357,876},{370},{376,438}},
-       {4231, 4253, 4267, 2991, 1409, 4281, 4292, 4300, 4303, {4306, 4316, 4324, 4329, 4336, 4349, 4357}, {1617, 4365, 4367, 4369, 4373, 4376, 4378}, {4382, 4390, 4399, 4408, 4417, 4424, 4432, 4440, 4450, 4461, 1845, 1854, 343}, {4470, 4475, 4481, 4488, 4494, 4500, 4506, 4512, 4517, 4524, 1102, 4529, 343}, 0, 1, 344, 346, {348,4534,4267},{357,4253},{370,1409},{376,1399,2991}},
-       {1916, 1379, 3323, 438, 370, 447, 1414, 465, 468, {4546, 4557, 4568, 4582, 4596, 4608, 4620}, {4632, 4636, 4641, 4646, 4651, 4655, 4660}, {4664, 4672, 3770, 4681, 4688, 4693, 4700, 4707, 1827, 4461, 4715, 4725, 343}, {1863, 1867, 1871, 1875, 4688, 4734, 4739, 4744, 1891, 1895, 4750, 4755, 343}, 0, 0, 344, 346, {348,3323},{357,1379},{370},{376,438}},
-       {15981, 409, 2674, 16002, 370, 447, 74, 4783, 4786, {4789, 4798, 4806, 4815, 4826, 4835, 4844}, {3148, 3152, 1871, 4851, 4855, 4859, 4863}, {4867, 4875, 3188, 4884, 4891, 4898, 4905, 3211, 4912, 4922, 1050, 4930, 343}, {4939, 1867, 1871, 1875, 4943, 4947, 4951, 3261, 4955, 4959, 1899, 3269, 343}, 0, 1, 344, 346, {348,888,2674},{357,409},{370},{376,1399,16002}},
-       {4963, 4993, 5015, 2991, 1409, 5026, 5042, 5055, 5062, {5069, 5079, 5089, 5099, 5109, 5119, 5129}, {1238, 5139, 5143, 5147, 5151, 5155, 5159}, {5163, 5168, 5173, 5178, 5183, 5188, 5193, 5198, 5203, 5208, 5214, 5220, 343}, {5226, 5228, 5230, 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 343}, 0, 0, 344, 346, {5015,5015,348,5253,5260,5269,5288,5305},{4993,4993,5324,5348,5375},{1409,1409,370,5404,5412},{2991,438,5421,5432}},
-       {16010, 16060, 5015, 16084, 5404, 5577, 5594, 5608, 5615, {5622, 5632, 5642, 5652, 5662, 5672, 5682}, {5692, 5696, 5700, 5704, 5708, 5712, 5716}, {5720, 5725, 5730, 5735, 5740, 5745, 5750, 5755, 5760, 5765, 5771, 5777, 343}, {5720, 5725, 5730, 5735, 5740, 5745, 5750, 5755, 5760, 5765, 5771, 5777, 343}, 0, 0, 344, 346, {5015,5015,348,5253,5260,16110,16123},{16060,16060,16134,16160,16182},{5404,1409,370,16206,16220,16235,5404,5412,16251,16268,16286},{16084,16084,16305,16327,2991,438,16351,16376,5421,5432}},
-       {8870, 876, 16403, 2991, 1409, 447, 74, 465, 468, {5812, 5819, 5827, 5835, 5844, 5854, 5862}, {5871, 3427, 5874, 5877, 5880, 5883, 5886}, {5889, 5897, 5906, 1800, 5912, 1810, 1815, 5916, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 5925, 1875, 5912, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,5805,16403},{357,876},{370,1409},{376,1399,2991}},
-       {5929, 1379, 844, 5953, 5964, 447, 1414, 465, 468, {1696, 1704, 1711, 1719, 1726, 1734, 1741}, {5970, 3427, 3430, 5974, 3436, 5977, 5980}, {1779, 1786, 3770, 1800, 3781, 1810, 1815, 1820, 1827, 1837, 1845, 4725, 343}, {1863, 1867, 1871, 1875, 3781, 1879, 1883, 1887, 1891, 1895, 1899, 4755, 343}, 0, 1, 344, 346, {348,844},{357,1379},{370,5964},{376,5953}},
-       {5984, 876, 6005, 438, 370, 447, 74, 465, 468, {6016, 6026, 6040, 6047, 6054, 6063, 1482}, {6071, 6073, 6076, 6079, 6083, 6086, 2022}, {6089, 6098, 6103, 6110, 1806, 6120, 6129, 6136, 6146, 6156, 1587, 6169, 343}, {6179, 6183, 1871, 6187, 1806, 6191, 6195, 6199, 6203, 6207, 6212, 6216, 343}, 0, 1, 344, 346, {348,5524,6005},{357,876},{370},{376,438}},
-       {16412, 3033, 37, 438, 370, 3066, 3071, 465, 468, {3093, 6253, 6267, 6280, 6293, 6306, 3140}, {3148, 6318, 6322, 6326, 6330, 6334, 3169}, {6338, 6346, 6356, 1004, 6363, 6368, 6374, 3211, 6380, 6389, 6397, 6406, 343}, {1863, 6415, 1871, 3253, 3781, 1879, 1883, 3261, 4955, 6419, 1899, 6423, 343}, 0, 0, 344, 346, {348,1676,888,37},{357,3033},{370},{376,16443,438}},
-       {5984, 876, 1938, 438, 370, 447, 74, 465, 468, {6427, 6437, 6442, 6449, 6458, 6462, 6469}, {6480, 6482, 6484, 2031, 6487, 1617, 6489}, {6491, 6500, 6510, 6517, 3781, 6525, 6531, 1820, 6537, 6548, 6558, 6568, 343}, {6578, 2131, 2909, 2139, 2070, 6582, 6586, 2151, 2155, 2913, 2163, 2917, 343}, 0, 1, 344, 346, {348,1938},{357,876},{370},{376,438}},
-       {6590, 6616, 1938, 2991, 1409, 6634, 74, 465, 468, {6650, 6673, 505, 6696, 6707, 6722, 6737}, {6752, 6757, 6762, 6767, 6772, 6777, 6782}, {6787, 6800, 6815, 6824, 6837, 6844, 6853, 6862, 6875, 6892, 6907, 6920, 343}, {6935, 6942, 6949, 6956, 678, 6963, 6970, 6977, 6984, 6991, 6998, 7005, 343}, 0, 1, 344, 346, {348,844,1938},{357,6616},{370,1409},{376,1399,2991}},
-       {7012, 7034, 3323, 2991, 370, 4281, 1146, 465, 468, {7048, 7057, 7069, 7076, 7084, 7094, 7100}, {7107, 7111, 7115, 7119, 7123, 7128, 7132}, {7136, 7146, 7155, 7163, 7171, 7179, 7186, 7193, 7201, 1587, 7207, 7215, 343}, {7224, 7228, 7232, 7237, 7241, 6195, 7245, 7249, 7253, 6212, 7257, 7261, 343}, 0, 1, 344, 346, {348,7265,3323},{357,7034},{370},{376,2991}},
-       {7276, 1379, 7297, 2991, 1409, 447, 1414, 465, 468, {7308, 7316, 7325, 7332, 7339, 7348, 7355}, {7362, 7365, 7368, 7371, 7374, 7378, 2022}, {4382, 4390, 7381, 4681, 7387, 4734, 4739, 1820, 1827, 4461, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 7387, 4734, 4739, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,3323,7297},{357,1379},{370,1409},{376,1399,2991}},
-       {7392, 409, 6005, 7416, 7427, 447, 457, 7434, 7437, {7440, 7447, 7456, 7465, 7477, 7485, 7494}, {7504, 7508, 2909, 7513, 7518, 7522, 7526}, {7530, 7536, 3770, 7543, 1806, 7549, 7557, 7564, 7570, 7578, 7584, 7592, 343}, {2127, 7600, 2909, 7604, 7608, 7612, 7616, 7620, 7526, 7624, 7628, 7633, 343}, 0, 1, 344, 346, {348,5524,6005},{357,409},{370,7427},{376,7637,7416}},
-       {16460, 7677, 6005, 438, 370, 447, 74, 7694, 7697, {7700, 7708, 7716, 1719, 1726, 1734, 7723}, {7731, 7735, 3430, 5974, 3436, 5977, 7739}, {5889, 5897, 3770, 1800, 1806, 1810, 1815, 7743, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,6005},{357,7677},{370,5964},{376,5953,438}},
-       {7751, 876, 37, 2991, 1409, 447, 74, 7772, 7803, {7834, 7865, 7893, 7921, 7940, 7974, 7999}, {8024, 8032, 8037, 8042, 8047, 8055, 8060}, {8065, 8084, 8115, 8134, 8153, 8175, 8200, 8222, 8244, 8266, 8285, 8313, 343}, {8335, 8344, 8353, 8365, 8377, 8386, 8398, 8407, 8416, 8425, 8434, 8443, 343}, 0, 0, 344, 346, {348,37},{357,876},{370,1409},{376,8452,2991}},
-       {8492, 8519, 1938, 438, 370, 447, 457, 465, 468, {8537, 8543, 8553, 8559, 8570, 8580, 8585}, {8595, 8599, 8603, 8607, 8612, 8616, 8620}, {8624, 8629, 8636, 8641, 8647, 8654, 8662, 8669, 8678, 8685, 8690, 8697, 343}, {8705, 8709, 2909, 8714, 2878, 8718, 8722, 8726, 8731, 8735, 8739, 8743, 343}, 0, 1, 344, 346, {348,1938},{357,8519},{370},{376,438}},
-       {16486, 409, 2674, 2991, 1409, 447, 457, 465, 468, {8747, 8754, 8760, 8767, 8772, 8778, 8784}, {8790, 8794, 8798, 8802, 8806, 8810, 8814}, {8818, 8826, 8835, 2064, 8841, 2074, 2079, 8845, 2091, 2101, 2109, 8853, 343}, {2127, 2131, 2909, 2139, 8841, 2143, 2147, 8862, 2155, 2159, 2163, 8866, 343}, 0, 0, 344, 346, {348,888,2674},{357,409},{370,1409},{376,2991}},
-       {8870, 876, 1938, 2991, 370, 8890, 74, 465, 468, {8906, 8919, 8938, 8955, 8968, 8981, 8997}, {9010, 6757, 6762, 6767, 6772, 6777, 6782}, {9015, 9026, 9039, 9054, 9067, 9080, 9093, 9104, 9117, 9132, 9145, 9164, 343}, {9177, 9184, 9191, 9198, 9207, 9216, 9225, 9232, 9241, 9248, 9257, 9266, 343}, 0, 1, 344, 346, {348,844,1938},{357,876},{370},{376,2991}},
-       {8870, 876, 1938, 2991, 5964, 447, 74, 465, 468, {9298, 9313, 9334, 9349, 9362, 9375, 9390}, {9403, 9408, 9413, 9418, 9423, 9428, 9433}, {9438, 9455, 9464, 9479, 678, 9496, 9511, 9524, 9539, 9556, 9577, 9594, 343}, {9609, 9184, 9616, 9623, 678, 9630, 9637, 9644, 9241, 9651, 9658, 9665, 343}, 0, 1, 344, 346, {348,1392,1938},{357,876},{370,5964},{376,5953,2991}},
-       {9672, 9694, 3323, 2991, 1409, 447, 1687, 465, 468, {9708, 9716, 9727, 9733, 9739, 9748, 1482}, {7107, 7111, 1766, 9754, 7123, 7128, 9758}, {1779, 1786, 7381, 1800, 1806, 9762, 9768, 9774, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 9781, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,9785,3323},{357,9694},{370,1409},{376,1399,2991}},
-       {8870, 876, 9792, 2991, 1409, 447, 9802, 465, 468, {9810, 9821, 9832, 9843, 9854, 9865, 9871}, {4376, 9880, 9882, 4367, 6071, 9884, 6482}, {9886, 9894, 9903, 9910, 3781, 9917, 9923, 1820, 1827, 9929, 1845, 9938, 343}, {9948, 9953, 9903, 1875, 3781, 9917, 9923, 1887, 9959, 1895, 1899, 9964, 343}, 0, 1, 344, 346, {348,844,9792},{357,876},{370,1409},{376,1399,2991}},
-       {9969, 9998, 4534, 2991, 370, 10019, 1414, 465, 468, {10037, 10048, 10058, 10067, 10078, 10090, 10101}, {10111, 4376, 10114, 9882, 10116, 10118, 6489}, {10121, 10131, 1794, 10142, 10151, 10157, 10165, 10173, 10181, 10192, 10201, 10211, 343}, {2127, 2131, 2909, 2139, 2070, 10221, 10226, 2151, 2155, 2159, 2163, 2917, 343}, 0, 1, 344, 346, {348,10231,4534},{357,9998},{370},{376,2991}},
-       {16507, 10271, 7265, 438, 370, 10293, 10308, 465, 468, {10320, 10332, 10344, 10356, 10370, 10385, 10398}, {10412, 10415, 10418, 10421, 10424, 6073, 7374}, {10427, 10434, 10442, 10447, 10458, 10468, 10478, 10485, 10497, 10506, 10513, 10524, 343}, {10534, 10538, 10542, 10546, 10550, 10554, 10558, 10562, 10566, 10570, 10574, 10578, 343}, 0, 1, 344, 346, {348,7265},{357,10271},{370},{376,438}},
-       {10582, 876, 10606, 2979, 370, 447, 74, 10615, 10622, {10629, 10645, 10658, 10674, 10691, 10709, 10718}, {10727, 10731, 10735, 10739, 10743, 10747, 10751}, {10755, 10768, 229, 10779, 10790, 10795, 10804, 10815, 10822, 10837, 10848, 10861, 343}, {10874, 10881, 10888, 10895, 10902, 10909, 10916, 10815, 10923, 10930, 10937, 10944, 343}, 0, 6, 344, 346, {348,10951,10606},{357,876},{370},{376,10961,2979}},
-       {10974, 409, 2674, 2195, 370, 447, 457, 10998, 11001, {11004, 11017, 11027, 11036, 11046, 11057, 11068}, {11080, 11083, 11088, 11093, 11098, 11103, 11108}, {11113, 11126, 11137, 11147, 11158, 11170, 11182, 11195, 11207, 11220, 11235, 11256, 343}, {11275, 11281, 11287, 11293, 11299, 11305, 11311, 11317, 11323, 11329, 11336, 11343, 343}, 0, 1, 344, 346, {348,2674},{357,409},{370},{376,2195}},
-       {11350, 2921, 1938, 2991, 370, 447, 2763, 11372, 16538, {11388, 11401, 11422, 11441, 11462, 11481, 11494}, {11505, 11512, 11519, 11526, 11533, 11540, 11547}, {16546, 16561, 11588, 11597, 11608, 16576, 16589, 11645, 11660, 11679, 11698, 11715, 343}, {16602, 16609, 11748, 11755, 11762, 16616, 16623, 11783, 11790, 11797, 11804, 11811, 343}, 0, 1, 344, 346, {348,11818,1938},{357,2921},{370},{376,2991}},
-       {16630, 16669, 5015, 438, 370, 16699, 1146, 465, 468, {11827, 11835, 11846, 11856, 11867, 11876, 11885}, {11895, 11898, 11901, 11904, 11907, 11910, 11913}, {11916, 11926, 11934, 11942, 11950, 11958, 11965, 11973, 11981, 11988, 11994, 12001, 343}, {12009, 12013, 1871, 12017, 3781, 12021, 12025, 12029, 12033, 12037, 12041, 12045, 343}, 0, 1, 344, 346, {348,16714,5015},{357,16669},{370},{376,438}},
-       {387, 409, 1938, 438, 370, 447, 457, 465, 468, {12049, 484, 505, 6696, 12062, 12079, 12090}, {574, 582, 590, 12103, 12111, 612, 12119}, {12127, 641, 658, 667, 12142, 12149, 12158, 699, 712, 731, 748, 763, 343}, {12167, 786, 12175, 794, 12183, 12191, 12199, 802, 12207, 818, 826, 12217, 343}, 0, 1, 344, 346, {348,12229,1938},{357,409},{370},{376,438}},
-       {16727, 409, 5015, 2979, 56, 447, 457, 343, 343, {12243, 12250, 12258, 12266, 12275, 12285, 12292}, {2022, 6484, 2028, 12301, 2034, 12304, 2040}, {12307, 12316, 12326, 2064, 8841, 12332, 12338, 12344, 2091, 2101, 2109, 8853, 343}, {2127, 2131, 2909, 2139, 8841, 2143, 2147, 2151, 2155, 2159, 2163, 8866, 343}, 0, 0, 344, 346, {348,5015},{357,409},{370,56},{376,46,2979}},
-       {16752, 16792, 1938, 2991, 1409, 12382, 1146, 12389, 12405, {5226, 5228, 5230, 5232, 5234, 5236, 5238}, {5226, 5228, 5230, 5232, 5234, 5236, 5238}, {5226, 5228, 5230, 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 343}, {5226, 5228, 5230, 5232, 5234, 5236, 5238, 5240, 5242, 5244, 5247, 5250, 343}, 0, 0, 344, 346, {348,1938},{357,12373,16792},{370,1409},{376,2991}},
-       {16824, 1664, 1676, 16845, 370, 447, 457, 465, 468, {4546, 12450, 12461, 12471, 12481, 12491, 12505}, {4632, 4636, 12517, 12522, 12526, 12531, 12536}, {1779, 1786, 3770, 4681, 3781, 1810, 1815, 1820, 1827, 1837, 1845, 4725, 343}, {1863, 1867, 1871, 1875, 3781, 1879, 1883, 1887, 1891, 1895, 1899, 4755, 343}, 0, 0, 344, 346, {348,1907,1676},{357,1664},{370},{376,16845}},
-       {5984, 876, 1676, 438, 56, 447, 74, 12540, 12568, {12590, 12609, 12628, 12650, 12669, 12691, 12716}, {12735, 12745, 12755, 12768, 12778, 12791, 12807}, {12817, 12833, 12849, 12865, 12884, 12891, 12901, 12917, 12933, 12955, 12977, 12996, 343}, {12817, 12833, 12849, 12865, 12884, 12891, 12901, 12917, 12933, 12955, 12977, 12996, 343}, 0, 0, 344, 346, {348,5805,1676},{357,876},{370,56},{376,2685,438}},
-       {16854, 357, 10606, 16878, 370, 1136, 1146, 465, 468, {13018, 13027, 13036, 13044, 13053, 13062, 13069}, {13078, 13082, 13086, 13090, 13094, 13098, 13102}, {8818, 8826, 13106, 13112, 8841, 2074, 13119, 13125, 13132, 13141, 13148, 13156, 343}, {2127, 2131, 2909, 2139, 8841, 2143, 2147, 13164, 2155, 2159, 2163, 8866, 343}, 0, 6, 344, 346, {348,10606},{357},{370},{376,16878}},
-       {16889, 876, 16914, 16922, 16935, 447, 74, 13168, 13210, {13252, 13271, 13290, 13312, 13331, 13353, 13378}, {13397, 13407, 13417, 13430, 13440, 13453, 13469}, {13479, 13507, 13535, 13551, 13570, 13577, 13587, 13603, 13619, 13647, 13669, 13691, 343}, {13716, 13735, 13535, 13551, 13570, 13577, 13587, 13603, 13754, 13770, 13786, 13796, 343}, 0, 0, 344, 346, {348,16914},{357,876},{370,16935},{376,16922}},
-       {16943, 876, 5805, 2685, 56, 447, 74, 13809, 13822, {13835, 13854, 13876, 13901, 13917, 13939, 13958}, {13968, 13975, 13982, 13989, 13996, 14003, 14010}, {14014, 14030, 14055, 14074, 14093, 14100, 14113, 14126, 14145, 14176, 14201, 14223, 343}, {14248, 14256, 14270, 14284, 14093, 14100, 14113, 14295, 14303, 14317, 14328, 14336, 343}, 0, 0, 344, 346, {348,5805},{357,876},{370,56},{376,2685}},
-       {16943, 876, 1907, 2685, 56, 447, 74, 14347, 14375, {14397, 14419, 14441, 14466, 14488, 14513, 14541}, {14563, 14573, 14583, 14596, 14606, 14619, 14635}, {14645, 14661, 14686, 14705, 14727, 14734, 14747, 14760, 14779, 14810, 14835, 14854, 343}, {14645, 14661, 14686, 14705, 14727, 14734, 14747, 14760, 14779, 14810, 14835, 14854, 343}, 0, 0, 344, 346, {348,1907},{357,876},{370,56},{376,2685}},
-       {16889, 876, 5805, 16922, 16935, 447, 74, 14879, 14907, {14929, 14948, 14967, 14989, 15008, 15030, 15055}, {15074, 15079, 15087, 15095, 15103, 15111, 15119}, {15130, 15146, 15171, 15190, 15212, 15219, 15232, 15245, 15264, 15292, 15317, 15339, 343}, {15130, 15146, 15171, 15190, 15212, 15219, 15232, 15245, 15264, 15292, 15317, 15339, 343}, 0, 0, 344, 346, {348,5805},{357,876},{370,16935},{376,16922}},
-       {16943, 876, 5805, 2685, 56, 447, 74, 15364, 15376, {12590, 12609, 15388, 12650, 12669, 12691, 12716}, {12735, 12745, 15410, 12768, 12778, 12791, 12807}, {15423, 15448, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, {15423, 15448, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, 0, 0, 344, 346, {348,5805},{357,876},{370,56},{376,2685}},
-       {4759, 409, 888, 376, 370, 447, 457, 465, 468, {15628, 15636, 15641, 15648, 15658, 15664, 15671}, {15679, 15683, 2909, 15687, 15692, 15696, 15700}, {15705, 15713, 15722, 15728, 15734, 15739, 15745, 15751, 15758, 15767, 15775, 15784, 343}, {15793, 2131, 2909, 15797, 2070, 15801, 15806, 13164, 15810, 15814, 2163, 2917, 343}, 0, 1, 344, 346, {348,888},{357,409},{370},{376}},
-       {16943, 876, 5805, 2685, 56, 447, 74, 15364, 15376, {15818, 12609, 15846, 12650, 12669, 12691, 12716}, {12735, 12745, 15410, 12768, 12778, 12791, 12807}, {15423, 15865, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, {15423, 15448, 12849, 15473, 15492, 12891, 15499, 15512, 15528, 15556, 15578, 15606, 343}, 0, 0, 344, 346, {348,5805},{357,876},{370,56},{376,2685}},
+       {387, 409, 422, 438, 370, 447, 457, 465, 468, {471, 484, 505, 520, 531, 550, 561}, {574, 582, 590, 596, 602, 612, 620}, {628, 641, 658, 667, 678, 685, 692, 699, 712, 731, 748, 763, 343}, {780, 786, 658, 794, 678, 685, 692, 802, 810, 818, 826, 836, 343}, 0, 1, 844, 346, {348,846,422},{357,409},{370},{376,438}},
+       {5991, 878, 2678, 438, 370, 447, 457, 465, 468, {899, 908, 916, 924, 933, 940, 950}, {959, 963, 967, 971, 975, 979, 983}, {987, 993, 1000, 1006, 1012, 1017, 1022, 1029, 1035, 1044, 1052, 1061, 343}, {1070, 1075, 1000, 1080, 1012, 1017, 1085, 1090, 1094, 1099, 1104, 1109, 343}, 0, 1, 344, 346, {348,890,2678},{357,878},{370},{376,438}},
+       {15903, 5000, 5267, 15948, 15971, 5033, 5049, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, 0, 0, 344, 346, {348,5267},{357,5000},{370,15971},{376,15948}},
+       {7283, 1381, 3327, 2995, 1411, 447, 1416, 1424, 1429, {1434, 1442, 1452, 1460, 1468, 1477, 1484}, {1491, 1494, 1497, 1501, 1504, 1508, 1512}, {1515, 1521, 1527, 1535, 1541, 1549, 1557, 1567, 1573, 1581, 1589, 1598, 343}, {1607, 1609, 1612, 1616, 1619, 1621, 1624, 1628, 1633, 1636, 1638, 1641, 343}, 0, 1, 844, 346, {348,1394,3327},{357,1381},{370,1411},{376,1401,2995}},
+       {1645, 1666, 1678, 438, 370, 447, 1689, 465, 468, {1698, 1706, 1713, 1721, 1728, 1736, 1743}, {1751, 1756, 1760, 1764, 1768, 1772, 1776}, {1781, 1788, 1796, 1802, 1808, 1812, 1817, 1822, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 1909, 346, {348,1911,1678},{357,1666},{370},{376,438}},
+       {1920, 1381, 1942, 438, 370, 447, 1416, 1953, 1959, {1966, 1974, 1981, 1990, 1999, 2010, 2018}, {2026, 2029, 2032, 2035, 2038, 2041, 2044}, {2047, 2054, 2062, 2068, 2074, 2078, 2083, 2088, 2095, 2105, 2113, 2122, 343}, {2131, 2135, 2139, 2143, 2074, 2147, 2151, 2155, 2159, 2163, 2167, 2171, 343}, 0, 1, 844, 346, {348,846,1942},{357,1381},{370},{376,438}},
+       {2175, 409, 37, 2199, 56, 447, 457, 2210, 2215, {2220, 2235, 2250, 2261, 2276, 2289, 2308}, {2323, 2330, 2337, 2344, 2351, 2358, 2365}, {2372, 2393, 2416, 2431, 2448, 2459, 2474, 2489, 2508, 2531, 2550, 2569, 343}, {2590, 2597, 2604, 2611, 2618, 2625, 2634, 2643, 2650, 2657, 2664, 2671, 343}, 0, 1, 344, 346, {348,2678,37},{357,409},{370,56},{376,2689,2199}},
+       {2701, 2732, 10613, 2199, 2759, 63, 2767, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {10613,10613,2752,2752,11825,3059,348,6012,15978},{2732,2732,2925,2939,2959},{2759,2759,2974,1411,370},{2199,2199,2983,2995,438}},
+       {3285, 3310, 3327, 2995, 370, 3336, 3349, 465, 468, {3361, 3371, 3381, 3389, 3401, 3409, 3419}, {3428, 3431, 3434, 3437, 3440, 3443, 3446}, {3449, 3458, 3467, 3477, 3486, 3495, 3504, 3514, 3521, 3529, 3537, 3547, 343}, {3556, 3562, 3568, 3575, 3581, 3587, 3593, 3600, 3604, 3609, 3614, 3621, 343}, 0, 1, 844, 346, {348,3327},{357,3310},{370},{376,2995}},
+       {3627, 3653, 2678, 438, 370, 447, 74, 465, 468, {3670, 3679, 3685, 3691, 3700, 3706, 3715}, {3722, 3727, 3732, 3737, 3742, 3747, 3752}, {3757, 3765, 3774, 3779, 3785, 3789, 3794, 3802, 3808, 3818, 1052, 3826, 343}, {3836, 3842, 3774, 3849, 3785, 3789, 3854, 3802, 3860, 1099, 1104, 3866, 343}, 0, 1, 344, 346, {890,3872,3277,2678},{357,878,3653},{370},{376,438}},
+       {3882, 878, 2678, 438, 370, 447, 74, 465, 468, {3903, 3921, 3935, 3953, 3971, 3989, 4005}, {4012, 4015, 4018, 4021, 4024, 4027, 4030}, {4033, 4044, 4057, 4064, 4075, 4082, 4091, 4100, 4113, 4126, 4141, 4154, 343}, {4165, 4172, 4057, 4179, 4075, 4186, 4193, 4200, 4207, 4214, 4221, 4228, 343}, 0, 0, 344, 346, {348,890,2678},{357,878},{370},{376,438}},
+       {4235, 4257, 4271, 2995, 1411, 4285, 4296, 4304, 4307, {4310, 4320, 4328, 4333, 4340, 4353, 4361}, {1619, 4369, 4371, 4373, 4377, 4380, 4382}, {4386, 4394, 4403, 4412, 4421, 4428, 4436, 4444, 4454, 4465, 1847, 1856, 343}, {4474, 4479, 4485, 4492, 4498, 4504, 4510, 4516, 4521, 4528, 1104, 4533, 343}, 0, 1, 4538, 346, {348,4541,4271},{357,4257},{370,1411},{376,1401,2995}},
+       {1920, 1381, 3327, 438, 370, 447, 1416, 465, 468, {4553, 4564, 4575, 4589, 4603, 4615, 4627}, {4639, 4643, 4648, 4653, 4658, 4662, 4667}, {4671, 4679, 3774, 4688, 4695, 4700, 4707, 4714, 1829, 4465, 4722, 4732, 343}, {1865, 1869, 1873, 1877, 4695, 4741, 4746, 4751, 1893, 1897, 4757, 4762, 343}, 0, 0, 844, 346, {348,3327},{357,1381},{370},{376,438}},
+       {15988, 409, 2678, 16009, 370, 447, 74, 4790, 4793, {4796, 4805, 4813, 4822, 4833, 4842, 4851}, {3152, 3156, 1873, 4858, 4862, 4866, 4870}, {4874, 4882, 3192, 4891, 4898, 4905, 4912, 3215, 4919, 4929, 1052, 4937, 343}, {4946, 1869, 1873, 1877, 4950, 4954, 4958, 3265, 4962, 4966, 1901, 3273, 343}, 0, 1, 344, 346, {348,890,2678},{357,409},{370},{376,1401,16009}},
+       {4970, 5000, 5022, 2995, 1411, 5033, 5049, 5062, 5069, {5076, 5086, 5096, 5106, 5116, 5126, 5136}, {1240, 5146, 5150, 5154, 5158, 5162, 5166}, {5170, 5175, 5180, 5185, 5190, 5195, 5200, 5205, 5210, 5215, 5221, 5227, 343}, {5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5254, 5257, 343}, 0, 0, 344, 346, {5022,5022,348,5260,5267,5276,5295,5312},{5000,5000,5331,5355,5382},{1411,1411,370,5411,5419},{2995,438,5428,5439}},
+       {16017, 16067, 5022, 16091, 5411, 5584, 5601, 5615, 5622, {5629, 5639, 5649, 5659, 5669, 5679, 5689}, {5699, 5703, 5707, 5711, 5715, 5719, 5723}, {5727, 5732, 5737, 5742, 5747, 5752, 5757, 5762, 5767, 5772, 5778, 5784, 343}, {5727, 5732, 5737, 5742, 5747, 5752, 5757, 5762, 5767, 5772, 5778, 5784, 343}, 0, 0, 344, 346, {5022,5022,348,5260,5267,16117,16130},{16067,16067,16141,16167,16189},{5411,1411,370,16213,16227,16242,5411,5419,16258,16275,16293},{16091,16091,16312,16334,2995,438,16358,16383,5428,5439}},
+       {8877, 878, 16410, 2995, 1411, 447, 74, 465, 468, {5819, 5826, 5834, 5842, 5851, 5861, 5869}, {5878, 3431, 5881, 5884, 5887, 5890, 5893}, {5896, 5904, 5913, 1802, 5919, 1812, 1817, 5923, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 5932, 1877, 5919, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 1909, 346, {348,5812,16410},{357,878},{370,1411},{376,1401,2995}},
+       {5936, 1381, 846, 5960, 5971, 447, 1416, 465, 468, {1698, 1706, 1713, 1721, 1728, 1736, 1743}, {5977, 3431, 3434, 5981, 3440, 5984, 5987}, {1781, 1788, 3774, 1802, 3785, 1812, 1817, 1822, 1829, 1839, 1847, 4732, 343}, {1865, 1869, 1873, 1877, 3785, 1881, 1885, 1889, 1893, 1897, 1901, 4762, 343}, 0, 1, 344, 346, {348,846},{357,1381},{370,5971},{376,5960}},
+       {5991, 878, 6012, 438, 370, 447, 74, 465, 468, {6023, 6033, 6047, 6054, 6061, 6070, 1484}, {6078, 6080, 6083, 6086, 6090, 6093, 2026}, {6096, 6105, 6110, 6117, 1808, 6127, 6136, 6143, 6153, 6163, 1589, 6176, 343}, {6186, 6190, 1873, 6194, 1808, 6198, 6202, 6206, 6210, 6214, 6219, 6223, 343}, 0, 1, 1909, 346, {348,5531,6012},{357,878},{370},{376,438}},
+       {16419, 3037, 37, 438, 370, 3070, 3075, 465, 468, {3097, 6260, 6274, 6287, 6300, 6313, 3144}, {3152, 6325, 6329, 6333, 6337, 6341, 3173}, {6345, 6353, 6363, 1006, 6370, 6375, 6381, 3215, 6387, 6396, 6404, 6413, 343}, {1865, 6422, 1873, 3257, 3785, 1881, 1885, 3265, 4962, 6426, 1901, 6430, 343}, 0, 0, 344, 346, {348,1678,890,37},{357,3037},{370},{376,16450,438}},
+       {5991, 878, 1942, 438, 370, 447, 74, 465, 468, {6434, 6444, 6449, 6456, 6465, 6469, 6476}, {6487, 6489, 6491, 2035, 6494, 1619, 6496}, {6498, 6507, 6517, 6524, 3785, 6532, 6538, 1822, 6544, 6555, 6565, 6575, 343}, {6585, 2135, 2913, 2143, 2074, 6589, 6593, 2155, 2159, 2917, 2167, 2921, 343}, 0, 1, 844, 346, {348,1942},{357,878},{370},{376,438}},
+       {6597, 6623, 1942, 2995, 1411, 6641, 74, 465, 468, {6657, 6680, 505, 6703, 6714, 6729, 6744}, {6759, 6764, 6769, 6774, 6779, 6784, 6789}, {6794, 6807, 6822, 6831, 6844, 6851, 6860, 6869, 6882, 6899, 6914, 6927, 343}, {6942, 6949, 6956, 6963, 678, 6970, 6977, 6984, 6991, 6998, 7005, 7012, 343}, 0, 1, 844, 346, {348,846,1942},{357,6623},{370,1411},{376,1401,2995}},
+       {7019, 7041, 3327, 2995, 370, 4285, 1148, 465, 468, {7055, 7064, 7076, 7083, 7091, 7101, 7107}, {7114, 7118, 7122, 7126, 7130, 7135, 7139}, {7143, 7153, 7162, 7170, 7178, 7186, 7193, 7200, 7208, 1589, 7214, 7222, 343}, {7231, 7235, 7239, 7244, 7248, 6202, 7252, 7256, 7260, 6219, 7264, 7268, 343}, 0, 1, 844, 346, {348,7272,3327},{357,7041},{370},{376,2995}},
+       {7283, 1381, 7304, 2995, 1411, 447, 1416, 465, 468, {7315, 7323, 7332, 7339, 7346, 7355, 7362}, {7369, 7372, 7375, 7378, 7381, 7385, 2026}, {4386, 4394, 7388, 4688, 7394, 4741, 4746, 1822, 1829, 4465, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 7394, 4741, 4746, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 4538, 346, {348,3327,7304},{357,1381},{370,1411},{376,1401,2995}},
+       {7399, 409, 6012, 7423, 7434, 447, 457, 7441, 7444, {7447, 7454, 7463, 7472, 7484, 7492, 7501}, {7511, 7515, 2913, 7520, 7525, 7529, 7533}, {7537, 7543, 3774, 7550, 1808, 7556, 7564, 7571, 7577, 7585, 7591, 7599, 343}, {2131, 7607, 2913, 7611, 7615, 7619, 7623, 7627, 7533, 7631, 7635, 7640, 343}, 0, 1, 1909, 346, {348,5531,6012},{357,409},{370,7434},{376,7644,7423}},
+       {16467, 7684, 6012, 438, 370, 447, 74, 7701, 7704, {7707, 7715, 7723, 1721, 1728, 1736, 7730}, {7738, 7742, 3434, 5981, 3440, 5984, 7746}, {5896, 5904, 3774, 1802, 1808, 1812, 1817, 7750, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 1909, 346, {348,6012},{357,7684},{370,5971},{376,5960,438}},
+       {7758, 878, 37, 2995, 1411, 447, 74, 7779, 7810, {7841, 7872, 7900, 7928, 7947, 7981, 8006}, {8031, 8039, 8044, 8049, 8054, 8062, 8067}, {8072, 8091, 8122, 8141, 8160, 8182, 8207, 8229, 8251, 8273, 8292, 8320, 343}, {8342, 8351, 8360, 8372, 8384, 8393, 8405, 8414, 8423, 8432, 8441, 8450, 343}, 0, 0, 344, 346, {348,37},{357,878},{370,1411},{376,8459,2995}},
+       {8499, 8526, 1942, 438, 370, 447, 457, 465, 468, {8544, 8550, 8560, 8566, 8577, 8587, 8592}, {8602, 8606, 8610, 8614, 8619, 8623, 8627}, {8631, 8636, 8643, 8648, 8654, 8661, 8669, 8676, 8685, 8692, 8697, 8704, 343}, {8712, 8716, 2913, 8721, 2882, 8725, 8729, 8733, 8738, 8742, 8746, 8750, 343}, 0, 1, 844, 346, {348,1942},{357,8526},{370},{376,438}},
+       {16493, 409, 2678, 2995, 1411, 447, 457, 465, 468, {8754, 8761, 8767, 8774, 8779, 8785, 8791}, {8797, 8801, 8805, 8809, 8813, 8817, 8821}, {8825, 8833, 8842, 2068, 8848, 2078, 2083, 8852, 2095, 2105, 2113, 8860, 343}, {2131, 2135, 2913, 2143, 8848, 2147, 2151, 8869, 2159, 2163, 2167, 8873, 343}, 0, 0, 344, 346, {348,890,2678},{357,409},{370,1411},{376,2995}},
+       {8877, 878, 1942, 2995, 370, 8897, 74, 465, 468, {8913, 8926, 8945, 8962, 8975, 8988, 9004}, {9017, 6764, 6769, 6774, 6779, 6784, 6789}, {9022, 9033, 9046, 9061, 9074, 9087, 9100, 9111, 9124, 9139, 9152, 9171, 343}, {9184, 9191, 9198, 9205, 9214, 9223, 9232, 9239, 9248, 9255, 9264, 9273, 343}, 0, 1, 844, 346, {348,846,1942},{357,878},{370},{376,2995}},
+       {8877, 878, 1942, 2995, 5971, 447, 74, 465, 468, {9305, 9320, 9341, 9356, 9369, 9382, 9397}, {9410, 9415, 9420, 9425, 9430, 9435, 9440}, {9445, 9462, 9471, 9486, 678, 9503, 9518, 9531, 9546, 9563, 9584, 9601, 343}, {9616, 9191, 9623, 9630, 678, 9637, 9644, 9651, 9248, 9658, 9665, 9672, 343}, 0, 1, 844, 346, {348,1394,1942},{357,878},{370,5971},{376,5960,2995}},
+       {9679, 9701, 3327, 2995, 1411, 447, 1689, 465, 468, {9715, 9723, 9734, 9740, 9746, 9755, 1484}, {7114, 7118, 1768, 9761, 7130, 7135, 9765}, {1781, 1788, 7388, 1802, 1808, 9769, 9775, 9781, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 9788, 1893, 1897, 1901, 1905, 343}, 0, 1, 844, 346, {348,9792,3327},{357,9701},{370,1411},{376,1401,2995}},
+       {8877, 878, 9799, 2995, 1411, 447, 9809, 465, 468, {9817, 9828, 9839, 9850, 9861, 9872, 9878}, {4380, 9887, 9889, 4371, 6078, 9891, 6489}, {9893, 9901, 9910, 9917, 3785, 9924, 9930, 1822, 1829, 9936, 1847, 9945, 343}, {9955, 9960, 9910, 1877, 3785, 9924, 9930, 1889, 9966, 1897, 1901, 9971, 343}, 0, 1, 844, 346, {348,846,9799},{357,878},{370,1411},{376,1401,2995}},
+       {9976, 10005, 4541, 2995, 370, 10026, 1416, 465, 468, {10044, 10055, 10065, 10074, 10085, 10097, 10108}, {10118, 4380, 10121, 9889, 10123, 10125, 6496}, {10128, 10138, 1796, 10149, 10158, 10164, 10172, 10180, 10188, 10199, 10208, 10218, 343}, {2131, 2135, 2913, 2143, 2074, 10228, 10233, 2155, 2159, 2163, 2167, 2921, 343}, 0, 1, 844, 346, {348,10238,4541},{357,10005},{370},{376,2995}},
+       {16514, 10278, 7272, 438, 370, 10300, 10315, 465, 468, {10327, 10339, 10351, 10363, 10377, 10392, 10405}, {10419, 10422, 10425, 10428, 10431, 6080, 7381}, {10434, 10441, 10449, 10454, 10465, 10475, 10485, 10492, 10504, 10513, 10520, 10531, 343}, {10541, 10545, 10549, 10553, 10557, 10561, 10565, 10569, 10573, 10577, 10581, 10585, 343}, 0, 1, 844, 346, {348,7272},{357,10278},{370},{376,438}},
+       {10589, 878, 10613, 2983, 370, 447, 74, 10622, 10629, {10636, 10652, 10665, 10681, 10698, 10716, 10725}, {10734, 10738, 10742, 10746, 10750, 10754, 10758}, {10762, 10775, 229, 10786, 10797, 10802, 10811, 10822, 10829, 10844, 10855, 10868, 343}, {10881, 10888, 10895, 10902, 10909, 10916, 10923, 10822, 10930, 10937, 10944, 10951, 343}, 0, 6, 344, 346, {348,10958,10613},{357,878},{370},{376,10968,2983}},
+       {10981, 409, 2678, 2199, 370, 447, 457, 11005, 11008, {11011, 11024, 11034, 11043, 11053, 11064, 11075}, {11087, 11090, 11095, 11100, 11105, 11110, 11115}, {11120, 11133, 11144, 11154, 11165, 11177, 11189, 11202, 11214, 11227, 11242, 11263, 343}, {11282, 11288, 11294, 11300, 11306, 11312, 11318, 11324, 11330, 11336, 11343, 11350, 343}, 0, 1, 344, 346, {348,2678},{357,409},{370},{376,2199}},
+       {11357, 2925, 1942, 2995, 370, 447, 2767, 11379, 16545, {11395, 11408, 11429, 11448, 11469, 11488, 11501}, {11512, 11519, 11526, 11533, 11540, 11547, 11554}, {16553, 16568, 11595, 11604, 11615, 16583, 16596, 11652, 11667, 11686, 11705, 11722, 343}, {16609, 16616, 11755, 11762, 11769, 16623, 16630, 11790, 11797, 11804, 11811, 11818, 343}, 0, 1, 844, 346, {348,11825,1942},{357,2925},{370},{376,2995}},
+       {16637, 16676, 5022, 438, 370, 16706, 1148, 465, 468, {11834, 11842, 11853, 11863, 11874, 11883, 11892}, {11902, 11905, 11908, 11911, 11914, 11917, 11920}, {11923, 11933, 11941, 11949, 11957, 11965, 11972, 11980, 11988, 11995, 12001, 12008, 343}, {12016, 12020, 1873, 12024, 3785, 12028, 12032, 12036, 12040, 12044, 12048, 12052, 343}, 0, 1, 344, 346, {348,16721,5022},{357,16676},{370},{376,438}},
+       {387, 409, 1942, 438, 370, 447, 457, 465, 468, {12056, 484, 505, 6703, 12069, 12086, 12097}, {574, 582, 590, 12110, 12118, 612, 12126}, {12134, 641, 658, 667, 12149, 12156, 12165, 699, 712, 731, 748, 763, 343}, {12174, 786, 12182, 794, 12190, 12198, 12206, 802, 12214, 818, 826, 12224, 343}, 0, 1, 844, 346, {348,12236,1942},{357,409},{370},{376,438}},
+       {16734, 409, 5022, 2983, 56, 447, 457, 343, 343, {12250, 12257, 12265, 12273, 12282, 12292, 12299}, {2026, 6491, 2032, 12308, 2038, 12311, 2044}, {12314, 12323, 12333, 2068, 8848, 12339, 12345, 12351, 2095, 2105, 2113, 8860, 343}, {2131, 2135, 2913, 2143, 8848, 2147, 2151, 2155, 2159, 2163, 2167, 8873, 343}, 0, 0, 344, 346, {348,5022},{357,409},{370,56},{376,46,2983}},
+       {16759, 16799, 1942, 2995, 1411, 12389, 1148, 12396, 12412, {5233, 5235, 5237, 5239, 5241, 5243, 5245}, {5233, 5235, 5237, 5239, 5241, 5243, 5245}, {5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5254, 5257, 343}, {5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, 5254, 5257, 343}, 0, 0, 844, 346, {348,1942},{357,12380,16799},{370,1411},{376,2995}},
+       {16831, 1666, 1678, 16852, 370, 447, 457, 465, 468, {4553, 12457, 12468, 12478, 12488, 12498, 12512}, {4639, 4643, 12524, 12529, 12533, 12538, 12543}, {1781, 1788, 3774, 4688, 3785, 1812, 1817, 1822, 1829, 1839, 1847, 4732, 343}, {1865, 1869, 1873, 1877, 3785, 1881, 1885, 1889, 1893, 1897, 1901, 4762, 343}, 0, 0, 1909, 346, {348,1911,1678},{357,1666},{370},{376,16852}},
+       {5991, 878, 1678, 438, 56, 447, 74, 12547, 12575, {12597, 12616, 12635, 12657, 12676, 12698, 12723}, {12742, 12752, 12762, 12775, 12785, 12798, 12814}, {12824, 12840, 12856, 12872, 12891, 12898, 12908, 12924, 12940, 12962, 12984, 13003, 343}, {12824, 12840, 12856, 12872, 12891, 12898, 12908, 12924, 12940, 12962, 12984, 13003, 343}, 0, 0, 1909, 346, {348,5812,1678},{357,878},{370,56},{376,2689,438}},
+       {16861, 357, 10613, 16885, 370, 1138, 1148, 465, 468, {13025, 13034, 13043, 13051, 13060, 13069, 13076}, {13085, 13089, 13093, 13097, 13101, 13105, 13109}, {8825, 8833, 13113, 13119, 8848, 2078, 13126, 13132, 13139, 13148, 13155, 13163, 343}, {2131, 2135, 2913, 2143, 8848, 2147, 2151, 13171, 2159, 2163, 2167, 8873, 343}, 0, 6, 344, 346, {348,10613},{357},{370},{376,16885}},
+       {16896, 878, 16921, 16929, 16942, 447, 74, 13175, 13217, {13259, 13278, 13297, 13319, 13338, 13360, 13385}, {13404, 13414, 13424, 13437, 13447, 13460, 13476}, {13486, 13514, 13542, 13558, 13577, 13584, 13594, 13610, 13626, 13654, 13676, 13698, 343}, {13723, 13742, 13542, 13558, 13577, 13584, 13594, 13610, 13761, 13777, 13793, 13803, 343}, 0, 0, 344, 346, {348,16921},{357,878},{370,16942},{376,16929}},
+       {16950, 878, 5812, 2689, 56, 447, 74, 13816, 13829, {13842, 13861, 13883, 13908, 13924, 13946, 13965}, {13975, 13982, 13989, 13996, 14003, 14010, 14017}, {14021, 14037, 14062, 14081, 14100, 14107, 14120, 14133, 14152, 14183, 14208, 14230, 343}, {14255, 14263, 14277, 14291, 14100, 14107, 14120, 14302, 14310, 14324, 14335, 14343, 343}, 0, 0, 344, 346, {348,5812},{357,878},{370,56},{376,2689}},
+       {16950, 878, 1911, 2689, 56, 447, 74, 14354, 14382, {14404, 14426, 14448, 14473, 14495, 14520, 14548}, {14570, 14580, 14590, 14603, 14613, 14626, 14642}, {14652, 14668, 14693, 14712, 14734, 14741, 14754, 14767, 14786, 14817, 14842, 14861, 343}, {14652, 14668, 14693, 14712, 14734, 14741, 14754, 14767, 14786, 14817, 14842, 14861, 343}, 0, 0, 344, 346, {348,1911},{357,878},{370,56},{376,2689}},
+       {16896, 878, 5812, 16929, 16942, 447, 74, 14886, 14914, {14936, 14955, 14974, 14996, 15015, 15037, 15062}, {15081, 15086, 15094, 15102, 15110, 15118, 15126}, {15137, 15153, 15178, 15197, 15219, 15226, 15239, 15252, 15271, 15299, 15324, 15346, 343}, {15137, 15153, 15178, 15197, 15219, 15226, 15239, 15252, 15271, 15299, 15324, 15346, 343}, 0, 0, 344, 346, {348,5812},{357,878},{370,16942},{376,16929}},
+       {16950, 878, 5812, 2689, 56, 447, 74, 15371, 15383, {12597, 12616, 15395, 12657, 12676, 12698, 12723}, {12742, 12752, 15417, 12775, 12785, 12798, 12814}, {15430, 15455, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, {15430, 15455, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, 0, 0, 344, 346, {348,5812},{357,878},{370,56},{376,2689}},
+       {4766, 409, 890, 376, 370, 447, 457, 465, 468, {15635, 15643, 15648, 15655, 15665, 15671, 15678}, {15686, 15690, 2913, 15694, 15699, 15703, 15707}, {15712, 15720, 15729, 15735, 15741, 15746, 15752, 15758, 15765, 15774, 15782, 15791, 343}, {15800, 2135, 2913, 15804, 2074, 15808, 15813, 13171, 15817, 15821, 2167, 2921, 343}, 0, 1, 344, 346, {348,890},{357,409},{370},{376}},
+       {16950, 878, 5812, 2689, 56, 447, 74, 15371, 15383, {15825, 12616, 15853, 12657, 12676, 12698, 12723}, {12742, 12752, 15417, 12775, 12785, 12798, 12814}, {15430, 15872, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, {15430, 15455, 12856, 15480, 15499, 12898, 15506, 15519, 15535, 15563, 15585, 15613, 343}, 0, 0, 344, 346, {348,5812},{357,878},{370,56},{376,2689}},
        {1, 24, 37, 46, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37},{357,24},{370,56},{376,46}},
-       {16967, 4993, 17012, 17019, 17042, 5026, 5042, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, 0, 0, 344, 346, {348,17012},{357,4993},{370,17042},{376,17019}},
-       {1916, 1379, 1938, 438, 370, 447, 1414, 1949, 1955, {1962, 1970, 1977, 1986, 1995, 2006, 2014}, {2022, 2025, 2028, 2031, 2034, 2037, 2040}, {2043, 2050, 2058, 2064, 2070, 2074, 2079, 2084, 2091, 2101, 2109, 2118, 343}, {2127, 2131, 2135, 2139, 2070, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 343}, 0, 1, 344, 346, {348,844,1938},{357,1379},{370},{376,438}},
-       {5984, 876, 2674, 438, 370, 447, 74, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 1, 344, 346, {348,2748,2674},{2728,2728,2921,2935,2955,876},{2755,2755,2970,1409,370},{2195,2195,2979,2991,438,376}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {8870, 876, 3868, 2991, 370, 447, 74, 465, 468, {3666, 3675, 3681, 3687, 3696, 3702, 3711}, {3718, 3723, 3728, 3733, 3738, 3743, 3748}, {3753, 3761, 3770, 3775, 3781, 3785, 3790, 3798, 3804, 3814, 1050, 3822, 343}, {3832, 3838, 3770, 3845, 3781, 3785, 3850, 3798, 3856, 1097, 1102, 3862, 343}, 0, 1, 344, 346, {888,3868,3273},{357,876,3649},{370},{376,438,2991}},
-       {5984, 876, 1938, 438, 370, 447, 74, 4783, 4786, {4789, 4798, 4806, 4815, 4826, 4835, 4844}, {3148, 3152, 1871, 4851, 4855, 4859, 4863}, {4867, 4875, 3188, 4884, 4891, 4898, 4905, 3211, 4912, 4922, 1050, 4930, 343}, {4939, 1867, 1871, 1875, 4943, 4947, 4951, 3261, 4955, 4959, 1899, 3269, 343}, 0, 1, 344, 346, {348,888,844,1938},{357,409,876},{370},{376,438}},
-       {8870, 876, 3868, 2991, 370, 447, 74, 465, 468, {5812, 5819, 5827, 5835, 5844, 5854, 5862}, {5871, 3427, 5874, 5877, 5880, 5883, 5886}, {5889, 5897, 5906, 1800, 5912, 1810, 1815, 5916, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 5925, 1875, 5912, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,5805,3273,3868},{357,876},{370,1409},{376,1399,2991}},
-       {5929, 1379, 844, 5953, 5964, 447, 1414, 465, 468, {1696, 1704, 1711, 1719, 1726, 1734, 1741}, {5970, 3427, 3430, 5974, 3436, 5977, 5980}, {1779, 1786, 3770, 1800, 3781, 1810, 1815, 1820, 1827, 1837, 1845, 4725, 343}, {1863, 1867, 1871, 1875, 3781, 1879, 1883, 1887, 1891, 1895, 1899, 4755, 343}, 0, 1, 344, 346, {348,844},{357,1379},{370,5964},{376,5953}},
-       {17048, 3033, 1676, 2991, 370, 3066, 3071, 465, 468, {3093, 6253, 6267, 6280, 6293, 6306, 3140}, {3148, 6318, 6322, 6326, 6330, 6334, 3169}, {6338, 6346, 6356, 1004, 6363, 6368, 6374, 3211, 6380, 6389, 6397, 6406, 343}, {1863, 6415, 1871, 3253, 3781, 1879, 1883, 3261, 4955, 6419, 1899, 6423, 343}, 0, 1, 344, 346, {348,1676},{357,3033},{370},{376,2991}},
-       {16460, 7677, 3323, 438, 5964, 447, 74, 7694, 7697, {7700, 7708, 7716, 1719, 1726, 1734, 7723}, {7731, 7735, 3430, 5974, 3436, 5977, 7739}, {5889, 5897, 3770, 1800, 1806, 1810, 1815, 7743, 1827, 1837, 1845, 1854, 343}, {1863, 1867, 1871, 1875, 1806, 1879, 1883, 1887, 1891, 1895, 1899, 1903, 343}, 0, 1, 344, 346, {348,6005,3323},{357,7677},{370,5964},{376,5953,438}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {17103, 5324, 17150, 15941, 17042, 17170, 17187, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {5163, 5168, 5173, 5178, 5183, 5188, 5193, 5198, 5203, 5208, 5214, 5220, 343}, 0, 0, 344, 346, {348,17150},{357,5324},{370,17042},{376,15941}},
-       {17202, 9694, 1938, 438, 370, 447, 1687, 1949, 1955, {1962, 1970, 1977, 1986, 1995, 2006, 2014}, {2022, 2025, 2028, 2031, 2034, 2037, 2040}, {17225, 2050, 2058, 2064, 2070, 2074, 2079, 2084, 2091, 2101, 2109, 2118, 343}, {17233, 2131, 17238, 2139, 2070, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 343}, 0, 1, 344, 346, {348,844,1938},{357,1379,9694},{370},{376,438}},
-       {17243, 876, 3868, 2195, 56, 447, 74, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,3273,3868},{2728,2728,2921,2935,2955,876},{2755,2755,2970,1409,370,56},{2195,2195,2979,2991,438,46}},
-       {17266, 17303, 2674, 2991, 1409, 17332, 457, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033,17303},{370,1409},{376,2979,2991}},
-       {5984, 876, 6005, 438, 370, 447, 74, 465, 468, {3666, 3675, 3681, 3687, 3696, 3702, 3711}, {3718, 3723, 3728, 3733, 3738, 3743, 3748}, {3753, 3761, 3770, 3775, 3781, 3785, 3790, 3798, 3804, 3814, 1050, 3822, 343}, {3832, 3838, 3770, 3845, 3781, 3785, 3850, 3798, 3856, 1097, 1102, 3862, 343}, 0, 0, 344, 346, {888,3868,3273,5524,6005},{357,876,3649},{370},{376,438}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {17347, 17370, 888, 17382, 17393, 447, 457, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, 0, 0, 344, 346, {348,888},{357,17370},{370,17393},{376,17382}},
-       {1916, 1379, 1938, 438, 370, 447, 1414, 1949, 1955, {1962, 1970, 1977, 1986, 1995, 2006, 2014}, {2022, 2025, 2028, 2031, 2034, 2037, 2040}, {2043, 2050, 2058, 2064, 2070, 2074, 2079, 2084, 2091, 2101, 2109, 2118, 343}, {2127, 2131, 2135, 2139, 2070, 2143, 2147, 2151, 2155, 2159, 2163, 2167, 343}, 0, 1, 344, 346, {348,844,1938},{357,1379},{370},{376,438}},
-       {17401, 17425, 2674, 2195, 56, 447, 2763, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,888,2674},{2728,2728,2921,2935,2955,17425},{2755,2755,2970,1409,370,56},{2195,2195,2979,2991,438,2685}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {5984, 876, 1938, 438, 370, 447, 74, 465, 468, {3666, 3675, 3681, 3687, 3696, 3702, 3711}, {3718, 3723, 3728, 3733, 3738, 3743, 3748}, {3753, 3761, 3770, 3775, 3781, 3785, 3790, 3798, 3804, 3814, 1050, 3822, 343}, {3832, 3838, 3770, 3845, 3781, 3785, 3850, 3798, 3856, 1097, 1102, 3862, 343}, 0, 1, 344, 346, {888,3868,3273,844,1938},{357,876,3649},{370},{376,438}},
-       {17438, 24, 1676, 2991, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,1676},{357,24},{370,56},{376,46,2991}},
-       {17103, 5324, 17150, 15941, 17042, 17170, 17187, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {5163, 5168, 5173, 5178, 5183, 5188, 5193, 5198, 5203, 5208, 5214, 5220, 343}, 0, 0, 344, 346, {348,17150},{357,5324},{370,17042},{376,15941}},
-       {17243, 876, 3868, 2195, 56, 447, 74, 3083, 3088, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,3273,3868},{2728,2728,2921,2935,2955,876},{2755,2755,2970,1409,370,56},{2195,2195,2979,2991,438,46}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {3623, 3649, 2674, 438, 370, 447, 74, 465, 468, {3666, 3675, 3681, 3687, 3696, 3702, 3711}, {3718, 3723, 3728, 3733, 3738, 3743, 3748}, {3753, 3761, 3770, 3775, 3781, 3785, 3790, 3798, 3804, 3814, 1050, 3822, 343}, {3832, 3838, 3770, 3845, 3781, 3785, 3850, 3798, 3856, 1097, 1102, 3862, 343}, 0, 1, 344, 346, {888,3868,3273,2674},{357,876,3649},{370},{376,438}},
-       {17438, 24, 1676, 2991, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,1676},{357,24},{370,56},{376,46,2991}},
-       {5984, 876, 2674, 438, 370, 447, 74, 3083, 3088, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,2674},{2728,2728,2921,2935,2955,876},{2755,2755,2970,1409,370},{2195,2195,2979,2991,438,376}},
-       {2999, 3033, 3055, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,11818},{357,3033},{370,16935},{376,2979,16922}},
-       {17438, 24, 1676, 2991, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,1676},{357,24},{370,56},{376,46,2991}},
-       {16727, 409, 5015, 2979, 56, 447, 457, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,5015},{2728,2728,2921,2935,2955,409},{2755,2755,2970,1409,370,56},{2195,2195,2979,2991,438,46}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2999, 3033, 2674, 2979, 1409, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,2674},{357,3033},{370,1409},{376,2979,1399}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {17459, 17483, 17492, 17501, 17512, 17521, 17534, 17543, 17548, 17559, 17581, 17605, 343}, {17459, 17483, 17492, 17501, 17512, 17521, 17534, 17543, 17548, 17559, 17581, 17605, 343}, 0, 4, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {17459, 17483, 17492, 17501, 17627, 17521, 17534, 17543, 17548, 17559, 17581, 17605, 343}, {17459, 17483, 17492, 17501, 17627, 17521, 17534, 17543, 17548, 17559, 17581, 17605, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {17636, 17667, 2674, 2979, 2755, 447, 2763, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {2674,6005},{2728,2728,2921,2935,2955,17667},{2755,2755,2970,1409,370},{2979,438}},
-       {2999, 3033, 2674, 2979, 370, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370},{376,2979,1399}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {17459, 17483, 17492, 17501, 17512, 17521, 17534, 17543, 17548, 17559, 17581, 17605, 343}, {17459, 17483, 17492, 17501, 17512, 17521, 17534, 17543, 17548, 17559, 17581, 17605, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2171, 409, 10606, 2195, 56, 447, 457, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,37,10606},{2728,2728,2921,2935,2955,409},{2755,2755,2970,1409,370,56},{2195,2195,2979,2991,438,46}},
-       {17048, 3033, 2674, 2991, 1409, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,1409},{376,2979,1399,2991}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {17401, 17425, 10606, 2195, 56, 447, 2763, 465, 468, {2770, 2777, 2784, 2792, 2802, 2811, 2818}, {2827, 2831, 2835, 2839, 2843, 2847, 2851}, {2855, 2863, 2872, 2064, 2878, 2882, 2887, 2084, 2091, 2892, 2109, 2900, 343}, {2127, 2131, 2909, 2139, 2878, 2143, 2147, 2151, 2155, 2913, 2163, 2917, 343}, 0, 0, 344, 346, {348,2748,10606},{2728,2728,2921,2935,2955,17425},{2755,2755,2970,1409,370,56},{2195,2195,2979,2991,438,2685}},
-       {17048, 3033, 1676, 2991, 1409, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,1907,1676},{357,3033},{370,1409},{376,2979,1399,2991}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {17078, 24, 2674, 2979, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2674},{357,24},{370,56},{376,46,2979}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {17686, 17721, 2674, 2979, 16935, 3066, 17744, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033,17721},{370,16935},{376,2979,16922}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,888,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {2999, 3033, 2674, 2979, 16935, 3066, 3071, 3083, 3088, {3093, 3101, 3107, 3114, 3125, 3132, 3140}, {3148, 3152, 1871, 3156, 3161, 3165, 3169}, {3174, 3180, 3188, 1004, 3194, 3199, 3205, 3211, 3218, 1042, 3229, 3239, 343}, {3249, 1867, 1871, 3253, 3257, 1879, 1883, 3261, 1891, 3265, 1899, 3269, 343}, 0, 1, 344, 346, {348,3273,3055,11818,2674},{357,3033},{370,16935},{376,2979,16922}},
-       {1112, 357, 348, 376, 370, 1136, 1146, 1154, 1161, {1168, 1178, 1188, 1198, 1208, 1218, 1228}, {1238, 1242, 1246, 1250, 1254, 1258, 1262}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, {1266, 1273, 1280, 1287, 1294, 1301, 1308, 1315, 1322, 1329, 1336, 1346, 343}, 0, 0, 344, 346, {348},{357},{370},{376}}
+       {16974, 5000, 17019, 17026, 17049, 5033, 5049, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, 0, 0, 344, 346, {348,17019},{357,5000},{370,17049},{376,17026}},
+       {1920, 1381, 1942, 438, 370, 447, 1416, 1953, 1959, {1966, 1974, 1981, 1990, 1999, 2010, 2018}, {2026, 2029, 2032, 2035, 2038, 2041, 2044}, {2047, 2054, 2062, 2068, 2074, 2078, 2083, 2088, 2095, 2105, 2113, 2122, 343}, {2131, 2135, 2139, 2143, 2074, 2147, 2151, 2155, 2159, 2163, 2167, 2171, 343}, 0, 1, 844, 346, {348,846,1942},{357,1381},{370},{376,438}},
+       {5991, 878, 2678, 438, 370, 447, 74, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 1, 344, 346, {348,2752,2678},{2732,2732,2925,2939,2959,878},{2759,2759,2974,1411,370},{2199,2199,2983,2995,438,376}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {8877, 878, 3872, 2995, 370, 447, 74, 465, 468, {3670, 3679, 3685, 3691, 3700, 3706, 3715}, {3722, 3727, 3732, 3737, 3742, 3747, 3752}, {3757, 3765, 3774, 3779, 3785, 3789, 3794, 3802, 3808, 3818, 1052, 3826, 343}, {3836, 3842, 3774, 3849, 3785, 3789, 3854, 3802, 3860, 1099, 1104, 3866, 343}, 0, 1, 344, 346, {890,3872,3277},{357,878,3653},{370},{376,438,2995}},
+       {5991, 878, 1942, 438, 370, 447, 74, 4790, 4793, {4796, 4805, 4813, 4822, 4833, 4842, 4851}, {3152, 3156, 1873, 4858, 4862, 4866, 4870}, {4874, 4882, 3192, 4891, 4898, 4905, 4912, 3215, 4919, 4929, 1052, 4937, 343}, {4946, 1869, 1873, 1877, 4950, 4954, 4958, 3265, 4962, 4966, 1901, 3273, 343}, 0, 1, 844, 346, {348,890,846,1942},{357,409,878},{370},{376,438}},
+       {8877, 878, 3872, 2995, 370, 447, 74, 465, 468, {5819, 5826, 5834, 5842, 5851, 5861, 5869}, {5878, 3431, 5881, 5884, 5887, 5890, 5893}, {5896, 5904, 5913, 1802, 5919, 1812, 1817, 5923, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 5932, 1877, 5919, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 344, 346, {348,5812,3277,3872},{357,878},{370,1411},{376,1401,2995}},
+       {5936, 1381, 846, 5960, 5971, 447, 1416, 465, 468, {1698, 1706, 1713, 1721, 1728, 1736, 1743}, {5977, 3431, 3434, 5981, 3440, 5984, 5987}, {1781, 1788, 3774, 1802, 3785, 1812, 1817, 1822, 1829, 1839, 1847, 4732, 343}, {1865, 1869, 1873, 1877, 3785, 1881, 1885, 1889, 1893, 1897, 1901, 4762, 343}, 0, 1, 344, 346, {348,846},{357,1381},{370,5971},{376,5960}},
+       {17055, 3037, 1678, 2995, 370, 3070, 3075, 465, 468, {3097, 6260, 6274, 6287, 6300, 6313, 3144}, {3152, 6325, 6329, 6333, 6337, 6341, 3173}, {6345, 6353, 6363, 1006, 6370, 6375, 6381, 3215, 6387, 6396, 6404, 6413, 343}, {1865, 6422, 1873, 3257, 3785, 1881, 1885, 3265, 4962, 6426, 1901, 6430, 343}, 0, 1, 1909, 346, {348,1678},{357,3037},{370},{376,2995}},
+       {16467, 7684, 3327, 438, 5971, 447, 74, 7701, 7704, {7707, 7715, 7723, 1721, 1728, 1736, 7730}, {7738, 7742, 3434, 5981, 3440, 5984, 7746}, {5896, 5904, 3774, 1802, 1808, 1812, 1817, 7750, 1829, 1839, 1847, 1856, 343}, {1865, 1869, 1873, 1877, 1808, 1881, 1885, 1889, 1893, 1897, 1901, 1905, 343}, 0, 1, 844, 346, {348,6012,3327},{357,7684},{370,5971},{376,5960,438}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {17110, 5331, 17157, 15948, 17049, 17177, 17194, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {5170, 5175, 5180, 5185, 5190, 5195, 5200, 5205, 5210, 5215, 5221, 5227, 343}, 0, 0, 344, 346, {348,17157},{357,5331},{370,17049},{376,15948}},
+       {17209, 9701, 1942, 438, 370, 447, 1689, 1953, 1959, {1966, 1974, 1981, 1990, 1999, 2010, 2018}, {2026, 2029, 2032, 2035, 2038, 2041, 2044}, {17232, 2054, 2062, 2068, 2074, 2078, 2083, 2088, 2095, 2105, 2113, 2122, 343}, {17240, 2135, 17245, 2143, 2074, 2147, 2151, 2155, 2159, 2163, 2167, 2171, 343}, 0, 1, 844, 346, {348,846,1942},{357,1381,9701},{370},{376,438}},
+       {17250, 878, 3872, 2199, 56, 447, 74, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,3277,3872},{2732,2732,2925,2939,2959,878},{2759,2759,2974,1411,370,56},{2199,2199,2983,2995,438,46}},
+       {17273, 17310, 2678, 2995, 1411, 17339, 457, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037,17310},{370,1411},{376,2983,2995}},
+       {5991, 878, 6012, 438, 370, 447, 74, 465, 468, {3670, 3679, 3685, 3691, 3700, 3706, 3715}, {3722, 3727, 3732, 3737, 3742, 3747, 3752}, {3757, 3765, 3774, 3779, 3785, 3789, 3794, 3802, 3808, 3818, 1052, 3826, 343}, {3836, 3842, 3774, 3849, 3785, 3789, 3854, 3802, 3860, 1099, 1104, 3866, 343}, 0, 0, 1909, 346, {890,3872,3277,5531,6012},{357,878,3653},{370},{376,438}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {17354, 17377, 890, 17389, 17400, 447, 457, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, 0, 0, 344, 346, {348,890},{357,17377},{370,17400},{376,17389}},
+       {1920, 1381, 1942, 438, 370, 447, 1416, 1953, 1959, {1966, 1974, 1981, 1990, 1999, 2010, 2018}, {2026, 2029, 2032, 2035, 2038, 2041, 2044}, {2047, 2054, 2062, 2068, 2074, 2078, 2083, 2088, 2095, 2105, 2113, 2122, 343}, {2131, 2135, 2139, 2143, 2074, 2147, 2151, 2155, 2159, 2163, 2167, 2171, 343}, 0, 1, 844, 346, {348,846,1942},{357,1381},{370},{376,438}},
+       {17408, 17432, 2678, 2199, 56, 447, 2767, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,890,2678},{2732,2732,2925,2939,2959,17432},{2759,2759,2974,1411,370,56},{2199,2199,2983,2995,438,2689}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {5991, 878, 1942, 438, 370, 447, 74, 465, 468, {3670, 3679, 3685, 3691, 3700, 3706, 3715}, {3722, 3727, 3732, 3737, 3742, 3747, 3752}, {3757, 3765, 3774, 3779, 3785, 3789, 3794, 3802, 3808, 3818, 1052, 3826, 343}, {3836, 3842, 3774, 3849, 3785, 3789, 3854, 3802, 3860, 1099, 1104, 3866, 343}, 0, 1, 844, 346, {890,3872,3277,846,1942},{357,878,3653},{370},{376,438}},
+       {17445, 24, 1678, 2995, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 1909, 346, {348,37,1678},{357,24},{370,56},{376,46,2995}},
+       {17110, 5331, 17157, 15948, 17049, 17177, 17194, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {5170, 5175, 5180, 5185, 5190, 5195, 5200, 5205, 5210, 5215, 5221, 5227, 343}, 0, 0, 344, 346, {348,17157},{357,5331},{370,17049},{376,15948}},
+       {17250, 878, 3872, 2199, 56, 447, 74, 3087, 3092, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,3277,3872},{2732,2732,2925,2939,2959,878},{2759,2759,2974,1411,370,56},{2199,2199,2983,2995,438,46}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {3627, 3653, 2678, 438, 370, 447, 74, 465, 468, {3670, 3679, 3685, 3691, 3700, 3706, 3715}, {3722, 3727, 3732, 3737, 3742, 3747, 3752}, {3757, 3765, 3774, 3779, 3785, 3789, 3794, 3802, 3808, 3818, 1052, 3826, 343}, {3836, 3842, 3774, 3849, 3785, 3789, 3854, 3802, 3860, 1099, 1104, 3866, 343}, 0, 1, 344, 346, {890,3872,3277,2678},{357,878,3653},{370},{376,438}},
+       {17445, 24, 1678, 2995, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 1909, 346, {348,37,1678},{357,24},{370,56},{376,46,2995}},
+       {5991, 878, 2678, 438, 370, 447, 74, 3087, 3092, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,2678},{2732,2732,2925,2939,2959,878},{2759,2759,2974,1411,370},{2199,2199,2983,2995,438,376}},
+       {3003, 3037, 3059, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,11825},{357,3037},{370,16942},{376,2983,16929}},
+       {17445, 24, 1678, 2995, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 1909, 346, {348,37,1678},{357,24},{370,56},{376,46,2995}},
+       {16734, 409, 5022, 2983, 56, 447, 457, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,5022},{2732,2732,2925,2939,2959,409},{2759,2759,2974,1411,370,56},{2199,2199,2983,2995,438,46}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {3003, 3037, 2678, 2983, 1411, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,2678},{357,3037},{370,1411},{376,2983,1401}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {17466, 17490, 17499, 17508, 17519, 17528, 17541, 17550, 17555, 17566, 17588, 17612, 343}, {17466, 17490, 17499, 17508, 17519, 17528, 17541, 17550, 17555, 17566, 17588, 17612, 343}, 0, 4, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {17466, 17490, 17499, 17508, 17634, 17528, 17541, 17550, 17555, 17566, 17588, 17612, 343}, {17466, 17490, 17499, 17508, 17634, 17528, 17541, 17550, 17555, 17566, 17588, 17612, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {17643, 17674, 2678, 2983, 2759, 447, 2767, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {2678,6012},{2732,2732,2925,2939,2959,17674},{2759,2759,2974,1411,370},{2983,438}},
+       {3003, 3037, 2678, 2983, 370, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370},{376,2983,1401}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {17466, 17490, 17499, 17508, 17519, 17528, 17541, 17550, 17555, 17566, 17588, 17612, 343}, {17466, 17490, 17499, 17508, 17519, 17528, 17541, 17550, 17555, 17566, 17588, 17612, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {2175, 409, 10613, 2199, 56, 447, 457, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,37,10613},{2732,2732,2925,2939,2959,409},{2759,2759,2974,1411,370,56},{2199,2199,2983,2995,438,46}},
+       {17055, 3037, 2678, 2995, 1411, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,1411},{376,2983,1401,2995}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {17408, 17432, 10613, 2199, 56, 447, 2767, 465, 468, {2774, 2781, 2788, 2796, 2806, 2815, 2822}, {2831, 2835, 2839, 2843, 2847, 2851, 2855}, {2859, 2867, 2876, 2068, 2882, 2886, 2891, 2088, 2095, 2896, 2113, 2904, 343}, {2131, 2135, 2913, 2143, 2882, 2147, 2151, 2155, 2159, 2917, 2167, 2921, 343}, 0, 0, 344, 346, {348,2752,10613},{2732,2732,2925,2939,2959,17432},{2759,2759,2974,1411,370,56},{2199,2199,2983,2995,438,2689}},
+       {17055, 3037, 1678, 2995, 1411, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 1909, 346, {348,3277,3059,1911,1678},{357,3037},{370,1411},{376,2983,1401,2995}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {184, 187, 190, 193, 196, 199, 202}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {17085, 24, 2678, 2983, 56, 63, 74, 81, 84, {87, 98, 113, 130, 147, 160, 173}, {87, 98, 113, 130, 147, 160, 173}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, {205, 216, 229, 238, 249, 258, 269, 280, 291, 304, 317, 330, 343}, 0, 6, 344, 346, {348,37,2678},{357,24},{370,56},{376,46,2983}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {17693, 17728, 2678, 2983, 16942, 3070, 17751, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037,17728},{370,16942},{376,2983,16929}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,890,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {3003, 3037, 2678, 2983, 16942, 3070, 3075, 3087, 3092, {3097, 3105, 3111, 3118, 3129, 3136, 3144}, {3152, 3156, 1873, 3160, 3165, 3169, 3173}, {3178, 3184, 3192, 1006, 3198, 3203, 3209, 3215, 3222, 1044, 3233, 3243, 343}, {3253, 1869, 1873, 3257, 3261, 1881, 1885, 3265, 1893, 3269, 1901, 3273, 343}, 0, 1, 344, 346, {348,3277,3059,11825,2678},{357,3037},{370,16942},{376,2983,16929}},
+       {1114, 357, 348, 376, 370, 1138, 1148, 1156, 1163, {1170, 1180, 1190, 1200, 1210, 1220, 1230}, {1240, 1244, 1248, 1252, 1256, 1260, 1264}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, {1268, 1275, 1282, 1289, 1296, 1303, 1310, 1317, 1324, 1331, 1338, 1348, 343}, 0, 0, 344, 346, {348},{357},{370},{376}}
 };
 
 
 static const NumberFormatEntry number_format_entries [] = {
-       {17757, 17760, 17757, 17760, 17757, 17760, 0, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 2, 2, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17796, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 17819, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17829, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17839, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17843, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17847, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 1, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17852, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17856, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17859, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17863, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17865, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17847, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17869, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17873, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17877, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17881, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17885, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 10412, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17888, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17847, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17892, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17896, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17899, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17902, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17910, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17847, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17914, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17917, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {2, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 17920, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 0, 3, 2, 2, 1, 0, 2, 2, {5, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17924, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17927, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 0, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 9884, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 0, 17792, 17796, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17847, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17931, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17938, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17942, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17949, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17956, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17931, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17931, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17931, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 17964, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17974, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17978, 17794, 17978, 17794, 17978, 17980, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17985, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17978, 17794, 17978, 17794, 17978, 17980, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17847, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 17988, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17998, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17789, 17787, 17789, 17787, 17789, 17850, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18002, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18012, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18015, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17978, 17794, 17978, 17794, 17978, 18017, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18022, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 4376, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 18032, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17835, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18036, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17835, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18046, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18049, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 9884, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18059, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18063, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 18073, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18076, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17850, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18086, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18096, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18099, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17850, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18109, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18119, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 18122, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18126, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18136, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 17850, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18140, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 18150, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18154, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 18164, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 12, 2, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17757, 17760, 17757, 17760, 17757, 17760, 18167, 17763, 17766, 17770, 17774, 17779, 17783, 17785, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17787, 17794, 17787, 17794, 17787, 17794, 18177, 17792, 17766, 17770, 17774, 17779, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18180, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18184, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 18187, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 17850, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
-       {17794, 17787, 17794, 17787, 17794, 17787, 0, 17792, 17796, 17770, 17800, 17810, 17783, 17785, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}
+       {17764, 17767, 17764, 17767, 17764, 17767, 0, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 2, 2, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17799, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 17822, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17832, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17842, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17846, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17850, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 1, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17855, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17859, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17862, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17866, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17868, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 0, 0, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 0, 0, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17850, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17872, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17876, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17880, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17884, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 5, 1, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17888, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 10419, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17891, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17850, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17895, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17899, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17902, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17905, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17913, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17850, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17917, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17920, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {2, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 17923, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 0, 3, 2, 2, 1, 0, 2, 2, {5, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17927, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17930, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 0, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 9891, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 0, 17797, 17799, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17850, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17934, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17941, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17945, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17952, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17959, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17934, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17934, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17934, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}, {2, 2, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 17967, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17977, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17981, 844, 17981, 844, 17981, 17983, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17988, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17981, 844, 17981, 844, 17981, 17983, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 12, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17850, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 17991, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18001, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 17794, 17792, 17794, 17792, 17794, 17853, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18005, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18015, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18018, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17981, 844, 17981, 844, 17981, 18020, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 2, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18025, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 4380, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 18035, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17838, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 8, 3, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18039, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17838, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18049, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18052, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 9891, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18062, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18066, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 18076, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 12, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18079, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17853, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18089, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18099, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18102, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17853, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18112, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18122, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 1, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 18125, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18129, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 3, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18139, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 17853, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 2, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18143, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 18153, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18157, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 11, 2, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 18167, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 12, 2, 1, 1, 1, 0, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17764, 17767, 17764, 17767, 17764, 17767, 18170, 17770, 17773, 17777, 17781, 17786, 1909, 17790, 1, 0, 1, 1, 3, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {17792, 844, 17792, 844, 17792, 844, 18180, 17797, 17773, 17777, 17781, 17786, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18183, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18187, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 18190, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 17853, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 0, 0, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}},
+       {844, 17792, 844, 17792, 844, 17792, 0, 17797, 17799, 17777, 17803, 17813, 1909, 17790, 9, 2, 1, 1, 1, 2, 2, 2, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}, {3, -1, -1, -1, -1}}
 };
 
 
 static const CultureInfoEntry culture_entries [] = {
-       {0x0001, 0x007F, 0x0401, -1,18190, 18193, 18193, 18193, 18200, 18215, 18219, 18190, 0, {16777216, 0, 0, 0, 0}, 0, 0, { 1256, 20420, 10004, 720, ';' }},
-       {0x0002, 0x007F, 0x0402, -1,18223, 18226, 18226, 18226, 18236, 18255, 18259, 18223, 0, {0, 0, 0, 0, 0}, 1, 1, { 1251, 20420, 10007, 866, ';' }},
-       {0x0003, 0x007F, 0x0403, -1,18263, 18266, 18266, 18266, 18274, 18282, 18286, 18263, 0, {0, 0, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, ';' }},
-       {0x0004, 0x007F, 0x0000, -1,18290, 18297, 18297, 18297, 18305, 18312, 18316, 18320, 0, {0, 0, 0, 0, 0}, 166, 166, { 936, 500, 10008, 936, ',' }},
-       {0x0005, 0x007F, 0x0405, -1,18323, 18326, 18326, 18326, 18332, 18342, 18346, 18323, 0, {0, 0, 0, 0, 0}, 4, 4, { 1250, 500, 10029, 852, ';' }},
-       {0x0006, 0x007F, 0x0406, -1,18350, 18353, 18353, 18353, 18360, 18366, 18370, 18350, 0, {0, 0, 0, 0, 0}, 5, 5, { 1252, 20277, 10000, 850, ';' }},
-       {0x0007, 0x007F, 0x0407, -1,18374, 18377, 18377, 18377, 18384, 18392, 18396, 18374, 0, {0, 0, 0, 0, 0}, 6, 6, { 1252, 20273, 10000, 850, ';' }},
-       {0x0008, 0x007F, 0x0408, -1,18400, 18403, 18403, 18403, 18409, 18426, 18430, 18400, 0, {0, 0, 0, 0, 0}, 7, 7, { 1253, 20273, 10006, 737, ';' }},
-       {0x0009, 0x007F, 0x0409, -1,18434, 18437, 18437, 18437, 18437, 18445, 18449, 18434, 0, {0, 0, 0, 0, 0}, 8, 8, { 1252, 37, 10000, 437, ',' }},
-       {0x000A, 0x007F, 0x0C0A, -1,18453, 18456, 18456, 18456, 18464, 18473, 18477, 18453, 0, {0, 0, 0, 0, 0}, 9, 9, { 1252, 20284, 10000, 850, ';' }},
-       {0x000B, 0x007F, 0x040B, -1,18481, 18484, 18484, 18484, 18492, 18498, 18502, 18481, 0, {0, 0, 0, 0, 0}, 10, 10, { 1252, 20278, 10000, 850, ';' }},
-       {0x000C, 0x007F, 0x040C, -1,5977, 18506, 18506, 18506, 18513, 18523, 18527, 5977, 0, {0, 0, 0, 0, 0}, 11, 11, { 1252, 20297, 10000, 850, ';' }},
-       {0x000D, 0x007F, 0x040D, -1,18531, 18534, 18534, 18534, 18541, 18552, 18556, 18531, 0, {0, 0, 0, 0, 0}, 12, 12, { 1255, 500, 10005, 862, ',' }},
-       {0x000E, 0x007F, 0x040E, -1,18560, 18563, 18563, 18563, 18573, 18580, 18584, 18560, 0, {0, 0, 0, 0, 0}, 13, 13, { 1250, 500, 10029, 852, ';' }},
-       {0x000F, 0x007F, 0x040F, -1,18588, 18591, 18591, 18591, 18601, 18611, 18615, 18588, 0, {0, 0, 0, 0, 0}, 14, 14, { 1252, 20871, 10079, 850, ';' }},
-       {0x0010, 0x007F, 0x0410, -1,18619, 18622, 18622, 18622, 18630, 18639, 18643, 18619, 0, {0, 0, 0, 0, 0}, 15, 15, { 1252, 20280, 10000, 850, ';' }},
-       {0x0011, 0x007F, 0x0411, -1,18647, 18650, 18650, 18650, 18659, 18669, 18673, 18647, 0, {0, 0, 0, 0, 0}, 16, 16, { 932, 20290, 10001, 932, ',' }},
-       {0x0012, 0x007F, 0x0412, -1,18677, 18680, 18680, 18680, 18687, 18697, 18701, 18677, 0, {0, 0, 0, 0, 0}, 17, 17, { 949, 20833, 10003, 949, ',' }},
-       {0x0013, 0x007F, 0x0413, -1,18705, 18708, 18708, 18708, 18714, 18725, 18729, 18705, 0, {0, 0, 0, 0, 0}, 18, 18, { 1252, 500, 10000, 850, ';' }},
-       {0x0014, 0x007F, 0x0414, -1,18733, 18736, 18736, 18736, 18746, 18752, 18756, 18733, 0, {0, 0, 0, 0, 0}, 19, 19, { 1252, 20277, 10000, 850, ';' }},
-       {0x0015, 0x007F, 0x0415, -1,18760, 18763, 18763, 18763, 18770, 18777, 18781, 18760, 0, {0, 0, 0, 0, 0}, 20, 20, { 1250, 20880, 10029, 852, ';' }},
-       {0x0016, 0x007F, 0x0416, -1,18785, 18788, 18788, 18788, 18799, 18810, 18814, 18785, 0, {0, 0, 0, 0, 0}, 21, 21, { 1252, 500, 10000, 850, ';' }},
-       {0x0018, 0x007F, 0x0418, -1,18818, 18821, 18821, 18821, 18830, 18839, 18843, 18818, 0, {0, 0, 0, 0, 0}, 22, 22, { 1250, 20880, 10029, 852, ';' }},
-       {0x0019, 0x007F, 0x0419, -1,18847, 18850, 18850, 18850, 18858, 18873, 18877, 18847, 0, {0, 0, 0, 0, 0}, 23, 23, { 1251, 20880, 10007, 866, ';' }},
-       {0x001A, 0x007F, 0x041A, -1,18881, 18884, 18884, 18884, 18893, 18902, 18906, 18881, 0, {0, 0, 0, 0, 0}, 24, 24, { 1250, 500, 10082, 852, ';' }},
-       {0x001B, 0x007F, 0x041B, -1,18910, 18913, 18913, 18913, 18920, 18931, 18935, 18910, 0, {0, 0, 0, 0, 0}, 25, 25, { 1250, 20880, 10029, 852, ';' }},
-       {0x001C, 0x007F, 0x041C, -1,18939, 18942, 18942, 18942, 18951, 18958, 18962, 18939, 0, {0, 0, 0, 0, 0}, 26, 26, { 1250, 20880, 10029, 852, ';' }},
-       {0x001D, 0x007F, 0x041D, -1,18966, 18969, 18969, 18969, 18977, 18985, 18989, 18966, 0, {0, 0, 0, 0, 0}, 27, 27, { 1252, 20278, 10000, 850, ';' }},
-       {0x001E, 0x007F, 0x041E, -1,18993, 18996, 18996, 18996, 19001, 19011, 19015, 18993, 0, {0, 0, 0, 0, 0}, 28, 28, { 874, 20838, 10021, 874, ',' }},
-       {0x001F, 0x007F, 0x041F, -1,19019, 19022, 19022, 19022, 19030, 19039, 19043, 19019, 0, {0, 0, 0, 0, 0}, 29, 29, { 1254, 20905, 10081, 857, ';' }},
-       {0x0021, 0x007F, 0x0421, -1,19047, 19050, 19050, 19050, 19061, 19078, 19082, 19047, 0, {0, 0, 0, 0, 0}, 30, 30, { 1252, 500, 10000, 850, ';' }},
-       {0x0022, 0x007F, 0x0422, -1,19086, 19089, 19089, 19089, 19099, 19120, 19124, 19086, 0, {0, 0, 0, 0, 0}, 31, 31, { 1251, 500, 10017, 866, ';' }},
-       {0x0023, 0x007F, 0x0423, -1,19128, 19131, 19131, 19131, 19142, 19161, 19165, 19128, 0, {0, 0, 0, 0, 0}, 32, 32, { 1251, 500, 10007, 866, ';' }},
-       {0x0024, 0x007F, 0x0424, -1,19169, 19172, 19172, 19172, 19182, 19196, 19200, 19169, 0, {0, 0, 0, 0, 0}, 33, 33, { 1250, 20880, 10029, 852, ';' }},
-       {0x0025, 0x007F, 0x0425, -1,19204, 19207, 19207, 19207, 19216, 19222, 19226, 19204, 0, {0, 0, 0, 0, 0}, 34, 34, { 1257, 500, 10029, 775, ';' }},
-       {0x0026, 0x007F, 0x0426, -1,19230, 19233, 19233, 19233, 19241, 19251, 19255, 19230, 0, {0, 0, 0, 0, 0}, 35, 35, { 1257, 500, 10029, 775, ';' }},
-       {0x0027, 0x007F, 0x0427, -1,19259, 19262, 19262, 19262, 19273, 19283, 19287, 19259, 0, {0, 0, 0, 0, 0}, 36, 36, { 1257, 500, 10029, 775, ';' }},
-       {0x0029, 0x007F, 0x0429, -1,19291, 19294, 19294, 19294, 19302, 19313, 19317, 19291, 0, {0, 0, 0, 0, 0}, 37, 37, { 1256, 20420, 10004, 720, ';' }},
-       {0x002A, 0x007F, 0x042A, -1,19321, 19324, 19324, 19324, 19335, 19350, 3165, 19321, 0, {0, 0, 0, 0, 0}, 38, 38, { 1258, 500, 10000, 1258, ',' }},
-       {0x002B, 0x007F, 0x042B, -1,19354, 19357, 19357, 19357, 19366, 19381, 19385, 19354, 0, {0, 0, 0, 0, 0}, 39, 39, { 0, 500, 2, 1, ',' }},
-       {0x002D, 0x007F, 0x042D, -1,19389, 19392, 19392, 19392, 19399, 19407, 19411, 19389, 0, {0, 0, 0, 0, 0}, 40, 40, { 1252, 500, 10000, 850, ';' }},
-       {0x002F, 0x007F, 0x042F, -1,19415, 19418, 19418, 19418, 19429, 19450, 19454, 19415, 0, {0, 0, 0, 0, 0}, 41, 41, { 1251, 500, 10007, 866, ';' }},
-       {0x0036, 0x007F, 0x0436, -1,19458, 19461, 19461, 19461, 19471, 19482, 19486, 19458, 0, {0, 0, 0, 0, 0}, 42, 42, { 1252, 500, 10000, 850, ',' }},
-       {0x0037, 0x007F, 0x0437, -1,19490, 19493, 19493, 19493, 19502, 19524, 19528, 19490, 0, {0, 0, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, ';' }},
-       {0x0038, 0x007F, 0x0438, -1,19532, 19535, 19535, 19535, 19543, 19553, 19557, 19532, 0, {0, 0, 0, 0, 0}, 44, 44, { 1252, 20277, 10079, 850, ';' }},
-       {0x0039, 0x007F, 0x0439, -1,19561, 19564, 19564, 19564, 19570, 19586, 19590, 19561, 0, {0, 0, 0, 0, 0}, 45, 45, { 0, 500, 2, 1, ',' }},
-       {0x0041, 0x007F, 0x0441, -1,19594, 19597, 19597, 19597, 19605, 19615, 19619, 19594, 0, {0, 0, 0, 0, 0}, 46, 46, { 1252, 500, 10000, 437, ',' }},
-       {0x0047, 0x007F, 0x0447, -1,19623, 19626, 19626, 19626, 19635, 19657, 19661, 19623, 0, {0, 0, 0, 0, 0}, 47, 47, { 0, 500, 2, 1, ',' }},
-       {0x0049, 0x007F, 0x0449, -1,19665, 19668, 19668, 19668, 19674, 19690, 19694, 19665, 0, {0, 0, 0, 0, 0}, 48, 48, { 0, 500, 2, 1, ',' }},
-       {0x004A, 0x007F, 0x044A, -1,19698, 19701, 19701, 19701, 19708, 19727, 19731, 19698, 0, {0, 0, 0, 0, 0}, 49, 49, { 0, 500, 2, 1, ',' }},
-       {0x004B, 0x007F, 0x044B, -1,19735, 19738, 19738, 19738, 19746, 19762, 19766, 19735, 0, {0, 0, 0, 0, 0}, 50, 50, { 0, 500, 2, 1, ',' }},
-       {0x004E, 0x007F, 0x044E, -1,19770, 19773, 19773, 19773, 19781, 19797, 1871, 19770, 0, {0, 0, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, ',' }},
-       {0x0056, 0x007F, 0x0456, -1,19801, 19804, 19804, 19804, 19813, 19820, 19824, 19801, 0, {0, 0, 0, 0, 0}, 52, 52, { 1252, 500, 10000, 850, ',' }},
-       {0x0057, 0x007F, 0x0457, -1,19828, 19832, 19832, 19832, 19840, 19859, 19828, 19561, 0, {0, 0, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, ',' }},
-       {0x0401, 0x0001, 0x0401, 174,19863, 19869, 19869, 19869, 19891, 18215, 18219, 18190, 10998, {16777216, 0, 0, 0, 0}, 54, 54, { 1256, 20420, 10004, 720, ';' }},
-       {0x0402, 0x0002, 0x0402, 19,19940, 19946, 19946, 19946, 19967, 18255, 18259, 18223, 20005, {0, 0, 0, 0, 0}, 55, 55, { 1251, 20420, 10007, 866, ';' }},
-       {0x0403, 0x0003, 0x0403, 61,20008, 20014, 20014, 20014, 20030, 18282, 18286, 18263, 20048, {0, 0, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, ';' }},
-       {0x0404, 0x7C04, 0x0404, 207,20051, 20057, 20057, 20057, 20074, 20090, 18316, 18320, 20094, {0, 0, 0, 0, 0}, 57, 57, { 950, 500, 10002, 950, ',' }},
-       {0x0405, 0x0005, 0x0405, 49,20097, 20103, 20103, 20103, 20126, 18342, 18346, 18323, 20156, {0, 0, 0, 0, 0}, 58, 58, { 1250, 500, 10029, 852, ';' }},
-       {0x0406, 0x0006, 0x0406, 52,20159, 20165, 20165, 20165, 20182, 18366, 18370, 18350, 20198, {0, 0, 0, 0, 0}, 59, 59, { 1252, 20277, 10000, 850, ';' }},
-       {0x0407, 0x0007, 0x0407, 50,20201, 20207, 20207, 20207, 20224, 18392, 18396, 18374, 4300, {0, 0, 0, 0, 0}, 60, 60, { 1252, 20273, 10000, 850, ';' }},
-       {0x0408, 0x0008, 0x0408, 81,20246, 20252, 20252, 20252, 20267, 18426, 18430, 18400, 20299, {0, 0, 0, 0, 0}, 61, 61, { 1253, 20273, 10006, 737, ';' }},
-       {0x0409, 0x0009, 0x0409, 212,20302, 20308, 20308, 20308, 20308, 18445, 18449, 18434, 20332, {0, 0, 0, 0, 0}, 62, 62, { 1252, 37, 10000, 437, ',' }},
-       {0x040B, 0x000B, 0x040B, 63,20335, 20341, 20341, 20341, 20359, 18498, 18502, 18481, 20373, {0, 0, 0, 0, 0}, 63, 63, { 1252, 20278, 10000, 850, ';' }},
-       {0x040C, 0x000C, 0x040C, 68,20376, 20382, 20382, 20382, 20398, 18523, 18527, 5977, 20417, {0, 0, 0, 0, 0}, 64, 64, { 1252, 20297, 10000, 850, ';' }},
-       {0x040D, 0x000D, 0x040D, 92,20420, 20426, 20426, 20426, 20442, 18552, 18556, 18531, 20466, {0, 0, 0, 0, 0}, 65, 65, { 1255, 500, 10005, 862, ',' }},
-       {0x040E, 0x000E, 0x040E, 89,20469, 20475, 20475, 20475, 20495, 18580, 18584, 18560, 20518, {0, 0, 0, 0, 0}, 66, 66, { 1250, 500, 10029, 852, ';' }},
-       {0x040F, 0x000F, 0x040F, 97,20521, 20527, 20527, 20527, 20547, 18611, 18615, 18588, 20567, {0, 0, 0, 0, 0}, 67, 67, { 1252, 20871, 10079, 850, ';' }},
-       {0x0410, 0x0010, 0x0410, 98,20570, 20576, 20576, 20576, 20592, 18639, 18643, 18619, 20610, {0, 0, 0, 0, 0}, 68, 68, { 1252, 20280, 10000, 850, ';' }},
-       {0x0411, 0x0011, 0x0411, 101,20613, 20619, 20619, 20619, 20636, 18669, 18673, 18647, 20655, {0, 0, 0, 0, 0}, 69, 69, { 932, 20290, 10001, 932, ',' }},
-       {0x0412, 0x0012, 0x0412, 109,20658, 20664, 20664, 20664, 20685, 18697, 18701, 18677, 20710, {0, 0, 0, 0, 0}, 70, 70, { 949, 20833, 10003, 949, ',' }},
-       {0x0413, 0x0013, 0x0413, 149,20713, 20719, 20719, 20719, 20739, 18725, 18729, 18705, 20762, {0, 0, 0, 0, 0}, 71, 71, { 1252, 500, 10000, 850, ';' }},
-       {0x0414, 0x0014, 0x0414, 150,20765, 20771, 20797, 20797, 20824, 18752, 20846, 20850, 20853, {0, 0, 0, 0, 0}, 72, 72, { 1252, 20277, 10000, 850, ';' }},
-       {0x0415, 0x0015, 0x0415, 162,20856, 20862, 20862, 20862, 20878, 18777, 18781, 18760, 20894, {0, 0, 0, 0, 0}, 73, 73, { 1250, 20880, 10029, 852, ';' }},
-       {0x0416, 0x0016, 0x0416, 26,20897, 20903, 20903, 20903, 20923, 18810, 18814, 18785, 20943, {0, 0, 0, 0, 0}, 74, 74, { 1252, 500, 10000, 850, ';' }},
-       {0x0418, 0x0018, 0x0418, 171,20946, 20952, 20952, 20952, 20971, 18839, 18843, 18818, 20991, {0, 0, 0, 0, 0}, 75, 75, { 1250, 20880, 10029, 852, ';' }},
-       {0x0419, 0x0019, 0x0419, 172,20994, 21000, 21000, 21000, 21017, 18873, 18877, 18847, 21047, {0, 0, 0, 0, 0}, 76, 76, { 1251, 20880, 10007, 866, ';' }},
-       {0x041A, 0x001A, 0x041A, 88,21050, 21056, 21056, 21056, 21075, 18902, 18906, 18881, 21095, {0, 0, 0, 0, 0}, 77, 77, { 1250, 500, 10082, 852, ';' }},
-       {0x041B, 0x001B, 0x041B, 183,21098, 21104, 21104, 21104, 21122, 18931, 18935, 18910, 21156, {0, 0, 0, 0, 0}, 78, 78, { 1250, 20880, 10029, 852, ';' }},
-       {0x041C, 0x001C, 0x041C, 4,21159, 21165, 21165, 21165, 21184, 18958, 18962, 18939, 21204, {0, 0, 0, 0, 0}, 79, 79, { 1250, 20880, 10029, 852, ';' }},
-       {0x041D, 0x001D, 0x041D, 178,21207, 21213, 21213, 21213, 21230, 18985, 18989, 18966, 21248, {0, 0, 0, 0, 0}, 80, 80, { 1252, 20278, 10000, 850, ';' }},
-       {0x041E, 0x001E, 0x041E, 197,21251, 21257, 21257, 21257, 21273, 19011, 19015, 18993, 21313, {0, 0, 0, 0, 0}, 81, 81, { 874, 20838, 10021, 874, ',' }},
-       {0x041F, 0x001F, 0x041F, 204,21316, 21322, 21322, 21322, 21339, 19039, 19043, 19019, 21359, {0, 0, 0, 0, 0}, 82, 82, { 1254, 20905, 10081, 857, ';' }},
-       {0x0421, 0x0021, 0x0421, 90,21362, 21368, 21368, 21368, 21391, 19078, 19082, 19047, 21420, {0, 0, 0, 0, 0}, 83, 83, { 1252, 500, 10000, 850, ';' }},
-       {0x0422, 0x0022, 0x0422, 209,21423, 21429, 21429, 21429, 21449, 19120, 19124, 19086, 21487, {0, 0, 0, 0, 0}, 84, 84, { 1251, 500, 10017, 866, ';' }},
-       {0x0423, 0x0023, 0x0423, 30,21490, 21496, 21496, 21496, 21517, 19161, 19165, 19128, 21555, {0, 0, 0, 0, 0}, 85, 85, { 1251, 500, 10007, 866, ';' }},
-       {0x0424, 0x0024, 0x0424, 181,21558, 21564, 21564, 21564, 21585, 19196, 19200, 19169, 21611, {0, 0, 0, 0, 0}, 86, 86, { 1250, 20880, 10029, 852, ';' }},
-       {0x0425, 0x0025, 0x0425, 57,21614, 21620, 21620, 21620, 21639, 19222, 19226, 19204, 21653, {0, 0, 0, 0, 0}, 87, 87, { 1257, 500, 10029, 775, ';' }},
-       {0x0426, 0x0026, 0x0426, 121,21656, 21662, 21662, 21662, 21679, 19251, 19255, 19230, 21699, {0, 0, 0, 0, 0}, 88, 88, { 1257, 500, 10029, 775, ';' }},
-       {0x0427, 0x0027, 0x0427, 119,21702, 21708, 21708, 21708, 21731, 19283, 19287, 19259, 21751, {0, 0, 0, 0, 0}, 89, 89, { 1257, 500, 10029, 775, ';' }},
-       {0x0429, 0x0029, 0x0429, 96,21754, 21760, 21760, 21760, 21775, 19313, 19317, 19291, 21799, {0, 0, 0, 0, 0}, 90, 90, { 1256, 20420, 10004, 720, ';' }},
-       {0x042A, 0x002A, 0x042A, 220,21802, 21808, 21808, 21808, 21829, 19350, 3165, 19321, 21857, {0, 0, 0, 0, 0}, 91, 91, { 1258, 500, 10000, 1258, ',' }},
-       {0x042B, 0x002B, 0x042B, 5,21860, 21866, 21866, 21866, 21885, 19381, 19385, 19354, 465, {0, 0, 0, 0, 0}, 92, 92, { 0, 500, 2, 1, ',' }},
-       {0x042D, 0x002D, 0x042D, 61,21950, 21956, 21956, 21956, 21971, 19407, 19411, 19389, 20048, {0, 0, 0, 0, 0}, 93, 93, { 1252, 500, 10000, 850, ';' }},
-       {0x042F, 0x002F, 0x042F, 128,21990, 21996, 21996, 21996, 22019, 19450, 19454, 19415, 22063, {0, 0, 0, 0, 0}, 94, 94, { 1251, 500, 10007, 866, ';' }},
-       {0x0436, 0x0036, 0x0436, 227,22066, 22072, 22072, 22072, 22097, 19482, 19486, 19458, 22122, {0, 0, 0, 0, 0}, 95, 95, { 1252, 500, 10000, 850, ',' }},
-       {0x0437, 0x0037, 0x0437, 72,22125, 22131, 22131, 22131, 22150, 19524, 19528, 19490, 22205, {0, 0, 0, 0, 0}, 96, 96, { 0, 500, 2, 1, ';' }},
-       {0x0438, 0x0038, 0x0438, 67,22208, 22214, 22214, 22214, 22238, 19553, 19557, 19532, 22259, {0, 0, 0, 0, 0}, 97, 97, { 1252, 20277, 10079, 850, ';' }},
-       {0x0439, 0x0039, 0x0439, 93,22262, 22268, 22268, 22268, 22282, 19586, 19590, 19561, 22313, {0, 0, 0, 0, 0}, 98, 98, { 0, 500, 2, 1, ',' }},
-       {0x0441, 0x0041, 0x0441, 102,22316, 22322, 22322, 22322, 22338, 19615, 19619, 19594, 22356, {0, 0, 0, 0, 0}, 99, 99, { 1252, 500, 10000, 437, ',' }},
-       {0x0447, 0x0047, 0x0447, 93,22359, 22365, 22365, 22365, 22382, 19657, 19661, 19623, 22313, {0, 0, 0, 0, 0}, 100, 100, { 0, 500, 2, 1, ',' }},
-       {0x0449, 0x0049, 0x0449, 93,22419, 22425, 22425, 22425, 22439, 19690, 19694, 19665, 22313, {0, 0, 0, 0, 0}, 101, 101, { 0, 500, 2, 1, ',' }},
-       {0x044A, 0x004A, 0x044A, 93,22479, 22485, 22485, 22485, 22500, 19727, 19731, 19698, 22313, {0, 0, 0, 0, 0}, 102, 102, { 0, 500, 2, 1, ',' }},
-       {0x044B, 0x004B, 0x044B, 93,22547, 22553, 22553, 22553, 22569, 19762, 19766, 19735, 22313, {0, 0, 0, 0, 0}, 103, 103, { 0, 500, 2, 1, ',' }},
-       {0x044E, 0x004E, 0x044E, 93,22600, 22606, 22606, 22606, 22622, 19797, 1871, 19770, 22313, {0, 0, 0, 0, 0}, 104, 104, { 0, 500, 2, 1, ',' }},
-       {0x0456, 0x0056, 0x0456, 61,22653, 22659, 22659, 22659, 22676, 19820, 19824, 19801, 20048, {0, 0, 0, 0, 0}, 105, 105, { 1252, 500, 10000, 850, ',' }},
-       {0x0457, 0x0057, 0x0457, 93,22693, 22700, 22700, 22700, 22716, 19859, 19828, 19828, 22313, {0, 0, 0, 0, 0}, 106, 106, { 0, 500, 2, 1, ',' }},
-       {0x0801, 0x0001, 0x0801, 95,22750, 22756, 22756, 22756, 22770, 22800, 18219, 18190, 22804, {2, 1, 0, 0, 0}, 107, 107, { 1256, 20420, 10004, 720, ';' }},
-       {0x0804, 0x0004, 0x0804, 42,22807, 22813, 22813, 22813, 22829, 18312, 18316, 18320, 11080, {0, 0, 0, 0, 0}, 108, 108, { 936, 500, 10008, 936, ',' }},
-       {0x0807, 0x0007, 0x0807, 37,22845, 22851, 22851, 22851, 22872, 22890, 18396, 18374, 11001, {0, 0, 0, 0, 0}, 109, 109, { 1252, 20273, 10000, 850, ';' }},
-       {0x0809, 0x0009, 0x0809, 70,22894, 22900, 22900, 22900, 22900, 22925, 18449, 18434, 22929, {0, 0, 0, 0, 0}, 110, 110, { 1252, 20285, 10000, 850, ',' }},
-       {0x080A, 0x000A, 0x080A, 141,22932, 22938, 22938, 22938, 22955, 22974, 18477, 18453, 22978, {0, 0, 0, 0, 0}, 111, 111, { 1252, 20284, 10000, 850, ',' }},
-       {0x080C, 0x000C, 0x080C, 17,22981, 22987, 22987, 22987, 23004, 23025, 18527, 5977, 23029, {0, 0, 0, 0, 0}, 112, 112, { 1252, 20297, 10000, 850, ';' }},
-       {0x0810, 0x0010, 0x0810, 37,23032, 23038, 23038, 23038, 23060, 23080, 18643, 18619, 11001, {0, 0, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, ';' }},
-       {0x0813, 0x0013, 0x0813, 17,23084, 23090, 23090, 23090, 23106, 23127, 18729, 18705, 23029, {0, 0, 0, 0, 0}, 114, 114, { 1252, 500, 10000, 850, ';' }},
-       {0x0814, 0x0014, 0x0814, 150,23131, 23137, 23137, 23137, 23164, 23186, 23190, 23194, 20853, {0, 0, 0, 0, 0}, 115, 115, { 1252, 20277, 10000, 850, ';' }},
-       {0x0816, 0x0016, 0x0816, 166,23197, 23203, 23203, 23203, 23225, 23247, 18814, 18785, 23251, {0, 0, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, ';' }},
-       {0x081D, 0x001D, 0x081D, 63,23254, 23260, 23260, 23260, 23278, 23296, 18989, 18966, 20373, {0, 0, 0, 0, 0}, 117, 117, { 1252, 20278, 10000, 850, ';' }},
-       {0x0C01, 0x0001, 0x0C01, 58,23300, 23306, 23306, 23306, 23321, 23345, 18219, 18190, 23349, {16777216, 0, 0, 0, 0}, 118, 118, { 1256, 20420, 10004, 720, ';' }},
-       {0x0C04, 0x7C04, 0x0C04, 85,23352, 23358, 23358, 23358, 23392, 23429, 18316, 18320, 23433, {0, 0, 0, 0, 0}, 119, 119, { 950, 500, 10002, 950, ',' }},
-       {0x0C07, 0x0007, 0x0C07, 10,23436, 23442, 23442, 23442, 23459, 23481, 18396, 18374, 23485, {0, 0, 0, 0, 0}, 120, 120, { 1252, 20273, 10000, 850, ';' }},
-       {0x0C09, 0x0009, 0x0C09, 11,23488, 23494, 23494, 23494, 23494, 23514, 18449, 18434, 23518, {0, 0, 0, 0, 0}, 121, 121, { 1252, 500, 10000, 850, ',' }},
-       {0x0C0A, 0x000A, 0x0C0A, 61,23521, 23527, 23527, 23527, 23543, 23562, 18477, 18453, 20048, {0, 0, 0, 0, 0}, 122, 122, { 1252, 20284, 10000, 850, ';' }},
-       {0x0C0C, 0x000C, 0x0C0C, 32,23566, 23572, 23572, 23572, 23588, 23607, 18527, 5977, 23611, {0, 0, 0, 0, 0}, 123, 123, { 1252, 20297, 10000, 850, ';' }},
-       {0x1001, 0x0001, 0x1001, 122,23614, 23620, 23620, 23620, 23635, 23663, 18219, 18190, 23667, {16777216, 0, 0, 0, 0}, 124, 124, { 1256, 20420, 10004, 720, ';' }},
-       {0x1004, 0x0004, 0x1004, 179,23670, 23676, 23676, 23676, 23696, 23715, 18316, 18320, 23719, {0, 0, 0, 0, 0}, 125, 125, { 936, 500, 10008, 936, ',' }},
-       {0x1007, 0x0007, 0x1007, 120,23722, 23728, 23728, 23728, 23748, 23768, 18396, 18374, 23772, {0, 0, 0, 0, 0}, 126, 126, { 1252, 20273, 10000, 850, ';' }},
-       {0x1009, 0x0009, 0x1009, 32,23775, 23781, 23781, 23781, 23781, 23798, 18449, 18434, 23611, {0, 0, 0, 0, 0}, 127, 127, { 1252, 37, 10000, 850, ',' }},
-       {0x100A, 0x000A, 0x100A, 82,23802, 23808, 23808, 23808, 23828, 23849, 18477, 18453, 23853, {0, 0, 0, 0, 0}, 128, 128, { 1252, 20284, 10000, 850, ',' }},
-       {0x100C, 0x000C, 0x100C, 37,23856, 23862, 23862, 23862, 23883, 23902, 18527, 5977, 11001, {0, 0, 0, 0, 0}, 129, 129, { 1252, 20297, 10000, 850, ';' }},
-       {0x1401, 0x0001, 0x1401, 55,23906, 23912, 23912, 23912, 23929, 23961, 18219, 18190, 23965, {16777216, 0, 0, 0, 0}, 130, 130, { 1256, 20420, 10004, 720, ';' }},
-       {0x1404, 0x0004, 0x1404, 132,23968, 23974, 23974, 23974, 24003, 24040, 18316, 18320, 24044, {0, 0, 0, 0, 0}, 131, 131, { 950, 500, 10002, 950, ',' }},
-       {0x1409, 0x0009, 0x1409, 154,24047, 24053, 24053, 24053, 24053, 24075, 18449, 18434, 24079, {0, 0, 0, 0, 0}, 132, 132, { 1252, 500, 10000, 850, ',' }},
-       {0x140A, 0x000A, 0x140A, 44,24082, 24088, 24088, 24088, 24109, 24131, 18477, 18453, 24135, {0, 0, 0, 0, 0}, 133, 133, { 1252, 20284, 10000, 850, ',' }},
-       {0x140C, 0x000C, 0x140C, 120,24138, 24144, 24144, 24144, 24164, 24187, 18527, 5977, 23772, {0, 0, 0, 0, 0}, 134, 134, { 1252, 20297, 10000, 850, ';' }},
-       {0x1801, 0x0001, 0x1801, 123,24191, 24197, 24197, 24197, 24214, 24244, 18219, 18190, 24248, {16777216, 0, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, ';' }},
-       {0x1809, 0x0009, 0x1809, 91,24251, 24257, 24257, 24257, 24257, 24275, 18449, 18434, 24279, {0, 0, 0, 0, 0}, 136, 136, { 1252, 500, 10000, 850, ',' }},
-       {0x180A, 0x000A, 0x180A, 156,24282, 24288, 24288, 24288, 24305, 24324, 18477, 18453, 24328, {0, 0, 0, 0, 0}, 137, 137, { 1252, 20284, 10000, 850, ',' }},
-       {0x1C01, 0x0001, 0x1C01, 202,24331, 24337, 24337, 24337, 24354, 24380, 18219, 18190, 24384, {16777216, 0, 0, 0, 0}, 138, 138, { 1256, 20420, 10004, 720, ';' }},
-       {0x1C09, 0x0009, 0x1C09, 227,24387, 24393, 24393, 24393, 24393, 24416, 18449, 18434, 22122, {0, 0, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 437, ',' }},
-       {0x1C0A, 0x000A, 0x1C0A, 54,24420, 24426, 24426, 24426, 24455, 24488, 18477, 18453, 24492, {0, 0, 0, 0, 0}, 140, 140, { 1252, 20284, 10000, 850, ',' }},
-       {0x2001, 0x0001, 0x2001, 155,24495, 24501, 24501, 24501, 24515, 24541, 18219, 18190, 24545, {16777216, 0, 0, 0, 0}, 141, 141, { 1256, 20420, 10004, 720, ';' }},
-       {0x200A, 0x000A, 0x200A, 217,24548, 24554, 24554, 24554, 24574, 24595, 18477, 18453, 24599, {0, 0, 0, 0, 0}, 142, 142, { 1252, 20284, 10000, 850, ',' }},
-       {0x2401, 0x0001, 0x2401, 224,24602, 24608, 24608, 24608, 24623, 24651, 18219, 18190, 24655, {16777216, 0, 0, 0, 0}, 143, 143, { 1256, 20420, 10004, 720, ';' }},
-       {0x240A, 0x000A, 0x240A, 43,24658, 24664, 24664, 24664, 24683, 24703, 18477, 18453, 24707, {0, 0, 0, 0, 0}, 144, 144, { 1252, 20284, 10000, 850, ',' }},
-       {0x2801, 0x0001, 0x2801, 191,24710, 24716, 24716, 24716, 24731, 24759, 18219, 18190, 24763, {16777216, 0, 0, 0, 0}, 145, 145, { 1256, 20420, 10004, 720, ';' }},
-       {0x280A, 0x000A, 0x280A, 157,24766, 24772, 24772, 24772, 24787, 24804, 18477, 18453, 24808, {0, 0, 0, 0, 0}, 146, 146, { 1252, 20284, 10000, 850, ',' }},
-       {0x2C01, 0x0001, 0x2C01, 100,24811, 24817, 24817, 24817, 24833, 24863, 18219, 18190, 24867, {16777216, 0, 0, 0, 0}, 147, 147, { 1256, 20420, 10004, 720, ';' }},
-       {0x2C09, 0x0009, 0x2C09, 205,24870, 24876, 24876, 24876, 24876, 24906, 18449, 18434, 24910, {0, 0, 0, 0, 0}, 148, 148, { 1252, 500, 10000, 850, ';' }},
-       {0x2C0A, 0x000A, 0x2C0A, 8,24913, 24919, 24919, 24919, 24939, 24960, 18477, 18453, 24964, {0, 0, 0, 0, 0}, 149, 149, { 1252, 20284, 10000, 850, ',' }},
-       {0x3001, 0x0001, 0x3001, 114,24967, 24973, 24973, 24973, 24990, 25018, 18219, 18190, 25022, {16777216, 0, 0, 0, 0}, 150, 150, { 1256, 20420, 10004, 720, ';' }},
-       {0x3009, 0x0009, 0x3009, 229,25025, 25031, 25031, 25031, 25031, 25050, 18449, 18434, 25054, {0, 0, 0, 0, 0}, 151, 151, { 1252, 500, 10000, 437, ',' }},
-       {0x300A, 0x000A, 0x300A, 56,25057, 25063, 25063, 25063, 25081, 25100, 18477, 18453, 25104, {0, 0, 0, 0, 0}, 152, 152, { 1252, 20284, 10000, 850, ',' }},
-       {0x3401, 0x0001, 0x3401, 110,25107, 25113, 25113, 25113, 25129, 25159, 18219, 18190, 25163, {16777216, 0, 0, 0, 0}, 153, 153, { 1256, 20420, 10004, 720, ';' }},
-       {0x3409, 0x0009, 0x3409, 160,25166, 25172, 25172, 25172, 25172, 25194, 18449, 18434, 25198, {0, 0, 0, 0, 0}, 154, 154, { 1252, 500, 10000, 437, ',' }},
-       {0x340A, 0x000A, 0x340A, 40,25201, 25207, 25207, 25207, 25223, 25240, 18477, 18453, 25244, {0, 0, 0, 0, 0}, 155, 155, { 1252, 20284, 10000, 850, ',' }},
-       {0x3801, 0x0001, 0x3801, 0,25247, 25253, 25253, 25253, 25283, 25347, 18219, 18190, 25351, {16777216, 0, 0, 0, 0}, 156, 156, { 1256, 20420, 10004, 720, ';' }},
-       {0x380A, 0x000A, 0x380A, 213,25354, 25360, 25360, 25360, 25378, 25397, 18477, 18453, 25401, {0, 0, 0, 0, 0}, 157, 157, { 1252, 20284, 10000, 850, ',' }},
-       {0x3C01, 0x0001, 0x3C01, 20,25404, 25410, 25410, 25410, 25427, 25459, 18219, 18190, 25463, {16777216, 0, 0, 0, 0}, 158, 158, { 1256, 20420, 10004, 720, ';' }},
-       {0x3C0A, 0x000A, 0x3C0A, 168,25466, 25472, 25472, 25472, 25491, 25511, 18477, 18453, 25515, {0, 0, 0, 0, 0}, 159, 159, { 1252, 20284, 10000, 850, ',' }},
-       {0x4001, 0x0001, 0x4001, 169,25518, 25524, 25524, 25524, 25539, 25563, 18219, 18190, 25567, {16777216, 0, 0, 0, 0}, 160, 160, { 1256, 20420, 10004, 720, ';' }},
-       {0x400A, 0x000A, 0x400A, 25,25570, 25576, 25576, 25576, 25594, 25613, 18477, 18453, 25617, {0, 0, 0, 0, 0}, 161, 161, { 1252, 20284, 10000, 850, ',' }},
-       {0x440A, 0x000A, 0x440A, 190,25620, 25626, 25626, 25626, 25648, 25671, 18477, 18453, 25675, {0, 0, 0, 0, 0}, 162, 162, { 1252, 20284, 10000, 850, ',' }},
-       {0x480A, 0x000A, 0x480A, 87,25678, 25684, 25684, 25684, 25703, 25723, 18477, 18453, 25727, {0, 0, 0, 0, 0}, 163, 163, { 1252, 20284, 10000, 850, ',' }},
-       {0x4C0A, 0x000A, 0x4C0A, 148,25730, 25736, 25736, 25736, 25756, 25777, 18477, 18453, 25781, {0, 0, 0, 0, 0}, 164, 164, { 1252, 20284, 10000, 850, ',' }},
-       {0x500A, 0x000A, 0x500A, 165,25784, 25790, 25790, 25790, 25812, 25835, 18477, 18453, 25839, {0, 0, 0, 0, 0}, 165, 165, { 1252, 20284, 10000, 850, ',' }},
-       {0x7C04, 0x007F, 0x0000, -1,25842, 20057, 18297, 18297, 18305, 20090, 18316, 18320, 0, {0, 0, 0, 0, 0}, 166, 166, { 950, 500, 10002, 950, ',' }}
+       {0x0001, 0x007F, 0x0401, -1,18193, 18196, 18196, 18196, 18203, 18218, 18222, 18193, 0, {16777216, 0, 0, 0, 0}, 0, 0, { 1256, 20420, 10004, 720, ';' }},
+       {0x0002, 0x007F, 0x0402, -1,18226, 18229, 18229, 18229, 18239, 18258, 18262, 18226, 0, {0, 0, 0, 0, 0}, 1, 1, { 1251, 20420, 10007, 866, ';' }},
+       {0x0003, 0x007F, 0x0403, -1,18266, 18269, 18269, 18269, 18277, 18285, 18289, 18266, 0, {0, 0, 0, 0, 0}, 2, 2, { 1252, 500, 10000, 850, ';' }},
+       {0x0004, 0x007F, 0x0000, -1,18293, 18300, 18300, 18300, 18308, 18315, 18319, 18323, 0, {0, 0, 0, 0, 0}, 166, 166, { 936, 500, 10008, 936, ',' }},
+       {0x0005, 0x007F, 0x0405, -1,18326, 18329, 18329, 18329, 18335, 18345, 18349, 18326, 0, {0, 0, 0, 0, 0}, 4, 4, { 1250, 500, 10029, 852, ';' }},
+       {0x0006, 0x007F, 0x0406, -1,18353, 18356, 18356, 18356, 18363, 18369, 18373, 18353, 0, {0, 0, 0, 0, 0}, 5, 5, { 1252, 20277, 10000, 850, ';' }},
+       {0x0007, 0x007F, 0x0407, -1,18377, 18380, 18380, 18380, 18387, 18395, 18399, 18377, 0, {0, 0, 0, 0, 0}, 6, 6, { 1252, 20273, 10000, 850, ';' }},
+       {0x0008, 0x007F, 0x0408, -1,18403, 18406, 18406, 18406, 18412, 18429, 18433, 18403, 0, {0, 0, 0, 0, 0}, 7, 7, { 1253, 20273, 10006, 737, ';' }},
+       {0x0009, 0x007F, 0x0409, -1,18437, 18440, 18440, 18440, 18440, 18448, 18452, 18437, 0, {0, 0, 0, 0, 0}, 8, 8, { 1252, 37, 10000, 437, ',' }},
+       {0x000A, 0x007F, 0x0C0A, -1,18456, 18459, 18459, 18459, 18467, 18476, 18480, 18456, 0, {0, 0, 0, 0, 0}, 9, 9, { 1252, 20284, 10000, 850, ';' }},
+       {0x000B, 0x007F, 0x040B, -1,18484, 18487, 18487, 18487, 18495, 18501, 18505, 18484, 0, {0, 0, 0, 0, 0}, 10, 10, { 1252, 20278, 10000, 850, ';' }},
+       {0x000C, 0x007F, 0x040C, -1,5984, 18509, 18509, 18509, 18516, 18526, 18530, 5984, 0, {0, 0, 0, 0, 0}, 11, 11, { 1252, 20297, 10000, 850, ';' }},
+       {0x000D, 0x007F, 0x040D, -1,18534, 18537, 18537, 18537, 18544, 18555, 18559, 18534, 0, {0, 0, 0, 0, 0}, 12, 12, { 1255, 500, 10005, 862, ',' }},
+       {0x000E, 0x007F, 0x040E, -1,18563, 18566, 18566, 18566, 18576, 18583, 18587, 18563, 0, {0, 0, 0, 0, 0}, 13, 13, { 1250, 500, 10029, 852, ';' }},
+       {0x000F, 0x007F, 0x040F, -1,18591, 18594, 18594, 18594, 18604, 18614, 18618, 18591, 0, {0, 0, 0, 0, 0}, 14, 14, { 1252, 20871, 10079, 850, ';' }},
+       {0x0010, 0x007F, 0x0410, -1,18622, 18625, 18625, 18625, 18633, 18642, 18646, 18622, 0, {0, 0, 0, 0, 0}, 15, 15, { 1252, 20280, 10000, 850, ';' }},
+       {0x0011, 0x007F, 0x0411, -1,18650, 18653, 18653, 18653, 18662, 18672, 18676, 18650, 0, {0, 0, 0, 0, 0}, 16, 16, { 932, 20290, 10001, 932, ',' }},
+       {0x0012, 0x007F, 0x0412, -1,18680, 18683, 18683, 18683, 18690, 18700, 18704, 18680, 0, {0, 0, 0, 0, 0}, 17, 17, { 949, 20833, 10003, 949, ',' }},
+       {0x0013, 0x007F, 0x0413, -1,18708, 18711, 18711, 18711, 18717, 18728, 18732, 18708, 0, {0, 0, 0, 0, 0}, 18, 18, { 1252, 500, 10000, 850, ';' }},
+       {0x0014, 0x007F, 0x0414, -1,18736, 18739, 18739, 18739, 18749, 18755, 18759, 18736, 0, {0, 0, 0, 0, 0}, 19, 19, { 1252, 20277, 10000, 850, ';' }},
+       {0x0015, 0x007F, 0x0415, -1,18763, 18766, 18766, 18766, 18773, 18780, 18784, 18763, 0, {0, 0, 0, 0, 0}, 20, 20, { 1250, 20880, 10029, 852, ';' }},
+       {0x0016, 0x007F, 0x0416, -1,18788, 18791, 18791, 18791, 18802, 18813, 18817, 18788, 0, {0, 0, 0, 0, 0}, 21, 21, { 1252, 500, 10000, 850, ';' }},
+       {0x0018, 0x007F, 0x0418, -1,18821, 18824, 18824, 18824, 18833, 18842, 18846, 18821, 0, {0, 0, 0, 0, 0}, 22, 22, { 1250, 20880, 10029, 852, ';' }},
+       {0x0019, 0x007F, 0x0419, -1,18850, 18853, 18853, 18853, 18861, 18876, 18880, 18850, 0, {0, 0, 0, 0, 0}, 23, 23, { 1251, 20880, 10007, 866, ';' }},
+       {0x001A, 0x007F, 0x041A, -1,18884, 18887, 18887, 18887, 18896, 18905, 18909, 18884, 0, {0, 0, 0, 0, 0}, 24, 24, { 1250, 500, 10082, 852, ';' }},
+       {0x001B, 0x007F, 0x041B, -1,18913, 18916, 18916, 18916, 18923, 18934, 18938, 18913, 0, {0, 0, 0, 0, 0}, 25, 25, { 1250, 20880, 10029, 852, ';' }},
+       {0x001C, 0x007F, 0x041C, -1,18942, 18945, 18945, 18945, 18954, 18961, 18965, 18942, 0, {0, 0, 0, 0, 0}, 26, 26, { 1250, 20880, 10029, 852, ';' }},
+       {0x001D, 0x007F, 0x041D, -1,18969, 18972, 18972, 18972, 18980, 18988, 18992, 18969, 0, {0, 0, 0, 0, 0}, 27, 27, { 1252, 20278, 10000, 850, ';' }},
+       {0x001E, 0x007F, 0x041E, -1,18996, 18999, 18999, 18999, 19004, 19014, 19018, 18996, 0, {0, 0, 0, 0, 0}, 28, 28, { 874, 20838, 10021, 874, ',' }},
+       {0x001F, 0x007F, 0x041F, -1,19022, 19025, 19025, 19025, 19033, 19042, 19046, 19022, 0, {0, 0, 0, 0, 0}, 29, 29, { 1254, 20905, 10081, 857, ';' }},
+       {0x0021, 0x007F, 0x0421, -1,19050, 19053, 19053, 19053, 19064, 19081, 19085, 19050, 0, {0, 0, 0, 0, 0}, 30, 30, { 1252, 500, 10000, 850, ';' }},
+       {0x0022, 0x007F, 0x0422, -1,19089, 19092, 19092, 19092, 19102, 19123, 19127, 19089, 0, {0, 0, 0, 0, 0}, 31, 31, { 1251, 500, 10017, 866, ';' }},
+       {0x0023, 0x007F, 0x0423, -1,19131, 19134, 19134, 19134, 19145, 19164, 19168, 19131, 0, {0, 0, 0, 0, 0}, 32, 32, { 1251, 500, 10007, 866, ';' }},
+       {0x0024, 0x007F, 0x0424, -1,19172, 19175, 19175, 19175, 19185, 19199, 19203, 19172, 0, {0, 0, 0, 0, 0}, 33, 33, { 1250, 20880, 10029, 852, ';' }},
+       {0x0025, 0x007F, 0x0425, -1,19207, 19210, 19210, 19210, 19219, 19225, 19229, 19207, 0, {0, 0, 0, 0, 0}, 34, 34, { 1257, 500, 10029, 775, ';' }},
+       {0x0026, 0x007F, 0x0426, -1,19233, 19236, 19236, 19236, 19244, 19254, 19258, 19233, 0, {0, 0, 0, 0, 0}, 35, 35, { 1257, 500, 10029, 775, ';' }},
+       {0x0027, 0x007F, 0x0427, -1,19262, 19265, 19265, 19265, 19276, 19286, 19290, 19262, 0, {0, 0, 0, 0, 0}, 36, 36, { 1257, 500, 10029, 775, ';' }},
+       {0x0029, 0x007F, 0x0429, -1,19294, 19297, 19297, 19297, 19305, 19316, 19320, 19294, 0, {0, 0, 0, 0, 0}, 37, 37, { 1256, 20420, 10004, 720, ';' }},
+       {0x002A, 0x007F, 0x042A, -1,19324, 19327, 19327, 19327, 19338, 19353, 3169, 19324, 0, {0, 0, 0, 0, 0}, 38, 38, { 1258, 500, 10000, 1258, ',' }},
+       {0x002B, 0x007F, 0x042B, -1,19357, 19360, 19360, 19360, 19369, 19384, 19388, 19357, 0, {0, 0, 0, 0, 0}, 39, 39, { 0, 500, 2, 1, ',' }},
+       {0x002D, 0x007F, 0x042D, -1,19392, 19395, 19395, 19395, 19402, 19410, 19414, 19392, 0, {0, 0, 0, 0, 0}, 40, 40, { 1252, 500, 10000, 850, ';' }},
+       {0x002F, 0x007F, 0x042F, -1,19418, 19421, 19421, 19421, 19432, 19453, 19457, 19418, 0, {0, 0, 0, 0, 0}, 41, 41, { 1251, 500, 10007, 866, ';' }},
+       {0x0036, 0x007F, 0x0436, -1,19461, 19464, 19464, 19464, 19474, 19485, 19489, 19461, 0, {0, 0, 0, 0, 0}, 42, 42, { 1252, 500, 10000, 850, ',' }},
+       {0x0037, 0x007F, 0x0437, -1,19493, 19496, 19496, 19496, 19505, 19527, 19531, 19493, 0, {0, 0, 0, 0, 0}, 43, 43, { 0, 500, 2, 1, ';' }},
+       {0x0038, 0x007F, 0x0438, -1,19535, 19538, 19538, 19538, 19546, 19556, 19560, 19535, 0, {0, 0, 0, 0, 0}, 44, 44, { 1252, 20277, 10079, 850, ';' }},
+       {0x0039, 0x007F, 0x0439, -1,19564, 19567, 19567, 19567, 19573, 19589, 19593, 19564, 0, {0, 0, 0, 0, 0}, 45, 45, { 0, 500, 2, 1, ',' }},
+       {0x0041, 0x007F, 0x0441, -1,19597, 19600, 19600, 19600, 19608, 19618, 19622, 19597, 0, {0, 0, 0, 0, 0}, 46, 46, { 1252, 500, 10000, 437, ',' }},
+       {0x0047, 0x007F, 0x0447, -1,19626, 19629, 19629, 19629, 19638, 19660, 19664, 19626, 0, {0, 0, 0, 0, 0}, 47, 47, { 0, 500, 2, 1, ',' }},
+       {0x0049, 0x007F, 0x0449, -1,19668, 19671, 19671, 19671, 19677, 19693, 19697, 19668, 0, {0, 0, 0, 0, 0}, 48, 48, { 0, 500, 2, 1, ',' }},
+       {0x004A, 0x007F, 0x044A, -1,19701, 19704, 19704, 19704, 19711, 19730, 19734, 19701, 0, {0, 0, 0, 0, 0}, 49, 49, { 0, 500, 2, 1, ',' }},
+       {0x004B, 0x007F, 0x044B, -1,19738, 19741, 19741, 19741, 19749, 19765, 19769, 19738, 0, {0, 0, 0, 0, 0}, 50, 50, { 0, 500, 2, 1, ',' }},
+       {0x004E, 0x007F, 0x044E, -1,19773, 19776, 19776, 19776, 19784, 19800, 1873, 19773, 0, {0, 0, 0, 0, 0}, 51, 51, { 0, 500, 2, 1, ',' }},
+       {0x0056, 0x007F, 0x0456, -1,19804, 19807, 19807, 19807, 19816, 19823, 19827, 19804, 0, {0, 0, 0, 0, 0}, 52, 52, { 1252, 500, 10000, 850, ',' }},
+       {0x0057, 0x007F, 0x0457, -1,19831, 19835, 19835, 19835, 19843, 19862, 19831, 19564, 0, {0, 0, 0, 0, 0}, 53, 53, { 0, 500, 2, 1, ',' }},
+       {0x0401, 0x0001, 0x0401, 174,19866, 19872, 19872, 19872, 19894, 18218, 18222, 18193, 11005, {16777216, 0, 0, 0, 0}, 54, 54, { 1256, 20420, 10004, 720, ';' }},
+       {0x0402, 0x0002, 0x0402, 19,19943, 19949, 19949, 19949, 19970, 18258, 18262, 18226, 20008, {0, 0, 0, 0, 0}, 55, 55, { 1251, 20420, 10007, 866, ';' }},
+       {0x0403, 0x0003, 0x0403, 61,20011, 20017, 20017, 20017, 20033, 18285, 18289, 18266, 20051, {0, 0, 0, 0, 0}, 56, 56, { 1252, 500, 10000, 850, ';' }},
+       {0x0404, 0x7C04, 0x0404, 207,20054, 20060, 20060, 20060, 20077, 20093, 18319, 18323, 20097, {0, 0, 0, 0, 0}, 57, 57, { 950, 500, 10002, 950, ',' }},
+       {0x0405, 0x0005, 0x0405, 49,20100, 20106, 20106, 20106, 20129, 18345, 18349, 18326, 20159, {0, 0, 0, 0, 0}, 58, 58, { 1250, 500, 10029, 852, ';' }},
+       {0x0406, 0x0006, 0x0406, 52,20162, 20168, 20168, 20168, 20185, 18369, 18373, 18353, 20201, {0, 0, 0, 0, 0}, 59, 59, { 1252, 20277, 10000, 850, ';' }},
+       {0x0407, 0x0007, 0x0407, 50,20204, 20210, 20210, 20210, 20227, 18395, 18399, 18377, 4304, {0, 0, 0, 0, 0}, 60, 60, { 1252, 20273, 10000, 850, ';' }},
+       {0x0408, 0x0008, 0x0408, 81,20249, 20255, 20255, 20255, 20270, 18429, 18433, 18403, 20302, {0, 0, 0, 0, 0}, 61, 61, { 1253, 20273, 10006, 737, ';' }},
+       {0x0409, 0x0009, 0x0409, 212,20305, 20311, 20311, 20311, 20311, 18448, 18452, 18437, 20335, {0, 0, 0, 0, 0}, 62, 62, { 1252, 37, 10000, 437, ',' }},
+       {0x040B, 0x000B, 0x040B, 63,20338, 20344, 20344, 20344, 20362, 18501, 18505, 18484, 20376, {0, 0, 0, 0, 0}, 63, 63, { 1252, 20278, 10000, 850, ';' }},
+       {0x040C, 0x000C, 0x040C, 68,20379, 20385, 20385, 20385, 20401, 18526, 18530, 5984, 20420, {0, 0, 0, 0, 0}, 64, 64, { 1252, 20297, 10000, 850, ';' }},
+       {0x040D, 0x000D, 0x040D, 92,20423, 20429, 20429, 20429, 20445, 18555, 18559, 18534, 20469, {0, 0, 0, 0, 0}, 65, 65, { 1255, 500, 10005, 862, ',' }},
+       {0x040E, 0x000E, 0x040E, 89,20472, 20478, 20478, 20478, 20498, 18583, 18587, 18563, 20521, {0, 0, 0, 0, 0}, 66, 66, { 1250, 500, 10029, 852, ';' }},
+       {0x040F, 0x000F, 0x040F, 97,20524, 20530, 20530, 20530, 20550, 18614, 18618, 18591, 20570, {0, 0, 0, 0, 0}, 67, 67, { 1252, 20871, 10079, 850, ';' }},
+       {0x0410, 0x0010, 0x0410, 98,20573, 20579, 20579, 20579, 20595, 18642, 18646, 18622, 20613, {0, 0, 0, 0, 0}, 68, 68, { 1252, 20280, 10000, 850, ';' }},
+       {0x0411, 0x0011, 0x0411, 101,20616, 20622, 20622, 20622, 20639, 18672, 18676, 18650, 20658, {0, 0, 0, 0, 0}, 69, 69, { 932, 20290, 10001, 932, ',' }},
+       {0x0412, 0x0012, 0x0412, 109,20661, 20667, 20667, 20667, 20688, 18700, 18704, 18680, 20713, {0, 0, 0, 0, 0}, 70, 70, { 949, 20833, 10003, 949, ',' }},
+       {0x0413, 0x0013, 0x0413, 149,20716, 20722, 20722, 20722, 20742, 18728, 18732, 18708, 20765, {0, 0, 0, 0, 0}, 71, 71, { 1252, 500, 10000, 850, ';' }},
+       {0x0414, 0x0014, 0x0414, 150,20768, 20774, 20800, 20800, 20827, 18755, 20849, 20853, 20856, {0, 0, 0, 0, 0}, 72, 72, { 1252, 20277, 10000, 850, ';' }},
+       {0x0415, 0x0015, 0x0415, 162,20859, 20865, 20865, 20865, 20881, 18780, 18784, 18763, 20897, {0, 0, 0, 0, 0}, 73, 73, { 1250, 20880, 10029, 852, ';' }},
+       {0x0416, 0x0016, 0x0416, 26,20900, 20906, 20906, 20906, 20926, 18813, 18817, 18788, 20946, {0, 0, 0, 0, 0}, 74, 74, { 1252, 500, 10000, 850, ';' }},
+       {0x0418, 0x0018, 0x0418, 171,20949, 20955, 20955, 20955, 20974, 18842, 18846, 18821, 20994, {0, 0, 0, 0, 0}, 75, 75, { 1250, 20880, 10029, 852, ';' }},
+       {0x0419, 0x0019, 0x0419, 172,20997, 21003, 21003, 21003, 21020, 18876, 18880, 18850, 21050, {0, 0, 0, 0, 0}, 76, 76, { 1251, 20880, 10007, 866, ';' }},
+       {0x041A, 0x001A, 0x041A, 88,21053, 21059, 21059, 21059, 21078, 18905, 18909, 18884, 21098, {0, 0, 0, 0, 0}, 77, 77, { 1250, 500, 10082, 852, ';' }},
+       {0x041B, 0x001B, 0x041B, 183,21101, 21107, 21107, 21107, 21125, 18934, 18938, 18913, 21159, {0, 0, 0, 0, 0}, 78, 78, { 1250, 20880, 10029, 852, ';' }},
+       {0x041C, 0x001C, 0x041C, 4,21162, 21168, 21168, 21168, 21187, 18961, 18965, 18942, 21207, {0, 0, 0, 0, 0}, 79, 79, { 1250, 20880, 10029, 852, ';' }},
+       {0x041D, 0x001D, 0x041D, 178,21210, 21216, 21216, 21216, 21233, 18988, 18992, 18969, 21251, {0, 0, 0, 0, 0}, 80, 80, { 1252, 20278, 10000, 850, ';' }},
+       {0x041E, 0x001E, 0x041E, 197,21254, 21260, 21260, 21260, 21276, 19014, 19018, 18996, 21316, {0, 0, 0, 0, 0}, 81, 81, { 874, 20838, 10021, 874, ',' }},
+       {0x041F, 0x001F, 0x041F, 204,21319, 21325, 21325, 21325, 21342, 19042, 19046, 19022, 21362, {0, 0, 0, 0, 0}, 82, 82, { 1254, 20905, 10081, 857, ';' }},
+       {0x0421, 0x0021, 0x0421, 90,21365, 21371, 21371, 21371, 21394, 19081, 19085, 19050, 21423, {0, 0, 0, 0, 0}, 83, 83, { 1252, 500, 10000, 850, ';' }},
+       {0x0422, 0x0022, 0x0422, 209,21426, 21432, 21432, 21432, 21452, 19123, 19127, 19089, 21490, {0, 0, 0, 0, 0}, 84, 84, { 1251, 500, 10017, 866, ';' }},
+       {0x0423, 0x0023, 0x0423, 30,21493, 21499, 21499, 21499, 21520, 19164, 19168, 19131, 21558, {0, 0, 0, 0, 0}, 85, 85, { 1251, 500, 10007, 866, ';' }},
+       {0x0424, 0x0024, 0x0424, 181,21561, 21567, 21567, 21567, 21588, 19199, 19203, 19172, 21614, {0, 0, 0, 0, 0}, 86, 86, { 1250, 20880, 10029, 852, ';' }},
+       {0x0425, 0x0025, 0x0425, 57,21617, 21623, 21623, 21623, 21642, 19225, 19229, 19207, 21656, {0, 0, 0, 0, 0}, 87, 87, { 1257, 500, 10029, 775, ';' }},
+       {0x0426, 0x0026, 0x0426, 121,21659, 21665, 21665, 21665, 21682, 19254, 19258, 19233, 21702, {0, 0, 0, 0, 0}, 88, 88, { 1257, 500, 10029, 775, ';' }},
+       {0x0427, 0x0027, 0x0427, 119,21705, 21711, 21711, 21711, 21734, 19286, 19290, 19262, 21754, {0, 0, 0, 0, 0}, 89, 89, { 1257, 500, 10029, 775, ';' }},
+       {0x0429, 0x0029, 0x0429, 96,21757, 21763, 21763, 21763, 21778, 19316, 19320, 19294, 21802, {0, 0, 0, 0, 0}, 90, 90, { 1256, 20420, 10004, 720, ';' }},
+       {0x042A, 0x002A, 0x042A, 220,21805, 21811, 21811, 21811, 21832, 19353, 3169, 19324, 21860, {0, 0, 0, 0, 0}, 91, 91, { 1258, 500, 10000, 1258, ',' }},
+       {0x042B, 0x002B, 0x042B, 5,21863, 21869, 21869, 21869, 21888, 19384, 19388, 19357, 465, {0, 0, 0, 0, 0}, 92, 92, { 0, 500, 2, 1, ',' }},
+       {0x042D, 0x002D, 0x042D, 61,21953, 21959, 21959, 21959, 21974, 19410, 19414, 19392, 20051, {0, 0, 0, 0, 0}, 93, 93, { 1252, 500, 10000, 850, ';' }},
+       {0x042F, 0x002F, 0x042F, 128,21993, 21999, 21999, 21999, 22022, 19453, 19457, 19418, 22066, {0, 0, 0, 0, 0}, 94, 94, { 1251, 500, 10007, 866, ';' }},
+       {0x0436, 0x0036, 0x0436, 227,22069, 22075, 22075, 22075, 22100, 19485, 19489, 19461, 22125, {0, 0, 0, 0, 0}, 95, 95, { 1252, 500, 10000, 850, ',' }},
+       {0x0437, 0x0037, 0x0437, 72,22128, 22134, 22134, 22134, 22153, 19527, 19531, 19493, 22208, {0, 0, 0, 0, 0}, 96, 96, { 0, 500, 2, 1, ';' }},
+       {0x0438, 0x0038, 0x0438, 67,22211, 22217, 22217, 22217, 22241, 19556, 19560, 19535, 22262, {0, 0, 0, 0, 0}, 97, 97, { 1252, 20277, 10079, 850, ';' }},
+       {0x0439, 0x0039, 0x0439, 93,22265, 22271, 22271, 22271, 22285, 19589, 19593, 19564, 22316, {0, 0, 0, 0, 0}, 98, 98, { 0, 500, 2, 1, ',' }},
+       {0x0441, 0x0041, 0x0441, 102,22319, 22325, 22325, 22325, 22341, 19618, 19622, 19597, 22359, {0, 0, 0, 0, 0}, 99, 99, { 1252, 500, 10000, 437, ',' }},
+       {0x0447, 0x0047, 0x0447, 93,22362, 22368, 22368, 22368, 22385, 19660, 19664, 19626, 22316, {0, 0, 0, 0, 0}, 100, 100, { 0, 500, 2, 1, ',' }},
+       {0x0449, 0x0049, 0x0449, 93,22422, 22428, 22428, 22428, 22442, 19693, 19697, 19668, 22316, {0, 0, 0, 0, 0}, 101, 101, { 0, 500, 2, 1, ',' }},
+       {0x044A, 0x004A, 0x044A, 93,22482, 22488, 22488, 22488, 22503, 19730, 19734, 19701, 22316, {0, 0, 0, 0, 0}, 102, 102, { 0, 500, 2, 1, ',' }},
+       {0x044B, 0x004B, 0x044B, 93,22550, 22556, 22556, 22556, 22572, 19765, 19769, 19738, 22316, {0, 0, 0, 0, 0}, 103, 103, { 0, 500, 2, 1, ',' }},
+       {0x044E, 0x004E, 0x044E, 93,22603, 22609, 22609, 22609, 22625, 19800, 1873, 19773, 22316, {0, 0, 0, 0, 0}, 104, 104, { 0, 500, 2, 1, ',' }},
+       {0x0456, 0x0056, 0x0456, 61,22656, 22662, 22662, 22662, 22679, 19823, 19827, 19804, 20051, {0, 0, 0, 0, 0}, 105, 105, { 1252, 500, 10000, 850, ',' }},
+       {0x0457, 0x0057, 0x0457, 93,22696, 22703, 22703, 22703, 22719, 19862, 19831, 19831, 22316, {0, 0, 0, 0, 0}, 106, 106, { 0, 500, 2, 1, ',' }},
+       {0x0801, 0x0001, 0x0801, 95,22753, 22759, 22759, 22759, 22773, 22803, 18222, 18193, 22807, {2, 1, 0, 0, 0}, 107, 107, { 1256, 20420, 10004, 720, ';' }},
+       {0x0804, 0x0004, 0x0804, 42,22810, 22816, 22816, 22816, 22832, 18315, 18319, 18323, 11087, {0, 0, 0, 0, 0}, 108, 108, { 936, 500, 10008, 936, ',' }},
+       {0x0807, 0x0007, 0x0807, 37,22848, 22854, 22854, 22854, 22875, 22893, 18399, 18377, 11008, {0, 0, 0, 0, 0}, 109, 109, { 1252, 20273, 10000, 850, ';' }},
+       {0x0809, 0x0009, 0x0809, 70,22897, 22903, 22903, 22903, 22903, 22928, 18452, 18437, 22932, {0, 0, 0, 0, 0}, 110, 110, { 1252, 20285, 10000, 850, ',' }},
+       {0x080A, 0x000A, 0x080A, 141,22935, 22941, 22941, 22941, 22958, 22977, 18480, 18456, 22981, {0, 0, 0, 0, 0}, 111, 111, { 1252, 20284, 10000, 850, ',' }},
+       {0x080C, 0x000C, 0x080C, 17,22984, 22990, 22990, 22990, 23007, 23028, 18530, 5984, 23032, {0, 0, 0, 0, 0}, 112, 112, { 1252, 20297, 10000, 850, ';' }},
+       {0x0810, 0x0010, 0x0810, 37,23035, 23041, 23041, 23041, 23063, 23083, 18646, 18622, 11008, {0, 0, 0, 0, 0}, 113, 113, { 1252, 500, 10000, 850, ';' }},
+       {0x0813, 0x0013, 0x0813, 17,23087, 23093, 23093, 23093, 23109, 23130, 18732, 18708, 23032, {0, 0, 0, 0, 0}, 114, 114, { 1252, 500, 10000, 850, ';' }},
+       {0x0814, 0x0014, 0x0814, 150,23134, 23140, 23140, 23140, 23167, 23189, 23193, 23197, 20856, {0, 0, 0, 0, 0}, 115, 115, { 1252, 20277, 10000, 850, ';' }},
+       {0x0816, 0x0016, 0x0816, 166,23200, 23206, 23206, 23206, 23228, 23250, 18817, 18788, 23254, {0, 0, 0, 0, 0}, 116, 116, { 1252, 500, 10000, 850, ';' }},
+       {0x081D, 0x001D, 0x081D, 63,23257, 23263, 23263, 23263, 23281, 23299, 18992, 18969, 20376, {0, 0, 0, 0, 0}, 117, 117, { 1252, 20278, 10000, 850, ';' }},
+       {0x0C01, 0x0001, 0x0C01, 58,23303, 23309, 23309, 23309, 23324, 23348, 18222, 18193, 23352, {16777216, 0, 0, 0, 0}, 118, 118, { 1256, 20420, 10004, 720, ';' }},
+       {0x0C04, 0x7C04, 0x0C04, 85,23355, 23361, 23361, 23361, 23395, 23432, 18319, 18323, 23436, {0, 0, 0, 0, 0}, 119, 119, { 950, 500, 10002, 950, ',' }},
+       {0x0C07, 0x0007, 0x0C07, 10,23439, 23445, 23445, 23445, 23462, 23484, 18399, 18377, 23488, {0, 0, 0, 0, 0}, 120, 120, { 1252, 20273, 10000, 850, ';' }},
+       {0x0C09, 0x0009, 0x0C09, 11,23491, 23497, 23497, 23497, 23497, 23517, 18452, 18437, 23521, {0, 0, 0, 0, 0}, 121, 121, { 1252, 500, 10000, 850, ',' }},
+       {0x0C0A, 0x000A, 0x0C0A, 61,23524, 23530, 23530, 23530, 23546, 23565, 18480, 18456, 20051, {0, 0, 0, 0, 0}, 122, 122, { 1252, 20284, 10000, 850, ';' }},
+       {0x0C0C, 0x000C, 0x0C0C, 32,23569, 23575, 23575, 23575, 23591, 23610, 18530, 5984, 23614, {0, 0, 0, 0, 0}, 123, 123, { 1252, 20297, 10000, 850, ';' }},
+       {0x1001, 0x0001, 0x1001, 122,23617, 23623, 23623, 23623, 23638, 23666, 18222, 18193, 23670, {16777216, 0, 0, 0, 0}, 124, 124, { 1256, 20420, 10004, 720, ';' }},
+       {0x1004, 0x0004, 0x1004, 179,23673, 23679, 23679, 23679, 23699, 23718, 18319, 18323, 23722, {0, 0, 0, 0, 0}, 125, 125, { 936, 500, 10008, 936, ',' }},
+       {0x1007, 0x0007, 0x1007, 120,23725, 23731, 23731, 23731, 23751, 23771, 18399, 18377, 23775, {0, 0, 0, 0, 0}, 126, 126, { 1252, 20273, 10000, 850, ';' }},
+       {0x1009, 0x0009, 0x1009, 32,23778, 23784, 23784, 23784, 23784, 23801, 18452, 18437, 23614, {0, 0, 0, 0, 0}, 127, 127, { 1252, 37, 10000, 850, ',' }},
+       {0x100A, 0x000A, 0x100A, 82,23805, 23811, 23811, 23811, 23831, 23852, 18480, 18456, 23856, {0, 0, 0, 0, 0}, 128, 128, { 1252, 20284, 10000, 850, ',' }},
+       {0x100C, 0x000C, 0x100C, 37,23859, 23865, 23865, 23865, 23886, 23905, 18530, 5984, 11008, {0, 0, 0, 0, 0}, 129, 129, { 1252, 20297, 10000, 850, ';' }},
+       {0x1401, 0x0001, 0x1401, 55,23909, 23915, 23915, 23915, 23932, 23964, 18222, 18193, 23968, {16777216, 0, 0, 0, 0}, 130, 130, { 1256, 20420, 10004, 720, ';' }},
+       {0x1404, 0x0004, 0x1404, 132,23971, 23977, 23977, 23977, 24006, 24043, 18319, 18323, 24047, {0, 0, 0, 0, 0}, 131, 131, { 950, 500, 10002, 950, ',' }},
+       {0x1409, 0x0009, 0x1409, 154,24050, 24056, 24056, 24056, 24056, 24078, 18452, 18437, 24082, {0, 0, 0, 0, 0}, 132, 132, { 1252, 500, 10000, 850, ',' }},
+       {0x140A, 0x000A, 0x140A, 44,24085, 24091, 24091, 24091, 24112, 24134, 18480, 18456, 24138, {0, 0, 0, 0, 0}, 133, 133, { 1252, 20284, 10000, 850, ',' }},
+       {0x140C, 0x000C, 0x140C, 120,24141, 24147, 24147, 24147, 24167, 24190, 18530, 5984, 23775, {0, 0, 0, 0, 0}, 134, 134, { 1252, 20297, 10000, 850, ';' }},
+       {0x1801, 0x0001, 0x1801, 123,24194, 24200, 24200, 24200, 24217, 24247, 18222, 18193, 24251, {16777216, 0, 0, 0, 0}, 135, 135, { 1256, 20420, 10004, 720, ';' }},
+       {0x1809, 0x0009, 0x1809, 91,24254, 24260, 24260, 24260, 24260, 24278, 18452, 18437, 24282, {0, 0, 0, 0, 0}, 136, 136, { 1252, 500, 10000, 850, ',' }},
+       {0x180A, 0x000A, 0x180A, 156,24285, 24291, 24291, 24291, 24308, 24327, 18480, 18456, 24331, {0, 0, 0, 0, 0}, 137, 137, { 1252, 20284, 10000, 850, ',' }},
+       {0x1C01, 0x0001, 0x1C01, 202,24334, 24340, 24340, 24340, 24357, 24383, 18222, 18193, 24387, {16777216, 0, 0, 0, 0}, 138, 138, { 1256, 20420, 10004, 720, ';' }},
+       {0x1C09, 0x0009, 0x1C09, 227,24390, 24396, 24396, 24396, 24396, 24419, 18452, 18437, 22125, {0, 0, 0, 0, 0}, 139, 139, { 1252, 500, 10000, 437, ',' }},
+       {0x1C0A, 0x000A, 0x1C0A, 54,24423, 24429, 24429, 24429, 24458, 24491, 18480, 18456, 24495, {0, 0, 0, 0, 0}, 140, 140, { 1252, 20284, 10000, 850, ',' }},
+       {0x2001, 0x0001, 0x2001, 155,24498, 24504, 24504, 24504, 24518, 24544, 18222, 18193, 24548, {16777216, 0, 0, 0, 0}, 141, 141, { 1256, 20420, 10004, 720, ';' }},
+       {0x200A, 0x000A, 0x200A, 217,24551, 24557, 24557, 24557, 24577, 24598, 18480, 18456, 24602, {0, 0, 0, 0, 0}, 142, 142, { 1252, 20284, 10000, 850, ',' }},
+       {0x2401, 0x0001, 0x2401, 224,24605, 24611, 24611, 24611, 24626, 24654, 18222, 18193, 24658, {16777216, 0, 0, 0, 0}, 143, 143, { 1256, 20420, 10004, 720, ';' }},
+       {0x240A, 0x000A, 0x240A, 43,24661, 24667, 24667, 24667, 24686, 24706, 18480, 18456, 24710, {0, 0, 0, 0, 0}, 144, 144, { 1252, 20284, 10000, 850, ',' }},
+       {0x2801, 0x0001, 0x2801, 191,24713, 24719, 24719, 24719, 24734, 24762, 18222, 18193, 24766, {16777216, 0, 0, 0, 0}, 145, 145, { 1256, 20420, 10004, 720, ';' }},
+       {0x280A, 0x000A, 0x280A, 157,24769, 24775, 24775, 24775, 24790, 24807, 18480, 18456, 24811, {0, 0, 0, 0, 0}, 146, 146, { 1252, 20284, 10000, 850, ',' }},
+       {0x2C01, 0x0001, 0x2C01, 100,24814, 24820, 24820, 24820, 24836, 24866, 18222, 18193, 24870, {16777216, 0, 0, 0, 0}, 147, 147, { 1256, 20420, 10004, 720, ';' }},
+       {0x2C09, 0x0009, 0x2C09, 205,24873, 24879, 24879, 24879, 24879, 24909, 18452, 18437, 24913, {0, 0, 0, 0, 0}, 148, 148, { 1252, 500, 10000, 850, ';' }},
+       {0x2C0A, 0x000A, 0x2C0A, 8,24916, 24922, 24922, 24922, 24942, 24963, 18480, 18456, 24967, {0, 0, 0, 0, 0}, 149, 149, { 1252, 20284, 10000, 850, ',' }},
+       {0x3001, 0x0001, 0x3001, 114,24970, 24976, 24976, 24976, 24993, 25021, 18222, 18193, 25025, {16777216, 0, 0, 0, 0}, 150, 150, { 1256, 20420, 10004, 720, ';' }},
+       {0x3009, 0x0009, 0x3009, 229,25028, 25034, 25034, 25034, 25034, 25053, 18452, 18437, 25057, {0, 0, 0, 0, 0}, 151, 151, { 1252, 500, 10000, 437, ',' }},
+       {0x300A, 0x000A, 0x300A, 56,25060, 25066, 25066, 25066, 25084, 25103, 18480, 18456, 25107, {0, 0, 0, 0, 0}, 152, 152, { 1252, 20284, 10000, 850, ',' }},
+       {0x3401, 0x0001, 0x3401, 110,25110, 25116, 25116, 25116, 25132, 25162, 18222, 18193, 25166, {16777216, 0, 0, 0, 0}, 153, 153, { 1256, 20420, 10004, 720, ';' }},
+       {0x3409, 0x0009, 0x3409, 160,25169, 25175, 25175, 25175, 25175, 25197, 18452, 18437, 25201, {0, 0, 0, 0, 0}, 154, 154, { 1252, 500, 10000, 437, ',' }},
+       {0x340A, 0x000A, 0x340A, 40,25204, 25210, 25210, 25210, 25226, 25243, 18480, 18456, 25247, {0, 0, 0, 0, 0}, 155, 155, { 1252, 20284, 10000, 850, ',' }},
+       {0x3801, 0x0001, 0x3801, 0,25250, 25256, 25256, 25256, 25286, 25350, 18222, 18193, 25354, {16777216, 0, 0, 0, 0}, 156, 156, { 1256, 20420, 10004, 720, ';' }},
+       {0x380A, 0x000A, 0x380A, 213,25357, 25363, 25363, 25363, 25381, 25400, 18480, 18456, 25404, {0, 0, 0, 0, 0}, 157, 157, { 1252, 20284, 10000, 850, ',' }},
+       {0x3C01, 0x0001, 0x3C01, 20,25407, 25413, 25413, 25413, 25430, 25462, 18222, 18193, 25466, {16777216, 0, 0, 0, 0}, 158, 158, { 1256, 20420, 10004, 720, ';' }},
+       {0x3C0A, 0x000A, 0x3C0A, 168,25469, 25475, 25475, 25475, 25494, 25514, 18480, 18456, 25518, {0, 0, 0, 0, 0}, 159, 159, { 1252, 20284, 10000, 850, ',' }},
+       {0x4001, 0x0001, 0x4001, 169,25521, 25527, 25527, 25527, 25542, 25566, 18222, 18193, 25570, {16777216, 0, 0, 0, 0}, 160, 160, { 1256, 20420, 10004, 720, ';' }},
+       {0x400A, 0x000A, 0x400A, 25,25573, 25579, 25579, 25579, 25597, 25616, 18480, 18456, 25620, {0, 0, 0, 0, 0}, 161, 161, { 1252, 20284, 10000, 850, ',' }},
+       {0x440A, 0x000A, 0x440A, 190,25623, 25629, 25629, 25629, 25651, 25674, 18480, 18456, 25678, {0, 0, 0, 0, 0}, 162, 162, { 1252, 20284, 10000, 850, ',' }},
+       {0x480A, 0x000A, 0x480A, 87,25681, 25687, 25687, 25687, 25706, 25726, 18480, 18456, 25730, {0, 0, 0, 0, 0}, 163, 163, { 1252, 20284, 10000, 850, ',' }},
+       {0x4C0A, 0x000A, 0x4C0A, 148,25733, 25739, 25739, 25739, 25759, 25780, 18480, 18456, 25784, {0, 0, 0, 0, 0}, 164, 164, { 1252, 20284, 10000, 850, ',' }},
+       {0x500A, 0x000A, 0x500A, 165,25787, 25793, 25793, 25793, 25815, 25838, 18480, 18456, 25842, {0, 0, 0, 0, 0}, 165, 165, { 1252, 20284, 10000, 850, ',' }},
+       {0x7C04, 0x007F, 0x0000, -1,25845, 20060, 18300, 18300, 18308, 20093, 18319, 18323, 0, {0, 0, 0, 0, 0}, 166, 166, { 950, 500, 10002, 950, ',' }}
 };
 
 
 static const CultureInfoNameEntry culture_name_entries [] = {
-       {19458, 42},
-       {25849, 95},
-       {18190, 0},
-       {25855, 156},
-       {25861, 158},
-       {25867, 130},
-       {25873, 118},
-       {25879, 107},
-       {25885, 147},
-       {25891, 153},
-       {25897, 150},
-       {25903, 124},
-       {25909, 135},
-       {25915, 141},
-       {25921, 160},
-       {25927, 54},
-       {25933, 145},
-       {25939, 138},
-       {25945, 143},
-       {19128, 32},
-       {25951, 85},
-       {18223, 1},
-       {25957, 55},
-       {18263, 2},
-       {25963, 56},
-       {18323, 4},
-       {25969, 58},
-       {18350, 5},
-       {25975, 59},
-       {18374, 6},
-       {25981, 120},
-       {25987, 109},
-       {25993, 60},
-       {25999, 126},
-       {18400, 7},
-       {26005, 61},
-       {18434, 8},
-       {26011, 121},
-       {26017, 127},
-       {26023, 110},
-       {26029, 136},
-       {26035, 132},
-       {26041, 154},
-       {26047, 148},
-       {26053, 62},
-       {26059, 139},
-       {26065, 151},
-       {18453, 9},
-       {26071, 149},
-       {26077, 161},
-       {26083, 155},
-       {26089, 144},
-       {26095, 133},
-       {26101, 140},
-       {26107, 152},
-       {26113, 122},
-       {26119, 128},
-       {26125, 163},
-       {26131, 111},
-       {26137, 164},
-       {26143, 137},
-       {26149, 146},
-       {26155, 165},
-       {26161, 159},
-       {26167, 162},
-       {26173, 157},
-       {26179, 142},
-       {19204, 34},
-       {26185, 87},
-       {19389, 40},
-       {26191, 93},
-       {19291, 37},
-       {26197, 90},
-       {18481, 10},
-       {26203, 63},
-       {19532, 44},
-       {26209, 97},
-       {5977, 11},
-       {26215, 112},
-       {26221, 123},
-       {26227, 129},
-       {26233, 64},
-       {26239, 134},
-       {19801, 52},
-       {26245, 105},
-       {19623, 47},
-       {26251, 100},
-       {18531, 12},
-       {26257, 65},
-       {19561, 45},
-       {26263, 98},
-       {18881, 24},
-       {26269, 77},
-       {18560, 13},
-       {26275, 66},
-       {19354, 39},
-       {26281, 92},
-       {19047, 30},
-       {26287, 83},
-       {18588, 14},
-       {26293, 67},
-       {18619, 15},
-       {26299, 113},
-       {26305, 68},
-       {18647, 16},
-       {26311, 69},
-       {19490, 43},
-       {26317, 96},
-       {19735, 50},
-       {26323, 103},
-       {18677, 17},
-       {26329, 70},
-       {19828, 53},
-       {26335, 106},
-       {19259, 36},
-       {26342, 89},
-       {19230, 35},
-       {26348, 88},
-       {19415, 41},
-       {26354, 94},
-       {19770, 51},
-       {26360, 104},
-       {26366, 72},
-       {18705, 18},
-       {26372, 114},
-       {26378, 71},
-       {26384, 115},
-       {18733, 19},
-       {18760, 20},
-       {26390, 73},
-       {18785, 21},
-       {26396, 74},
-       {26402, 116},
-       {18818, 22},
-       {26408, 75},
-       {18847, 23},
-       {26414, 76},
-       {18910, 25},
-       {26420, 78},
-       {19169, 33},
-       {26426, 86},
-       {18939, 26},
-       {26432, 79},
-       {18966, 27},
-       {26438, 117},
-       {26444, 80},
-       {19594, 46},
-       {26450, 99},
-       {19665, 48},
-       {26456, 101},
-       {19698, 49},
-       {26462, 102},
-       {18993, 28},
-       {26468, 81},
-       {19019, 29},
-       {26474, 82},
-       {19086, 31},
-       {26480, 84},
-       {19321, 38},
-       {26486, 91},
-       {26492, 3},
-       {26499, 166},
-       {26506, 108},
-       {26512, 119},
-       {26518, 131},
-       {26524, 125},
-       {26530, 57}
+       {19461, 42},
+       {25852, 95},
+       {18193, 0},
+       {25858, 156},
+       {25864, 158},
+       {25870, 130},
+       {25876, 118},
+       {25882, 107},
+       {25888, 147},
+       {25894, 153},
+       {25900, 150},
+       {25906, 124},
+       {25912, 135},
+       {25918, 141},
+       {25924, 160},
+       {25930, 54},
+       {25936, 145},
+       {25942, 138},
+       {25948, 143},
+       {19131, 32},
+       {25954, 85},
+       {18226, 1},
+       {25960, 55},
+       {18266, 2},
+       {25966, 56},
+       {18326, 4},
+       {25972, 58},
+       {18353, 5},
+       {25978, 59},
+       {18377, 6},
+       {25984, 120},
+       {25990, 109},
+       {25996, 60},
+       {26002, 126},
+       {18403, 7},
+       {26008, 61},
+       {18437, 8},
+       {26014, 121},
+       {26020, 127},
+       {26026, 110},
+       {26032, 136},
+       {26038, 132},
+       {26044, 154},
+       {26050, 148},
+       {26056, 62},
+       {26062, 139},
+       {26068, 151},
+       {18456, 9},
+       {26074, 149},
+       {26080, 161},
+       {26086, 155},
+       {26092, 144},
+       {26098, 133},
+       {26104, 140},
+       {26110, 152},
+       {26116, 122},
+       {26122, 128},
+       {26128, 163},
+       {26134, 111},
+       {26140, 164},
+       {26146, 137},
+       {26152, 146},
+       {26158, 165},
+       {26164, 159},
+       {26170, 162},
+       {26176, 157},
+       {26182, 142},
+       {19207, 34},
+       {26188, 87},
+       {19392, 40},
+       {26194, 93},
+       {19294, 37},
+       {26200, 90},
+       {18484, 10},
+       {26206, 63},
+       {19535, 44},
+       {26212, 97},
+       {5984, 11},
+       {26218, 112},
+       {26224, 123},
+       {26230, 129},
+       {26236, 64},
+       {26242, 134},
+       {19804, 52},
+       {26248, 105},
+       {19626, 47},
+       {26254, 100},
+       {18534, 12},
+       {26260, 65},
+       {19564, 45},
+       {26266, 98},
+       {18884, 24},
+       {26272, 77},
+       {18563, 13},
+       {26278, 66},
+       {19357, 39},
+       {26284, 92},
+       {19050, 30},
+       {26290, 83},
+       {18591, 14},
+       {26296, 67},
+       {18622, 15},
+       {26302, 113},
+       {26308, 68},
+       {18650, 16},
+       {26314, 69},
+       {19493, 43},
+       {26320, 96},
+       {19738, 50},
+       {26326, 103},
+       {18680, 17},
+       {26332, 70},
+       {19831, 53},
+       {26338, 106},
+       {19262, 36},
+       {26345, 89},
+       {19233, 35},
+       {26351, 88},
+       {19418, 41},
+       {26357, 94},
+       {19773, 51},
+       {26363, 104},
+       {26369, 72},
+       {18708, 18},
+       {26375, 114},
+       {26381, 71},
+       {26387, 115},
+       {18736, 19},
+       {18763, 20},
+       {26393, 73},
+       {18788, 21},
+       {26399, 74},
+       {26405, 116},
+       {18821, 22},
+       {26411, 75},
+       {18850, 23},
+       {26417, 76},
+       {18913, 25},
+       {26423, 78},
+       {19172, 33},
+       {26429, 86},
+       {18942, 26},
+       {26435, 79},
+       {18969, 27},
+       {26441, 117},
+       {26447, 80},
+       {19597, 46},
+       {26453, 99},
+       {19668, 48},
+       {26459, 101},
+       {19701, 49},
+       {26465, 102},
+       {18996, 28},
+       {26471, 81},
+       {19022, 29},
+       {26477, 82},
+       {19089, 31},
+       {26483, 84},
+       {19324, 38},
+       {26489, 91},
+       {26495, 3},
+       {26502, 166},
+       {26509, 108},
+       {26515, 119},
+       {26521, 131},
+       {26527, 125},
+       {26533, 57}
 };
 
 
 static const RegionInfoEntry region_entries [] = {
-       { 0, 0,25351,343,343,26536,343,26557,26561},
-       { 0, 1,26589,343,343,26592,343,26604,26608},
-       { 0, 2,26616,343,343,26619,343,26639,26643},
-       { 0, 3,26665,343,343,26668,343,26639,26643},
-       { 0, 4,21204,343,343,26677,343,26685,26689},
-       { 0, 5,465,343,343,26702,343,26710,26714},
-       { 0, 6,26728,343,343,26731,343,26752,26756},
-       { 0, 7,26785,343,343,26788,343,26795,26799},
-       { 0, 8,24964,343,343,26814,343,24759,26824},
-       { 0, 9,26839,343,343,26842,343,26857,26861},
-       { 0, 10,23485,343,343,26871,343,26879,26883},
-       { 0, 11,23518,343,343,26888,343,26898,26902},
-       { 0, 12,26920,343,343,26923,343,26929,26933},
-       { 0, 13,26948,343,343,26951,343,26962,26966},
-       { 0, 14,26986,343,343,26989,343,27012,27016},
-       { 0, 15,27052,343,343,27055,343,27064,27068},
-       { 0, 16,27084,343,343,27087,343,27098,27102},
-       { 0, 17,23029,343,343,27118,343,26879,26883},
-       { 0, 18,27126,343,343,27129,343,27142,27146},
-       { 0, 19,20005,343,343,27162,343,27171,27175},
-       { 0, 20,25463,343,343,27193,343,27201,27205},
-       { 0, 21,27220,343,343,27223,343,27231,27235},
-       { 0, 22,27249,343,343,27252,343,27142,27146},
-       { 0, 23,27258,343,343,27261,343,27269,27273},
-       { 0, 24,27289,343,343,27292,343,27299,27303},
-       { 0, 25,25617,343,343,27317,343,27325,27329},
-       { 0, 26,20943,343,343,27339,343,27346,27350},
-       { 0, 27,27365,343,343,27368,343,27376,27380},
-       { 0, 28,27396,343,343,27399,343,27413,27417},
-       { 0, 29,27433,343,343,27436,343,27445,27449},
-       { 0, 30,21555,343,343,27464,343,27472,27476},
-       { 0, 31,27494,343,343,27497,343,27504,27508},
-       { 0, 32,23611,343,343,27522,343,27529,27533},
-       { 0, 33,27549,343,343,27552,343,26898,26902},
-       { 0, 34,27566,343,343,27569,343,27602,27606},
-       { 0, 35,27632,343,343,27635,343,27660,27664},
-       { 0, 36,27679,343,343,27682,343,27660,27664},
-       { 0, 37,11001,343,343,27688,343,27700,27704},
-       { 0, 38,27716,343,343,27719,343,27142,27146},
-       { 0, 39,27734,343,343,27737,343,27750,27754},
-       { 0, 40,25244,343,343,27773,343,27779,27783},
-       { 0, 41,27796,343,343,27799,343,27660,27664},
-       { 0, 42,11080,343,343,27808,343,27814,27818},
-       { 0, 43,24707,343,343,27840,343,27849,27853},
-       { 0, 44,24135,343,343,27868,343,18032,27879},
-       { 0, 45,27897,343,343,27900,343,27905,27909},
-       { 0, 46,27920,343,343,27923,343,27934,27938},
-       { 0, 47,27956,343,343,27959,343,26898,26902},
-       { 0, 48,27976,343,343,27979,343,27986,27990},
-       { 0, 49,20156,343,343,28003,343,28018,28022},
-       { 0, 50,4300,343,343,28044,343,26879,26883},
-       { 0, 51,28052,343,343,28055,343,28064,28068},
-       { 0, 52,20198,343,343,28083,343,28091,28095},
-       { 0, 53,28108,343,343,28111,343,26639,26643},
-       { 0, 54,24492,343,343,28120,343,28139,28143},
-       { 0, 55,23965,343,343,28158,343,28166,28170},
-       { 0, 56,25104,343,343,28185,343,28193,28197},
-       { 0, 57,21653,343,343,28211,343,28219,28223},
-       { 0, 58,23349,343,343,28238,343,28244,28248},
-       { 0, 59,28263,343,343,28266,343,28281,28285},
-       { 0, 60,28301,343,343,28304,343,28312,28316},
-       { 0, 61,20048,343,343,28331,343,26879,26883},
-       { 0, 62,28337,343,343,28340,343,28349,28353},
-       { 0, 63,20373,343,343,28368,343,26879,26883},
-       { 0, 64,28376,343,343,28379,343,28384,28388},
-       { 0, 65,28400,343,343,28403,343,28420,28424},
-       { 0, 66,28447,343,343,28450,343,26857,26861},
-       { 0, 67,22259,343,343,28461,343,28091,28095},
-       { 0, 68,20417,343,343,28475,343,26879,26883},
-       { 0, 69,28482,343,343,28485,343,27660,27664},
-       { 0, 70,22929,343,343,28491,343,28506,28510},
-       { 0, 71,28533,343,343,28536,343,26639,26643},
-       { 0, 72,22205,343,343,28544,343,28552,28556},
-       { 0, 73,28570,343,343,28573,343,26879,26883},
-       { 0, 74,28587,343,343,28590,343,28596,28600},
-       { 0, 75,28611,343,343,28614,343,28624,28628},
-       { 0, 76,28644,343,343,28647,343,28091,28095},
-       { 0, 77,28657,343,343,28660,343,28667,28671},
-       { 0, 78,28685,343,343,28688,343,28695,28699},
-       { 0, 79,28712,343,343,28715,343,26879,26883},
-       { 0, 80,28726,343,343,28729,343,27660,27664},
-       { 0, 81,20299,343,343,28747,343,26879,26883},
-       { 0, 82,23853,343,343,28754,343,28764,28768},
-       { 0, 83,28786,343,343,28789,343,26857,26861},
-       { 0, 84,28794,343,343,28797,343,28804,28808},
-       { 0, 85,23433,343,343,28822,343,28846,28850},
-       { 0, 86,28867,343,343,28870,343,26898,26902},
-       { 0, 87,25727,343,343,28904,343,28913,28917},
-       { 0, 88,21095,343,343,28933,343,28941,28945},
-       { 0, 89,20518,343,343,28959,343,28967,28971},
-       { 0, 90,21420,343,343,28988,343,28998,29002},
-       { 0, 91,24279,343,343,29020,343,26879,26883},
-       { 0, 92,20466,343,343,29028,343,29035,29039},
-       { 0, 93,22313,343,343,29058,343,29064,29068},
-       { 0, 94,29081,343,343,29084,343,26857,26861},
-       { 0, 95,22804,343,343,29115,343,29120,29124},
-       { 0, 96,21799,343,343,29136,343,29141,29145},
-       { 0, 97,20567,343,343,29158,343,29166,29170},
-       { 0, 98,20610,343,343,29186,343,26879,26883},
-       { 0, 99,29192,343,343,29195,343,29203,29207},
-       { 0, 100,24867,343,343,29223,343,29230,29234},
-       { 0, 101,20655,343,343,29250,343,29256,29260},
-       { 0, 102,22356,343,343,29273,343,29279,29283},
-       { 0, 103,29299,343,343,29302,343,29313,29317},
-       { 0, 104,29331,343,343,29334,343,29343,29347},
-       { 0, 105,29362,343,343,29365,343,26898,26902},
-       { 0, 106,29374,343,343,29377,343,29385,29389},
-       { 0, 107,29402,343,343,29405,343,26639,26643},
-       { 0, 108,29427,343,343,29430,343,29442,29446},
-       { 0, 109,20710,343,343,29463,343,29475,29479},
-       { 0, 110,25163,343,343,29496,343,29503,29507},
-       { 0, 111,29521,343,343,29524,343,29539,29543},
-       { 0, 112,29565,343,343,29568,343,29579,29583},
-       { 0, 113,29600,343,343,29603,343,29608,29612},
-       { 0, 114,25022,343,343,29624,343,29632,29636},
-       { 0, 115,29651,343,343,29654,343,26639,26643},
-       { 0, 116,29666,343,343,29669,343,27700,27704},
-       { 0, 117,29683,343,343,29686,343,29696,29700},
-       { 0, 118,29716,343,343,29719,343,29727,29731},
-       { 0, 119,21751,343,343,29747,343,29757,29761},
-       { 0, 120,23772,343,343,29777,343,26879,26883},
-       { 0, 121,21699,343,343,29788,343,29795,29799},
-       { 0, 122,23667,343,343,29812,343,29818,29822},
-       { 0, 123,24248,343,343,29835,343,28281,28285},
-       { 0, 124,29843,343,343,29846,343,26879,26883},
-       { 0, 125,7437,343,343,29853,343,29861,29865},
-       { 0, 126,29878,343,343,29881,343,29892,29896},
-       { 0, 127,29913,343,343,29916,343,26857,26861},
-       { 0, 128,22063,343,343,29933,343,29943,29947},
-       { 0, 129,29964,343,343,29967,343,27142,27146},
-       { 0, 130,29972,343,343,29975,343,29983,29987},
-       { 0, 131,30000,343,343,30003,343,30012,30016},
-       { 0, 132,24044,343,343,30033,343,30052,30056},
-       { 0, 133,30069,343,343,30072,343,26857,26861},
-       { 0, 134,30097,343,343,30100,343,26879,26883},
-       { 0, 135,30111,343,343,30114,343,30125,30129},
-       { 0, 136,30148,343,343,30151,343,26639,26643},
-       { 0, 137,30162,343,343,30165,343,30171,30175},
-       { 0, 138,30188,343,343,30191,343,30201,30205},
-       { 0, 139,30221,343,343,30224,343,30233,30237},
-       { 0, 140,30261,343,343,30264,343,30271,30275},
-       { 0, 141,22978,343,343,30289,343,30296,30300},
-       { 0, 142,30313,343,343,30316,343,30325,30329},
-       { 0, 143,30347,343,343,30350,343,30361,30365},
-       { 0, 144,30384,343,343,30387,343,30401,30405},
-       { 0, 145,30415,343,343,30418,343,27142,27146},
-       { 0, 146,30424,343,343,30427,343,26898,26902},
-       { 0, 147,30442,343,343,30445,343,30453,30457},
-       { 0, 148,25781,343,343,30472,343,30482,30486},
-       { 0, 149,20762,343,343,30509,343,26879,26883},
-       { 0, 150,20853,343,343,30521,343,27413,27417},
-       { 0, 151,30528,343,343,30531,343,30537,30541},
-       { 0, 152,30556,343,343,30559,343,26898,26902},
-       { 0, 153,30565,343,343,30568,343,27750,27754},
-       { 0, 154,24079,343,343,30573,343,27750,27754},
-       { 0, 155,24545,343,343,30585,343,30590,30594},
-       { 0, 156,24328,343,343,30604,343,30611,30615},
-       { 0, 157,24808,343,343,30633,343,30638,30642},
-       { 0, 158,30661,343,343,30664,343,30401,30405},
-       { 0, 159,30681,343,343,30684,343,30701,30705},
-       { 0, 160,25198,343,343,30727,343,18136,30739},
-       { 0, 161,30755,343,343,30758,343,30767,30771},
-       { 0, 162,20894,343,343,30786,343,30793,30797},
-       { 0, 163,468,343,343,30810,343,26879,26883},
-       { 0, 164,30836,343,343,30839,343,27750,27754},
-       { 0, 165,25839,343,343,30848,343,26857,26861},
-       { 0, 166,23251,343,343,30860,343,26879,26883},
-       { 0, 167,30869,343,343,30872,343,26857,26861},
-       { 0, 168,25515,343,343,30878,343,30887,30891},
-       { 0, 169,25567,343,343,30908,343,30914,30918},
-       { 0, 170,30930,343,343,30933,343,26879,26883},
-       { 0, 171,20991,343,343,30942,343,30950,30954},
-       { 0, 172,21047,343,343,30967,343,30974,30978},
-       { 0, 173,31004,343,343,31007,343,31014,31018},
-       { 0, 174,10998,343,343,31032,343,31045,31049},
-       { 0, 175,31061,343,343,31064,343,31080,31084},
-       { 0, 176,31107,343,343,31110,343,31121,31125},
-       { 0, 177,31142,343,343,31145,343,31151,31155},
-       { 0, 178,21248,343,343,31170,343,31177,31181},
-       { 0, 179,23719,343,343,31195,343,31205,31209},
-       { 0, 180,31226,343,343,31229,343,31242,31246},
-       { 0, 181,21611,343,343,31265,343,17910,31274},
-       { 0, 182,31289,343,343,31292,343,27413,27417},
-       { 0, 183,21156,343,343,31315,343,31324,31328},
-       { 0, 184,31342,343,343,31345,343,31358,31362},
-       { 0, 185,31381,343,343,31384,343,26879,26883},
-       { 0, 186,31395,343,343,31398,343,27142,27146},
-       { 0, 187,31406,343,343,31409,343,31417,31421},
-       { 0, 188,31437,343,343,31440,343,31449,31453},
-       { 0, 189,31470,343,343,31473,343,31495,31499},
-       { 0, 190,25675,343,343,31527,343,18180,31539},
-       { 0, 191,24763,343,343,31557,343,31563,31567},
-       { 0, 192,31580,343,343,31583,343,31593,31597},
-       { 0, 193,31617,343,343,31620,343,26857,26861},
-       { 0, 194,31645,343,343,31648,343,27660,27664},
-       { 0, 195,31653,343,343,31656,343,26879,26883},
-       { 0, 196,31684,343,343,31687,343,27142,27146},
-       { 0, 197,21313,343,343,31692,343,31701,31705},
-       { 0, 198,31715,343,343,31718,343,31729,31733},
-       { 0, 199,31751,343,343,31754,343,27750,27754},
-       { 0, 200,17896,343,343,31762,343,26857,26861},
-       { 0, 201,31774,343,343,31777,343,31790,31794},
-       { 0, 202,24384,343,343,31813,343,31821,31825},
-       { 0, 203,31840,343,343,31843,343,31849,31853},
-       { 0, 204,21359,343,343,31868,343,31875,31879},
-       { 0, 205,24910,343,343,31892,343,31912,31916},
-       { 0, 206,31943,343,343,31946,343,26898,26902},
-       { 0, 207,20094,343,343,31953,343,31960,31964},
-       { 0, 208,31982,343,343,31985,343,31994,31998},
-       { 0, 209,21487,343,343,32017,343,32025,32029},
-       { 0, 210,32047,343,343,32050,343,32057,32061},
-       { 0, 211,32078,343,343,32081,343,26857,26861},
-       { 0, 212,20332,343,343,32118,343,26857,26861},
-       { 0, 213,25401,343,343,32132,343,32140,32144},
-       { 0, 214,32166,343,343,32169,343,32180,32184},
-       { 0, 215,32199,343,343,32202,343,26879,26883},
-       { 0, 216,32210,343,343,32213,343,26639,26643},
-       { 0, 217,24599,343,343,32246,343,32256,32260},
-       { 0, 218,32279,343,343,32282,343,26857,26861},
-       { 0, 219,1619,343,343,32305,343,26857,26861},
-       { 0, 220,21857,343,343,32325,343,32333,32337},
-       { 0, 221,32353,343,343,32356,343,32364,32368},
-       { 0, 222,32381,343,343,32384,343,30401,30405},
-       { 0, 223,32402,343,343,32405,343,32411,32415},
-       { 0, 224,24655,343,343,32434,343,32440,32444},
-       { 0, 225,32456,343,343,32459,343,26879,26883},
-       { 0, 226,32467,343,343,32470,343,32481,32485},
-       { 0, 227,22122,343,343,32509,343,32522,32526},
-       { 0, 228,32545,343,343,32548,343,32555,32559},
-       { 0, 229,25054,343,343,32574,343,32583,32587}
+       { 0, 0,25354,343,343,26539,343,26560,26564},
+       { 0, 1,26592,343,343,26595,343,26607,26611},
+       { 0, 2,26619,343,343,26622,343,26642,26646},
+       { 0, 3,26668,343,343,26671,343,26642,26646},
+       { 0, 4,21207,343,343,26680,343,26688,26692},
+       { 0, 5,465,343,343,26705,343,26713,26717},
+       { 0, 6,26731,343,343,26734,343,26755,26759},
+       { 0, 7,26788,343,343,26791,343,26798,26802},
+       { 0, 8,24967,343,343,26817,343,24762,26827},
+       { 0, 9,26842,343,343,26845,343,26860,26864},
+       { 0, 10,23488,343,343,26874,343,26882,26886},
+       { 0, 11,23521,343,343,26891,343,26901,26905},
+       { 0, 12,26923,343,343,26926,343,26932,26936},
+       { 0, 13,26951,343,343,26954,343,26965,26969},
+       { 0, 14,26989,343,343,26992,343,27015,27019},
+       { 0, 15,27055,343,343,27058,343,27067,27071},
+       { 0, 16,27087,343,343,27090,343,27101,27105},
+       { 0, 17,23032,343,343,27121,343,26882,26886},
+       { 0, 18,27129,343,343,27132,343,27145,27149},
+       { 0, 19,20008,343,343,27165,343,27174,27178},
+       { 0, 20,25466,343,343,27196,343,27204,27208},
+       { 0, 21,27223,343,343,27226,343,27234,27238},
+       { 0, 22,27252,343,343,27255,343,27145,27149},
+       { 0, 23,27261,343,343,27264,343,27272,27276},
+       { 0, 24,27292,343,343,27295,343,27302,27306},
+       { 0, 25,25620,343,343,27320,343,27328,27332},
+       { 0, 26,20946,343,343,27342,343,27349,27353},
+       { 0, 27,27368,343,343,27371,343,27379,27383},
+       { 0, 28,27399,343,343,27402,343,27416,27420},
+       { 0, 29,27436,343,343,27439,343,27448,27452},
+       { 0, 30,21558,343,343,27467,343,27475,27479},
+       { 0, 31,27497,343,343,27500,343,27507,27511},
+       { 0, 32,23614,343,343,27525,343,27532,27536},
+       { 0, 33,27552,343,343,27555,343,26901,26905},
+       { 0, 34,27569,343,343,27572,343,27605,27609},
+       { 0, 35,27635,343,343,27638,343,27663,27667},
+       { 0, 36,27682,343,343,27685,343,27663,27667},
+       { 0, 37,11008,343,343,27691,343,27703,27707},
+       { 0, 38,27719,343,343,27722,343,27145,27149},
+       { 0, 39,27737,343,343,27740,343,27753,27757},
+       { 0, 40,25247,343,343,27776,343,27782,27786},
+       { 0, 41,27799,343,343,27802,343,27663,27667},
+       { 0, 42,11087,343,343,27811,343,27817,27821},
+       { 0, 43,24710,343,343,27843,343,27852,27856},
+       { 0, 44,24138,343,343,27871,343,18035,27882},
+       { 0, 45,27900,343,343,27903,343,27908,27912},
+       { 0, 46,27923,343,343,27926,343,27937,27941},
+       { 0, 47,27959,343,343,27962,343,26901,26905},
+       { 0, 48,27979,343,343,27982,343,27989,27993},
+       { 0, 49,20159,343,343,28006,343,28021,28025},
+       { 0, 50,4304,343,343,28047,343,26882,26886},
+       { 0, 51,28055,343,343,28058,343,28067,28071},
+       { 0, 52,20201,343,343,28086,343,28094,28098},
+       { 0, 53,28111,343,343,28114,343,26642,26646},
+       { 0, 54,24495,343,343,28123,343,28142,28146},
+       { 0, 55,23968,343,343,28161,343,28169,28173},
+       { 0, 56,25107,343,343,28188,343,28196,28200},
+       { 0, 57,21656,343,343,28214,343,28222,28226},
+       { 0, 58,23352,343,343,28241,343,28247,28251},
+       { 0, 59,28266,343,343,28269,343,28284,28288},
+       { 0, 60,28304,343,343,28307,343,28315,28319},
+       { 0, 61,20051,343,343,28334,343,26882,26886},
+       { 0, 62,28340,343,343,28343,343,28352,28356},
+       { 0, 63,20376,343,343,28371,343,26882,26886},
+       { 0, 64,28379,343,343,28382,343,28387,28391},
+       { 0, 65,28403,343,343,28406,343,28423,28427},
+       { 0, 66,28450,343,343,28453,343,26860,26864},
+       { 0, 67,22262,343,343,28464,343,28094,28098},
+       { 0, 68,20420,343,343,28478,343,26882,26886},
+       { 0, 69,28485,343,343,28488,343,27663,27667},
+       { 0, 70,22932,343,343,28494,343,28509,28513},
+       { 0, 71,28536,343,343,28539,343,26642,26646},
+       { 0, 72,22208,343,343,28547,343,28555,28559},
+       { 0, 73,28573,343,343,28576,343,26882,26886},
+       { 0, 74,28590,343,343,28593,343,28599,28603},
+       { 0, 75,28614,343,343,28617,343,28627,28631},
+       { 0, 76,28647,343,343,28650,343,28094,28098},
+       { 0, 77,28660,343,343,28663,343,28670,28674},
+       { 0, 78,28688,343,343,28691,343,28698,28702},
+       { 0, 79,28715,343,343,28718,343,26882,26886},
+       { 0, 80,28729,343,343,28732,343,27663,27667},
+       { 0, 81,20302,343,343,28750,343,26882,26886},
+       { 0, 82,23856,343,343,28757,343,28767,28771},
+       { 0, 83,28789,343,343,28792,343,26860,26864},
+       { 0, 84,28797,343,343,28800,343,28807,28811},
+       { 0, 85,23436,343,343,28825,343,28849,28853},
+       { 0, 86,28870,343,343,28873,343,26901,26905},
+       { 0, 87,25730,343,343,28907,343,28916,28920},
+       { 0, 88,21098,343,343,28936,343,28944,28948},
+       { 0, 89,20521,343,343,28962,343,28970,28974},
+       { 0, 90,21423,343,343,28991,343,29001,29005},
+       { 0, 91,24282,343,343,29023,343,26882,26886},
+       { 0, 92,20469,343,343,29031,343,29038,29042},
+       { 0, 93,22316,343,343,29061,343,29067,29071},
+       { 0, 94,29084,343,343,29087,343,26860,26864},
+       { 0, 95,22807,343,343,29118,343,29123,29127},
+       { 0, 96,21802,343,343,29139,343,29144,29148},
+       { 0, 97,20570,343,343,29161,343,29169,29173},
+       { 0, 98,20613,343,343,29189,343,26882,26886},
+       { 0, 99,29195,343,343,29198,343,29206,29210},
+       { 0, 100,24870,343,343,29226,343,29233,29237},
+       { 0, 101,20658,343,343,29253,343,29259,29263},
+       { 0, 102,22359,343,343,29276,343,29282,29286},
+       { 0, 103,29302,343,343,29305,343,29316,29320},
+       { 0, 104,29334,343,343,29337,343,29346,29350},
+       { 0, 105,29365,343,343,29368,343,26901,26905},
+       { 0, 106,29377,343,343,29380,343,29388,29392},
+       { 0, 107,29405,343,343,29408,343,26642,26646},
+       { 0, 108,29430,343,343,29433,343,29445,29449},
+       { 0, 109,20713,343,343,29466,343,29478,29482},
+       { 0, 110,25166,343,343,29499,343,29506,29510},
+       { 0, 111,29524,343,343,29527,343,29542,29546},
+       { 0, 112,29568,343,343,29571,343,29582,29586},
+       { 0, 113,29603,343,343,29606,343,29611,29615},
+       { 0, 114,25025,343,343,29627,343,29635,29639},
+       { 0, 115,29654,343,343,29657,343,26642,26646},
+       { 0, 116,29669,343,343,29672,343,27703,27707},
+       { 0, 117,29686,343,343,29689,343,29699,29703},
+       { 0, 118,29719,343,343,29722,343,29730,29734},
+       { 0, 119,21754,343,343,29750,343,29760,29764},
+       { 0, 120,23775,343,343,29780,343,26882,26886},
+       { 0, 121,21702,343,343,29791,343,29798,29802},
+       { 0, 122,23670,343,343,29815,343,29821,29825},
+       { 0, 123,24251,343,343,29838,343,28284,28288},
+       { 0, 124,29846,343,343,29849,343,26882,26886},
+       { 0, 125,7444,343,343,29856,343,29864,29868},
+       { 0, 126,29881,343,343,29884,343,29895,29899},
+       { 0, 127,29916,343,343,29919,343,26860,26864},
+       { 0, 128,22066,343,343,29936,343,29946,29950},
+       { 0, 129,29967,343,343,29970,343,27145,27149},
+       { 0, 130,29975,343,343,29978,343,29986,29990},
+       { 0, 131,30003,343,343,30006,343,30015,30019},
+       { 0, 132,24047,343,343,30036,343,30055,30059},
+       { 0, 133,30072,343,343,30075,343,26860,26864},
+       { 0, 134,30100,343,343,30103,343,26882,26886},
+       { 0, 135,30114,343,343,30117,343,30128,30132},
+       { 0, 136,30151,343,343,30154,343,26642,26646},
+       { 0, 137,30165,343,343,30168,343,30174,30178},
+       { 0, 138,30191,343,343,30194,343,30204,30208},
+       { 0, 139,30224,343,343,30227,343,30236,30240},
+       { 0, 140,30264,343,343,30267,343,30274,30278},
+       { 0, 141,22981,343,343,30292,343,30299,30303},
+       { 0, 142,30316,343,343,30319,343,30328,30332},
+       { 0, 143,30350,343,343,30353,343,30364,30368},
+       { 0, 144,30387,343,343,30390,343,30404,30408},
+       { 0, 145,30418,343,343,30421,343,27145,27149},
+       { 0, 146,30427,343,343,30430,343,26901,26905},
+       { 0, 147,30445,343,343,30448,343,30456,30460},
+       { 0, 148,25784,343,343,30475,343,30485,30489},
+       { 0, 149,20765,343,343,30512,343,26882,26886},
+       { 0, 150,20856,343,343,30524,343,27416,27420},
+       { 0, 151,30531,343,343,30534,343,30540,30544},
+       { 0, 152,30559,343,343,30562,343,26901,26905},
+       { 0, 153,30568,343,343,30571,343,27753,27757},
+       { 0, 154,24082,343,343,30576,343,27753,27757},
+       { 0, 155,24548,343,343,30588,343,30593,30597},
+       { 0, 156,24331,343,343,30607,343,30614,30618},
+       { 0, 157,24811,343,343,30636,343,30641,30645},
+       { 0, 158,30664,343,343,30667,343,30404,30408},
+       { 0, 159,30684,343,343,30687,343,30704,30708},
+       { 0, 160,25201,343,343,30730,343,18139,30742},
+       { 0, 161,30758,343,343,30761,343,30770,30774},
+       { 0, 162,20897,343,343,30789,343,30796,30800},
+       { 0, 163,468,343,343,30813,343,26882,26886},
+       { 0, 164,30839,343,343,30842,343,27753,27757},
+       { 0, 165,25842,343,343,30851,343,26860,26864},
+       { 0, 166,23254,343,343,30863,343,26882,26886},
+       { 0, 167,30872,343,343,30875,343,26860,26864},
+       { 0, 168,25518,343,343,30881,343,30890,30894},
+       { 0, 169,25570,343,343,30911,343,30917,30921},
+       { 0, 170,30933,343,343,30936,343,26882,26886},
+       { 0, 171,20994,343,343,30945,343,30953,30957},
+       { 0, 172,21050,343,343,30970,343,30977,30981},
+       { 0, 173,31007,343,343,31010,343,31017,31021},
+       { 0, 174,11005,343,343,31035,343,31048,31052},
+       { 0, 175,31064,343,343,31067,343,31083,31087},
+       { 0, 176,31110,343,343,31113,343,31124,31128},
+       { 0, 177,31145,343,343,31148,343,31154,31158},
+       { 0, 178,21251,343,343,31173,343,31180,31184},
+       { 0, 179,23722,343,343,31198,343,31208,31212},
+       { 0, 180,31229,343,343,31232,343,31245,31249},
+       { 0, 181,21614,343,343,31268,343,17913,31277},
+       { 0, 182,31292,343,343,31295,343,27416,27420},
+       { 0, 183,21159,343,343,31318,343,31327,31331},
+       { 0, 184,31345,343,343,31348,343,31361,31365},
+       { 0, 185,31384,343,343,31387,343,26882,26886},
+       { 0, 186,31398,343,343,31401,343,27145,27149},
+       { 0, 187,31409,343,343,31412,343,31420,31424},
+       { 0, 188,31440,343,343,31443,343,31452,31456},
+       { 0, 189,31473,343,343,31476,343,31498,31502},
+       { 0, 190,25678,343,343,31530,343,18183,31542},
+       { 0, 191,24766,343,343,31560,343,31566,31570},
+       { 0, 192,31583,343,343,31586,343,31596,31600},
+       { 0, 193,31620,343,343,31623,343,26860,26864},
+       { 0, 194,31648,343,343,31651,343,27663,27667},
+       { 0, 195,31656,343,343,31659,343,26882,26886},
+       { 0, 196,31687,343,343,31690,343,27145,27149},
+       { 0, 197,21316,343,343,31695,343,31704,31708},
+       { 0, 198,31718,343,343,31721,343,31732,31736},
+       { 0, 199,31754,343,343,31757,343,27753,27757},
+       { 0, 200,17899,343,343,31765,343,26860,26864},
+       { 0, 201,31777,343,343,31780,343,31793,31797},
+       { 0, 202,24387,343,343,31816,343,31824,31828},
+       { 0, 203,31843,343,343,31846,343,31852,31856},
+       { 0, 204,21362,343,343,31871,343,31878,31882},
+       { 0, 205,24913,343,343,31895,343,31915,31919},
+       { 0, 206,31946,343,343,31949,343,26901,26905},
+       { 0, 207,20097,343,343,31956,343,31963,31967},
+       { 0, 208,31985,343,343,31988,343,31997,32001},
+       { 0, 209,21490,343,343,32020,343,32028,32032},
+       { 0, 210,32050,343,343,32053,343,32060,32064},
+       { 0, 211,32081,343,343,32084,343,26860,26864},
+       { 0, 212,20335,343,343,32121,343,26860,26864},
+       { 0, 213,25404,343,343,32135,343,32143,32147},
+       { 0, 214,32169,343,343,32172,343,32183,32187},
+       { 0, 215,32202,343,343,32205,343,26882,26886},
+       { 0, 216,32213,343,343,32216,343,26642,26646},
+       { 0, 217,24602,343,343,32249,343,32259,32263},
+       { 0, 218,32282,343,343,32285,343,26860,26864},
+       { 0, 219,1621,343,343,32308,343,26860,26864},
+       { 0, 220,21860,343,343,32328,343,32336,32340},
+       { 0, 221,32356,343,343,32359,343,32367,32371},
+       { 0, 222,32384,343,343,32387,343,30404,30408},
+       { 0, 223,32405,343,343,32408,343,32414,32418},
+       { 0, 224,24658,343,343,32437,343,32443,32447},
+       { 0, 225,32459,343,343,32462,343,26882,26886},
+       { 0, 226,32470,343,343,32473,343,32484,32488},
+       { 0, 227,22125,343,343,32512,343,32525,32529},
+       { 0, 228,32548,343,343,32551,343,32558,32562},
+       { 0, 229,25057,343,343,32577,343,32586,32590}
 };
 
 
 static const RegionInfoNameEntry region_name_entries [] = {
-       {25351, 0},
-       {26589, 1},
-       {26616, 2},
-       {26665, 3},
-       {21204, 4},
+       {25354, 0},
+       {26592, 1},
+       {26619, 2},
+       {26668, 3},
+       {21207, 4},
        {465, 5},
-       {26728, 6},
-       {26785, 7},
-       {24964, 8},
-       {26839, 9},
-       {23485, 10},
-       {23518, 11},
-       {26920, 12},
-       {26948, 13},
-       {26986, 14},
-       {27052, 15},
-       {27084, 16},
-       {23029, 17},
-       {27126, 18},
-       {20005, 19},
-       {25463, 20},
-       {27220, 21},
-       {27249, 22},
-       {27258, 23},
-       {27289, 24},
-       {25617, 25},
-       {20943, 26},
-       {27365, 27},
-       {27396, 28},
-       {27433, 29},
-       {21555, 30},
-       {27494, 31},
-       {23611, 32},
-       {27549, 33},
-       {27566, 34},
-       {27632, 35},
-       {27679, 36},
-       {11001, 37},
-       {27716, 38},
-       {27734, 39},
-       {25244, 40},
-       {27796, 41},
-       {11080, 42},
-       {24707, 43},
-       {24135, 44},
-       {27897, 45},
-       {27920, 46},
-       {27956, 47},
-       {27976, 48},
-       {20156, 49},
-       {4300, 50},
-       {28052, 51},
-       {20198, 52},
-       {28108, 53},
-       {24492, 54},
-       {23965, 55},
-       {25104, 56},
-       {21653, 57},
-       {23349, 58},
-       {28263, 59},
-       {28301, 60},
-       {20048, 61},
-       {28337, 62},
-       {20373, 63},
-       {28376, 64},
-       {28400, 65},
-       {28447, 66},
-       {22259, 67},
-       {20417, 68},
-       {28482, 69},
-       {22929, 70},
-       {28533, 71},
-       {22205, 72},
-       {28570, 73},
-       {28587, 74},
-       {28611, 75},
-       {28644, 76},
-       {28657, 77},
-       {28685, 78},
-       {28712, 79},
-       {28726, 80},
-       {20299, 81},
-       {23853, 82},
-       {28786, 83},
-       {28794, 84},
-       {23433, 85},
-       {28867, 86},
-       {25727, 87},
-       {21095, 88},
-       {20518, 89},
-       {21420, 90},
-       {24279, 91},
-       {20466, 92},
-       {22313, 93},
-       {29081, 94},
-       {22804, 95},
-       {21799, 96},
-       {20567, 97},
-       {20610, 98},
-       {29192, 99},
-       {24867, 100},
-       {20655, 101},
-       {22356, 102},
-       {29299, 103},
-       {29331, 104},
-       {29362, 105},
-       {29374, 106},
-       {29402, 107},
-       {29427, 108},
-       {20710, 109},
-       {25163, 110},
-       {29521, 111},
-       {29565, 112},
-       {29600, 113},
-       {25022, 114},
-       {29651, 115},
-       {29666, 116},
-       {29683, 117},
-       {29716, 118},
-       {21751, 119},
-       {23772, 120},
-       {21699, 121},
-       {23667, 122},
-       {24248, 123},
-       {29843, 124},
-       {7437, 125},
-       {29878, 126},
-       {29913, 127},
-       {22063, 128},
-       {29964, 129},
-       {29972, 130},
-       {30000, 131},
-       {24044, 132},
-       {30069, 133},
-       {30097, 134},
-       {30111, 135},
-       {30148, 136},
-       {30162, 137},
-       {30188, 138},
-       {30221, 139},
-       {30261, 140},
-       {22978, 141},
-       {30313, 142},
-       {30347, 143},
-       {30384, 144},
-       {30415, 145},
-       {30424, 146},
-       {30442, 147},
-       {25781, 148},
-       {20762, 149},
-       {20853, 150},
-       {30528, 151},
-       {30556, 152},
-       {30565, 153},
-       {24079, 154},
-       {24545, 155},
-       {24328, 156},
-       {24808, 157},
-       {30661, 158},
-       {30681, 159},
-       {25198, 160},
-       {30755, 161},
-       {20894, 162},
+       {26731, 6},
+       {26788, 7},
+       {24967, 8},
+       {26842, 9},
+       {23488, 10},
+       {23521, 11},
+       {26923, 12},
+       {26951, 13},
+       {26989, 14},
+       {27055, 15},
+       {27087, 16},
+       {23032, 17},
+       {27129, 18},
+       {20008, 19},
+       {25466, 20},
+       {27223, 21},
+       {27252, 22},
+       {27261, 23},
+       {27292, 24},
+       {25620, 25},
+       {20946, 26},
+       {27368, 27},
+       {27399, 28},
+       {27436, 29},
+       {21558, 30},
+       {27497, 31},
+       {23614, 32},
+       {27552, 33},
+       {27569, 34},
+       {27635, 35},
+       {27682, 36},
+       {11008, 37},
+       {27719, 38},
+       {27737, 39},
+       {25247, 40},
+       {27799, 41},
+       {11087, 42},
+       {24710, 43},
+       {24138, 44},
+       {27900, 45},
+       {27923, 46},
+       {27959, 47},
+       {27979, 48},
+       {20159, 49},
+       {4304, 50},
+       {28055, 51},
+       {20201, 52},
+       {28111, 53},
+       {24495, 54},
+       {23968, 55},
+       {25107, 56},
+       {21656, 57},
+       {23352, 58},
+       {28266, 59},
+       {28304, 60},
+       {20051, 61},
+       {28340, 62},
+       {20376, 63},
+       {28379, 64},
+       {28403, 65},
+       {28450, 66},
+       {22262, 67},
+       {20420, 68},
+       {28485, 69},
+       {22932, 70},
+       {28536, 71},
+       {22208, 72},
+       {28573, 73},
+       {28590, 74},
+       {28614, 75},
+       {28647, 76},
+       {28660, 77},
+       {28688, 78},
+       {28715, 79},
+       {28729, 80},
+       {20302, 81},
+       {23856, 82},
+       {28789, 83},
+       {28797, 84},
+       {23436, 85},
+       {28870, 86},
+       {25730, 87},
+       {21098, 88},
+       {20521, 89},
+       {21423, 90},
+       {24282, 91},
+       {20469, 92},
+       {22316, 93},
+       {29084, 94},
+       {22807, 95},
+       {21802, 96},
+       {20570, 97},
+       {20613, 98},
+       {29195, 99},
+       {24870, 100},
+       {20658, 101},
+       {22359, 102},
+       {29302, 103},
+       {29334, 104},
+       {29365, 105},
+       {29377, 106},
+       {29405, 107},
+       {29430, 108},
+       {20713, 109},
+       {25166, 110},
+       {29524, 111},
+       {29568, 112},
+       {29603, 113},
+       {25025, 114},
+       {29654, 115},
+       {29669, 116},
+       {29686, 117},
+       {29719, 118},
+       {21754, 119},
+       {23775, 120},
+       {21702, 121},
+       {23670, 122},
+       {24251, 123},
+       {29846, 124},
+       {7444, 125},
+       {29881, 126},
+       {29916, 127},
+       {22066, 128},
+       {29967, 129},
+       {29975, 130},
+       {30003, 131},
+       {24047, 132},
+       {30072, 133},
+       {30100, 134},
+       {30114, 135},
+       {30151, 136},
+       {30165, 137},
+       {30191, 138},
+       {30224, 139},
+       {30264, 140},
+       {22981, 141},
+       {30316, 142},
+       {30350, 143},
+       {30387, 144},
+       {30418, 145},
+       {30427, 146},
+       {30445, 147},
+       {25784, 148},
+       {20765, 149},
+       {20856, 150},
+       {30531, 151},
+       {30559, 152},
+       {30568, 153},
+       {24082, 154},
+       {24548, 155},
+       {24331, 156},
+       {24811, 157},
+       {30664, 158},
+       {30684, 159},
+       {25201, 160},
+       {30758, 161},
+       {20897, 162},
        {468, 163},
-       {30836, 164},
-       {25839, 165},
-       {23251, 166},
-       {30869, 167},
-       {25515, 168},
-       {25567, 169},
-       {30930, 170},
-       {20991, 171},
-       {21047, 172},
-       {31004, 173},
-       {10998, 174},
-       {31061, 175},
-       {31107, 176},
-       {31142, 177},
-       {21248, 178},
-       {23719, 179},
-       {31226, 180},
-       {21611, 181},
-       {31289, 182},
-       {21156, 183},
-       {31342, 184},
-       {31381, 185},
-       {31395, 186},
-       {31406, 187},
-       {31437, 188},
-       {31470, 189},
-       {25675, 190},
-       {24763, 191},
-       {31580, 192},
-       {31617, 193},
-       {31645, 194},
-       {31653, 195},
-       {31684, 196},
-       {21313, 197},
-       {31715, 198},
-       {31751, 199},
-       {17896, 200},
-       {31774, 201},
-       {24384, 202},
-       {31840, 203},
-       {21359, 204},
-       {24910, 205},
-       {31943, 206},
-       {20094, 207},
-       {31982, 208},
-       {21487, 209},
-       {32047, 210},
-       {32078, 211},
-       {20332, 212},
-       {25401, 213},
-       {32166, 214},
-       {32199, 215},
-       {32210, 216},
-       {24599, 217},
-       {32279, 218},
-       {1619, 219},
-       {21857, 220},
-       {32353, 221},
-       {32381, 222},
-       {32402, 223},
-       {24655, 224},
-       {32456, 225},
-       {32467, 226},
-       {22122, 227},
-       {32545, 228},
-       {25054, 229}
+       {30839, 164},
+       {25842, 165},
+       {23254, 166},
+       {30872, 167},
+       {25518, 168},
+       {25570, 169},
+       {30933, 170},
+       {20994, 171},
+       {21050, 172},
+       {31007, 173},
+       {11005, 174},
+       {31064, 175},
+       {31110, 176},
+       {31145, 177},
+       {21251, 178},
+       {23722, 179},
+       {31229, 180},
+       {21614, 181},
+       {31292, 182},
+       {21159, 183},
+       {31345, 184},
+       {31384, 185},
+       {31398, 186},
+       {31409, 187},
+       {31440, 188},
+       {31473, 189},
+       {25678, 190},
+       {24766, 191},
+       {31583, 192},
+       {31620, 193},
+       {31648, 194},
+       {31656, 195},
+       {31687, 196},
+       {21316, 197},
+       {31718, 198},
+       {31754, 199},
+       {17899, 200},
+       {31777, 201},
+       {24387, 202},
+       {31843, 203},
+       {21362, 204},
+       {24913, 205},
+       {31946, 206},
+       {20097, 207},
+       {31985, 208},
+       {21490, 209},
+       {32050, 210},
+       {32081, 211},
+       {20335, 212},
+       {25404, 213},
+       {32169, 214},
+       {32202, 215},
+       {32213, 216},
+       {24602, 217},
+       {32282, 218},
+       {1621, 219},
+       {21860, 220},
+       {32356, 221},
+       {32384, 222},
+       {32405, 223},
+       {24658, 224},
+       {32459, 225},
+       {32470, 226},
+       {22125, 227},
+       {32548, 228},
+       {25057, 229}
 };
 
 
@@ -1246,6 +1246,7 @@ static const char locale_strings [] = {
        "\xd0\xbe\xd0\xba\xd1\x82.\0"
        "\xd0\xbd\xd0\xbe\xd0\xb5\xd0\xbc.\0"
        "\xd0\xb4\xd0\xb5\xd0\xba.\0"
+       ".\0"
        "dd.MM.yy\0"
        "d MMMM yyyy HH:mm:ss z\0"
        "d MMMM yyyy\0"
@@ -1403,6 +1404,7 @@ static const char locale_strings [] = {
        "okt\0"
        "nov\0"
        "dec\0"
+       "-\0"
        "dd-MM-yy\0"
        "d. MMMM yyyy HH:mm:ss\0"
        "dd.MM.yyyy\0"
@@ -1717,6 +1719,7 @@ static const char locale_strings [] = {
        "szept.\0"
        "okt.\0"
        "dec.\0"
+       ". \0"
        "yyyy.MM.dd.\0"
        "sunnudagur\0"
        "m\xc3\xa1nudagur\0"
@@ -2944,12 +2947,10 @@ static const char locale_strings [] = {
        "\xe2\x80\xb0\0"
        "-\xe2\x88\x9e\0"
        "\xe2\x88\x9e\0"
-       "-\0"
        "+\0"
        ",\0"
        "\xc2\xa0\0"
        "%\0"
-       ".\0"
        "NaN\0"
        "-Infinity\0"
        "Infinity\0"
index 34c5f9de1fa5d2306a8fba76103f5de3296932c9..be173d2a6f246833c0ffa721df34a7d4b4afc0df 100644 (file)
@@ -1490,7 +1490,9 @@ arch_emit_imt_thunk (MonoAotCompile *acfg, int offset, int *tramp_size)
 
        /* No match */
        arm_patch (labels [3], code);
-       ARM_DBRK (code);
+       ARM_LDR_IMM (code, ARMREG_R0, ARMREG_R0, 4);
+       ARM_STR_IMM (code, ARMREG_R0, ARMREG_SP, 8);
+       ARM_POP (code, (1 << ARMREG_R0)|(1 << ARMREG_R1)|(1 << ARMREG_PC));
 
        /* Fixup offset */
        code2 = labels [0];
@@ -7198,7 +7200,10 @@ mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
                                int i = g_file_open_tmp ("mono_aot_XXXXXX", &acfg->tmpfname, NULL);
                                acfg->fp = fdopen (i, "w+");
                        }
-                       g_assert (acfg->fp);
+                       if (acfg->fp == 0) {
+                               fprintf (stderr, "Unable to open file '%s': %s\n", acfg->tmpfname, strerror (errno));
+                               return 1;
+                       }
                }
                acfg->w = img_writer_create (acfg->fp, FALSE);
                
index 6dbfa3e828c580083ecea0616d409f82ce4cb022..6be198233b086648a2ae7adc783fb70002cfe8b6 100644 (file)
@@ -34,7 +34,6 @@ static void
 compute_dominators (MonoCompile *cfg)
 {
        int bindex, i, bitsize;
-       char* mem;
        MonoBasicBlock *entry;
        MonoBasicBlock **doms;
        gboolean changed;
@@ -43,8 +42,6 @@ compute_dominators (MonoCompile *cfg)
 
        bitsize = mono_bitset_alloc_size (cfg->num_bblocks, 0);
 
-       mem = mono_mempool_alloc0 (cfg->mempool, bitsize * cfg->num_bblocks);
-
        entry = cfg->bblocks [0];
 
        doms = g_new0 (MonoBasicBlock*, cfg->num_bblocks);
@@ -118,6 +115,9 @@ compute_dominators (MonoCompile *cfg)
                MonoBasicBlock *bb = cfg->bblocks [i];
                MonoBasicBlock *cbb;
                MonoBitSet *dominators;
+               char *mem;
+
+               mem = mono_mempool_alloc0 (cfg->mempool, bitsize);
 
                bb->dominators = dominators = mono_bitset_mem_new (mem, cfg->num_bblocks, 0);
                mem += bitsize;
index 4583034c9691d5d780ac70db3f0bd93ca75d4643..137ced7f985340d1f3dcfdbff66eec2115620441 100644 (file)
@@ -279,6 +279,10 @@ typedef struct MonoCompileArch {
 
 #define MONO_ARCH_NOMAP32BIT
 
+#elif defined (__DragonFly__)
+
+#define MONO_ARCH_NOMAP32BIT
+
 #elif defined (__FreeBSD__)
 
 #define REG_RAX 7
index 52bd6abfe0a3116288a016981d5e411e96d2ed96..7927a2257027ca36646c0708860295fec84159f5 100644 (file)
@@ -1823,7 +1823,7 @@ emit_call (MonoCompile *cfg, guint8 *code, guint32 patch_type, gconstpointer dat
        */
        pad_size = (guint32)(code + 1 - cfg->native_code) & 0x3;
        if (needs_paddings && pad_size)
-               x86_padding (code, pad_size);
+               x86_padding (code, 4 - pad_size);
 
        mono_add_patch_info (cfg, code - cfg->native_code, patch_type, data);
        x86_call_code (code, 0);
index d769e78aad9c5ed328fbffeba134d697d31e2941..3a74c98a6d9504be0296de8ca425a1321ca8c8b7 100644 (file)
 
 #if defined(__i386__)
 
-#if defined(__FreeBSD__) || defined(__APPLE__)
+#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__DragonFly__)
 #include <ucontext.h>
 #endif
 #if defined(__APPLE__)
 #include <AvailabilityMacros.h>
 #endif
 
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__)
        #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_eax)
        #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_ebx)
        #define UCONTEXT_REG_ECX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_ecx)
        #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r13)
        #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r14)
        #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_r15)
+#elif defined(__NetBSD__)
+       #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RAX])
+       #define UCONTEXT_REG_RBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RBX])
+       #define UCONTEXT_REG_RCX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RCX])
+       #define UCONTEXT_REG_RDX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RDX])
+       #define UCONTEXT_REG_RBP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RBP])
+       #define UCONTEXT_REG_RSP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RSP])
+       #define UCONTEXT_REG_RSI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RSI])
+       #define UCONTEXT_REG_RDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RDI])
+       #define UCONTEXT_REG_RIP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_RIP])
+       #define UCONTEXT_REG_R12(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R12])
+       #define UCONTEXT_REG_R13(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R13])
+       #define UCONTEXT_REG_R14(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R14])
+       #define UCONTEXT_REG_R15(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_R15])
 #elif defined(__OpenBSD__)
     /* OpenBSD/amd64 has no gregs array, ucontext_t == sigcontext */
        #define UCONTEXT_REG_RAX(ctx) (((ucontext_t*)(ctx))->sc_rax)
index c1e4e1d4956677b2078019ded0ac56a4146cf51a..bbb9e19bda98ea0065b2b9021ad32cac6f95a327 100644 (file)
@@ -7,6 +7,9 @@
 >
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar_type type="GregorianCalendar" />
                        <calendar type="gregorian">
index 4f4b835e5a01f0b9801a9a8dffeb4ae6d3cd7cd1..0404544985208fae4839a63808fc9db593deed29 100644 (file)
@@ -7,6 +7,9 @@
 >
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar_type type="GregorianCalendar" />
                        <calendar type="gregorian">
index c1e4e1d4956677b2078019ded0ac56a4146cf51a..bbb9e19bda98ea0065b2b9021ad32cac6f95a327 100644 (file)
@@ -7,6 +7,9 @@
 >
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar_type type="GregorianCalendar" />
                        <calendar type="gregorian">
index b06059803bf58af9977f34c9cfd17a06e9b483b8..c90790437e47f32b92144bd0a934d65369b545d5 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index f8de93b7dffd9d3c40d3be6999d28994415841de..86ae563d80833b61222beac6dc2304687e51a5cb 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 080578bef87a608b4f1fe7291525b50eae6f7dfc..275da59bf75e0a1d5b776660f07db93e4d66a44f 100755 (executable)
@@ -10,6 +10,9 @@
                </decimalFormats>
        </numbers>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 80e784c6a6f8e358cb63e1b2a90f90de5910a13e..f79e32808f566f8bebaf5c05e6cb037a27ee2309 100755 (executable)
@@ -10,6 +10,9 @@
                </percentFormats>
        </numbers>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 882fb0e8cb69ed48179bf97972911db7c98a0862..4a7f33827a1c06c4869963b3b7ba1d8c35b96cca 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 882fb0e8cb69ed48179bf97972911db7c98a0862..4a7f33827a1c06c4869963b3b7ba1d8c35b96cca 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index f486ab117c583c7a084ffc261211fde691156508..555b1ba7b126aa1b02cca46636b2b38fbe7660eb 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 9fe6be5eb04ce42623c24c85e475a3b602bc3ba5..1d8ef50bcdb10af888ab3382bebc18846c80651c 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 2720792fb938087f92e0b8f580f32ed1493a961d..6d4f681410db4ff79d0cf8f6332a6b738afa9227 100755 (executable)
@@ -10,6 +10,9 @@
                </percentFormats>
        </numbers>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index cea2ce57a146fb9274613b486cc9f84378a50cc6..88fddca25bf46da8667dc3f3f7d653bb72be44b7 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 15c09065bb0a8fe24a45c7fc82571977c7e9e7be..f8a3cc8f037f37bcd6705f397cb18857ab73f91b 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 0883ec00a7c97be90ce4044747eae5da2411d48e..f2de8b0ba251cfe3bf4dbb7e14f7684be03cc969 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 371d22363511d9b3aa10f5a835ccfadfe3a0fda1..e13d46033ed564ebe29d752b11cdc7cb2a8e8a5d 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 177812f3bb5e0dbdd0febd0caa3a188770d3e5b8..66e399619eaaf483a47fa905b28893f3c647f5f2 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 107618cf666897f2b0d50a1dd66892e21c999565..ba3b66a7b5d5a5667d821744f341ec97a60eafbd 100755 (executable)
@@ -10,6 +10,9 @@
                </percentFormats>
        </numbers>
        <dates>
+               <symbols>
+                       <dateSeparator>. </dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index b06059803bf58af9977f34c9cfd17a06e9b483b8..c90790437e47f32b92144bd0a934d65369b545d5 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index aee8c359b4d5c904c9489f85ece17c2d5cb567a6..23f637e3bacdd0ada5eb8b93771be52fdc904c20 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 882fb0e8cb69ed48179bf97972911db7c98a0862..4a7f33827a1c06c4869963b3b7ba1d8c35b96cca 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 01c15f76e51d1fb40b2fee4385a457b2ed5dd3a6..185bafd4f794af5cd82c98a47284af68ae4955bc 100644 (file)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index fc35ffda4e6721c4454645cfe3e912dbec81a26f..fe44ebfa1d61860904d1cd93d53712aa3af4409f 100755 (executable)
@@ -10,6 +10,9 @@
                </decimalFormats>
        </numbers>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 140bacd379e1542cec442071439a30b43da11f75..48fd017943be335ca67b2540c29aa1f5c46e776d 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 882fb0e8cb69ed48179bf97972911db7c98a0862..4a7f33827a1c06c4869963b3b7ba1d8c35b96cca 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index a48b923a7b22a366699630518b0c75e0d7610358..66bb6613041c090a99222ca609b01b4e3b134d83 100755 (executable)
@@ -10,6 +10,9 @@
                </percentFormats>
        </numbers>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 41e6c775c8006a482346035e68476422701a288f..65e79641ee3e61a18be7a083c25c6ad002aa3105 100755 (executable)
@@ -12,6 +12,9 @@
                <language type="pl" /> 
        </identity>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index db5f50a577d7551461fc7ccea22df9b138ff10b4..7f111e743ccaabf60e6c8f042d240ebf3109bcad 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 882fb0e8cb69ed48179bf97972911db7c98a0862..4a7f33827a1c06c4869963b3b7ba1d8c35b96cca 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index b06059803bf58af9977f34c9cfd17a06e9b483b8..c90790437e47f32b92144bd0a934d65369b545d5 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index f9a84b22fbfe1c0b3fe683d430b462b12673e1b6..6709138d6a293675a793b104f912a5b287e45266 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>. </dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 177812f3bb5e0dbdd0febd0caa3a188770d3e5b8..66e399619eaaf483a47fa905b28893f3c647f5f2 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 38821e5e695f75f1784e9a27579bb5740ea3f6a5..f1cdca828bbb3444e5dada3d8c55e1cb339130ad 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index aee8c359b4d5c904c9489f85ece17c2d5cb567a6..23f637e3bacdd0ada5eb8b93771be52fdc904c20 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 01b5e5c9cde859f8369a89707fbb2e4a21f691cc..9db987ec35f179957bf2fe8f0ae1eb4b8f0e0c32 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>-</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index 882fb0e8cb69ed48179bf97972911db7c98a0862..4a7f33827a1c06c4869963b3b7ba1d8c35b96cca 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>
index b06059803bf58af9977f34c9cfd17a06e9b483b8..c90790437e47f32b92144bd0a934d65369b545d5 100755 (executable)
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <ldml>
        <dates>
+               <symbols>
+                       <dateSeparator>.</dateSeparator>
+               </symbols>
                <calendars>
                        <calendar type="gregorian">
                                <dateFormats>