Merge pull request #141 from LogosBible/surrogtate
authorMiguel de Icaza <miguel@gnome.org>
Fri, 5 Aug 2011 13:52:12 +0000 (06:52 -0700)
committerMiguel de Icaza <miguel@gnome.org>
Fri, 5 Aug 2011 13:52:12 +0000 (06:52 -0700)
[480178] Fix handling of surrogate characters.

139 files changed:
docs/historic-mono-branches.txt [new file with mode: 0644]
eglib/src/glib.h
libgc/include/private/gc_priv.h
libgc/pthread_support.c
mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/RemoveDir.cs
mcs/class/Mono.Async/Mono.Async.dll.sources
mcs/class/Mono.Async/Mono.Async_test.dll.sources [new file with mode: 0644]
mcs/class/Mono.Async/System.Runtime.CompilerServices/TaskAwaiter.cs
mcs/class/Mono.Async/System.Runtime.CompilerServices/TaskAwaiter_T.cs [new file with mode: 0644]
mcs/class/Mono.Async/Test/Mono.Async.Test.csproj [new file with mode: 0644]
mcs/class/Mono.Async/Test/Mono.Async.Test.sln [new file with mode: 0644]
mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/TaskAwaiterTest.cs [new file with mode: 0644]
mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/TaskAwaiterTest_T.cs [new file with mode: 0644]
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.Runtime.Serialization/Test/System.Runtime.Serialization/XsdDataContractImporterTest.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/DataContractSerializerMessageContractImporter.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/ClientRuntimeChannel.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.Web.Services/System.Web.Services.Configuration/TypeElement.cs
mcs/class/System.XML/System.Xml.Serialization/TypeData.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/XmlReflectionImporterTests.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializationReaderTests.cs
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTestClasses.cs
mcs/class/System/System/Platform.cs
mcs/class/WindowsBase/System.Windows.Threading/DispatcherTimer.cs
mcs/class/WindowsBase/Test/System.Windows.Threading/DispatcherTimerTest.cs [new file with mode: 0644]
mcs/class/WindowsBase/WindowsBase_test.dll.sources
mcs/class/corlib/System.IO/MonoIO.cs
mcs/class/corlib/System.IO/Path.cs
mcs/class/corlib/System.Threading.Tasks/Parallel.cs
mcs/class/corlib/System.Threading.Tasks/Task.cs
mcs/class/corlib/System/AggregateException.cs
mcs/class/corlib/Test/System.Threading.Tasks/FutureTests.cs
mcs/class/corlib/Test/System.Threading.Tasks/TaskCompletionSourceTests.cs
mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs
mcs/class/corlib/Test/System/AggregateExceptionTests.cs
mcs/errors/cs0060-9.cs [new file with mode: 0644]
mcs/errors/cs0201-8.cs [new file with mode: 0644]
mcs/jay/jay2010.vcxproj
mcs/mcs/anonymous.cs
mcs/mcs/async.cs
mcs/mcs/codegen.cs
mcs/mcs/context.cs
mcs/mcs/convert.cs
mcs/mcs/ecore.cs
mcs/mcs/expression.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/gtest-etree-01.cs
mcs/tests/gtest-exmethod-41.cs [new file with mode: 0644]
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/metadata/gc.c
mono/metadata/mono-wsq.c
mono/metadata/sgen-cardtable.c
mono/metadata/sgen-fin-weak-hash.c
mono/metadata/sgen-gc.c
mono/metadata/sgen-gc.h
mono/metadata/socket-io.c
mono/mini/aot-compiler.c
mono/mini/cpu-amd64.md
mono/mini/dominators.c
mono/mini/mini-amd64.c
mono/mini/mini-amd64.h
mono/mini/mini-x86.c
mono/mini/mini.c
mono/tests/threadpool-exceptions1.cs
mono/tests/threadpool-exceptions2.cs
mono/tests/threadpool-exceptions4.cs
mono/tests/threadpool-exceptions5.cs
mono/utils/Makefile.am
mono/utils/hazard-pointer.c
mono/utils/lock-free-array-queue.c [new file with mode: 0644]
mono/utils/lock-free-array-queue.h [new file with mode: 0644]
mono/utils/mono-mmap.c
mono/utils/mono-semaphore.c
mono/utils/mono-semaphore.h
mono/utils/mono-sigcontext.h
support/syslog.c
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

diff --git a/docs/historic-mono-branches.txt b/docs/historic-mono-branches.txt
new file mode 100644 (file)
index 0000000..33e989a
--- /dev/null
@@ -0,0 +1,347 @@
+0359470b9f7a2fdaa75e4de12c9f83e78135034f refs/heads/master
+f49164bf7658855390b2c19574b170f8728a99ff refs/heads/mono-2-10
+f08f8a27bfe3aafda4e430ee2365dec73c1070d7 refs/heads/mono-2-6
+746176a37123eda06ee6f9bd70736ac68a78e1aa refs/heads/winforms-clipboard-refactor
+3215bf8472af3b66a836af6319bb9410fd84e2ff refs/remotes/origin/C5
+0359470b9f7a2fdaa75e4de12c9f83e78135034f refs/remotes/origin/HEAD
+773a66abc5e63cc1d2f111daeaa2848891dc8f61 refs/remotes/origin/INITIAL_IMPORT
+06e3a751fc70f8b0bb0253dcc634e75b25d67fdc refs/remotes/origin/MCS_0_28
+ea23d77f5d686ad196de315b7f251999f409fc8e refs/remotes/origin/MONO_0_28
+3b7a7ac0ddf1a952d62a85fbbf7f9864b6de37b4 refs/remotes/origin/Mainsoft.System.Data
+7f0542b133e5f1eee15f337e0263c14406091a7e refs/remotes/origin/NUNIT
+4e4824afab6cd0f9f0d71aa6baeddb7bee74f8c4 refs/remotes/origin/SAVANNAH_CVS
+0fae05ddc83ee034344d50a6d4d618cfb10ee491 refs/remotes/origin/XIMIAN
+7e9c74197c9275e89a6c3afc1cfdccfe4f4b9395 refs/remotes/origin/anonymous-methods
+b7f7d992745ac1ad98451de3165d9219c5f9f9d0 refs/remotes/origin/anonymous-methods2
+a3f972be9e1edf4ec9ae836ad5a6cf35519ec180 refs/remotes/origin/atsushi-200810
+2972ef664b391dbdfa612c3ebd0ff55b8b75b5c7 refs/remotes/origin/cecil
+dd0a3a7dd70d9f146f968a3114a481f14b2ea1a6 refs/remotes/origin/commit-to-changelog-tests
+701861382d1f81fe4ca6f549128e5af5120ad34d refs/remotes/origin/dick/ia64-hpux
+ae8eba8d480b8690a915bef3e4899bb98d17b875 refs/remotes/origin/dick/io-layer-files-backend
+28e70d66a6d3d24f061e0ba049a8817ead44aeca refs/remotes/origin/dick/io-layer-no-daemon
+9229d3a283f618a6a7fdadcfb9a1e66743a6ba2a refs/remotes/origin/jb/cl
+121b690b280781fef910972ad6b825ec831ef3b1 refs/remotes/origin/jb/ml2
+677178627ed6c3332bff5221d5019b56c5802a17 refs/remotes/origin/jb/reflection-corcompare
+a7c74b39baed3961bc814e3508345404c5e03370 refs/remotes/origin/mainsoft/JSF
+55afaffae7d224f35eacc1d9d505e662c4223897 refs/remotes/origin/mainsoft/cust_1_2.2
+ee61dcd58e7960416c976a18ae025bc4b80713fa refs/remotes/origin/mainsoft/gh1.7
+5144d4fd99a7230e317dac4af6b1d2f61d2800d6 refs/remotes/origin/mainsoft/gh2.2
+adbed2a2b57bde136348a6b7cd465613b041ce69 refs/remotes/origin/mainsoft/gh2.2_customer2
+d03df42d2f13c7e8b3790ff9b3e17975ffdb91af refs/remotes/origin/mainsoft/gh2.2_customer3
+f219e12da4b39adcf08432833f3cd06b0b1343e1 refs/remotes/origin/mainsoft/gh2.2_customer4
+050c809c8f9f0fa0099b3d5dcaf982a4d0c9cd54 refs/remotes/origin/mainsoft/gh2.2_customer5
+7db3f555234c98b481cc7f46f6eb929787885ce8 refs/remotes/origin/mainsoft/gh2.5_customer2
+e6b84059b9c42f02c8ac4ef0db12cb7eb88b1884 refs/remotes/origin/mainsoft/gh20
+70dbb8d4c74bb6796023abb7aa68fbc678eaeb80 refs/remotes/origin/mainsoft/gh20_Customer2
+242fec48e07877683a58350f10922c0f0184589f refs/remotes/origin/mainsoft/gh20_mcs_Customer1
+6a59dd91941bb7c7aa026bd25bfec81d6eb1a2c8 refs/remotes/origin/mainsoft/gh20preview
+4bb9f1004787e4b52fe4fdb430a5f194ee634073 refs/remotes/origin/mainsoft/gh20preview2
+230e23e4f318414c51301127543c01c2005c05e4 refs/remotes/origin/mainsoft/gh3.0preview1
+e63e087e0e70925e5d48d0ead2fe65394e5c582d refs/remotes/origin/mainsoft/solutions_2_2
+7af82877276c7b88a44deb0e6f2072c50aa28c17 refs/remotes/origin/martin/anonymous-methods2
+ba3d2d20235322022f8e875849dab960bfc21b6d refs/remotes/origin/martin/debugger-kahalo
+48d03791a1c8abe1d596d879031206d993a83315 refs/remotes/origin/martin/debugger-plophos
+0359470b9f7a2fdaa75e4de12c9f83e78135034f refs/remotes/origin/master
+41ca39c136de914adeb30deba27ecbb987e05350 refs/remotes/origin/messaging-2008
+1429f06a9e3baf56245ec2433dcdb77e76eba684 refs/remotes/origin/mono-1-0
+e1eb581e8a9100a929827524d1d2f91bd5685739 refs/remotes/origin/mono-1-0-6
+c064f9f178339e54686526a3dd8bfd0ae7b64006 refs/remotes/origin/mono-1-1-10
+b28e8eb77161f75a676f160365a860455db15476 refs/remotes/origin/mono-1-1-11
+ad29bc9c3105aad5031a2ec84f3c468844e7b49d refs/remotes/origin/mono-1-1-12
+a4c46a87cfcea02ab73579c998ed4e67e858b3cf refs/remotes/origin/mono-1-1-13
+3f85c6d6d4c066363ae9d6e4de1ae80b954b84eb refs/remotes/origin/mono-1-1-13-8
+6a546f60cfc03dc0e4ae09c4463a40f2d5acd8d0 refs/remotes/origin/mono-1-1-14
+6e9f255eec4cbd8c53623d52fa26877db451bc34 refs/remotes/origin/mono-1-1-15
+812f508c35b2a7247b93e59447afca83452ebc38 refs/remotes/origin/mono-1-1-16
+e69a3c507851f27ff9d47d99944ee381fbd8da3e refs/remotes/origin/mono-1-1-17
+9fbea2d56a024540d07b680e3eeec3310ba71f86 refs/remotes/origin/mono-1-1-18
+b27152cb9d5942cbe886629f6f127fe6d1941930 refs/remotes/origin/mono-1-1-4
+d305ee9a95945be36cd4517ef440ce99833068a0 refs/remotes/origin/mono-1-1-5
+14db55bb39fee489de084d070ae611dd3503336d refs/remotes/origin/mono-1-1-6
+939994df00fc3e1372b9dc1243e261e2f6c6c133 refs/remotes/origin/mono-1-1-7
+d5fb27af2b9c68ac7bbada72c342e5b4f3072ebe refs/remotes/origin/mono-1-1-8
+4f71550049b0d43f7ae41359e6f38ffa29e1f3b3 refs/remotes/origin/mono-1-1-9
+0f9718c237af839c290a4c494a34d78190b99dd5 refs/remotes/origin/mono-1-2
+3bb68f1bddf41c5c387e28bbd0dba65df0cca0d3 refs/remotes/origin/mono-1-2-1
+c20551c1942db667672b36a07856467caace2d92 refs/remotes/origin/mono-1-2-2
+e68e73c7efe7a4e28028d3c0a8c43842caf6dc21 refs/remotes/origin/mono-1-2-3
+3c2f76b3001523ae712dcba5b2311a196eb9399d refs/remotes/origin/mono-1-2-4
+8bb489774f42a734947859a1742ee5710efd9b49 refs/remotes/origin/mono-1-2-5
+7376efd124405d50e11524bed7e91bbcb6bfc91a refs/remotes/origin/mono-1-2-6
+bb0cde85b1f31230be337328ebd83d412f6b9c90 refs/remotes/origin/mono-1-9
+c115636e0f354c3217920614182a3dfec4337541 refs/remotes/origin/mono-1-9-1-1
+a1f3cf39287ceaca189ae1b4c06ad1677c8988cf refs/remotes/origin/mono-2-0
+7a0052ae2fa0b9ff2c0dc7b6053e0e7d7630d477 refs/remotes/origin/mono-2-10
+852c512d416efb6ed34493571ee87abab7f72890 refs/remotes/origin/mono-2-2
+b68a5046d67794cd702518f471c6facdbb2f3a2c refs/remotes/origin/mono-2-4
+d161692a50d0164906d5c0ad6ee38db141b6f7b0 refs/remotes/origin/mono-2-4-0
+d4aeca63be0e9200f726545d4f8fcacd6a1e2b3f refs/remotes/origin/mono-2-4-1
+7cf6ebe0e0dc6e38851a07eaac14062b9a236a19 refs/remotes/origin/mono-2-4-2
+906d87f3ff47bf9d1deb9f4db57e3900bd8659ee refs/remotes/origin/mono-2-4-3
+f08f8a27bfe3aafda4e430ee2365dec73c1070d7 refs/remotes/origin/mono-2-6
+756688b2b8a4988117a2c68cfdba17142284e729 refs/remotes/origin/mono-2-6-4
+34096b448e97ec780b3788de2b3185691bc0b9ad refs/remotes/origin/mono-2-6-7
+64f045b98659b3552ae2b46b6e4e56fc9dad76e2 refs/remotes/origin/mono-2-8
+c7c906d69ac9e360ce3e7d517258b8eea2b962b2 refs/remotes/origin/monotouch-1-0
+62121afbb28f0b62f100ec9a942d10c5e0f4814f refs/remotes/origin/monotouch-2-0
+97c6f8c4c8d592360ec365777aedb15604ec53ca refs/remotes/origin/moon-2-99-0-1
+91b722f1d4b469c10c46fad3396a876c4414c87b refs/remotes/origin/moon-2-99-0-2
+79e05e9d6f8eca93467f104aed4fc19733e909a7 refs/remotes/origin/moon-2-99-0-3
+ddacacca00cb69f829abf9b0fd52fd6b4076d2c4 refs/remotes/origin/moon-2-99-0-4
+4309c0d96184c1675aef708f26a2a058b69e5eb8 refs/remotes/origin/moon-2-99-0-5
+60905d3baaa5b6ba9763c3c8b01701bb01853773 refs/remotes/origin/moon-2-99-0-6
+851c48f04a8019811231bc9bd6984b0779932dcd refs/remotes/origin/moon-2-99-0-7
+a36dc89129d65c4b72e9291d0fce46e0e418196c refs/remotes/origin/moon-2-99-0-8
+8fa5360efd91bc9e0bdd9399f6bd484b5ecfd16a refs/remotes/origin/moon-3-99-0-1
+32b3b31f74ec411d02efba37d58433ade9fa6d98 refs/remotes/origin/moon-3-99-0-2
+fa856a85b50d6adbac6b5d26b32bc608887551bc refs/remotes/origin/moon/1.9.0
+348617482b380275d7057e547e806c9be05bdb72 refs/remotes/origin/moon/1.9.1
+0d47d8081c828d4b032564a88046a99d0284e6fd refs/remotes/origin/moon/1.9.2
+50275053ad48a673500d72dccedab51e5230ad0b refs/remotes/origin/moon/1.9.3
+bd19dacb396738bad75ecc8aafc1d8fc0fd6d5cd refs/remotes/origin/moon/1.9.4
+f77c706aeb62483bd50e1199f52e1dadd9c520dd refs/remotes/origin/moon/1.9.5
+3a5a3cf1d3fd027974b9f8281c6a9c7a22b75029 refs/remotes/origin/moon/1.9.6
+ee08a4d041bdb88f49a027ce1a4f7736751a32d5 refs/remotes/origin/moon/1.99.1
+c7bb5af6fcf8d1e380a8ec440c4b535c912713e0 refs/remotes/origin/moon/1.99.2
+82b4a5cf1336da4f3234e85754a8780c57bb566b refs/remotes/origin/moon/1.99.3
+f0a462d9db712ffcad80365561307c06e3acef3f refs/remotes/origin/moon/1.99.4
+43dff9dcbf68f1ede9a467c24361a8056440c16a refs/remotes/origin/moon/1.99.5
+d4674914b900cba323c2cde86e185b57553fa224 refs/remotes/origin/moon/1.99.6
+51bca79c227343ce3a839c4739590406032546f6 refs/remotes/origin/moon/1.99.7
+e0eee654e3532610107089762f6c73e923b71036 refs/remotes/origin/moon/1.99.8
+ce62f727587b0467218a77829b30d530ca7fb524 refs/remotes/origin/moon/1.99.9
+aaa43cdb8ab054b33c23ba2a16475d4108acc1f4 refs/remotes/origin/moon/moon-2-0
+a56625169c0ebfd4bdfe0636b04cf3f5c5c1e057 refs/remotes/origin/mwf-handle-branch
+0546b514ee0115d7e4bc08d479b952aaa59e0591 refs/remotes/origin/post-1-1-7-4-locking-exp
+091a1627fdf10e7e3a12d59138bb4036711d6bdd refs/remotes/origin/post-1-1-8-locking-exp
+348617482b380275d7057e547e806c9be05bdb72 refs/remotes/origin/rhowell/1.9.1
+bd19dacb396738bad75ecc8aafc1d8fc0fd6d5cd refs/remotes/origin/rhowell/1.9.4
+b73887c83da66d0ba9402c9cfe94936a938361a2 refs/remotes/origin/sportsmodel-branch
+db39bf49379457cda6efb712dc6b9d9f007e5c9c refs/remotes/origin/vargaz/mini-linear-il
+acb9e21b28520b966f30b8575d61ca7ed952134b refs/remotes/origin/vargaz/mini-xp-local-regalloc
+6dc86808d6e4e1811ef8746afbd67c1eefca4b44 refs/remotes/origin/wii
+2435a146a292e5cbd17d775260e69f9ffe5bd961 refs/stash
+3f313cb9ecff29967ddff9bf78004f49816e804d refs/tags/1-0-5
+8ee804b1c9cc92fd7bea45adb1270f3d5bbcbdf5 refs/tags/1-1-3
+2fb3bf579cca787c4bbe0c2bdccc17c8ac9a189c refs/tags/2.10
+668fe4cb4bf709d52ab5660e9198ed2bbcc32289 refs/tags/2.10.1
+a401067f098a6c3aa8b273e06e6ccbf14a589852 refs/tags/2.10.2
+66187b25b69ab736c0ff93f0b3ebf35f660fb343 refs/tags/2.10.3
+d34d67f35bc2a0a48af1c37ac6af4c926df7668c refs/tags/2.8
+4f90aa334e08c3137db6e2267192c1c7a14ffb84 refs/tags/2.8-p3
+dd287e742d072039b81f1e7351aab45621e60ed4 refs/tags/2.8-p5
+b3911d9b59b06d5e39bfa30ea572fdb167c6d478 refs/tags/2.8-p6
+15122fd0a5190afc168918bc8e840eb0d3296f38 refs/tags/2.8-rc1
+662ad6ee1249ceb0b9873d02034d03fee429b616 refs/tags/2.8.1
+47ae77b5608c6dc0e3e5497f857c450fba3a41cf refs/tags/2.8.2
+3215bf8472af3b66a836af6319bb9410fd84e2ff refs/tags/C5_0_5
+a4367a4aaaa4600954eb64dfd1cc4c433b5f0e3b refs/tags/GENERICS_BASE_MERGE_POINT
+5df4e8d92d45ebd27fff80d1cb3317fc6177f1cb refs/tags/GMCS_MARTIN
+69876c30ff2e33d15a79f94c8a5560c7066e4900 refs/tags/GMCS_MARTIN_2
+b5e0d7eaf38a4e1ec031e91508c602c0e07c14ff refs/tags/MARTIN_PLAYGROUND_TAG
+c47f6de70e6a9cfc31ded537d4610efa800302f2 refs/tags/MCS_0_10
+6f9059cfb80914c1f48a93bc0efc08e6404c950e refs/tags/MCS_0_11
+d7a0fa3525a4baf4da535c3f5c4a6afa61fc1af7 refs/tags/MCS_0_13
+af150fc45b9f08337e3c5c517d1a9ae533844927 refs/tags/MCS_0_14
+3baf6444e0ba460696c78ddf2e137517664d6d0f refs/tags/MCS_0_15
+2060885a61b30e2557d9e938e681842a21be7fb2 refs/tags/MCS_0_16
+8a70bb1d0e07b9bda44c4fab515414dd14d98d97 refs/tags/MCS_0_17
+8f0db6b55168e6cdf83a94efd6a9c1e75ce4f141 refs/tags/MCS_0_18
+1bce5f4a2aab71234fd0aa56f76c71467677281e refs/tags/MCS_0_19
+f4d7c3d9ef6b3198ca3436b2a9f7aaa6adfada0b refs/tags/MCS_0_20
+cfaea8bc95ea12af4694be8775172ca868ffbd46 refs/tags/MCS_0_21
+62975301f29e09b9d989d86986aa43dcddab4338 refs/tags/MCS_0_22
+cc6c8473d625470faf0a35975e743890e615484e refs/tags/MCS_0_23
+9f09256d3c73b6906965b238779b9bff5b1a39a0 refs/tags/MCS_0_24
+4a048a798ca68d31088227e8e9e324358bb9b5f7 refs/tags/MCS_0_25
+2c2381e666b95479893c22cddc7e75099d15cb2a refs/tags/MCS_0_26
+dd05ade67bd8b0a60a8ae6a5ce7501e9085b29bc refs/tags/MCS_0_27
+6e43a5d927ef22ded84720ba9497b8f54f2ef8a4 refs/tags/MCS_0_29
+77702ef90fa82d99e5c1f198b79ea8a988b46c79 refs/tags/MCS_0_30
+5d657d7bc63e0bf93e6e4c463d71be239d1d6db4 refs/tags/MCS_0_31
+b0784aa1318048429a5c94e704a7d3554f6ea2f7 refs/tags/MCS_0_4
+d02373e837c4ab265cbbfc3c685670e04a162c25 refs/tags/MCS_0_6
+c275f7585f42e64da71678dd2213c76cd2554f71 refs/tags/MCS_0_8
+2ba6e3293b552a4be0947afd1d39d8450a4f8237 refs/tags/MCS_0_91
+39c87c56fbaf6635cfe7a81285f4c0b8612f302f refs/tags/MCS_0_95
+5f2542f7633db1be8a059fd1a1ee4201361d0fa8 refs/tags/MCS_0_96
+3742db035a55aa33384cf90c49336ed3bc018c8c refs/tags/MCS_0_97
+06d243aef744202bf37a0aa21de8c15bf427a85a refs/tags/MCS_1_0
+251a5dabc98ac219c962f950dcef2489c90da2ad refs/tags/MCS_1_0_2
+081f745091ca69547afa8c929862a2f5a533c206 refs/tags/MCS_1_0_3
+c0ce58ee90ee63da82639d8cccd11f9b2b73d857 refs/tags/MCS_1_0_4
+20f50bbc55de5f443511d3670d3b4f597d55e485 refs/tags/MCS_1_1_1
+25d006bb42129274760a3bffba0c1289052c21c4 refs/tags/MCS_1_1_2
+2f5e6232d1c49b739354a58a5bca5d150bcfdcc3 refs/tags/MCS_JULY_17
+2c94e8b66e745c4b06312aafae63f85b8129d0b2 refs/tags/MONO_0_10
+ca778a895886cd1f2f1e1dd354955b3e647e6fce refs/tags/MONO_0_11
+4f02ecaa9dd5a59c7edce294d255efa58daf61d5 refs/tags/MONO_0_13
+adb7ff32d1132ffae1c357388d78d61044931873 refs/tags/MONO_0_14
+248504d80db5ae00ea6ab790c602db54db265bdb refs/tags/MONO_0_15
+32e69fe2dd5f540b7afcc51260fdf80cd78ebc5d refs/tags/MONO_0_16
+f64163bfd7a8049d46518c9ec4efeb5ce3fbb186 refs/tags/MONO_0_17
+66332d9ef6f1bc809742c5d3f6410f28f33d717c refs/tags/MONO_0_18
+8466b5c35a24c80437a4425608d63e96890c1ae1 refs/tags/MONO_0_19
+52b84743694e5f3aa99a1175b151e4bf05d77843 refs/tags/MONO_0_20
+46a6b24b434d1ffef5d880099e35872f89fe5a9d refs/tags/MONO_0_21
+d32321a6f9da81443d439b33205911efb8229d47 refs/tags/MONO_0_22
+8d12301369b39c5737b6eeba8ad47952ecf6482d refs/tags/MONO_0_23
+23631f018af1aa50b3d2f7a26ac2ac02c10a9641 refs/tags/MONO_0_24
+24ca06b662e3f2a6f7ea59941ea55bbc5e756eb6 refs/tags/MONO_0_25
+0d77b961f51dbd9578cc4c0a71e00700d80331c7 refs/tags/MONO_0_26
+3c95965b2e209ade91865de62f0a5c3477f83a6e refs/tags/MONO_0_27
+395708bec98015ea736ec2c7140a638c72e02450 refs/tags/MONO_0_29
+3a24638a9150b340a731bf94621d5abd4cb84211 refs/tags/MONO_0_3
+34822afe22085dcdfa99db23ce024c95f39c5328 refs/tags/MONO_0_30
+7f5304f8a86db6bdbd5acc97cbf3e94085bead41 refs/tags/MONO_0_31
+08cc744ea34ddc11b5e66d62b5681963d3997365 refs/tags/MONO_0_4
+ac6a0aff32ced61f3a858961fb0d27679bbd8504 refs/tags/MONO_0_5
+9a80f7e7814c11e580621af662a60c5761bb112e refs/tags/MONO_0_6
+5bafbfd3411626e5916657ff37179f11628dfdac refs/tags/MONO_0_7
+dc0e724dcc70b038ed7d89a7d04baabe1fb9a6e9 refs/tags/MONO_0_8
+885709d3bcac901227fac48c0efd63748b88afaa refs/tags/MONO_0_9
+3cadc5c762015237c99861f093f8dc2f862133c2 refs/tags/MONO_0_91
+a00b9074aa531be3c4a905da7a15786212f14f97 refs/tags/MONO_0_93
+c055406f4431bf7695c29026845ac841eea3c1d9 refs/tags/MONO_0_94
+920d6fe40d1df03aba5698e8bb1ccca5aa75b3d8 refs/tags/MONO_0_95
+0cbb90c2046182f209495aa451ad4cba06bfcc06 refs/tags/MONO_0_96
+ffa02af22854b2be49708684d2483a7c0624dda4 refs/tags/MONO_0_97
+35e34e2d9dd04d14aea6358ff7ec55763f203fe8 refs/tags/MONO_0_99_2
+6340550c2b181e5561266f61093bf581ca275314 refs/tags/MONO_1_0
+72b6c41eebe173dfe7cb517deb05961f44dbfb8a refs/tags/MONO_1_0_1
+1bae59437320c2cdbcda814b06f43993327ed5a5 refs/tags/MONO_1_0_2
+13f4c1a27734a2815a42d3f8826dedfee4744fd1 refs/tags/MONO_1_0_3
+408a59e440bbe3dd331ad8ebba505eabcef56157 refs/tags/MONO_1_0_4
+8c2a6ff51b3864ee8cd7574d2c55da804fba188e refs/tags/MONO_1_1_1
+679f766f0d8c4c56d6cbfe6348c84f6095b5304f refs/tags/MONO_1_1_2
+0ed4ed7b6a21f51760f9a1d9a7b5eb4074e09fb2 refs/tags/MONO_BETA2
+7f0542b133e5f1eee15f337e0263c14406091a7e refs/tags/NUNIT_1_11
+4e4824afab6cd0f9f0d71aa6baeddb7bee74f8c4 refs/tags/RHYS_20020821
+e2b6cbaf2793354590a7fe542afe811aa03d0a2e refs/tags/cecil-0.6
+cc871f21d86765c372ffd71615de2a5252ce2832 refs/tags/last-commit-with-compulsory-changelog-entry
+3f313cb9ecff29967ddff9bf78004f49816e804d refs/tags/mono-1-0-5
+c064f9f178339e54686526a3dd8bfd0ae7b64006 refs/tags/mono-1-1-10-1
+2dbb2f7a7d72a49b068c3d17aa7cb04aaeeac735 refs/tags/mono-1-1-12-1
+0e6e9da90b12ca5c445a3b1eaeb7581dc792c016 refs/tags/mono-1-1-13-1
+24906dde223bd634fe2b5ec231ba399eb01ed85e refs/tags/mono-1-1-13-2
+933491861325258994290ac573f66db398b2151c refs/tags/mono-1-1-13-3
+fbc561d17c6310b2d9c94c37e673956f64956d2b refs/tags/mono-1-1-13-4
+5555a9e8dabb3bb9d94d18cb10236e331ff6652c refs/tags/mono-1-1-13-5
+33ab4bee8e165e330c6abd3385bb09357afd892a refs/tags/mono-1-1-13-6
+6b2f395ce41d181672c1032c0bada5013589aa9d refs/tags/mono-1-1-13-7
+7d44efe136a8b624639e244b407694012767d8b2 refs/tags/mono-1-1-13-8-1
+3f85c6d6d4c066363ae9d6e4de1ae80b954b84eb refs/tags/mono-1-1-13-8-2
+680b340f6d3d64c649c03a35a3946a969c75b9c8 refs/tags/mono-1-1-16-1
+3f259856c6b748da5e9db392231bc4cf02067625 refs/tags/mono-1-1-17-1
+e69a3c507851f27ff9d47d99944ee381fbd8da3e refs/tags/mono-1-1-17-2
+97263cd3ede795aa9214ef6f511a6986caa1d10a refs/tags/mono-1-1-18-1
+8ee804b1c9cc92fd7bea45adb1270f3d5bbcbdf5 refs/tags/mono-1-1-3
+14db55bb39fee489de084d070ae611dd3503336d refs/tags/mono-1-1-6-2
+0e3bb5c75d0e2e46654b01bf9cf2c564fcf36186 refs/tags/mono-1-1-7-1
+9fe352c95dea8ef63bc54837a902297643ad95cb refs/tags/mono-1-1-7-10
+3212bc410d77569c636eee658215f6ef26727022 refs/tags/mono-1-1-7-11
+3a154ae091c27cacef8da21bbcd802c6b20a5fdc refs/tags/mono-1-1-7-12
+2dd8006e8e79bb0b6695e83e8b9f8c75614b73cd refs/tags/mono-1-1-7-13
+da175f964d6ff43a290436b99dea5c4c874f7d77 refs/tags/mono-1-1-7-14
+ce91af0332902c2227985cf72e5267dc93f0082f refs/tags/mono-1-1-7-2
+8dd4410b0519704c213252c27e12bc2c3d2f5644 refs/tags/mono-1-1-7-3
+669e1211f916836ed1151d494ef6363f477c6875 refs/tags/mono-1-1-7-4
+cb211e4e89523e37865b46c53bab8c13667904a5 refs/tags/mono-1-1-7-5
+212070688ad11ff8d6db9c79a7a354e73dce0169 refs/tags/mono-1-1-7-6
+475bb6ed37428ae214db51de76144ddfc461eab2 refs/tags/mono-1-1-7-7
+4163439d14083fe6c88ba52d66d32f1c199e134a refs/tags/mono-1-1-7-8
+db8b68eb75dd8a1773ea380c5ab299ecb96a02e8 refs/tags/mono-1-1-7-9
+9e4af11a75bbde3b9aa45a8c8dc2a9d28c327ca7 refs/tags/mono-1-1-8-1
+97f8625d1092a3087d2561e6a8fd5fec9548ddf8 refs/tags/mono-1-1-8-2
+c9228135a78dc90b0fada472767b7501c10a10a1 refs/tags/mono-1-1-8-3
+b29c6d9321ae353d5587552c5fd8a3990ef25b8d refs/tags/mono-1-1-9-1
+c20187f291f7ab63b0039cc6ea1d0aec666357bc refs/tags/mono-1-1-9-2
+434ed78f2343b3c7a2ceb2431bf6e6f3fda96b9d refs/tags/mono-1-2-2-1
+6b2181df333da3201aa21e7aac7af0092a95f155 refs/tags/mono-1-2-3-1
+e27148fde898ecd8b315ed811d69174ca770f3fe refs/tags/mono-1-2-3-50
+ef21dfa4f165958a8d6e643e67fc2fbdc6a4b193 refs/tags/mono-1-2-5-1
+97512982957dd59e98473df4de5d023831076ac8 refs/tags/mono-1-2-5-2
+b80cb128d794441da87095b62dda79fc977b43a2 refs/tags/mono-1-2-5-p4
+3099f3ce8d009126b71e2856744953b706b153b3 refs/tags/mono-1-2-5-p5
+59c864c22a7ba865e3d641048f143eef3d78e3bb refs/tags/mono-1-9-1
+65cf8c16c5248ce0e3ca9321422e3f3d47e44054 refs/tags/mono-1-9-1-p2
+2b3bfcb002d9e7dc8b5bb9e93d5416fa3a7f4a24 refs/tags/mono-1-9-p3
+e1eb581e8a9100a929827524d1d2f91bd5685739 refs/tags/mono-1.0.6
+269d024dc2796fbffd5b2603cfce01199ddfa354 refs/tags/mono-1.1.10
+b28e8eb77161f75a676f160365a860455db15476 refs/tags/mono-1.1.11
+f2631aa17b0296460a815794f4c2c1d6dccc1cd3 refs/tags/mono-1.1.12
+97c08a345189de79332e75268f5ac806caa800f8 refs/tags/mono-1.1.13
+0aea5e52ca5def84eb4bea45a32c46c38382ce54 refs/tags/mono-1.1.13.8
+6a546f60cfc03dc0e4ae09c4463a40f2d5acd8d0 refs/tags/mono-1.1.14
+6e9f255eec4cbd8c53623d52fa26877db451bc34 refs/tags/mono-1.1.15
+fda57d1297a00855038778e4b3c55125cd5b6f6d refs/tags/mono-1.1.16
+f0eb908832c00425cb56a563c4d2c2253aa99801 refs/tags/mono-1.1.17
+d973adf739079a754013a7aabaf062c6e8362d58 refs/tags/mono-1.1.18
+f0cc7b722514f9a66636fbdc2ba46d2ad09290da refs/tags/mono-1.1.4
+d305ee9a95945be36cd4517ef440ce99833068a0 refs/tags/mono-1.1.5
+4a93eca61ace3b72e9c7d3241e22894ac6527751 refs/tags/mono-1.1.6
+999eedbde2286858dee3a28b3de17cf7c7ee6aa3 refs/tags/mono-1.1.7
+38ba17f8fba52022c8be480c4d0b7790502fcf5d refs/tags/mono-1.1.8
+0c12971f275e1e95d86fcdb69bb3a16782c96c00 refs/tags/mono-1.1.9
+d0f800d5aae075fbaec91be79776b05fea6d8b2b refs/tags/mono-1.2
+7e26594b5acf982ca712d81018e01192f3698934 refs/tags/mono-1.2.1
+3482a0b686b1717a6a7639bdde43123fda150a37 refs/tags/mono-1.2.2
+203611f08d6864575fd244f513e8c800fe04538e refs/tags/mono-1.2.3
+69353f911160fe45163b3514df295ee5bca196e3 refs/tags/mono-1.2.4
+e659f8968d2943e94136787d0256de16d8c21dcc refs/tags/mono-1.2.5
+040ba14063f6b9933ac89835e71bd813ca140dc7 refs/tags/mono-1.2.6
+e80fe9efc2b64aacf06657cc8951c9739513069d refs/tags/mono-1.9
+fa2352e7bba168ce21f63ccdb59cce70e69b0b98 refs/tags/mono-1.9.1.1
+ad1e78b37d014bb15d5396736d9db71bb37a902c refs/tags/mono-2-0-1
+94c037f620e2f32ca4d0925785e77345bf9436b3 refs/tags/mono-2-0-1-rc1
+57dbdb3e42c98860392c8eeccbcbdf3df50ee461 refs/tags/mono-2-0-p1
+d7b1a66b945f37e7a62ce28a2cbb4618dbca842b refs/tags/mono-2-0-p2
+28021d9e5cc4e8837fb8e060e222e93ed5b6963e refs/tags/mono-2-0-rc1
+d33e20924be8193235f574a1da78e7d44b229f21 refs/tags/mono-2-0-rc2
+245f79b651af761ca0929d77f14c06e77e56b5fa refs/tags/mono-2-0-rc3
+c43c7090b668525e8d6730206883b76b1cd7e8c1 refs/tags/mono-2-2-p1
+50619fe4f49cc9358be684132ea197993d3748b1 refs/tags/mono-2-2-p2
+dc330f3d57eb21109243f16df6ba7001a68bb963 refs/tags/mono-2-2-p3
+08038cbf3b982239d9ed74f6181576a7caf308b4 refs/tags/mono-2-2-rc1
+abb08d231bb68b63beb4f34f4c4bab8f3a607092 refs/tags/mono-2-4-2-1
+b79738dc7f734a78039567ea35f4e6a7d319a227 refs/tags/mono-2-4-2-2
+f79a3230c2f0a8d80b36cdbe067c53e36374a017 refs/tags/mono-2-4-2-3
+f64925baf83a71bfffa278c15da8baf6a7d851c2 refs/tags/mono-2-4-2-3-rc1
+7337b45f49fadaff8f310b5d432240128b82786d refs/tags/mono-2-4-2-3-rc2
+f79a3230c2f0a8d80b36cdbe067c53e36374a017 refs/tags/mono-2-4-2-3-rc3
+ab03b83eb4ed48e7f3d667c279ae60335d5c850d refs/tags/mono-2-4-2-p1
+8e9b735376ea0dc09c1b0234e0ce8941f0e8dab9 refs/tags/mono-2-4-2-p2
+01bbe61085220e441170e93e38c87368cf6726f1 refs/tags/mono-2-4-2-rc1
+8a7c716e20f2aeadbe827b5d532fe36f69e74568 refs/tags/mono-2-4-2-rc2
+6bf1e1ea5f2d2586bafdd14f1fe538e080a6d5ba refs/tags/mono-2-4-3-1
+dc279e74dc85301bb23db6de78d537cb0da9fe9e refs/tags/mono-2-4-p1
+c2752833c4c451a9cff77175801370c359b5850e refs/tags/mono-2-6
+3a989e7d01e337d2c77bb3218effe39f9ed90a02 refs/tags/mono-2-6-1
+53acd8e07620008e5354170ff2ad479db5d200cb refs/tags/mono-2-6-3
+3a79ccf17838b6b1d0806cb123428ee065d3d30f refs/tags/mono-2-6-7
+43e34e922109adb8cbf6aaaf1dbc1dce3350f88f refs/tags/mono-2-6-p1
+1c102ac0d51469c9c4dd245b82ff8a3cc485a67e refs/tags/mono-2-6-rc1
+e117097e1f1f8a3cddaac9fb71d86661b6a10b22 refs/tags/mono-2.0
+470791b186ea8326f205f17ce2eadac2ff86a564 refs/tags/mono-2.2
+27589b59b90f81fb88ab69eee320449c8cf65780 refs/tags/mono-2.4
+8a7c716e20f2aeadbe827b5d532fe36f69e74568 refs/tags/mono-2.4.2
+1a9965fb222300fafa0eda42cf33c9ab8ff90faf refs/tags/mono-2.4.3
+c2752833c4c451a9cff77175801370c359b5850e refs/tags/mono-2.6
+680b5eb2d695de54fe4eb3210c07722ef60e5a4b refs/tags/mono-2.6.4
+6623fc543d66d06121d7c7cfbe9f5bfa3ed8cf3d refs/tags/mono-android-1-0
+7dcae3becc62fdbd1934b5c8b0e924bfe9e72921 refs/tags/monotouch-1-3
+781cdd1e28a8060fb31c16817bdff2024002e304 refs/tags/monotouch-1-4
+51a238609c4c196985d2fcc3c1edf10442ff94de refs/tags/monotouch-1.0
+fa856a85b50d6adbac6b5d26b32bc608887551bc refs/tags/moon-1.9.0
+348617482b380275d7057e547e806c9be05bdb72 refs/tags/moon-1.9.1
+0d47d8081c828d4b032564a88046a99d0284e6fd refs/tags/moon-1.9.2
+1163a482f7430930bee670cf4c6721ecf9880974 refs/tags/moon-1.99.1
+c7bb5af6fcf8d1e380a8ec440c4b535c912713e0 refs/tags/moon-1.99.2
+d4674914b900cba323c2cde86e185b57553fa224 refs/tags/moon-1.99.6
+ee08a4d041bdb88f49a027ce1a4f7736751a32d5 refs/tags/moon/1.99.1.1
+19f1c05c5471440bebaa4b29753c831c6c876312 refs/tags/moon/2.0
+a17f894b666841189aeffb3d2a172c63c9f4f0b6 refs/tags/moon/2.1
+a17f894b666841189aeffb3d2a172c63c9f4f0b6 refs/tags/moon/2.2
+a17f894b666841189aeffb3d2a172c63c9f4f0b6 refs/tags/moon/moon-2-3
+4147a93068116c5ff6b872fd7cf877af3d4ec04a refs/tags/sportsmodel-base
+b07fca3e4eb4ce853b265956eb399f5649220559 refs/tags/type-reflector_0_2
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 d8783035251c7644de5db35bc00943e4891909af..32505c9a42474e75607b634af19b255eeab69f36 100644 (file)
@@ -52,11 +52,11 @@ namespace Microsoft.Build.Tasks {
                        
                        foreach (ITaskItem directory in directories) {
                                try {
-                                       Directory.Delete (directory.GetMetadata ("FullPath"), true);
-                                       temporaryRemovedDirectories.Add (directory);
-                               }
-                               catch (DirectoryNotFoundException ex) {
-                                       Log.LogErrorFromException (ex);
+                                       string fullpath = directory.GetMetadata ("FullPath");
+                                       if (Directory.Exists (fullpath)) {
+                                               Directory.Delete (fullpath, true);
+                                               temporaryRemovedDirectories.Add (directory);
+                                       }
                                }
                                catch (PathTooLongException ex) {
                                        Log.LogErrorFromException (ex);
index c629a65b5e178255a61487e69e4cedeb8b8f96ab..5f2328429a2b3adcce04494dc4187cf4a7c632c7 100644 (file)
@@ -5,3 +5,4 @@ System.Runtime.CompilerServices/AsyncVoidMethodBuilder.cs
 System.Runtime.CompilerServices/AsyncTaskMethodBuilder.cs
 System.Runtime.CompilerServices/AsyncTaskMethodBuilder_T.cs
 System.Runtime.CompilerServices/TaskAwaiter.cs
+System.Runtime.CompilerServices/TaskAwaiter_T.cs
diff --git a/mcs/class/Mono.Async/Mono.Async_test.dll.sources b/mcs/class/Mono.Async/Mono.Async_test.dll.sources
new file mode 100644 (file)
index 0000000..b428ab1
--- /dev/null
@@ -0,0 +1,2 @@
+System.Runtime.CompilerServices/TaskAwaiterTest.cs
+System.Runtime.CompilerServices/TaskAwaiterTest_T.cs
index f287caf78fce6ea7ec1c7839577c20aa6c8e9b7c..eba53902ea2a888e0ff4b9cf921b9f88f6002af5 100644 (file)
@@ -48,41 +48,21 @@ namespace System.Runtime.CompilerServices
                public void GetResult ()
                {
                        if (task.Status != TaskStatus.RanToCompletion)
-                               throw new NotImplementedException ();
+                               throw HandleUnexpectedTaskResult (task);
                }
 
-               public void OnCompleted (Action continuation)
-               {
-                       if (continuation == null)
-                               throw new ArgumentNullException ("continuation");
-
-                       task.ContinueWith (l => continuation (), TaskContinuationOptions.ExecuteSynchronously);
-               }
-       }
-
-       public struct TaskAwaiter<TResult>
-       {
-               readonly Task<TResult> task;
-
-               internal TaskAwaiter (Task<TResult> task)
+               internal static Exception HandleUnexpectedTaskResult (Task task)
                {
-                       this.task = task;
-               }
-
-               public bool IsCompleted {
-                       get {
-                               return task.IsCompleted;
+                       switch (task.Status) {
+                       case TaskStatus.Canceled:
+                               return new TaskCanceledException (task);
+                       case TaskStatus.Faulted:
+                               return task.Exception.InnerException;
+                       default:
+                               return new InvalidOperationException ("The task has not finished yet");
                        }
                }
 
-               public TResult GetResult ()
-               {
-                       if (task.Status != TaskStatus.RanToCompletion)
-                               throw new NotImplementedException ();
-
-                       return task.Result;
-               }
-
                public void OnCompleted (Action continuation)
                {
                        if (continuation == null)
diff --git a/mcs/class/Mono.Async/System.Runtime.CompilerServices/TaskAwaiter_T.cs b/mcs/class/Mono.Async/System.Runtime.CompilerServices/TaskAwaiter_T.cs
new file mode 100644 (file)
index 0000000..9cded46
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// TaskAwaiter_T.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2011 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Threading.Tasks;
+
+namespace System.Runtime.CompilerServices
+{
+       public struct TaskAwaiter<TResult>
+       {
+               readonly Task<TResult> task;
+
+               internal TaskAwaiter (Task<TResult> task)
+               {
+                       this.task = task;
+               }
+
+               public bool IsCompleted {
+                       get {
+                               return task.IsCompleted;
+                       }
+               }
+
+               public TResult GetResult ()
+               {
+                       if (task.Status != TaskStatus.RanToCompletion)
+                               throw TaskAwaiter.HandleUnexpectedTaskResult (task);
+
+                       return task.Result;
+               }
+
+               public void OnCompleted (Action continuation)
+               {
+                       if (continuation == null)
+                               throw new ArgumentNullException ("continuation");
+
+                       task.ContinueWith (l => continuation (), TaskContinuationOptions.ExecuteSynchronously);
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/Mono.Async/Test/Mono.Async.Test.csproj b/mcs/class/Mono.Async/Test/Mono.Async.Test.csproj
new file mode 100644 (file)
index 0000000..9ca3021
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <PropertyGroup>\r
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>\r
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>\r
+    <ProductVersion>8.0.30703</ProductVersion>\r
+    <SchemaVersion>2.0</SchemaVersion>\r
+    <ProjectGuid>{03F5F1B0-FB65-471B-AACD-881930E472DB}</ProjectGuid>\r
+    <OutputType>Library</OutputType>\r
+    <AppDesignerFolder>Properties</AppDesignerFolder>\r
+    <RootNamespace>Mono.Async.Test</RootNamespace>\r
+    <AssemblyName>Mono.Async.Test</AssemblyName>\r
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r
+    <FileAlignment>512</FileAlignment>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">\r
+    <DebugSymbols>true</DebugSymbols>\r
+    <DebugType>full</DebugType>\r
+    <Optimize>false</Optimize>\r
+    <OutputPath>bin\Debug\</OutputPath>\r
+    <DefineConstants>DEBUG;TRACE</DefineConstants>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <WarningLevel>4</WarningLevel>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">\r
+    <DebugType>pdbonly</DebugType>\r
+    <Optimize>true</Optimize>\r
+    <OutputPath>bin\Release\</OutputPath>\r
+    <DefineConstants>TRACE</DefineConstants>\r
+    <ErrorReport>prompt</ErrorReport>\r
+    <WarningLevel>4</WarningLevel>\r
+  </PropertyGroup>\r
+  <ItemGroup>\r
+    <Reference Include="AsyncCtpLibrary">\r
+      <HintPath>C:\Users\marek\Documents\Microsoft Visual Studio Async CTP\Samples\AsyncCtpLibrary.dll</HintPath>\r
+    </Reference>\r
+    <Reference Include="nunit.framework, Version=2.5.9.10348, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />\r
+    <Reference Include="System" />\r
+    <Reference Include="System.Core" />\r
+    <Reference Include="Microsoft.CSharp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <Compile Include="System.Runtime.CompilerServices\TaskAwaiterTest.cs" />\r
+    <Compile Include="System.Runtime.CompilerServices\TaskAwaiterTest_T.cs" />\r
+  </ItemGroup>\r
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
+       Other similar extension points exist, see Microsoft.Common.targets.\r
+  <Target Name="BeforeBuild">\r
+  </Target>\r
+  <Target Name="AfterBuild">\r
+  </Target>\r
+  -->\r
+</Project>
\ No newline at end of file
diff --git a/mcs/class/Mono.Async/Test/Mono.Async.Test.sln b/mcs/class/Mono.Async/Test/Mono.Async.Test.sln
new file mode 100644 (file)
index 0000000..7c96b05
--- /dev/null
@@ -0,0 +1,20 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 11.00\r
+# Visual Studio 2010\r
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Async.Test", "Mono.Async.Test.csproj", "{03F5F1B0-FB65-471B-AACD-881930E472DB}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Release|Any CPU = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {03F5F1B0-FB65-471B-AACD-881930E472DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {03F5F1B0-FB65-471B-AACD-881930E472DB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {03F5F1B0-FB65-471B-AACD-881930E472DB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {03F5F1B0-FB65-471B-AACD-881930E472DB}.Release|Any CPU.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/TaskAwaiterTest.cs b/mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/TaskAwaiterTest.cs
new file mode 100644 (file)
index 0000000..41652e9
--- /dev/null
@@ -0,0 +1,92 @@
+//
+// TaskAwaiterTest_T.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2011 Xamarin, Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using System.Runtime.CompilerServices;
+
+namespace MonoTests.System.Runtime.CompilerServices
+{
+       [TestFixture]
+       public class TaskAwaiterTest_T
+       {
+               Task<int> task;
+
+               [Test]
+               public void GetResultFaulted ()
+               {
+                       TaskAwaiter<int> awaiter;
+
+                       task = new Task<int> (() => { throw new ApplicationException (); });
+                       awaiter = task.GetAwaiter ();
+                       task.RunSynchronously (TaskScheduler.Current);
+
+
+                       Assert.IsTrue (awaiter.IsCompleted);
+
+                       try {
+                               awaiter.GetResult ();
+                               Assert.Fail ();
+                       } catch (ApplicationException) {
+                       }
+               }
+
+               [Test]
+               public void GetResultNotCompleted ()
+               {
+                       TaskAwaiter<int> awaiter;
+
+                       task = new Task<int> (() => 1);
+                       awaiter = task.GetAwaiter ();
+
+                       try {
+                               awaiter.GetResult ();
+                               Assert.Fail ();
+                       } catch (InvalidOperationException) {
+                       }
+               }
+
+               [Test]
+               public void GetResultCanceled ()
+               {
+                       TaskAwaiter<int> awaiter;
+
+                       var token = new CancellationToken (true);
+                       task = new Task<int> (() => 2, token);
+                       awaiter = task.GetAwaiter ();
+
+                       try {
+                               awaiter.GetResult ();
+                               Assert.Fail ();
+                       } catch (TaskCanceledException) {
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/TaskAwaiterTest_T.cs b/mcs/class/Mono.Async/Test/System.Runtime.CompilerServices/TaskAwaiterTest_T.cs
new file mode 100644 (file)
index 0000000..cddf1dc
--- /dev/null
@@ -0,0 +1,92 @@
+//
+// TaskAwaiterTest.cs
+//
+// Authors:
+//     Marek Safar  <marek.safar@gmail.com>
+//
+// Copyright (C) 2011 Xamarin, Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using System.Runtime.CompilerServices;
+
+namespace MonoTests.System.Runtime.CompilerServices
+{
+       [TestFixture]
+       public class TaskAwaiterTest
+       {
+               Task task;
+
+               [Test]
+               public void GetResultFaulted ()
+               {
+                       TaskAwaiter awaiter;
+
+                       task = new Task (() => { throw new ApplicationException (); });
+                       awaiter = task.GetAwaiter ();
+                       task.RunSynchronously (TaskScheduler.Current);
+
+
+                       Assert.IsTrue (awaiter.IsCompleted);
+
+                       try {
+                               awaiter.GetResult ();
+                               Assert.Fail ();
+                       } catch (ApplicationException) {
+                       }
+               }
+
+               [Test]
+               public void GetResultNotCompleted ()
+               {
+                       TaskAwaiter awaiter;
+
+                       task = new Task (() => { });
+                       awaiter = task.GetAwaiter ();
+
+                       try {
+                               awaiter.GetResult ();
+                               Assert.Fail ();
+                       } catch (InvalidOperationException) {
+                       }
+               }
+
+               [Test]
+               public void GetResultCanceled ()
+               {
+                       TaskAwaiter awaiter;
+
+                       var token = new CancellationToken (true);
+                       task = new Task (() => { }, token);
+                       awaiter = task.GetAwaiter ();
+
+                       try {
+                               awaiter.GetResult ();
+                               Assert.Fail ();
+                       } catch (TaskCanceledException) {
+                       }
+               }
+       }
+}
\ No newline at end of file
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 917c827aca89c7443b083ef9557d181e095316ed..e0aed6824dc7f19cc5cde6e47b48cfe216f6769d 100644 (file)
@@ -422,6 +422,16 @@ namespace MonoTests.System.Runtime.Serialization
                        return ccu;
                }
 
+               void DoCanImport (bool result, params string [] schemaFiles)
+               {
+                       var ccu = new CodeCompileUnit ();
+                       var xdi = new XsdDataContractImporter (ccu);
+                       var xss = new XmlSchemaSet ();
+                       foreach (var schemaFile in schemaFiles)
+                               xss.Add (null, schemaFile);
+                       Assert.AreEqual (result, xdi.CanImport (xss));
+               }
+
                string GenerateCode (CodeCompileUnit ccu)
                {
                        var sw = new StringWriter ();
@@ -690,6 +700,12 @@ namespace MonoTests.System.Runtime.Serialization
                        DoImport (true, "Test/Resources/Schemas/ns34.xsd", "Test/Resources/Schemas/ns34_2.xsd");
                }
 
+               [Test]
+               public void CanImportTestX34 ()
+               {
+                       DoCanImport (false, "Test/Resources/Schemas/ns34.xsd", "Test/Resources/Schemas/ns34_2.xsd");
+               }
+
                /* Helper methods */
                private void CheckDC (CodeTypeDeclaration type, string name, Dictionary<string, string> members, string msg)
                {
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 bc5610647f7a593215723b1e14f687e9c5bad4df..5b4b839bbc8525cb9681ff2d8c3f41e521564e47 100644 (file)
@@ -116,7 +116,7 @@ namespace System.ServiceModel.Description
                        }
                }
 
-               WsdlImporter importer;
+               internal WsdlImporter importer;
                WsdlContractConversionContext context;
 
                internal XmlSchemaSet schema_set_in_use;
@@ -207,7 +207,8 @@ namespace System.ServiceModel.Description
                                                ResolveType (part.Type, parts, body.WrapperNamespace);
                                        }
                                }
-                               //FIXME: non-parameters?
+                               else
+                                       throw new InvalidOperationException ("Only 'parameters' element in message part is supported"); // this should have been rejected by CanImportOperation().
                        }
                }
 
@@ -233,8 +234,7 @@ namespace System.ServiceModel.Description
                {
                        XmlSchemaElement element = (XmlSchemaElement) schema_set_in_use.GlobalElements [qname];
                        if (element == null)
-                               //FIXME: What to do here?
-                               throw new Exception ("Could not resolve : " + qname.ToString ());
+                               throw new InvalidOperationException ("Could not resolve : " + qname.ToString ()); // this should have been rejected by CanImportOperation().
 
                        var ct = element.ElementSchemaType as XmlSchemaComplexType;
                        if (ct == null) // simple type
@@ -263,7 +263,7 @@ namespace System.ServiceModel.Description
                        part.DataContractImporter = dc_importer;
                        if (dc_importer.CanImport (schema_set_in_use, elem)) {
                                var typeQName = dc_importer.Import (schema_set_in_use, elem);
-                               part.CodeTypeReference = dc_importer.GetCodeTypeReference (typeQName);
+                               part.CodeTypeReference = dc_importer.GetCodeTypeReference (elem.ElementSchemaType.QualifiedName, elem);
                        }
                        return part;
                }
@@ -279,11 +279,32 @@ namespace System.ServiceModel.Description
                        throw new NotImplementedException ();
                }
 
+               Message FindMessage (OperationMessage om)
+               {
+                       foreach (WSDL sd in importer.WsdlDocuments)
+                               if (sd.TargetNamespace == om.Message.Namespace)
+                                       foreach (Message msg in sd.Messages)
+                                               if (msg.Name == om.Message.Name)
+                                                       return msg;
+                       return null;
+               }
+
                protected override bool CanImportOperation (PortType portType, Operation op)
                {
-                       foreach (OperationMessage om in op.Messages)
-                               if (!dc_importer.CanImport (schema_set_in_use, om.Message))
+                       foreach (OperationMessage om in op.Messages) {
+                               var msg = FindMessage (om);
+                               if (msg == null)
                                        return false;
+                               foreach (MessagePart part in msg.Parts) {
+                                       if (part.Name == "parameters" && !part.Element.IsEmpty) {
+                                               var xe = schema_set_in_use.GlobalElements [part.Element] as XmlSchemaElement;
+                                               if (xe == null || !dc_importer.CanImport (schema_set_in_use, xe))
+                                                       return false;
+                                       }
+                                       else
+                                               return false;
+                               }
+                       }
                        return true;
                }
                
@@ -326,7 +347,6 @@ namespace System.ServiceModel.Description
                        // FIXME: use of ElementName is a hack!
                        part.CodeTypeReference = new CodeTypeReference (xmm.ElementName);
                        parts.Add (part);
-                       Console.Error.WriteLine ("CodeNamespace {1} in CCU {2} now contains {0} types.", ccu.Namespaces [0].Types.Count, ccu.Namespaces [0].GetHashCode (), ccu.GetHashCode ());
                }
 
                protected override void ResolveType (QName qname, List<MessagePartDescription> parts, string ns)
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 97d603be14e3e2681f6563ca25835c6f2c9367a3..4a309048bfcf9c783fae5e8dbb383658e4ad3089 100644 (file)
@@ -93,6 +93,8 @@ namespace System.ServiceModel.MonoInternal
                {
                        if (runtime == null)
                                throw new ArgumentNullException ("runtime");
+                       if (messageVersion == null)
+                               throw new ArgumentNullException ("messageVersion");
                        this.runtime = runtime;
                        this.remote_address = remoteAddress;
                        if (runtime.Via == null)
@@ -418,6 +420,8 @@ namespace System.ServiceModel.MonoInternal
 
                public T GetProperty<T> () where T : class
                {
+                       if (typeof (T) == typeof (MessageVersion))
+                               return (T) (object) message_version;
                        return OperationChannel.GetProperty<T> ();
                }
 
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 b4946e9b3d9c93d421250decec3f50d838ae99f1..cff0c2ff9012c43d557e9b654692195bc8017fb9 100644 (file)
@@ -30,6 +30,7 @@
 
 using System;
 using System.Configuration;
+using System.ComponentModel;
 
 #if NET_2_0
 
@@ -42,7 +43,8 @@ namespace System.Web.Services.Configuration {
 
                static TypeElement ()
                {
-                       typeProp = new ConfigurationProperty ("type", typeof (Type), null, ConfigurationPropertyOptions.IsKey);
+                       typeProp = new ConfigurationProperty ("type", typeof (Type), null, new TypeTypeConverter(),
+                                                                                                 null, ConfigurationPropertyOptions.IsKey);
                        properties = new ConfigurationPropertyCollection ();
 
                        properties.Add (typeProp);
@@ -64,9 +66,7 @@ namespace System.Web.Services.Configuration {
                {
                }
 
-#if notyet
-               [TypeConverter (typeof (TypeAndNameConverter))]
-#endif
+               [TypeConverter (typeof (TypeTypeConverter))]
                [ConfigurationProperty ("type", Options = ConfigurationPropertyOptions.IsKey)]
                public Type Type {
                        get { return (Type) base [typeProp];}
index fad04ac850ab17773276b112ec379aa9be65037a..b5bb9e5e35ead256ec8b20d8a3dce73e2e080987 100644 (file)
@@ -450,7 +450,7 @@ namespace System.Xml.Serialization
 #if NET_2_0
                internal static Type GetGenericListItemType (Type type)
                {
-                       if (type.IsGenericType && type.GetGenericTypeDefinition () == typeof (IEnumerable<>)) {
+                       if (type.IsGenericType && typeof(IEnumerable).IsAssignableFrom(type.GetGenericTypeDefinition ())) {
                                Type [] gatypes = type.GetGenericArguments ();
                                if (type.GetMethod ("Add", gatypes) != null)
                                        return gatypes [0];
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 6dbbd2ef1233f50d34867a92bb9d202fb187e0cc..751242425ccbb4a706dc2bd24c6d8c464b7cf5ae 100644 (file)
@@ -1635,6 +1635,27 @@ namespace MonoTests.System.XmlSerialization
                        var xs = new XmlSerializer (typeof (Bug704813Type));
                        xs.Serialize (TextWriter.Null, new Bug704813Type ());
                }
+
+               [Test]
+               public void Bug708178Type()
+               {
+                       XmlSerializer xmlSerializer = new XmlSerializer (typeof(Bug708178Type));
+                       Bug708178Type bugType = new Bug708178Type ();
+                       bugType.Foo.Add ("test");
+                       Assert.AreEqual (1, bugType.Foo.Count);
+                
+                       //xml Serialize
+                       TextWriter WriteFileStream = new StreamWriter (@"Bug708178Type.xml", false);
+                       xmlSerializer.Serialize (WriteFileStream, bugType);
+                       WriteFileStream.Close ();
+                
+                       //xml Deserialize
+                       FileStream ReadFileStream = new FileStream (@"Bug708178Type.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
+                       Bug708178Type bugTypeReload = (Bug708178Type)xmlSerializer.Deserialize (ReadFileStream);
+                
+                       //should have deserialized the relationship
+                       Assert.AreEqual(1, bugTypeReload.Foo.Count);
+              }
 #endif
 
                public class Employee : IXmlSerializable
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 27cf617ba3e9b01ac96f4b6ef9e81e6ee0f941d3..f478076c4fe18a8387201f5aec6b72ee085ef071 100644 (file)
@@ -968,6 +968,16 @@ namespace MonoTests.System.Xml.TestClasses
                }
        }
 
+       public class Bug708178Type
+       {
+               List<string> foo = new List<string> ();
+
+               [XmlArray("Foo"), XmlArrayItem("Foo", typeof(string))]
+               public List<string> Foo {
+                       get { return foo; }
+               }                
+       }
+
        [XmlRoot("root")]
        public class ExplicitlyOrderedMembersType1
        {
@@ -1007,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 a953e83a31c4a61d7c8efca7423dced952bf44c6..823063b5624b2854e829d362c09c5f3b5b7b1701 100644 (file)
@@ -23,6 +23,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Runtime.InteropServices;
 
 namespace System {
@@ -35,6 +36,9 @@ namespace System {
                
                public static bool IsMacOS {
                        get {
+                               if (Environment.OSVersion.Platform != PlatformID.Unix)
+                                       return false;
+
                                if (!checkedIsMacOS) {
                                        IntPtr buf = Marshal.AllocHGlobal (8192);
                                        if (uname (buf) == 0) {
index 1068b833e021d8e5d3b08d21421feba00b4a67e4..0bd0c8fadbb6a717314700365b8e71e3e75eb918 100644 (file)
@@ -66,7 +66,9 @@ namespace System.Windows.Threading {
                                long repeat_interval = interval;
                                if (repeat_interval == 0)
                                        repeat_interval = 1;
-                               timer = new Timer (new TimerCallback (timer_tick), null, interval, repeat_interval);
+                               timer = new Timer (new TimerCallback (timer_tick),
+                                                       null, new TimeSpan (interval), 
+                                                       new TimeSpan (repeat_interval));
                        }
                }
 
@@ -108,7 +110,8 @@ namespace System.Windows.Threading {
                                interval = value.Ticks;
                                
                                if (timer != null)
-                                       timer.Change (interval, interval);
+                                       timer.Change (new TimeSpan (interval),
+                                                       new TimeSpan (interval));
                        }
                }
 
diff --git a/mcs/class/WindowsBase/Test/System.Windows.Threading/DispatcherTimerTest.cs b/mcs/class/WindowsBase/Test/System.Windows.Threading/DispatcherTimerTest.cs
new file mode 100644 (file)
index 0000000..fc60260
--- /dev/null
@@ -0,0 +1,31 @@
+//
+// Tests for System.Windows.Threading.DispatcherTimer
+//
+// Author:
+//    Konrad M. Kruczynski
+//
+
+using NUnit.Framework;
+using System;
+using System.Windows.Threading;
+
+namespace MonoTests.System.Windows.Threading
+{
+
+       [TestFixture]
+       public class DispatcherTimerTest {
+
+               [Test]
+               public void IntervalSettingTest ()
+               {
+                       var timer = new DispatcherTimer ();
+                       var second = new TimeSpan (0, 0, 0, 1);
+                       timer.Interval = second;
+                       var timerInterval = timer.Interval;
+                       Assert.AreEqual (second, timerInterval,
+                               "Interval given to timer was not preserved.");
+               }
+
+       }
+}
+
index c8b61bd120099a499b27f8918709d831add728a4..437fef32ef8023c4c6cd3bbb10ad9cb84f6595ff 100644 (file)
@@ -41,3 +41,4 @@ System.Windows.Markup/MarkupExtensionReturnTypeAttributeTest.cs
 System.Windows.Markup/ValueSerializerTest.cs
 System.Windows.Media/MatrixTest.cs
 System.Windows.Threading/DispatcherTest.cs
+System.Windows.Threading/DispatcherTimerTest.cs
\ No newline at end of file
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 15f1fcc0c05dfa9328968de1633aed0b617f57f0..5e7e8b740f9cb06789043a0b9983a6102777ec29 100644 (file)
@@ -51,8 +51,9 @@ namespace System.Threading.Tasks
 
                static int GetBestWorkerNumber (int from, int to, ParallelOptions options, out int step)
                {
-                       int num = Math.Min (GetBestWorkerNumber (options.TaskScheduler),
-                                           options != null && options.MaxDegreeOfParallelism != -1 ? options.MaxDegreeOfParallelism : int.MaxValue);
+                       int num = GetBestWorkerNumber(options.TaskScheduler);
+                       if (options != null && options.MaxDegreeOfParallelism != -1)
+                               num = options.MaxDegreeOfParallelism;
                        // Integer range that each task process
                        if ((step = (to - from) / num) < 5) {
                                step = 5;
index 7ddc573ada64e33c2ad5aef6eee3d2df6549ac8a..8459a8a30c8269273d73bd3f261d01bbb881f857 100644 (file)
@@ -149,6 +149,8 @@ namespace System.Threading.Tasks
                
                public void Start (TaskScheduler scheduler)
                {
+                       if (status >= TaskStatus.WaitingToRun)
+                               throw new InvalidOperationException ("The Task is not in a valid state to be started.");
                        SetupScheduler (scheduler);
                        Schedule ();
                }
index de70bff0393c871182b233a312255c16d156f81f..329c849c82a2fb694272accc47349f8b476bc6e6 100644 (file)
@@ -35,18 +35,22 @@ namespace System
        [System.Diagnostics.DebuggerDisplay ("Count = {InnerExceptions.Count}")]
        public class AggregateException : Exception
        {
-               List<Exception> innerExceptions;
+               List<Exception> innerExceptions = new List<Exception> ();
+               const string defaultMessage = "One or more errors occured";
                
-               public AggregateException (): base()
+               public AggregateException () : base (defaultMessage)
                {
                }
                
-               public AggregateException (string message): base (message, null)
+               public AggregateException (string message): base (message)
                {
                }
                
                public AggregateException (string message, Exception innerException): base (message, innerException)
                {
+                       if (innerException == null)
+                               throw new ArgumentNullException ("innerException");
+                       innerExceptions.Add (innerException);
                }
                
                protected AggregateException (SerializationInfo info, StreamingContext context)
@@ -60,19 +64,25 @@ namespace System
                }
                
                public AggregateException (string message, params Exception[] innerExceptions)
-                       : this (message, (IEnumerable<Exception>)innerExceptions)
+                       : base (message, innerExceptions == null || innerExceptions.Length == 0 ? null : innerExceptions[0])
                {
+                       if (innerExceptions == null)
+                               throw new ArgumentNullException ("innerExceptions");
+                       foreach (var exception in innerExceptions)
+                               if (exception == null)
+                                       throw new ArgumentException ("One of the inner exception is null", "innerExceptions");
+
+                       this.innerExceptions.AddRange (innerExceptions);
                }
                
                public AggregateException (IEnumerable<Exception> innerExceptions)
-                       : this (string.Empty, innerExceptions)
+                       : this (defaultMessage, innerExceptions)
                {
                }
                
                public AggregateException (string message, IEnumerable<Exception> innerExceptions)
-                       : base(GetFormattedMessage(message, innerExceptions))
+                       : this (message, new List<Exception> (innerExceptions).ToArray ())
                {
-                       this.innerExceptions = new List<Exception> (innerExceptions);
                }
                
                public AggregateException Flatten ()
@@ -124,7 +134,18 @@ namespace System
                
                public override string ToString ()
                {
-                       return this.Message;
+                       System.Text.StringBuilder finalMessage = new System.Text.StringBuilder (base.ToString ());
+
+                       int currentIndex = -1;
+                       foreach (Exception e in innerExceptions) {
+                               finalMessage.Append (Environment.NewLine);
+                               finalMessage.Append (" --> (Inner exception ");
+                               finalMessage.Append (++currentIndex);
+                               finalMessage.Append (") ");
+                               finalMessage.Append (e.ToString ());
+                               finalMessage.Append (Environment.NewLine);
+                       }
+                       return finalMessage.ToString ();
                }
 
                public override Exception GetBaseException ()
@@ -136,22 +157,6 @@ namespace System
                {
                        throw new NotImplementedException ();
                }
-               
-               static string GetFormattedMessage (string customMessage, IEnumerable<Exception> inner)
-               {
-                       const string baseMessage = "Exception(s) occurred : {0}.";
-                       
-                       System.Text.StringBuilder finalMessage
-                               = new System.Text.StringBuilder (string.Format (baseMessage, customMessage));
-                       foreach (Exception e in inner) {
-                               finalMessage.Append (Environment.NewLine);
-                               finalMessage.Append ("[ ");
-                               finalMessage.Append (e.ToString ());
-                               finalMessage.Append (" ]");
-                               finalMessage.Append (Environment.NewLine);
-                       }
-                       return finalMessage.ToString ();
-               }
        }
 }
 #endif
index 523a4ad13f001f909d4247e63902bd2ef21287ac..49ce4a02257cee8f9b1d047e592f812660cae372 100644 (file)
@@ -85,6 +85,36 @@ namespace MonoTests.System.Threading.Tasks
                                Assert.AreEqual (101, t3.Result);
                   }, 50);
                }
+
+               [Test]
+               public void FaultedFutureTest ()
+               {
+                       var thrown = new ApplicationException ();
+                       var f = Task<int>.Factory.StartNew (() => { throw thrown; return 42; });
+                       AggregateException ex = null;
+                       try {
+                               f.Wait ();
+                       } catch (AggregateException e) {
+                               ex = e;
+                       }
+
+                       Assert.IsNotNull (ex);
+                       Assert.AreEqual (thrown, ex.InnerException);
+                       Assert.AreEqual (thrown, f.Exception.InnerException);
+                       Assert.AreEqual (TaskStatus.Faulted, f.Status);
+
+                       ex = null;
+                       try {
+                               var result = f.Result;
+                       } catch (AggregateException e) {
+                               ex = e;
+                       }
+
+                       Assert.IsNotNull (ex);
+                       Assert.AreEqual (TaskStatus.Faulted, f.Status);
+                       Assert.AreEqual (thrown, f.Exception.InnerException);
+                       Assert.AreEqual (thrown, ex.InnerException);
+               }
        }
 }
 #endif
index 1a92ce72d16f85c1ebbfd8715592f13cb5fb0984..8dd7db5eca3050061f46b9d3ae29269bd41f65ef 100644 (file)
@@ -120,6 +120,38 @@ namespace MonoTests.System.Threading.Tasks
                        Assert.AreEqual (TaskStatus.RanToCompletion, t.Status, "#2");
                        Assert.IsTrue (result);
                }
+
+               [Test]
+               public void FaultedFutureTest ()
+               {
+                       var thrown = new ApplicationException ();
+                       var source = new TaskCompletionSource<int> ();
+                       source.TrySetException (thrown);
+                       var f = source.Task;
+                       AggregateException ex = null;
+                       try {
+                               f.Wait ();
+                       } catch (AggregateException e) {
+                               ex = e;
+                       }
+
+                       Assert.IsNotNull (ex);
+                       Assert.AreEqual (thrown, ex.InnerException);
+                       Assert.AreEqual (thrown, f.Exception.InnerException);
+                       Assert.AreEqual (TaskStatus.Faulted, f.Status);
+
+                       ex = null;
+                       try {
+                               var result = f.Result;
+                       } catch (AggregateException e) {
+                               ex = e;
+                       }
+
+                       Assert.IsNotNull (ex);
+                       Assert.AreEqual (TaskStatus.Faulted, f.Status);
+                       Assert.AreEqual (thrown, f.Exception.InnerException);
+                       Assert.AreEqual (thrown, ex.InnerException);
+               }
        }
 }
 #endif
index 11971889e02f8d0c1982816768efebbbe7befbd2..3909fa5cd2f9a4bc66e1fa40d6edf8b0a6ca4582 100644 (file)
@@ -276,6 +276,33 @@ namespace MonoTests.System.Threading.Tasks
 
                        Assert.AreEqual (1, val);
                }
+
+               [Test]
+               public void UnobservedExceptionOnFinalizerThreadTest ()
+               {
+                       bool wasCalled = false;
+                       TaskScheduler.UnobservedTaskException += (o, args) => {
+                               wasCalled = true;
+                               args.SetObserved ();
+                       };
+                       var inner = new ApplicationException ();
+                       Task.Factory.StartNew (() => { throw inner; });
+                       Thread.Sleep (1000);
+                       GC.Collect ();
+                       Thread.Sleep (1000);
+                       GC.WaitForPendingFinalizers ();
+
+                       Assert.IsTrue (wasCalled);
+               }
+
+               [Test, ExpectedException (typeof (InvalidOperationException))]
+               public void StartFinishedTaskTest ()
+               {
+                       var t = Task.Factory.StartNew (delegate () { });
+                       t.Wait ();
+
+                       t.Start ();
+               }
        }
 }
 #endif
index fbab26969d42576505cc0151daa205b7fde27158..9e6ee563c48c335ecb52eefdd109c219746de7db 100644 (file)
 using System;
 using System.Linq;
 using System.Threading;
+using System.Collections.Generic;
 
 using NUnit;
 using NUnit.Core;
 using NUnit.Framework;
 
-namespace ParallelFxTests
+namespace MonoTests.System
 {
-       
        [TestFixture()]
-       public class AggregateExceptionTests
+       public class AggregateExceptionTest
        {
                AggregateException e;
                
@@ -44,6 +44,22 @@ namespace ParallelFxTests
                {
                        e = new AggregateException(new Exception("foo"), new AggregateException(new Exception("bar"), new Exception("foobar")));
                }
+
+               [Test]
+               public void SimpleInnerExceptionTestCase ()
+               {
+                       var message = "Foo";
+                       var inner = new ApplicationException (message);
+                       var ex = new AggregateException (inner);
+
+                       Assert.IsNotNull (ex.InnerException);
+                       Assert.IsNotNull (ex.InnerExceptions);
+
+                       Assert.AreEqual (inner, ex.InnerException);
+                       Assert.AreEqual (1, ex.InnerExceptions.Count);
+                       Assert.AreEqual (inner, ex.InnerExceptions[0]);
+                       Assert.AreEqual (message, ex.InnerException.Message);
+               }
                
                [TestAttribute]
                public void FlattenTestCase()
@@ -53,6 +69,32 @@ namespace ParallelFxTests
                        Assert.AreEqual(3, ex.InnerExceptions.Count, "#1");
                        Assert.AreEqual(3, ex.InnerExceptions.Where((exception) => !(exception is AggregateException)).Count(), "#2");
                }
+
+               [Test, ExpectedException (typeof (ArgumentException))]
+               public void InitializationWithNullInnerValuesTest ()
+               {
+                       var foo = new AggregateException (new Exception[] { new Exception (), null, new ApplicationException ()});
+               }
+
+               [Test]
+               public void InitializationWithNullValuesTest ()
+               {
+                       Throws (typeof (ArgumentNullException), () => new AggregateException ((IEnumerable<Exception>)null));
+                       Throws (typeof (ArgumentNullException), () => new AggregateException ((Exception[])null));
+               }
+
+               static void Throws (Type t, Action action)
+               {
+                       Exception e = null;
+                       try {
+                               action ();
+                       } catch (Exception ex) {
+                               e = ex;
+                       }
+
+                       if (e == null || e.GetType () != t)
+                               Assert.Fail ();
+               }
        }
 }
 #endif
diff --git a/mcs/errors/cs0060-9.cs b/mcs/errors/cs0060-9.cs
new file mode 100644 (file)
index 0000000..1096ccb
--- /dev/null
@@ -0,0 +1,13 @@
+// CS0060: Inconsistent accessibility: base class `System.Collections.Generic.List<Foo<T>.Bar>' is less accessible than class `Foo<T>'
+// Line: 7
+
+using System;
+using System.Collections.Generic;
+
+public class Foo<T> : List<Foo<T>.Bar>
+{
+       class Bar
+       {
+       }
+}
+
diff --git a/mcs/errors/cs0201-8.cs b/mcs/errors/cs0201-8.cs
new file mode 100644 (file)
index 0000000..828ebb7
--- /dev/null
@@ -0,0 +1,14 @@
+// CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement
+// Line: 11
+// Compiler options: -langversion:future
+
+using System;
+using System.Threading.Tasks;
+
+class C
+{
+       async Task<int> Test ()
+       {
+               Func<int> r = await Task.Factory.StartNew (() => () => 1);
+       }
+}
index 2aff1fa778361a537fa44b490bf9ea8af7f295a8..03c8851a313bc843b7a0b904af548b987870ce53 100644 (file)
@@ -76,7 +76,7 @@
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <ClCompile>\r
-      <PreprocessorDefinitions>SKEL_DIRECTORY=.;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>SKEL_DIRECTORY=".";%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
       <PrecompiledHeader>\r
       </PrecompiledHeader>\r
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 020c842755bf3d1c86cf09fa865cb1e7d15db426..06046974038d004d5f04e00c49dec4faa9e64be8 100644 (file)
@@ -198,7 +198,7 @@ namespace Mono.CSharp {
                        return ImplicitReferenceConversionExists (expr_type, target_type, true);
                }
 
-               static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSpec target_type, bool refOnlyTypeParameter)
+               public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSpec target_type, bool refOnlyTypeParameter)
                {
                        // It's here only to speed things up
                        if (target_type.IsStruct)
index 5fdf8480a3eb3a1106c1db2bc040b2aa5b43aeeb..bcc4701dfb6ac889d67ef05c8af23100d519395a 100644 (file)
@@ -519,22 +519,33 @@ namespace Mono.CSharp {
                        if (IsSideEffectFree)
                                return this;
 
+                       bool needs_temporary = ContainsEmitWithAwait ();
+                       if (!needs_temporary)
+                               ec.EmitThis ();
+
                        // Emit original code
                        EmitToFieldSource (ec);
 
-                       // Create temporary local (we cannot load this before Emit)
-                       var temp = ec.GetTemporaryLocal (type);
-                       ec.Emit (OpCodes.Stloc, temp);
-
                        //
-                       // Store the result to temporary field
+                       // Store the result to temporary field when we
+                       // cannot load this directly
                        //
                        var field = ec.GetTemporaryField (type);
-                       ec.EmitThis ();
-                       ec.Emit (OpCodes.Ldloc, temp);
-                       field.EmitAssignFromStack (ec);
+                       if (needs_temporary) {
+                               //
+                               // Create temporary local (we cannot load this before Emit)
+                               //
+                               var temp = ec.GetTemporaryLocal (type);
+                               ec.Emit (OpCodes.Stloc, temp);
 
-                       ec.FreeTemporaryLocal (temp, type);
+                               ec.EmitThis ();
+                               ec.Emit (OpCodes.Ldloc, temp);
+                               field.EmitAssignFromStack (ec);
+
+                               ec.FreeTemporaryLocal (temp, type);
+                       } else {
+                               field.EmitAssignFromStack (ec);
+                       }
 
                        return field;
                }
@@ -4177,9 +4188,11 @@ namespace Mono.CSharp {
                                                //
                                                // Indentity, implicit reference or boxing conversion must exist for the extension parameter
                                                //
+                                               // LAMESPEC: or implicit type parameter conversion
+                                               //
                                                var at = a.Type;
                                                if (at == pt || TypeSpecComparer.IsEqual (at, pt) ||
-                                                       Convert.ImplicitReferenceConversionExists (at, pt) ||
+                                                       Convert.ImplicitReferenceConversionExists (at, pt, false) ||
                                                        Convert.ImplicitBoxingConversion (null, at, pt) != null) {
                                                        score = 0;
                                                        continue;
index 1b64225dcb4d555de23aacb1976585b5e076e988..0d02836d24a521615472b3376d78c7d03560a3fa 100644 (file)
@@ -1481,11 +1481,22 @@ namespace Mono.CSharp
                                                return CreateConstantResult (ec, true);
                                        }
                                } else {
-                               //      if (InflatedTypeSpec.ContainsTypeParameter (d))
-                               //              return this;
+                                       if (Convert.ImplicitReferenceConversionExists (d, t)) {
+                                               //
+                                               // Do not optimize for imported type
+                                               //
+                                               if (d.MemberDefinition.IsImported && d.BuiltinType != BuiltinTypeSpec.Type.None)
+                                                       return this;
+                                               
+                                               //
+                                               // Turn is check into simple null check for implicitly convertible reference types
+                                               //
+                                               return ReducedExpression.Create (
+                                                       new Binary (Binary.Operator.Inequality, expr, new NullLiteral (loc), loc).Resolve (ec),
+                                                       this).Resolve (ec);
+                                       }
 
-                                       if (Convert.ImplicitReferenceConversionExists (d, t) ||
-                                               Convert.ExplicitReferenceConversionExists (d, t)) {
+                                       if (Convert.ExplicitReferenceConversionExists (d, t)) {
                                                return this;
                                        }
                                }
@@ -7842,8 +7853,14 @@ namespace Mono.CSharp
                                if (nested.IsAccessible (rc))
                                        break;
 
-                               // Keep looking after inaccessible candidate
-                               expr_type = nested.DeclaringType.BaseType;
+                               //
+                               // Keep looking after inaccessible candidate but only if
+                               // we are not in same context as the definition itself
+                               //
+                               if (expr_type.MemberDefinition == rc.CurrentMemberDefinition)
+                                       break;
+
+                               expr_type = expr_type.BaseType;
                        }
                        
                        TypeExpr texpr;
@@ -8278,7 +8295,7 @@ namespace Mono.CSharp
                        if (prepared) {
                                ec.EmitLoadFromPtr (type);
                        } else {
-                               if (!has_await_args.HasValue && ea.Arguments.ContainsEmitWithAwait ()) {
+                               if (!has_await_args.HasValue && ec.HasSet (BuilderContext.Options.AsyncBody) && ea.Arguments.ContainsEmitWithAwait ()) {
                                        LoadInstanceAndArguments (ec, false, true);
                                }
 
@@ -8785,6 +8802,19 @@ namespace Mono.CSharp
                }
        }
        
+       sealed class EmptyAwaitExpression : EmptyExpression
+       {
+               public EmptyAwaitExpression (TypeSpec type)
+                       : base (type)
+               {
+               }
+               
+               public override bool ContainsEmitWithAwait ()
+               {
+                       return true;
+               }
+       }
+       
        //
        // Empty statement expression
        //
@@ -9679,7 +9709,7 @@ namespace Mono.CSharp
                                }
 
                                if (ec.HasSet (BuilderContext.Options.AsyncBody) && initializers.ContainsEmitWithAwait ()) {
-                                       instance = new EmptyExpression (Type).EmitToField (ec) as IMemoryLocation;
+                                       instance = new EmptyAwaitExpression (Type).EmitToField (ec) as IMemoryLocation;
                                } else {
                                        temp = new LocalTemporary (type);
                                        instance = temp;
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 3556924babaa028ef3aabd9ae7a1b7a0dae19157..3d7391732233c668ec758da2076848c5b695db21 100644 (file)
@@ -292,6 +292,8 @@ class Indexer
        public string this [params string[] i] { get { return string.Concat (i); } }
 }
 
+class A { }
+class B : A { }
 
 // TODO: Add more nullable tests, follow AddTest pattern.
 
@@ -2689,6 +2691,13 @@ class Tester
                Assert (false, e3.Compile ().Invoke (null));
        }
        
+       void TypeIsTest_4 ()
+       {
+               Expression<Func<B, bool>> e = l => l is A;
+               AssertNodeType (e, ExpressionType.TypeIs);
+               Assert (false, e.Compile ().Invoke (null));
+       }
+       
        void TypeIsTest_5 ()
        {
                Expression<Func<bool>> e5 = () => 1 is int;
diff --git a/mcs/tests/gtest-exmethod-41.cs b/mcs/tests/gtest-exmethod-41.cs
new file mode 100644 (file)
index 0000000..feaf06f
--- /dev/null
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using System;
+
+static class TT
+{
+       static void Method<T> (this IEnumerable<T> e, Func<T, bool> f)
+       {
+       }
+       
+       public static void Test<U> (U u) where U : IList<string>
+       {
+               u.Method (l => l != null);
+       }
+}
+
+
+class A
+{
+       public static void Main ()
+       {
+               TT.Test (new string[0]);
+       }
+}
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..3848b77
--- /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 1d382da456affc969e2e85d2055b27ba707f584d..c2ddc5b8c7b42024f6f3bc16b188812d6ab8f54d 100644 (file)
         <size>113</size>
       </method>
     </type>
+    <type name="A">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="B">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester">
+      <method name="Void TypeIsTest_4()">
+        <size>80</size>
+      </method>
+    </type>
   </test>
   <test name="gtest-etree-02.cs">
     <type name="M">
       </method>
     </type>
   </test>
+  <test name="gtest-exmethod-41.cs">
+    <type name="TT">
+      <method name="Void Method[T](IEnumerable`1, System.Func`2[T,System.Boolean])">
+        <size>1</size>
+      </method>
+      <method name="Void Test[U](U)">
+        <size>24</size>
+      </method>
+      <method name="Boolean &lt;Test`1&gt;m__0[U](System.String)">
+        <size>8</size>
+      </method>
+    </type>
+    <type name="A">
+      <method name="Void Main()">
+        <size>12</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="gtest-fixedbuffer-01.cs">
     <type name="TestNew">
       <method name="Void SetTest()">
     </type>
     <type name="C">
       <method name="Int32 Main()">
-        <size>144</size>
+        <size>114</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
         <size>30</size>
       </method>
       <method name="Int32 test19()">
-        <size>39</size>
+        <size>36</size>
       </method>
       <method name="Int32 test20()">
         <size>12</size>
         <size>9</size>
       </method>
       <method name="Int32 Main()">
-        <size>139</size>
+        <size>134</size>
       </method>
     </type>
     <type name="Blah+MyDelegate">
         <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="Void Main()">
-        <size>47</size>
+        <size>37</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>221</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>288</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>268</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>439</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>271</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>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Int32] AssignTest_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_2()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_3()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_1()">
         <size>27</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CallTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_3()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CallTest_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_5()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] DelegateInvoke_4()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] EventInvoke_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_1()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_3()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_4()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_5()">
-        <size>34</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] PropertyTest_1()">
         <size>34</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_6()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_7()">
-        <size>34</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Int32] PropertyTest_3()">
         <size>34</size>
       </method>
       </method>
     </type>
     <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewTest_1()">
-        <size>27</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewTest_2()">
-        <size>27</size>
-      </method>
       <method name="System.Threading.Tasks.Task`1[System.Int32] NewInitTest_1()">
         <size>27</size>
       </method>
       </method>
     </type>
     <type name="Tester">
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_1()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_2()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_3()">
+        <size>27</size>
+      </method>
+    </type>
+    <type name="S">
+      <method name="S op_Addition(S, S)">
+        <size>32</size>
+      </method>
+    </type>
+    <type name="Base">
+      <method name="T[] CreateArray[T](Int32)">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="Tester">
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_6()">
+        <size>27</size>
+      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_1()">
         <size>27</size>
       </method>
       <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_6()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CastTest_1()">
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_7()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] CastTest_2()">
-        <size>34</size>
-      </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IsTest_1()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_8()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_1()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_9()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_2()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] AssignTest_1()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] AssignTest_2()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_3()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] AssignTest_3()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_1()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_1()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] AssignTest_2()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_2()">
         <size>27</size>
       </method>
       <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_3()">
       <method name="System.Threading.Tasks.Task`1[System.Int32] BinaryTest_4()">
         <size>27</size>
       </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_1()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] CallTest_2()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_3()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] CallTest_4()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] CallTest_5()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] CastTest_1()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] CastTest_2()">
+        <size>34</size>
+      </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] CoalescingTest_1()">
         <size>27</size>
       </method>
       <method name="System.Threading.Tasks.Task`1[System.Boolean] CoalescingTest_2()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] IsTest_2()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_1()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_2()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_2()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_3()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] UnaryTest_3()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] ConditionalTest_4()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] ArrayAccessTest_7()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] DelegateInvoke_4()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_8()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] EventInvoke_1()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] FieldTest_1()">
         <size>27</size>
       </method>
-    </type>
-    <type name="S">
-      <method name="S op_Addition(S, S)">
-        <size>32</size>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_1()">
+        <size>34</size>
       </method>
-    </type>
-    <type name="Base">
-      <method name="T[] CreateArray[T](Int32)">
-        <size>7</size>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_2()">
+        <size>34</size>
       </method>
-    </type>
-    <type name="Tester">
-      <method name="System.Threading.Tasks.Task`1[System.Int32] ArrayAccessTest_9()">
+      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_3()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_4()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_5()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Int32] IndexerTest_6()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] IndexerTest_7()">
+        <size>34</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] IsTest_1()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] FieldTest_1()">
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] IsTest_2()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewArrayInitTest_6()">
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_1()">
         <size>27</size>
       </method>
-      <method name="System.Threading.Tasks.Task`1[System.Int32] AssignTest_3()">
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_2()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] LogicalUserOperator_3()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewTest_1()">
+        <size>27</size>
+      </method>
+      <method name="System.Threading.Tasks.Task`1[System.Boolean] NewTest_2()">
         <size>27</size>
       </method>
     </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>1086</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>396</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>396</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>657</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>1209</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>525</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>381</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>491</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>224</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>275</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>272</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>636</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>313</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>213</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 607c400e68264c127984ce33208bab1ab884dc79..95fc99d61f6f0e5f414dd3e708ab2cb192bb674d 100644 (file)
@@ -1276,7 +1276,12 @@ mono_gc_parse_environment_string_extract_number (const char *str, glong *out)
        gboolean is_suffix = FALSE;
        char suffix;
 
-       switch (str [len - 1]) {
+       if (!len)
+               return FALSE;
+
+       suffix = str [len - 1];
+
+       switch (suffix) {
                case 'g':
                case 'G':
                        shift += 10;
@@ -1287,10 +1292,11 @@ mono_gc_parse_environment_string_extract_number (const char *str, glong *out)
                case 'K':
                        shift += 10;
                        is_suffix = TRUE;
-                       suffix = str [len - 1];
                        break;
                default:
-                       return FALSE;
+                       if (!isdigit (suffix))
+                               return FALSE;
+                       break;
        }
 
        errno = 0;
index ebb15517391bbd602d78cebe63fd55eae25277a5..24b777153a91cd730a5fd4551f2180e0e95c6799 100644 (file)
@@ -32,7 +32,11 @@ static gboolean wsq_tlskey_inited = FALSE;
 void
 mono_wsq_init ()
 {
+       if (wsq_tlskey_inited)
+               return;
+
        mono_native_tls_alloc (wsq_tlskey, NULL);
+       wsq_tlskey_inited = TRUE;
 }
 
 void
index 91242d0ea067034ea7e64cb0efc885c5473ead43..158c269d53ca7edb8072cb753fbfe9225904f5bc 100644 (file)
@@ -377,7 +377,7 @@ find_next_card (guint8 *card_data, guint8 *end)
 }
 
 void
-sgen_cardtable_scan_object (char *obj, mword obj_size, guint8 *cards, SgenGrayQueue *queue)
+sgen_cardtable_scan_object (char *obj, mword block_obj_size, guint8 *cards, SgenGrayQueue *queue)
 {
        MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (obj);
        MonoClass *klass = vt->klass;
@@ -394,6 +394,7 @@ sgen_cardtable_scan_object (char *obj, mword obj_size, guint8 *cards, SgenGrayQu
                guint8 *card_data, *card_base;
                guint8 *card_data_end;
                char *obj_start = sgen_card_table_align_pointer (obj);
+               mword obj_size = mono_sgen_par_object_get_size (vt, (MonoObject*)obj);
                char *obj_end = obj + obj_size;
                size_t card_count;
                int extra_idx = 0;
@@ -478,9 +479,9 @@ LOOP_HEAD:
        } else {
                HEAVY_STAT (++bloby_objects);
                if (cards) {
-                       if (sgen_card_table_is_range_marked (cards, (mword)obj, obj_size))
+                       if (sgen_card_table_is_range_marked (cards, (mword)obj, block_obj_size))
                                scan_object_func (obj, queue);
-               } else if (sgen_card_table_region_begin_scanning ((mword)obj, obj_size)) {
+               } else if (sgen_card_table_region_begin_scanning ((mword)obj, block_obj_size)) {
                        scan_object_func (obj, queue);
                }
        }
index 4da8faec2a7916be227fe4433cd6233acaee12b2..7f71162869ad5c7a16c874f07d854f28e654fcf5 100644 (file)
@@ -71,6 +71,9 @@ finalize_in_range (CopyOrMarkObjectFunc copy_func, char *start, char *end, int g
                                if (is_fin_ready) {
                                        char *from;
                                        FinalizeEntry *next;
+                                       /* Make it survive */
+                                       from = entry->object;
+                                       entry->object = copy;
                                        /* remove and put in fin_ready_list */
                                        if (prev)
                                                prev->next = entry->next;
@@ -81,9 +84,6 @@ finalize_in_range (CopyOrMarkObjectFunc copy_func, char *start, char *end, int g
                                        hash_table->num_registered--;
                                        queue_finalization_entry (entry);
                                        bridge_register_finalized_object ((MonoObject*)copy);
-                                       /* Make it survive */
-                                       from = entry->object;
-                                       entry->object = copy;
                                        DEBUG (5, fprintf (gc_debug_file, "Queueing object for finalization: %p (%s) (was at %p) (%d/%d)\n", entry->object, safe_name (entry->object), from, num_ready_finalizers, hash_table->num_registered));
                                        entry = next;
                                        continue;
index 2af9f47988425142fe445b708ad593c067939c0f..2024ec373acd53934afb5cabbf224ed28f6a45c4 100644 (file)
@@ -2040,9 +2040,6 @@ init_user_copy_or_mark_key (void)
 static void
 set_user_copy_or_mark_data (UserCopyOrMarkData *data)
 {
-       static pthread_once_t init_control = PTHREAD_ONCE_INIT;
-       pthread_once (&init_control, init_user_copy_or_mark_key);
-
        pthread_setspecific (user_copy_or_mark_key, data);
 }
 
@@ -5380,7 +5377,7 @@ sgen_thread_unregister (SgenThreadInfo *p)
        }
 #endif
 
-       binary_protocol_thread_unregister ((gpointer)id);
+       binary_protocol_thread_unregister ((gpointer)mono_thread_info_get_tid (p));
        DEBUG (3, fprintf (gc_debug_file, "unregister thread %p (%p)\n", p, (gpointer)mono_thread_info_get_tid (p)));
 
 #if defined(__MACH__)
@@ -5431,12 +5428,6 @@ sgen_thread_attach (SgenThreadInfo *info)
        
        if (gc_callbacks.thread_attach_func && !info->runtime_data)
                info->runtime_data = gc_callbacks.thread_attach_func ();
-
-       /* Need a better place to initialize this */
-       if (!array_fill_vtable && mono_get_root_domain ()) {
-               array_fill_vtable = mono_class_vtable (mono_get_root_domain (), mono_array_class_get (mono_defaults.byte_class, 1));
-       }
-       
 }
 gboolean
 mono_gc_register_thread (void *baseptr)
@@ -5528,6 +5519,8 @@ mono_gc_wbarrier_set_field (MonoObject *obj, gpointer field_ptr, MonoObject* val
                return;
        }
        DEBUG (8, fprintf (gc_debug_file, "Adding remset at %p\n", field_ptr));
+       if (value)
+               binary_protocol_wbarrier (field_ptr, value, value->vtable);
        if (use_cardtable) {
                *(void**)field_ptr = value;
                if (ptr_in_nursery (value))
@@ -5566,6 +5559,8 @@ mono_gc_wbarrier_set_arrayref (MonoArray *arr, gpointer slot_ptr, MonoObject* va
                return;
        }
        DEBUG (8, fprintf (gc_debug_file, "Adding remset at %p\n", slot_ptr));
+       if (value)
+               binary_protocol_wbarrier (slot_ptr, value, value->vtable);
        if (use_cardtable) {
                *(void**)slot_ptr = value;
                if (ptr_in_nursery (value))
@@ -5605,6 +5600,18 @@ mono_gc_wbarrier_arrayref_copy (gpointer dest_ptr, gpointer src_ptr, int count)
                return;
        }
 
+#ifdef SGEN_BINARY_PROTOCOL
+       {
+               int i;
+               for (i = 0; i < count; ++i) {
+                       gpointer dest = (gpointer*)dest_ptr + i;
+                       gpointer obj = *((gpointer*)src_ptr + i);
+                       if (obj)
+                               binary_protocol_wbarrier (dest, obj, (gpointer)LOAD_VTABLE (obj));
+               }
+       }
+#endif
+
        if (use_cardtable) {
                gpointer *dest = dest_ptr;
                gpointer *src = src_ptr;
@@ -5807,15 +5814,43 @@ void mono_gc_wbarrier_value_copy_bitmap (gpointer _dest, gpointer _src, int size
        }
 }
 
+#ifdef SGEN_BINARY_PROTOCOL
+#undef HANDLE_PTR
+#define HANDLE_PTR(ptr,obj) do {                                       \
+               gpointer o = *(gpointer*)(ptr);                         \
+               if ((o)) {                                              \
+                       gpointer d = ((char*)dest) + ((char*)(ptr) - (char*)(obj)); \
+                       binary_protocol_wbarrier (d, o, (gpointer) LOAD_VTABLE (o)); \
+               }                                                       \
+       } while (0)
+
+static void
+scan_object_for_binary_protocol_copy_wbarrier (gpointer dest, char *start, mword desc)
+{
+#define SCAN_OBJECT_NOVTABLE
+#include "sgen-scan-object.h"
+}
+#endif
 
 void
 mono_gc_wbarrier_value_copy (gpointer dest, gpointer src, int count, MonoClass *klass)
 {
        RememberedSet *rs;
-       size_t size = count * mono_class_value_size (klass, NULL);
+       size_t element_size = mono_class_value_size (klass, NULL);
+       size_t size = count * element_size;
        TLAB_ACCESS_INIT;
        HEAVY_STAT (++stat_wbarrier_value_copy);
        g_assert (klass->valuetype);
+#ifdef SGEN_BINARY_PROTOCOL
+       {
+               int i;
+               for (i = 0; i < count; ++i) {
+                       scan_object_for_binary_protocol_copy_wbarrier ((char*)dest + i * element_size,
+                                       (char*)src + i * element_size - sizeof (MonoObject),
+                                       (mword) klass->gc_descr);
+               }
+       }
+#endif
        if (use_cardtable) {
 #ifdef DISABLE_CRITICAL_REGION
                LOCK_GC;
@@ -5844,7 +5879,7 @@ mono_gc_wbarrier_value_copy (gpointer dest, gpointer src, int count, MonoClass *
                        *(rs->store_next++) = (mword)dest | REMSET_VTYPE;
                        *(rs->store_next++) = (mword)klass->gc_descr;
                        *(rs->store_next++) = (mword)count;
-                       *(rs->store_next++) = (mword)size;
+                       *(rs->store_next++) = (mword)element_size;
                        UNLOCK_GC;
                        return;
                }
@@ -5857,7 +5892,7 @@ mono_gc_wbarrier_value_copy (gpointer dest, gpointer src, int count, MonoClass *
                *(rs->store_next++) = (mword)dest | REMSET_VTYPE;
                *(rs->store_next++) = (mword)klass->gc_descr;
                *(rs->store_next++) = (mword)count;
-               *(rs->store_next++) = (mword)size;
+               *(rs->store_next++) = (mword)element_size;
                UNLOCK_GC;
        }
 }
@@ -5879,6 +5914,9 @@ mono_gc_wbarrier_object_copy (MonoObject* obj, MonoObject *src)
        DEBUG (6, fprintf (gc_debug_file, "Adding object remset for %p\n", obj));
        size = mono_object_class (obj)->instance_size;
        LOCK_GC;
+#ifdef SGEN_BINARY_PROTOCOL
+       scan_object_for_binary_protocol_copy_wbarrier (obj, (char*)src, (mword) src->vtable->gc_descr);
+#endif
        /* do not copy the sync state */
        mono_gc_memmove ((char*)obj + sizeof (MonoObject), (char*)src + sizeof (MonoObject),
                        size - sizeof (MonoObject));
@@ -6549,6 +6587,8 @@ mono_gc_base_init (void)
        LOCK_INIT (global_remset_mutex);
        LOCK_INIT (pin_queue_mutex);
 
+       init_user_copy_or_mark_key ();
+
        if ((env = getenv ("MONO_GC_PARAMS"))) {
                opts = g_strsplit (env, ",", -1);
                for (ptr = opts; *ptr; ++ptr) {
@@ -6709,6 +6749,11 @@ mono_gc_base_init (void)
                                                exit (1);
                                        }
 
+                                       if (val < SGEN_MAX_NURSERY_WASTE) {
+                                               fprintf (stderr, "The nursery size must be at least %d bytes.\n", SGEN_MAX_NURSERY_WASTE);
+                                               exit (1);
+                                       }
+
                                        default_nursery_bits = 0;
                                        while (1 << (++ default_nursery_bits) != default_nursery_size)
                                                ;
@@ -6796,6 +6841,8 @@ mono_gc_base_init (void)
                        } else if (g_str_has_prefix (opt, "binary-protocol=")) {
                                char *filename = strchr (opt, '=') + 1;
                                binary_protocol_init (filename);
+                               if (use_cardtable)
+                                       fprintf (stderr, "Warning: Cardtable write barriers will not be binary-protocolled.\n");
 #endif
                        } else {
                                fprintf (stderr, "Invalid format for the MONO_GC_DEBUG env variable: '%s'\n", env);
@@ -7321,7 +7368,6 @@ mono_gc_get_write_barrier (void)
        int i, nursery_check_labels [3];
        int label_no_wb_3, label_no_wb_4, label_need_wb, label_slow_path;
        int buffer_var, buffer_index_var, dummy_var;
-       gboolean use_managed_barrier;
 
 #ifdef HAVE_KW_THREAD
        int stack_end_offset = -1, store_remset_buffer_offset = -1;
@@ -7351,10 +7397,7 @@ mono_gc_get_write_barrier (void)
        mb = mono_mb_new (mono_defaults.object_class, "wbarrier", MONO_WRAPPER_WRITE_BARRIER);
 
 #ifdef MANAGED_WBARRIER
-       use_managed_barrier = TRUE;
-#endif
-
-       if (use_managed_barrier && use_cardtable) {
+       if (use_cardtable) {
                emit_nursery_check (mb, nursery_check_labels);
                /*
                addr = sgen_cardtable + ((address >> CARD_BITS) & CARD_MASK)
@@ -7393,7 +7436,7 @@ mono_gc_get_write_barrier (void)
                                mono_mb_patch_branch (mb, nursery_check_labels [i]);
                }               
                mono_mb_emit_byte (mb, CEE_RET);
-       } else if (use_managed_barrier && mono_runtime_has_tls_get ()) {
+       } else if (mono_runtime_has_tls_get ()) {
                emit_nursery_check (mb, nursery_check_labels);
 
                // if (ptr >= stack_end) goto need_wb;
@@ -7472,13 +7515,14 @@ mono_gc_get_write_barrier (void)
                mono_mb_emit_ldarg (mb, 0);
                mono_mb_emit_icall (mb, mono_gc_wbarrier_generic_nostore);
                mono_mb_emit_byte (mb, CEE_RET);
-       } else {
+       } else
+#endif
+       {
                mono_mb_emit_ldarg (mb, 0);
                mono_mb_emit_icall (mb, mono_gc_wbarrier_generic_nostore);
-               mono_mb_emit_byte (mb, CEE_RET);                
+               mono_mb_emit_byte (mb, CEE_RET);
        }
 
-
        res = mono_mb_create_method (mb, sig, 16);
        mono_mb_free (mb);
 
@@ -7554,6 +7598,24 @@ mono_sgen_get_nursery_clear_policy (void)
 MonoVTable*
 mono_sgen_get_array_fill_vtable (void)
 {
+       if (!array_fill_vtable) {
+               static MonoClass klass;
+               static MonoVTable vtable;
+
+               MonoDomain *domain = mono_get_root_domain ();
+               g_assert (domain);
+
+               klass.element_class = mono_defaults.byte_class;
+               klass.rank = 1;
+               klass.instance_size = sizeof (MonoArray);
+               klass.sizes.element_size = 1;
+
+               vtable.klass = &klass;
+               vtable.gc_descr = NULL;
+               vtable.rank = 1;
+
+               array_fill_vtable = &vtable;
+       }
        return array_fill_vtable;
 }
 
index 542bcd6fcf2d3f32d0d535c6ccbff8818e9b1dba..108021d5eccd2f3c014692ab545db7f0fc24c33d 100644 (file)
@@ -800,7 +800,16 @@ mono_sgen_par_object_get_size (MonoVTable *vtable, MonoObject* o)
        }
 }
 
-#define mono_sgen_safe_object_get_size(o)              mono_sgen_par_object_get_size ((MonoVTable*)SGEN_LOAD_VTABLE ((o)), (o))
+static inline guint
+mono_sgen_safe_object_get_size (MonoObject *obj)
+{
+       char *forwarded;
+
+       if ((forwarded = SGEN_OBJECT_IS_FORWARDED (obj)))
+               obj = (MonoObject*)forwarded;
+
+       return mono_sgen_par_object_get_size ((MonoVTable*)SGEN_LOAD_VTABLE (obj), obj);
+}
 
 const char* mono_sgen_safe_name (void* obj) MONO_INTERNAL;
 
index c18c34860da12c0f8190bf4e752e38a64db6faaf..ac94eead3b38f76c212cb3bf78f6dc00bc22bc00 100644 (file)
 
 #ifndef DISABLE_SOCKETS
 
+#ifdef __APPLE__
+#define __APPLE_USE_RFC_3542
+#endif
+
 #include <glib.h>
 #include <string.h>
 #include <stdlib.h>
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 e9bcfac8bed038f330c4df204e4692c94cd62ebf..398b91181c23c252ba27bede680d9182c1e9518b 100644 (file)
@@ -378,7 +378,7 @@ int_bge_un: len:8
 int_ble: len:8
 int_ble_un: len:8
 
-card_table_wbarrier: src1:a src2:i clob:d len:42
+card_table_wbarrier: src1:a src2:i clob:d len:56
 
 relaxed_nop: len:2
 hard_nop: len:1
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 c25817307f07b2e8c1343b8de1a7da8b5b7e22ac..5185922fa96ce1a1544753eada385a5b7d72b3ff 100644 (file)
@@ -5712,6 +5712,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
 
                        gpointer card_table = mono_gc_get_card_table (&card_table_shift, &card_table_mask);
                        guint64 nursery_start = (guint64)mono_gc_get_nursery (&nursery_shift, &nursery_size);
+                       guint64 shifted_nursery_start = nursery_start >> nursery_shift;
 
                        /*If either point to the stack we can simply avoid the WB. This happens due to
                         * optimizations revealing a stack store that was not visible when op_cardtable was emited.
@@ -5744,7 +5745,19 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        if (value != AMD64_RDX)
                                amd64_mov_reg_reg (code, AMD64_RDX, value, 8);
                        amd64_shift_reg_imm (code, X86_SHR, AMD64_RDX, nursery_shift);
-                       amd64_alu_reg_imm (code, X86_CMP, AMD64_RDX, nursery_start >> nursery_shift);
+                       if (shifted_nursery_start >> 31) {
+                               /*
+                                * The value we need to compare against is 64 bits, so we need
+                                * another spare register.  We use RBX, which we save and
+                                * restore.
+                                */
+                               amd64_mov_membase_reg (code, AMD64_RSP, -8, AMD64_RBX, 8);
+                               amd64_mov_reg_imm (code, AMD64_RBX, shifted_nursery_start);
+                               amd64_alu_reg_reg (code, X86_CMP, AMD64_RDX, AMD64_RBX);
+                               amd64_mov_reg_membase (code, AMD64_RBX, AMD64_RSP, -8, 8);
+                       } else {
+                               amd64_alu_reg_imm (code, X86_CMP, AMD64_RDX, shifted_nursery_start);
+                       }
                        br = code; x86_branch8 (code, X86_CC_NE, -1, FALSE);
                        amd64_mov_reg_reg (code, AMD64_RDX, ptr, 8);
                        amd64_shift_reg_imm (code, X86_SHR, AMD64_RDX, card_table_shift);
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 9e6b383b1d25e3eaf7c74fead3fc2732512b6377..74ed84b9b0d112c3a4a0666e9e5782532aa5e041 100644 (file)
@@ -2730,9 +2730,12 @@ mini_thread_cleanup (MonoInternalThread *thread)
                 *
                 * The current offender is mono_thread_manage which cleanup threads from the outside.
                 */
-               if (thread == mono_thread_internal_current ()) {
-                       mono_set_lmf (NULL);
+               if (thread == mono_thread_internal_current ())
                        mono_set_jit_tls (NULL);
+
+               /* If we attach a thread but never call into managed land, we might never get an lmf.*/
+               if (mono_get_lmf ()) {
+                       mono_set_lmf (NULL);
                        mono_set_lmf_addr (NULL);
                }
 
index 3032de61809e676db04c583958a578ecfe10448c..37809bc947901d73ddd5b5feb537558300331521 100644 (file)
@@ -2,18 +2,27 @@ using System;
 using System.Threading;
 
 class Test {
+       static object monitor;
+
        static int Main ()
        {
+               monitor = new object ();
                AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
                ThreadPool.QueueUserWorkItem ((a) => {
                        throw new Exception ("From the threadpoool");
                        });
+               lock (monitor) {
+                       Monitor.Wait (monitor);
+               }
                Thread.Sleep (1000);
                return 1;
        }
 
        static void OnUnhandledException (object sender, UnhandledExceptionEventArgs e)
        {
+               lock (monitor) {
+                       Monitor.Pulse (monitor);
+               }
                Environment.Exit (0);
        }
 }
index 0b12a809db37a6bf14a5c44c39f7259f4a03795a..c0b7510aa45585b86d167431633a4e60771212dd 100644 (file)
@@ -2,14 +2,20 @@ using System;
 using System.Threading;
 
 class Test {
+       static object monitor;
        static int return_value = 2;
+
        static int Main ()
        {
+               monitor = new object ();
                AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
                WaitCallback wcb = new WaitCallback ((a) => {
                        throw new Exception ("From the threadpoool");
                });
                wcb.BeginInvoke (wcb, OnCBFinished, null);
+               lock (monitor) {
+                       Monitor.Wait (monitor);
+               }
                Thread.Sleep (1000);
                return 1;
        }
@@ -19,6 +25,9 @@ class Test {
                string str = e.ExceptionObject.ToString ();
                if (str.IndexOf ("From the threadpool") != -1)
                        return_value = 3;
+               lock (monitor) {
+                       Monitor.Pulse (monitor);
+               }
                Environment.Exit (return_value);
        }
 
index 17fa29e6dfb31fcaac3cd870a4a3b8b23c8c93fc..58b3a4ac2f5c3c7db2a459aa63384dcbc686d1d9 100644 (file)
@@ -2,13 +2,19 @@ using System;
 using System.Threading;
 
 class Test {
+       static object monitor;
+
        static int Main ()
        {
+               monitor = new object ();
                AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
                WaitCallback wcb = new WaitCallback ((a) => {
                        throw new Exception ("From the threadpoool");
                });
                wcb.BeginInvoke (wcb, OnCBFinished, null);
+               lock (monitor) {
+                       Monitor.Wait (monitor);
+               }
                Thread.Sleep (1000);
                return 1;
        }
@@ -20,6 +26,9 @@ class Test {
 
        static void OnUnhandledException (object sender, UnhandledExceptionEventArgs e)
        {
+               lock (monitor) {
+                       Monitor.Pulse (monitor);
+               }
                Environment.Exit (0);
        }
 }
index da9c354b05140bbe49b29b755c400a16eeb63ee5..1c66ec85311c9863f5e06cb4a8c51981d7b4995f 100644 (file)
@@ -2,14 +2,19 @@ using System;
 using System.Threading;
 
 class Test {
+       static object monitor;
        static int return_value = 2;
        static int Main ()
        {
+               monitor = new object ();
                AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
                WaitCallback wcb = new WaitCallback ((a) => {
                        Thread.CurrentThread.Abort();
                });
                wcb.BeginInvoke (wcb, OnCBFinished, null);
+               lock (monitor) {
+                       Monitor.Wait (monitor);
+               }
                Thread.Sleep (1000);
                return 1;
        }
@@ -19,6 +24,9 @@ class Test {
                string str = e.ExceptionObject.ToString ();
                if (str.IndexOf ("From the threadpool") != -1)
                        return_value = 3;
+               lock (monitor) {
+                       Monitor.Pulse (monitor);
+               }
                Environment.Exit (return_value);
        }
 
index 46d9521c1a63e04182e7f953eae6b5f345e03a38..d49c5d64cc43ef77d9d4b96a67fd1420cffc6aba 100644 (file)
@@ -88,6 +88,8 @@ monoutils_sources = \
        lock-free-queue.h       \
        lock-free-alloc.c       \
        lock-free-alloc.h       \
+       lock-free-array-queue.c \
+       lock-free-array-queue.h \
        mono-linked-list-set.c  \
        mono-linked-list-set.h  \
        mono-threads.c  \
index 90a1779f562dbb686325a333ef88017f6170c9c0..053bee32c6e64b85391aac4825529232b0bfacf4 100644 (file)
@@ -12,6 +12,7 @@
 #include <mono/utils/mono-mmap.h>
 #include <mono/utils/monobitset.h>
 #include <mono/utils/mono-threads.h>
+#include <mono/utils/lock-free-array-queue.h>
 #include <mono/io-layer/io-layer.h>
 
 typedef struct {
@@ -19,24 +20,6 @@ typedef struct {
        MonoHazardousFreeFunc free_func;
 } DelayedFreeItem;
 
-enum {
-       DFE_STATE_FREE,
-       DFE_STATE_USED,
-       DFE_STATE_BUSY
-};
-
-typedef struct {
-       gint32 state;
-       DelayedFreeItem item;
-} DelayedFreeEntry;
-
-typedef struct _DelayedFreeChunk DelayedFreeChunk;
-struct _DelayedFreeChunk {
-       DelayedFreeChunk *next;
-       gint32 num_entries;
-       DelayedFreeEntry entries [MONO_ZERO_LEN_ARRAY];
-};
-
 /* The hazard table */
 #if MONO_SMALL_CONFIG
 #define HAZARD_TABLE_MAX_SIZE  256
@@ -49,8 +32,7 @@ static MonoThreadHazardPointers * volatile hazard_table = NULL;
 
 /* The table where we keep pointers to blocks to be freed but that
    have to wait because they're guarded by a hazard pointer. */
-static volatile gint32 num_used_delayed_free_entries;
-static DelayedFreeChunk *delayed_free_chunk_list;
+static MonoLockFreeArrayQueue delayed_free_queue = MONO_LOCK_FREE_ARRAY_QUEUE_INIT (sizeof (DelayedFreeItem));
 
 /* The table for small ID assignment */
 static CRITICAL_SECTION small_id_mutex;
@@ -58,139 +40,6 @@ static int small_id_next;
 static int highest_small_id = -1;
 static MonoBitSet *small_id_table;
 
-/*
- * Delayed free table
- *
- * The table is a linked list of arrays (chunks).  Chunks are never
- * removed from the list, only added to the end, in a lock-free manner.
- *
- * Adding or removing an entry in the table is only possible at the end.
- * To do so, the thread first has to increment or decrement
- * num_used_delayed_free_entries.  The entry thus added or removed now
- * "belongs" to that thread.  It first CASes the state to BUSY,
- * writes/reads the entry, and then sets the state to USED or FREE.
- *
- * Note that it's possible that there is contention.  Some thread will
- * always make progress, though.
- *
- * The simplest case of contention is one thread pushing and another
- * thread popping the same entry.  The state is FREE at first, so the
- * pushing thread succeeds in setting it to BUSY.  The popping thread
- * will only succeed with its CAS once the state is USED, which is the
- * case after the pushing thread has finished pushing.
- */
-
-static DelayedFreeChunk*
-alloc_delayed_free_chunk (void)
-{
-       int size = mono_pagesize ();
-       int num_entries = (size - (sizeof (DelayedFreeChunk) - sizeof (DelayedFreeEntry) * MONO_ZERO_LEN_ARRAY)) / sizeof (DelayedFreeEntry);
-       DelayedFreeChunk *chunk = mono_valloc (0, size, MONO_MMAP_READ | MONO_MMAP_WRITE);
-       chunk->num_entries = num_entries;
-       return chunk;
-}
-
-static void
-free_delayed_free_chunk (DelayedFreeChunk *chunk)
-{
-       mono_vfree (chunk, mono_pagesize ());
-}
-
-static DelayedFreeEntry*
-get_delayed_free_entry (int index)
-{
-       DelayedFreeChunk *chunk;
-
-       g_assert (index >= 0);
-
-       if (!delayed_free_chunk_list) {
-               chunk = alloc_delayed_free_chunk ();
-               mono_memory_write_barrier ();
-               if (InterlockedCompareExchangePointer ((volatile gpointer *)&delayed_free_chunk_list, chunk, NULL) != NULL)
-                       free_delayed_free_chunk (chunk);
-       }
-
-       chunk = delayed_free_chunk_list;
-       g_assert (chunk);
-
-       while (index >= chunk->num_entries) {
-               DelayedFreeChunk *next = chunk->next;
-               if (!next) {
-                       next = alloc_delayed_free_chunk ();
-                       mono_memory_write_barrier ();
-                       if (InterlockedCompareExchangePointer ((volatile gpointer *) &chunk->next, next, NULL) != NULL) {
-                               free_delayed_free_chunk (next);
-                               next = chunk->next;
-                               g_assert (next);
-                       }
-               }
-               index -= chunk->num_entries;
-               chunk = next;
-       }
-
-       return &chunk->entries [index];
-}
-
-static void
-delayed_free_push (DelayedFreeItem item)
-{
-       int index, num_used;
-       DelayedFreeEntry *entry;
-
-       do {
-               index = InterlockedIncrement (&num_used_delayed_free_entries) - 1;
-               entry = get_delayed_free_entry (index);
-       } while (InterlockedCompareExchange (&entry->state, DFE_STATE_BUSY, DFE_STATE_FREE) != DFE_STATE_FREE);
-
-       mono_memory_write_barrier ();
-
-       entry->item = item;
-
-       mono_memory_write_barrier ();
-
-       entry->state = DFE_STATE_USED;
-
-       mono_memory_barrier ();
-
-       do {
-               num_used = num_used_delayed_free_entries;
-               if (num_used > index)
-                       break;
-       } while (InterlockedCompareExchange (&num_used_delayed_free_entries, index + 1, num_used) != num_used);
-
-       mono_memory_write_barrier ();
-}
-
-static gboolean
-delayed_free_pop (DelayedFreeItem *item)
-{
-       int index;
-       DelayedFreeEntry *entry;
-
-       do {
-               do {
-                       index = num_used_delayed_free_entries;
-                       if (index == 0)
-                               return FALSE;
-               } while (InterlockedCompareExchange (&num_used_delayed_free_entries, index - 1, index) != index);
-
-               entry = get_delayed_free_entry (index - 1);
-       } while (InterlockedCompareExchange (&entry->state, DFE_STATE_BUSY, DFE_STATE_USED) != DFE_STATE_USED);
-
-       /* Reading the item must happen before CASing the state. */
-       mono_memory_barrier ();
-
-       *item = entry->item;
-
-       mono_memory_barrier ();
-
-       entry->state = DFE_STATE_FREE;
-
-       mono_memory_write_barrier ();
-
-       return TRUE;
-}
-
 /*
  * Allocate a small thread id.
  *
@@ -348,13 +197,13 @@ static gboolean
 try_free_delayed_free_item (void)
 {
        DelayedFreeItem item;
-       gboolean popped = delayed_free_pop (&item);
+       gboolean popped = mono_lock_free_array_queue_pop (&delayed_free_queue, &item);
 
        if (!popped)
                return FALSE;
 
        if (is_pointer_hazardous (item.p)) {
-               delayed_free_push (item);
+               mono_lock_free_array_queue_push (&delayed_free_queue, &item);
                return FALSE;
        }
 
@@ -380,7 +229,7 @@ mono_thread_hazardous_free_or_queue (gpointer p, MonoHazardousFreeFunc free_func
 
                ++mono_stats.hazardous_pointer_count;
 
-               delayed_free_push (item);
+               mono_lock_free_array_queue_push (&delayed_free_queue, &item);
        } else {
                free_func (p);
        }
@@ -402,17 +251,9 @@ mono_thread_smr_init (void)
 void
 mono_thread_smr_cleanup (void)
 {
-       DelayedFreeChunk *chunk;
-
        mono_thread_hazardous_try_free_all ();
 
-       chunk = delayed_free_chunk_list;
-       delayed_free_chunk_list = NULL;
-       while (chunk) {
-               DelayedFreeChunk *next = chunk->next;
-               free_delayed_free_chunk (chunk);
-               chunk = next;
-       }
+       mono_lock_free_array_queue_cleanup (&delayed_free_queue);
 
        /*FIXME, can't we release the small id table here?*/
 }
diff --git a/mono/utils/lock-free-array-queue.c b/mono/utils/lock-free-array-queue.c
new file mode 100644 (file)
index 0000000..6f692f9
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+ * lock-free-array-queue.c: A lock-free somewhat-queue that doesn't
+ * require hazard pointers.
+ *
+ * (C) Copyright 2011 Xamarin Inc.
+ */
+
+/*
+ * The queue is a linked list of arrays (chunks).  Chunks are never
+ * removed from the list, only added to the end, in a lock-free manner.
+ *
+ * Adding or removing an entry in the queue is only possible at the
+ * end.  To do so, the thread first has to increment or decrement
+ * q->num_used_entries.  The entry thus added or removed now "belongs"
+ * to that thread.  It first CASes the state to BUSY, writes/reads the
+ * entry data, and then sets the state to USED or FREE.
+ */
+
+#include <mono/io-layer/io-layer.h>
+#include <mono/utils/mono-membar.h>
+#include <mono/utils/mono-mmap.h>
+
+#include <mono/utils/lock-free-array-queue.h>
+
+struct _MonoLockFreeArrayChunk {
+       MonoLockFreeArrayChunk *next;
+       gint32 num_entries;
+       char entries [MONO_ZERO_LEN_ARRAY];
+};
+
+typedef MonoLockFreeArrayChunk Chunk;
+
+#define CHUNK_NTH(arr,chunk,index)     ((chunk)->entries + (index) * (arr)->entry_size)
+
+static Chunk*
+alloc_chunk (MonoLockFreeArray *arr)
+{
+       int size = mono_pagesize ();
+       int num_entries = (size - (sizeof (Chunk) - arr->entry_size * MONO_ZERO_LEN_ARRAY)) / arr->entry_size;
+       Chunk *chunk = mono_valloc (0, size, MONO_MMAP_READ | MONO_MMAP_WRITE);
+       g_assert (chunk);
+       chunk->num_entries = num_entries;
+       return chunk;
+}
+
+static void
+free_chunk (Chunk *chunk)
+{
+       mono_vfree (chunk, mono_pagesize ());
+}
+
+gpointer
+mono_lock_free_array_nth (MonoLockFreeArray *arr, int index)
+{
+       Chunk *chunk;
+
+       g_assert (index >= 0);
+
+       if (!arr->chunk_list) {
+               chunk = alloc_chunk (arr);
+               mono_memory_write_barrier ();
+               if (InterlockedCompareExchangePointer ((volatile gpointer *)&arr->chunk_list, chunk, NULL) != NULL)
+                       free_chunk (chunk);
+       }
+
+       chunk = arr->chunk_list;
+       g_assert (chunk);
+
+       while (index >= chunk->num_entries) {
+               Chunk *next = chunk->next;
+               if (!next) {
+                       next = alloc_chunk (arr);
+                       mono_memory_write_barrier ();
+                       if (InterlockedCompareExchangePointer ((volatile gpointer *) &chunk->next, next, NULL) != NULL) {
+                               free_chunk (next);
+                               next = chunk->next;
+                               g_assert (next);
+                       }
+               }
+               index -= chunk->num_entries;
+               chunk = next;
+       }
+
+       return CHUNK_NTH (arr, chunk, index);
+}
+
+gpointer
+mono_lock_free_array_iterate (MonoLockFreeArray *arr, MonoLockFreeArrayIterateFunc func, gpointer user_data)
+{
+       Chunk *chunk;
+       for (chunk = arr->chunk_list; chunk; chunk = chunk->next) {
+               int i;
+               for (i = 0; i < chunk->num_entries; ++i) {
+                       gpointer result = func (i, CHUNK_NTH (arr, chunk, i), user_data);
+                       if (result)
+                               return result;
+               }
+       }
+       return NULL;
+}
+
+void
+mono_lock_free_array_cleanup (MonoLockFreeArray *arr)
+{
+       Chunk *chunk;
+
+       chunk = arr->chunk_list;
+       arr->chunk_list = NULL;
+       while (chunk) {
+               Chunk *next = chunk->next;
+               free_chunk (chunk);
+               chunk = next;
+       }
+}
+
+enum {
+       STATE_FREE,
+       STATE_USED,
+       STATE_BUSY
+};
+
+typedef struct {
+       gint32 state;
+       gpointer data [MONO_ZERO_LEN_ARRAY];
+} Entry;
+
+typedef MonoLockFreeArrayQueue Queue;
+
+/* The queue's entry size, calculated from the array's. */
+#define ENTRY_SIZE(q)  ((q)->array.entry_size - sizeof (gpointer))
+
+void
+mono_lock_free_array_queue_push (MonoLockFreeArrayQueue *q, gpointer entry_data_ptr)
+{
+       int index, num_used;
+       Entry *entry;
+
+       do {
+               index = InterlockedIncrement (&q->num_used_entries) - 1;
+               entry = mono_lock_free_array_nth (&q->array, index);
+       } while (InterlockedCompareExchange (&entry->state, STATE_BUSY, STATE_FREE) != STATE_FREE);
+
+       mono_memory_write_barrier ();
+
+       memcpy (entry->data, entry_data_ptr, ENTRY_SIZE (q));
+
+       mono_memory_write_barrier ();
+
+       entry->state = STATE_USED;
+
+       mono_memory_barrier ();
+
+       do {
+               num_used = q->num_used_entries;
+               if (num_used > index)
+                       break;
+       } while (InterlockedCompareExchange (&q->num_used_entries, index + 1, num_used) != num_used);
+
+       mono_memory_write_barrier ();
+}
+
+gboolean
+mono_lock_free_array_queue_pop (MonoLockFreeArrayQueue *q, gpointer entry_data_ptr)
+{
+       int index;
+       Entry *entry;
+
+       do {
+               do {
+                       index = q->num_used_entries;
+                       if (index == 0)
+                               return FALSE;
+               } while (InterlockedCompareExchange (&q->num_used_entries, index - 1, index) != index);
+
+               entry = mono_lock_free_array_nth (&q->array, index - 1);
+       } while (InterlockedCompareExchange (&entry->state, STATE_BUSY, STATE_USED) != STATE_USED);
+
+       /* Reading the item must happen before CASing the state. */
+       mono_memory_barrier ();
+
+       memcpy (entry_data_ptr, entry->data, ENTRY_SIZE (q));
+
+       mono_memory_barrier ();
+
+       entry->state = STATE_FREE;
+
+       mono_memory_write_barrier ();
+
+       return TRUE;
+}
+
+void
+mono_lock_free_array_queue_cleanup (MonoLockFreeArrayQueue *q)
+{
+       mono_lock_free_array_cleanup (&q->array);
+       q->num_used_entries = 0;
+}
diff --git a/mono/utils/lock-free-array-queue.h b/mono/utils/lock-free-array-queue.h
new file mode 100644 (file)
index 0000000..3dd8b10
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * lock-free-array-queue.h: A lock-free somewhat-queue that doesn't
+ * require hazard pointers.
+ *
+ * (C) Copyright 2011 Xamarin Inc.
+ */
+#ifndef __MONO_LOCK_FREE_ARRAY_QUEUE_H__
+#define __MONO_LOCK_FREE_ARRAY_QUEUE_H__
+
+#include <glib.h>
+#include <mono/utils/mono-compiler.h>
+
+typedef struct _MonoLockFreeArrayChunk MonoLockFreeArrayChunk;
+
+typedef struct {
+       size_t entry_size;
+       MonoLockFreeArrayChunk *chunk_list;
+} MonoLockFreeArray;
+
+typedef struct {
+       MonoLockFreeArray array;
+       gint32 num_used_entries;
+} MonoLockFreeArrayQueue;
+
+#define MONO_LOCK_FREE_ARRAY_INIT(entry_size)          { (entry_size), NULL }
+#define MONO_LOCK_FREE_ARRAY_QUEUE_INIT(entry_size)    { MONO_LOCK_FREE_ARRAY_INIT ((entry_size) + sizeof (gpointer)), 0 }
+
+gpointer mono_lock_free_array_nth (MonoLockFreeArray *arr, int index) MONO_INTERNAL;
+
+typedef gpointer (*MonoLockFreeArrayIterateFunc) (int index, gpointer entry_ptr, gpointer user_data);
+gpointer mono_lock_free_array_iterate (MonoLockFreeArray *arr, MonoLockFreeArrayIterateFunc func, gpointer user_data) MONO_INTERNAL;
+
+void mono_lock_free_array_cleanup (MonoLockFreeArray *arr) MONO_INTERNAL;
+
+void mono_lock_free_array_queue_push (MonoLockFreeArrayQueue *q, gpointer entry_data_ptr) MONO_INTERNAL;
+gboolean mono_lock_free_array_queue_pop (MonoLockFreeArrayQueue *q, gpointer entry_data_ptr) MONO_INTERNAL;
+
+void mono_lock_free_array_queue_cleanup (MonoLockFreeArrayQueue *q) MONO_INTERNAL;
+
+#endif
index 8108028db5bc9cf4d34ca996bcdf7ad3310cf236..17af2ab59e8b853ad7cc712b6c029d125dc15567 100644 (file)
@@ -431,28 +431,6 @@ mono_mprotect (void *addr, size_t length, int flags)
 }
 #endif // HAVE_MMAP
 
-#ifndef HAVE_VALLOC_ALIGNED
-void*
-mono_valloc_aligned (size_t size, size_t alignment, int flags)
-{
-       /* Allocate twice the memory to be able to put the block on an aligned address */
-       char *mem = mono_valloc (NULL, size + alignment, flags);
-       char *aligned;
-
-       g_assert (mem);
-
-       aligned = (char*)((gulong)(mem + (alignment - 1)) & ~(alignment - 1));
-       g_assert (aligned >= mem && aligned + size <= mem + size + alignment && !((gulong)aligned & (alignment - 1)));
-
-       if (aligned > mem)
-               mono_vfree (mem, aligned - mem);
-       if (aligned + size < mem + size + alignment)
-               mono_vfree (aligned + size, (mem + size + alignment) - (aligned + size));
-
-       return aligned;
-}
-#endif
-
 #if defined(HAVE_SHM_OPEN) && !defined (DISABLE_SHARED_PERFCOUNTERS)
 
 static int
@@ -642,3 +620,25 @@ mono_shared_area_instances (void **array, int count)
 #endif // HAVE_SHM_OPEN
 
 #endif // HOST_WIN32
+
+#ifndef HAVE_VALLOC_ALIGNED
+void*
+mono_valloc_aligned (size_t size, size_t alignment, int flags)
+{
+       /* Allocate twice the memory to be able to put the block on an aligned address */
+       char *mem = mono_valloc (NULL, size + alignment, flags);
+       char *aligned;
+
+       g_assert (mem);
+
+       aligned = (char*)((gulong)(mem + (alignment - 1)) & ~(alignment - 1));
+       g_assert (aligned >= mem && aligned + size <= mem + size + alignment && !((gulong)aligned & (alignment - 1)));
+
+       if (aligned > mem)
+               mono_vfree (mem, aligned - mem);
+       if (aligned + size < mem + size + alignment)
+               mono_vfree (aligned + size, (mem + size + alignment) - (aligned + size));
+
+       return aligned;
+}
+#endif
index 36e227ba44267511dd02c296a2c945ecf1020af9..4a99cfc02375bbab9b28d4a28ea4b45e0ecad5af 100644 (file)
@@ -17,7 +17,7 @@
 #include <unistd.h>
 #endif
 
-#if (defined(HAVE_SEMAPHORE_H) || defined(USE_MACH_SEMA))
+#if (defined (HAVE_SEMAPHORE_H) || defined (USE_MACH_SEMA)) && !defined(HOST_WIN32)
 /* sem_* or semaphore_* functions in use */
 #  ifdef USE_MACH_SEMA
 #    define TIMESPEC mach_timespec_t
index d6be806efe5a2b14a52129a46b72745490d5413a..6d6c0684909d470ce3af53e174f63b9155343172 100644 (file)
@@ -17,7 +17,7 @@
 #endif
 #include <mono/io-layer/io-layer.h>
 
-#if defined (HAVE_SEMAPHORE_H) || defined (USE_MACH_SEMA)
+#if (defined (HAVE_SEMAPHORE_H) || defined (USE_MACH_SEMA)) && !defined(HOST_WIN32)
 #  define MONO_HAS_SEMAPHORES
 
 #  if defined (USE_MACH_SEMA)
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 f23eec5320fc6934ed8de45fe6d8dff63203989e..1e93e0e219a76236756f36846fe70b0dc766520b 100644 (file)
@@ -34,7 +34,7 @@ Mono_Posix_Syscall_closelog (void)
 int
 Mono_Posix_Syscall_syslog (int priority, const char* message)
 {
-       syslog (priority, message);
+       syslog (priority, "%s", message);
        return 0;
 }
 
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>