From c54b0bda4ea453a0336fb497780965e8e9e61322 Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Sun, 26 Apr 2015 19:10:23 +0100 Subject: [PATCH] Imported Upstream version 4.0.1 Former-commit-id: 757121caeaad523350be5330f0a3ecc891c70fb8 --- Makefile.am | 2 +- Makefile.in | 2 +- aclocal.m4 | 3 +- config.guess | 192 +- config.sub | 30 +- configure.REMOVED.git-id | 2 +- configure.ac.REMOVED.git-id | 2 +- docs/deploy/api-style.css | 40 + docs/deploy/mono-api-assembly.html | 337 ++++ docs/deploy/mono-api-class.html | 821 +++++++++ docs/deploy/mono-api-codegen.html | 162 ++ docs/deploy/mono-api-counters.html | 128 ++ docs/deploy/mono-api-debug.html | 180 ++ docs/deploy/mono-api-decimal.html | 151 ++ docs/deploy/mono-api-domains.html | 307 ++++ docs/deploy/mono-api-dynamic-codegen.html | 361 ++++ docs/deploy/mono-api-embedding.html | 428 +++++ docs/deploy/mono-api-exc.html | 694 +++++++ docs/deploy/mono-api-gc.html | 119 ++ docs/deploy/mono-api-gchandle.html | 228 +++ docs/deploy/mono-api-image.html | 517 ++++++ docs/deploy/mono-api-internal.html | 587 ++++++ docs/deploy/mono-api-jit.html | 141 ++ docs/deploy/mono-api-jitinternal.html | 247 +++ docs/deploy/mono-api-marshal.html | 78 + docs/deploy/mono-api-metadata.html | 1313 ++++++++++++++ docs/deploy/mono-api-methods.html | 578 ++++++ docs/deploy/mono-api-object.html | 1134 ++++++++++++ docs/deploy/mono-api-profiler.html | 268 +++ docs/deploy/mono-api-reflection.html | 269 +++ docs/deploy/mono-api-security.html | 130 ++ docs/deploy/mono-api-string.html | 405 +++++ docs/deploy/mono-api-threads.html | 185 ++ docs/deploy/mono-api-type.html | 274 +++ docs/deploy/mono-api-types.html | 201 +++ docs/deploy/mono-api-unsorted.html | 510 ++++++ docs/deploy/mono-api-utils.html | 624 +++++++ docs/deploy/mono-api-vm.html | 55 + docs/deploy/mono-api-wapi.html | 1588 +++++++++++++++++ eglib/aclocal.m4 | 3 +- eglib/configure.REMOVED.git-id | 2 +- .../v2.0/Accessibility.dll | Bin 0 -> 10752 bytes .../Commons.Xml.Relaxng.dll.REMOVED.git-id | 1 + .../v2.0/CustomMarshalers.dll | Bin 0 -> 11776 bytes .../v2.0/I18N.CJK.dll.REMOVED.git-id | 1 + .../v2.0/I18N.MidEast.dll | Bin 0 -> 14848 bytes .../v2.0/I18N.Other.dll | Bin 0 -> 18432 bytes .../v2.0/I18N.Rare.dll | Bin 0 -> 39424 bytes .../v2.0/I18N.West.dll | Bin 0 -> 21504 bytes .../binary-reference-assemblies/v2.0/I18N.dll | Bin 0 -> 25600 bytes .../v2.0/IBM.Data.DB2.dll | Bin 0 -> 46080 bytes .../v2.0/ICSharpCode.SharpZipLib.dll | Bin 0 -> 65024 bytes .../Microsoft.Build.Engine.dll.REMOVED.git-id | 1 + .../v2.0/Microsoft.Build.Framework.dll | Bin 0 -> 25600 bytes .../Microsoft.Build.Tasks.dll.REMOVED.git-id | 1 + .../v2.0/Microsoft.Build.Utilities.dll | Bin 0 -> 37888 bytes .../Microsoft.VisualBasic.dll.REMOVED.git-id | 1 + .../v2.0/Microsoft.VisualC.dll | Bin 0 -> 9216 bytes .../v2.0/Mono.C5.dll.REMOVED.git-id | 1 + .../v2.0/Mono.CSharp.dll.REMOVED.git-id | 1 + .../v2.0/Mono.Cairo.dll | Bin 0 -> 48640 bytes .../Mono.CompilerServices.SymbolWriter.dll | Bin 0 -> 27648 bytes .../v2.0/Mono.Data.Sqlite.dll.REMOVED.git-id | 1 + .../v2.0/Mono.Data.Tds.dll | Bin 0 -> 49664 bytes .../v2.0/Mono.Debugger.Soft.dll | Bin 0 -> 91648 bytes .../v2.0/Mono.Http.dll | Bin 0 -> 20480 bytes .../v2.0/Mono.Management.dll | Bin 0 -> 10752 bytes .../v2.0/Mono.Messaging.RabbitMQ.dll | Bin 0 -> 26112 bytes .../v2.0/Mono.Messaging.dll | Bin 0 -> 29696 bytes .../v2.0/Mono.Posix.dll.REMOVED.git-id | 1 + .../v2.0/Mono.Security.Win32.dll | Bin 0 -> 13824 bytes .../v2.0/Mono.Security.dll.REMOVED.git-id | 1 + .../v2.0/Mono.Simd.dll | Bin 0 -> 39424 bytes .../v2.0/Mono.Tasklets.dll | Bin 0 -> 9216 bytes .../v2.0/Mono.WebBrowser.dll.REMOVED.git-id | 1 + .../v2.0/Mono.XBuild.Tasks.dll | Bin 0 -> 24576 bytes .../Novell.Directory.Ldap.dll.REMOVED.git-id | 1 + .../v2.0/Npgsql.dll.REMOVED.git-id | 1 + .../v2.0/PEAPI.dll | Bin 0 -> 60416 bytes .../v2.0/RabbitMQ.Client.dll.REMOVED.git-id | 1 + .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 23552 bytes .../v2.0/System.Configuration.Install.dll | Bin 0 -> 18944 bytes .../v2.0/System.Configuration.dll | Bin 0 -> 84480 bytes .../v2.0/System.Core.dll.REMOVED.git-id | 1 + .../v2.0/System.Data.DataSetExtensions.dll | Bin 0 -> 21504 bytes .../v2.0/System.Data.Linq.dll.REMOVED.git-id | 1 + ...ystem.Data.OracleClient.dll.REMOVED.git-id | 1 + ...em.Data.Services.Client.dll.REMOVED.git-id | 1 + .../v2.0/System.Data.Services.dll | Bin 0 -> 20480 bytes .../v2.0/System.Data.dll.REMOVED.git-id | 1 + .../v2.0/System.Design.dll.REMOVED.git-id | 1 + .../System.DirectoryServices.Protocols.dll | Bin 0 -> 54784 bytes .../v2.0/System.DirectoryServices.dll | Bin 0 -> 77824 bytes .../v2.0/System.Drawing.Design.dll | Bin 0 -> 22528 bytes .../v2.0/System.Drawing.dll.REMOVED.git-id | 1 + .../v2.0/System.EnterpriseServices.dll | Bin 0 -> 41984 bytes .../v2.0/System.IdentityModel.Selectors.dll | Bin 0 -> 13824 bytes .../v2.0/System.IdentityModel.dll | Bin 0 -> 81408 bytes .../v2.0/System.Json.dll | Bin 0 -> 20480 bytes .../v2.0/System.Management.dll | Bin 0 -> 43008 bytes .../v2.0/System.Messaging.dll | Bin 0 -> 59904 bytes .../v2.0/System.Net.dll | Bin 0 -> 10240 bytes .../v2.0/System.Runtime.Remoting.dll | Bin 0 -> 73216 bytes ....Runtime.Serialization.Formatters.Soap.dll | Bin 0 -> 25600 bytes ...m.Runtime.Serialization.dll.REMOVED.git-id | 1 + .../v2.0/System.Security.dll | Bin 0 -> 79360 bytes ...System.ServiceModel.Web.dll.REMOVED.git-id | 1 + .../System.ServiceModel.dll.REMOVED.git-id | 1 + .../v2.0/System.ServiceProcess.dll | Bin 0 -> 37376 bytes .../v2.0/System.Transactions.dll | Bin 0 -> 25600 bytes .../v2.0/System.Web.Abstractions.dll | Bin 0 -> 48640 bytes .../v2.0/System.Web.DynamicData.dll | Bin 0 -> 54272 bytes .../v2.0/System.Web.Extensions.Design.dll | Bin 0 -> 12288 bytes .../System.Web.Extensions.dll.REMOVED.git-id | 1 + .../v2.0/System.Web.Mvc.dll.REMOVED.git-id | 1 + .../v2.0/System.Web.Routing.dll | Bin 0 -> 28160 bytes .../System.Web.Services.dll.REMOVED.git-id | 1 + .../v2.0/System.Web.dll.REMOVED.git-id | 1 + .../System.Windows.Forms.dll.REMOVED.git-id | 1 + .../v2.0/System.Xml.Linq.dll | Bin 0 -> 58880 bytes .../v2.0/System.Xml.dll.REMOVED.git-id | 1 + .../v2.0/System.dll.REMOVED.git-id | 1 + .../v2.0/WindowsBase.dll.REMOVED.git-id | 1 + .../v2.0/cscompmgd.dll | Bin 0 -> 13824 bytes .../v2.0/mscorlib.dll.REMOVED.git-id | 1 + .../Microsoft.Build.Engine.dll.REMOVED.git-id | 1 + .../v3.5/Microsoft.Build.Framework.dll | Bin 0 -> 25600 bytes ...rosoft.Build.Tasks.v3.5.dll.REMOVED.git-id | 1 + .../v3.5/Microsoft.Build.Utilities.v3.5.dll | Bin 0 -> 37888 bytes .../v3.5/Mono.XBuild.Tasks.dll | Bin 0 -> 24064 bytes .../ServiceModel/Diagnostics/Activity.cs | 52 + .../Diagnostics/DiagnosticStrings.cs | 46 + .../Diagnostics/DiagnosticTraceSource.cs | 55 + .../Diagnostics/DiagnosticsTraceCode.cs | 18 + .../EncodingFallbackAwareXmlTextWriter.cs | 63 + .../Diagnostics/EventLogCategory.cs | 28 + .../Diagnostics/EventLogEventId.cs | 100 ++ .../ServiceModel/Diagnostics/EventLogger.cs | 60 + .../Diagnostics/ExceptionUtility.cs | 273 +++ .../Diagnostics/LegacyDiagnosticTrace.cs | 308 ++++ .../Diagnostics/MachineSettingsSection.cs | 55 + .../ServiceModel/Diagnostics/NativeMethods.cs | 22 + .../Diagnostics/PiiTraceSource.cs | 108 ++ .../Diagnostics/PlainXmlWriter.cs | 220 +++ .../Diagnostics/SafeEventLogWriteHandle.cs | 53 + .../Diagnostics/TraceSourceKind.cs | 12 + .../Diagnostics/TraceXPathNavigator.cs | 982 ++++++++++ .../ServiceModel/Diagnostics/Utility.cs | 77 + .../System/Xml/Linq/XLinq.cs.REMOVED.git-id | 2 +- .../componentmodel/CategoryAttribute.cs | 4 +- .../system/diagnostics/AssertSection.cs | 2 + .../diagnostics/DefaultTraceListener.cs | 2 + .../diagnostics/DiagnosticsConfiguration.cs | 2 + .../system/diagnostics/FilterElement.cs | 3 +- .../diagnostics/ListenerElementsCollection.cs | 2 + .../system/diagnostics/PerfCounterSection.cs | 2 + .../diagnostics/SourceElementsCollection.cs | 3 + .../compmod/system/diagnostics/Switch.cs | 17 + .../diagnostics/SwitchElementsCollection.cs | 3 + .../diagnostics/SystemDiagnosticsSection.cs | 2 + .../compmod/system/diagnostics/Trace.cs | 2 + .../system/diagnostics/TraceInternal.cs | 6 + .../system/diagnostics/TraceSection.cs | 2 + .../compmod/system/diagnostics/TraceSource.cs | 4 + .../system/diagnostics/TypedElement.cs | 6 + .../diagnostics/XmlWriterTraceListener.cs | 3 +- .../compmod/system/diagnostics/traceutils.cs | 10 + .../misc/PrivilegedConfigurationManager.cs | 3 +- .../services/timers/system/timers/Timer.cs | 21 +- .../mscorlib/system/activator.cs | 31 +- .../mscorlib/system/attribute.cs | 95 +- .../mscorlib/system/defaultbinder.cs | 6 +- .../referencesource/mscorlib/system/enum.cs | 70 +- .../system/globalization/charunicodeinfo.cs | 67 +- .../reflection/RuntimeReflectionExtensions.cs | 32 +- .../system/reflection/assemblyattributes.cs | 2 +- .../reflection/introspectionextensions.cs | 2 +- .../mscorlib/system/reflection/memberinfo.cs | 7 + .../mscorlib/system/reflection/methodbase.cs | 30 +- .../system/reflection/typeattributes.cs | 2 +- .../mscorlib/system/reflection/typeinfo.cs | 44 +- .../manifestbasedresourcegroveler.cs | 18 + .../system/resources/resourcemanager.cs | 5 +- .../system/resources/resourcewriter.cs | 2 +- .../mscorlib/system/rttype.cs.REMOVED.git-id | 2 +- .../binary/binaryformatterwriter.cs | 4 +- .../formatters/binary/binaryobjectreader.cs | 16 +- .../formatters/binary/binaryobjectwriter.cs | 4 +- .../formatters/binary/binaryparser.cs | 4 +- .../serialization/formatterservices.cs | 19 + .../serialization/objectclonehelper.cs | 3 +- .../runtime/serialization/objectmanager.cs | 2 + .../serialization/serializationinfo.cs | 2 + .../mscorlib/system/text/stringbuilder.cs | 2 + .../mscorlib/system/text/unicodeencoding.cs | 27 +- .../mscorlib/system/threading/threadpool.cs | 175 +- .../referencesource/mscorlib/system/type.cs | 52 +- .../mscorlib/system/typedreference.cs | 16 +- libgc/aclocal.m4 | 3 +- libgc/config.guess | 192 +- libgc/config.sub | 30 +- libgc/configure.REMOVED.git-id | 2 +- libgc/ltmain.sh.REMOVED.git-id | 2 +- ltmain.sh.REMOVED.git-id | 2 +- mcs/Makefile | 6 +- mcs/build/Makefile | 2 +- mcs/build/common/Consts.cs | 2 +- .../profiles/binary_reference_assemblies.make | 7 + mcs/build/profiles/net_4_0.make | 12 - mcs/class/Makefile | 2 +- .../System.Net.Http.Headers/HttpHeaders.cs | 11 +- .../HttpHeadersTest.cs | 8 + .../DefaultDllImportSearchPathsAttribute.cs | 42 + .../DllImportSearchPath.cs | 42 + mcs/class/corlib/System/TimeZoneInfo.cs | 483 +---- .../ManualResetEventSlimTests.cs | 2 +- mcs/class/corlib/corlib.dll.sources | 2 + .../monolite/Mono.Security.dll.REMOVED.git-id | 2 +- .../System.Configuration.dll.REMOVED.git-id | 2 +- .../monolite/System.Core.dll.REMOVED.git-id | 2 +- .../System.Security.dll.REMOVED.git-id | 2 +- .../monolite/System.Xml.dll.REMOVED.git-id | 2 +- .../lib/monolite/System.dll.REMOVED.git-id | 2 +- .../lib/monolite/basic.exe.REMOVED.git-id | 2 +- .../lib/monolite/mscorlib.dll.REMOVED.git-id | 2 +- mcs/class/reference-assemblies/Makefile | 14 +- mcs/mcs/anonymous.cs | 9 +- mcs/mcs/expression.cs.REMOVED.git-id | 2 +- mcs/tests/test-anon-177.cs | 25 + mcs/tests/test-null-operator-011.cs | 12 + mcs/tools/cil-strip/cilstrip.cs | 5 +- .../linker/Mono.Linker.Steps/SweepStep.cs | 10 + mcs/tools/xbuild/Makefile | 4 + mono-core.spec | 2 +- mono/metadata/image.c | 3 + mono/metadata/marshal.c.REMOVED.git-id | 2 +- mono/metadata/metadata-internals.h | 2 + mono/mini/version.h | 2 +- mono/utils/mono-codeman.c | 12 +- po/mcs/de.gmo | Bin 5406 -> 5406 bytes po/mcs/de.po.REMOVED.git-id | 2 +- po/mcs/es.gmo | Bin 16329 -> 16329 bytes po/mcs/es.po.REMOVED.git-id | 2 +- po/mcs/ja.gmo | Bin 20863 -> 20863 bytes po/mcs/ja.po.REMOVED.git-id | 2 +- po/mcs/mcs.pot | 188 +- po/mcs/pt_BR.gmo | Bin 73398 -> 73398 bytes po/mcs/pt_BR.po.REMOVED.git-id | 2 +- runtime/Makefile.am | 6 +- runtime/Makefile.in | 6 +- scripts/mono-find-provides.in | 2 +- scripts/mono-find-requires.in | 2 +- 252 files changed, 16715 insertions(+), 1176 deletions(-) create mode 100644 docs/deploy/api-style.css create mode 100644 docs/deploy/mono-api-assembly.html create mode 100644 docs/deploy/mono-api-class.html create mode 100644 docs/deploy/mono-api-codegen.html create mode 100644 docs/deploy/mono-api-counters.html create mode 100644 docs/deploy/mono-api-debug.html create mode 100644 docs/deploy/mono-api-decimal.html create mode 100644 docs/deploy/mono-api-domains.html create mode 100644 docs/deploy/mono-api-dynamic-codegen.html create mode 100644 docs/deploy/mono-api-embedding.html create mode 100644 docs/deploy/mono-api-exc.html create mode 100644 docs/deploy/mono-api-gc.html create mode 100644 docs/deploy/mono-api-gchandle.html create mode 100644 docs/deploy/mono-api-image.html create mode 100644 docs/deploy/mono-api-internal.html create mode 100644 docs/deploy/mono-api-jit.html create mode 100644 docs/deploy/mono-api-jitinternal.html create mode 100644 docs/deploy/mono-api-marshal.html create mode 100644 docs/deploy/mono-api-metadata.html create mode 100644 docs/deploy/mono-api-methods.html create mode 100644 docs/deploy/mono-api-object.html create mode 100644 docs/deploy/mono-api-profiler.html create mode 100644 docs/deploy/mono-api-reflection.html create mode 100644 docs/deploy/mono-api-security.html create mode 100644 docs/deploy/mono-api-string.html create mode 100644 docs/deploy/mono-api-threads.html create mode 100644 docs/deploy/mono-api-type.html create mode 100644 docs/deploy/mono-api-types.html create mode 100644 docs/deploy/mono-api-unsorted.html create mode 100644 docs/deploy/mono-api-utils.html create mode 100644 docs/deploy/mono-api-vm.html create mode 100644 docs/deploy/mono-api-wapi.html create mode 100644 external/binary-reference-assemblies/v2.0/Accessibility.dll create mode 100644 external/binary-reference-assemblies/v2.0/Commons.Xml.Relaxng.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/CustomMarshalers.dll create mode 100644 external/binary-reference-assemblies/v2.0/I18N.CJK.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/I18N.MidEast.dll create mode 100644 external/binary-reference-assemblies/v2.0/I18N.Other.dll create mode 100644 external/binary-reference-assemblies/v2.0/I18N.Rare.dll create mode 100644 external/binary-reference-assemblies/v2.0/I18N.West.dll create mode 100644 external/binary-reference-assemblies/v2.0/I18N.dll create mode 100644 external/binary-reference-assemblies/v2.0/IBM.Data.DB2.dll create mode 100644 external/binary-reference-assemblies/v2.0/ICSharpCode.SharpZipLib.dll create mode 100644 external/binary-reference-assemblies/v2.0/Microsoft.Build.Engine.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Microsoft.Build.Framework.dll create mode 100644 external/binary-reference-assemblies/v2.0/Microsoft.Build.Tasks.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Microsoft.Build.Utilities.dll create mode 100644 external/binary-reference-assemblies/v2.0/Microsoft.VisualBasic.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Microsoft.VisualC.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.C5.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Mono.CSharp.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Cairo.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.CompilerServices.SymbolWriter.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Data.Sqlite.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Data.Tds.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Debugger.Soft.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Http.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Management.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Messaging.RabbitMQ.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Messaging.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Posix.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Security.Win32.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Security.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Simd.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.Tasklets.dll create mode 100644 external/binary-reference-assemblies/v2.0/Mono.WebBrowser.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Mono.XBuild.Tasks.dll create mode 100644 external/binary-reference-assemblies/v2.0/Novell.Directory.Ldap.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/Npgsql.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/PEAPI.dll create mode 100644 external/binary-reference-assemblies/v2.0/RabbitMQ.Client.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.ComponentModel.DataAnnotations.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Configuration.Install.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Configuration.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Core.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Data.DataSetExtensions.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Data.Linq.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Data.OracleClient.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Data.Services.Client.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Data.Services.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Data.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Design.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.DirectoryServices.Protocols.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.DirectoryServices.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Drawing.Design.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Drawing.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.EnterpriseServices.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.IdentityModel.Selectors.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.IdentityModel.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Json.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Management.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Messaging.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Net.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Runtime.Remoting.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Runtime.Serialization.Formatters.Soap.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Runtime.Serialization.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Security.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.ServiceModel.Web.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.ServiceModel.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.ServiceProcess.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Transactions.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.Abstractions.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.DynamicData.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.Extensions.Design.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.Extensions.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.Mvc.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.Routing.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.Services.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Web.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Windows.Forms.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.Xml.Linq.dll create mode 100644 external/binary-reference-assemblies/v2.0/System.Xml.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/System.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/WindowsBase.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v2.0/cscompmgd.dll create mode 100644 external/binary-reference-assemblies/v2.0/mscorlib.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v3.5/Microsoft.Build.Engine.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v3.5/Microsoft.Build.Framework.dll create mode 100644 external/binary-reference-assemblies/v3.5/Microsoft.Build.Tasks.v3.5.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v3.5/Microsoft.Build.Utilities.v3.5.dll create mode 100644 external/binary-reference-assemblies/v3.5/Mono.XBuild.Tasks.dll create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Activity.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticStrings.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticTraceSource.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticsTraceCode.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EncodingFallbackAwareXmlTextWriter.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogger.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/ExceptionUtility.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/LegacyDiagnosticTrace.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/MachineSettingsSection.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PiiTraceSource.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PlainXmlWriter.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/SafeEventLogWriteHandle.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceXPathNavigator.cs create mode 100644 external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Utility.cs create mode 100644 mcs/build/profiles/binary_reference_assemblies.make delete mode 100644 mcs/build/profiles/net_4_0.make create mode 100644 mcs/class/corlib/System.Runtime.InteropServices/DefaultDllImportSearchPathsAttribute.cs create mode 100644 mcs/class/corlib/System.Runtime.InteropServices/DllImportSearchPath.cs create mode 100644 mcs/tests/test-anon-177.cs create mode 100644 mcs/tests/test-null-operator-011.cs diff --git a/Makefile.am b/Makefile.am index cddaff1621..e9d6ccdcda 100644 --- a/Makefile.am +++ b/Makefile.am @@ -52,7 +52,7 @@ dist-hook: d=`cd $(distdir)/mcs && pwd`; cd $(mcs_topdir) && $(MAKE) distdir=$$d dist-recursive rm -rf `find $(top_distdir)/external -path '*\.git'` rm -f `find $(top_distdir)/external -path '*\.exe'` - rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/binary-reference-assemblies/v4\.0*'` + rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/binary-reference-assemblies/*'` cp mcs/class/lib/basic/System.Configuration.dll mcs/class/lib/monolite/ cp mcs/class/lib/basic/System.Security.dll mcs/class/lib/monolite/ # Disable this for now because it is very slow and causes wrench to timeout: diff --git a/Makefile.in b/Makefile.in index 15a5e85151..080d2f0d30 100644 --- a/Makefile.in +++ b/Makefile.in @@ -947,7 +947,7 @@ dist-hook: d=`cd $(distdir)/mcs && pwd`; cd $(mcs_topdir) && $(MAKE) distdir=$$d dist-recursive rm -rf `find $(top_distdir)/external -path '*\.git'` rm -f `find $(top_distdir)/external -path '*\.exe'` - rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/binary-reference-assemblies/v4\.0*'` + rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/binary-reference-assemblies/*'` cp mcs/class/lib/basic/System.Configuration.dll mcs/class/lib/monolite/ cp mcs/class/lib/basic/System.Security.dll mcs/class/lib/monolite/ .PHONY: get-monolite-latest diff --git a/aclocal.m4 b/aclocal.m4 index ae4bfc4914..5252a2366e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -593,7 +593,8 @@ to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi -fi]) +fi +]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further diff --git a/config.guess b/config.guess index b79252d6b1..1f5c50c0d1 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2013-06-10' +timestamp='2014-03-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,7 +149,7 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -826,7 +826,7 @@ EOF *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -969,10 +969,10 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -1260,16 +1260,26 @@ EOF if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; @@ -1361,154 +1371,6 @@ EOF exit ;; esac -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 <." version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -265,6 +265,7 @@ case $basic_machine in | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -282,8 +283,10 @@ case $basic_machine in | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -295,11 +298,11 @@ case $basic_machine in | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ @@ -324,7 +327,7 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -381,6 +384,7 @@ case $basic_machine in | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -400,8 +404,10 @@ case $basic_machine in | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -413,6 +419,7 @@ case $basic_machine in | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ @@ -822,6 +829,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1367,14 +1378,14 @@ case $os in | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1592,9 +1603,6 @@ case $basic_machine in mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;; diff --git a/configure.REMOVED.git-id b/configure.REMOVED.git-id index 6926555fd1..4937bd70da 100644 --- a/configure.REMOVED.git-id +++ b/configure.REMOVED.git-id @@ -1 +1 @@ -25aca4d9234ba9866baffb6d0b49f85530244ece \ No newline at end of file +bb398f7ae55a546fb7bf939dabfed4a3fb9730bc \ No newline at end of file diff --git a/configure.ac.REMOVED.git-id b/configure.ac.REMOVED.git-id index b55f705dfb..02bde5f4ec 100644 --- a/configure.ac.REMOVED.git-id +++ b/configure.ac.REMOVED.git-id @@ -1 +1 @@ -64b436391b7e39451d01b5d01756e5484d447684 \ No newline at end of file +01ba76eb592f8ee610b360b3614f3f6a8de954d6 \ No newline at end of file diff --git a/docs/deploy/api-style.css b/docs/deploy/api-style.css new file mode 100644 index 0000000000..910ac49e55 --- /dev/null +++ b/docs/deploy/api-style.css @@ -0,0 +1,40 @@ + h3 { + font-size: 18px; + padding-bottom: 4pt; + border-bottom: 2px solid #dddddd; + } + + .api { + border: 1px solid; + padding: 10pt; + margin: 10pt; + } + + .api-entry { + border-bottom: none; + font-size: 18px; + } + + .prototype { + border: 1px solid; + background-color: #f2f2f2; + padding: 5pt; + margin-top: 5pt; + margin-bottom: 5pt; + } + + .header { + border: 1px solid; + padding: 0 0 5pt 5pt; + margin: 10pt; + white-space: pre; + font-family: monospace; + } + + .code { + border: 1px solid; + padding: 0 0 5pt 5pt; + margin: 10pt; + white-space: pre; + font-family: monospace; + } diff --git a/docs/deploy/mono-api-assembly.html b/docs/deploy/mono-api-assembly.html new file mode 100644 index 0000000000..78d66f4f58 --- /dev/null +++ b/docs/deploy/mono-api-assembly.html @@ -0,0 +1,337 @@ + + + + mono-api-assembly.html + + + +

Assemblies

+ +

Synopsis

+ +
+#include <metadata/assembly.h> + +typedef struct _MonoImage MonoImage; +typedef struct _MonoAssembly MonoAssembly; + +MonoAssembly* mono_assembly_open (const char *filename, + MonoImageOpenStatus *status); +void mono_assembly_close (MonoAssembly *assembly); +MonoAssembly* mono_assembly_load (MonoAssemblyName *aname, + const char *basedir, + MonoImageOpenStatus *status); +MonoAssembly* mono_assembly_load_full (MonoAssemblyName *aname, + const char *basedir, + MonoImageOpenStatus *status, + gboolean refonly); +MonoAssembly* mono_assembly_loaded (MonoAssemblyName *aname); + +MonoImage* mono_assembly_get_image (MonoAssembly *assembly); +MonoAssembly* mono_assembly_get_main (void); +G_CONST_RETURN gchar * mono_assembly_getrootdir (void); +void mono_assembly_name_free (MonoAssemblyName *aname); +char* mono_stringify_assembly_name (MonoAssemblyName *aname); +gboolean mono_assembly_names_equal (MonoAssemblyName *l, + MonoAssemblyName *r); + + + + +
+ + +

Assembly Loading

+ + +
+
mono_assembly_open
+ +
MonoAssembly* +mono_assembly_open (const char *filename, MonoImageOpenStatus *status) + +
+

+Parameters +

filename:
Opens the assembly pointed out by this name
status:
where a status code can be returned
+Returns +
a pointer to the MonoAssembly if filename contains a valid + + assembly or NULL on error. Details about the error are stored in the + status variable.
+Remarks +

+ mono_assembly_open opens the PE-image pointed by filename, and + loads any external assemblies referenced by it. + + +

+
+
mono_assembly_close
+ +
void +mono_assembly_close (MonoAssembly *assembly) + +
+

+Parameters +

assembly:
the assembly to release.
+Remarks +

+ This method releases a reference to the assembly. The assembly is + only released when all the outstanding references to it are released. + +

+
+
mono_assembly_load
+ +
MonoAssembly* +mono_assembly_load (MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status) + +
+

+Parameters +

aname:
A MonoAssemblyName with the assembly name to load.
basedir:
A directory to look up the assembly at.
status:
a pointer to a MonoImageOpenStatus to return the status of the load operation
+Returns +
the assembly referenced by aname loaded or NULL on error. On error the + + value pointed by status is updated with an error code.
+Remarks +

+ Loads the assembly referenced by aname, if the value of basedir is not NULL, it + attempts to load the assembly from that directory before probing the standard locations. + + +

+
+
mono_assembly_load_full
+ +
MonoAssembly* +mono_assembly_load_full (MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status, gboolean refonly) + +
+

+Parameters +

aname:
A MonoAssemblyName with the assembly name to load.
basedir:
A directory to look up the assembly at.
status:
a pointer to a MonoImageOpenStatus to return the status of the load operation
refonly:
Whether this assembly is being opened in "reflection-only" mode.
+Returns +
the assembly referenced by aname loaded or NULL on error. On error the + + value pointed by status is updated with an error code.
+Remarks +

+ Loads the assembly referenced by aname, if the value of basedir is not NULL, it + attempts to load the assembly from that directory before probing the standard locations. + + If the assembly is being opened in reflection-only mode (refonly set to TRUE) then no + assembly binding takes place. + + +

+
+
mono_assembly_loaded
+ +
MonoAssembly* +mono_assembly_loaded (MonoAssemblyName *aname) + +
+

+Parameters +

aname:
an assembly to look for.
+Returns +
NULL If the given aname assembly has not been loaded, or a pointer to + + a MonoAssembly that matches the MonoAssemblyName specified.
+ +
+
+
mono_assembly_get_object
+ +
Prototype: mono_assembly_get_object
+

+ + +

Working with Assemblies

+ + +
+
mono_assembly_get_image
+ +
MonoImage* +mono_assembly_get_image (MonoAssembly *assembly) + +
+

+Parameters +

assembly:
The assembly to retrieve the image from
+Returns +
the MonoImage associated with this assembly. +
+ +
+
+
mono_assembly_get_main
+ +
MonoAssembly* +mono_assembly_get_main (void) + +
+

+Returns +

the assembly for the application, the first assembly that is loaded by the VM +
+ +
+
+
mono_assembly_getrootdir
+ +
G_CONST_RETURN gchar * +mono_assembly_getrootdir (void) + +
+

+Returns +

a string with the directory, this string should not be freed. +
+Remarks +

+ + Obtains the root directory used for looking up assemblies. + + + +

Assembly Names

+ +

The MonoAssemblyName contains the full identity of an + assembly (name, culture, public key, public key token, + version and any other flags). + +

These unmanaged objects represent the System.Reflection.AssemblyName + managed type. + + +

+
mono_assembly_name_free
+ +
void +mono_assembly_name_free (MonoAssemblyName *aname) + +
+

+Parameters +

aname:
assembly name to free
+Remarks +

+ + Frees the provided assembly name object. + (it does not frees the object itself, only the name members). + +

+
+
mono_stringify_assembly_name
+ +
char* +mono_stringify_assembly_name (MonoAssemblyName *aname) + +
+

+Parameters +

aname:
the assembly name.
+Returns +
a newly allocated string with a string representation of + + the assembly name.
+Remarks +

+ Convert aname into its string format. The returned string is dynamically + allocated and should be freed by the caller. + + +

+
+
mono_assembly_names_equal
+ +
gboolean +mono_assembly_names_equal (MonoAssemblyName *l, MonoAssemblyName *r) + +
+

+Parameters +

l:
first assembly
r:
second assembly.
+Returns +
TRUE if both assembly names are equal. +
+Remarks +

+ Compares two MonoAssemblyNames and returns whether they are equal. + + This compares the names, the cultures, the release version and their + public tokens. + + + +

Modules

+ +

An assembly is made up of one or more modules. + + +

+
mono_module_file_get_object
+ +
Prototype: mono_module_file_get_object
+

+ +

+
+
mono_module_get_object
+ +
Prototype: mono_module_get_object
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-class.html b/docs/deploy/mono-api-class.html new file mode 100644 index 0000000000..8ae3defebf --- /dev/null +++ b/docs/deploy/mono-api-class.html @@ -0,0 +1,821 @@ + + + + mono-api-class.html + + + +

Class Operations

+ + +
+
mono_class_array_element_size
+ +
gint32 +mono_class_array_element_size (MonoClass *klass) + +
+

+Parameters +

klass:
+Returns +
the number of bytes an element of type klass + + uses when stored into an array.
+ +
+
+
mono_class_data_size
+ +
gint32 +mono_class_data_size (MonoClass *klass) + +
+

+Parameters +

klass:
a class
+Returns +
the size of the static class data +
+Remarks +

+ + +

+
+
mono_class_enum_basetype
+ +
MonoType* +mono_class_enum_basetype (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the underlying type representation for an enumeration. +
+ +
+
+
mono_class_from_generic_parameter
+ +
Prototype: mono_class_from_generic_parameter
+

+ +

+
+
mono_class_from_mono_type
+ +
Prototype: mono_class_from_mono_type
+

+ +

+
+
mono_class_from_name_case
+ +
MonoClass* +mono_class_from_name_case (MonoImage *image, const char* name_space, const char *name) + +
+

+Parameters +

image:
The MonoImage where the type is looked up in
name_space:
the type namespace
name:
the type short name.
deprecated:
use the _checked variant
+Remarks +

+ Obtains a MonoClass with a given namespace and a given name which + is located in the given MonoImage. The namespace and name + lookups are case insensitive. + +

+
+
mono_class_from_name
+ +
MonoClass* +mono_class_from_name (MonoImage *image, const char* name_space, const char *name) + +
+

+Parameters +

image:
The MonoImage where the type is looked up in
name_space:
the type namespace
name:
the type short name.
+Remarks +

+ Obtains a MonoClass with a given namespace and a given name which + is located in the given MonoImage. + + To reference nested classes, use the "/" character as a separator. + For example use "Foo/Bar" to reference the class Bar that is nested + inside Foo, like this: "class Foo { class Bar {} }". + +

+
+
mono_class_from_typeref
+ +
Prototype: mono_class_from_typeref
+

+ +

+
+
mono_class_get_byref_type
+ +
MonoType* +mono_class_get_byref_type (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Remarks +

+ +

+ +

+
+
mono_class_get_element_class
+ +
MonoClass* +mono_class_get_element_class (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the element class of an array or an enumeration. +
+ +
+
+
mono_class_get_events
+ +
MonoEvent* +mono_class_get_events (MonoClass* klass, gpointer *iter) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
a MonoEvent* on each invocation, or NULL when no more are available. +
+Remarks +

+ This routine is an iterator routine for retrieving the properties in a class. + + You must pass a gpointer that points to zero and is treated as an opaque handle to + iterate over all of the elements. When no more values are + available, the return value is NULL. + + +

+
+
mono_class_get_event_token
+ +
Prototype: mono_class_get_event_token
+

+ +

+
+
mono_class_get_field_from_name
+ +
MonoClassField* +mono_class_get_field_from_name (MonoClass *klass, const char *name) + +
+

+Parameters +

klass:
the class to lookup the field.
name:
the field name
+Returns +
the MonoClassField pointer of the named field or NULL +
+Remarks +

+ Search the class klass and it's parents for a field with the name name. + +

+ +

+
+
mono_class_get_field
+ +
MonoClassField* +mono_class_get_field (MonoClass *class, guint32 field_token) + +
+

+Parameters +

class:
the class to lookup the field.
field_token:
the field token
+Returns +
A MonoClassField representing the type and offset of + + the field, or a NULL value if the field does not belong to this + class.
+ +
+
+
mono_class_get_fields
+ +
MonoClassField* +mono_class_get_fields (MonoClass* klass, gpointer *iter) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
a MonoClassField* on each iteration, or NULL when no more fields are available. +
+Remarks +

+ This routine is an iterator routine for retrieving the fields in a class. + + You must pass a gpointer that points to zero and is treated as an opaque handle to + iterate over all of the elements. When no more values are + available, the return value is NULL. + + +

+
+
mono_class_get_field_token
+ +
guint32 +mono_class_get_field_token (MonoClassField *field) + +
+

+Parameters +

field:
the field we need the token of
+Returns +
the token representing the field in the image it was loaded from. +
+Remarks +

+ Get the token of a field. Note that the tokesn is only valid for the image + the field was loaded from. Don't use this function for fields in dynamic types. + +

+ +

+
+
mono_class_get_flags
+ +
guint32 +mono_class_get_flags (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the flags from the TypeDef table. +
+Remarks +

+ The type flags from the TypeDef table from the metadata. + see the TYPE_ATTRIBUTE_* definitions on tabledefs.h for the + different values. + + +

+
+
mono_class_get_full
+ +
MonoClass* +mono_class_get_full (MonoImage *image, guint32 type_token, MonoGenericContext *context) + +
+

+Parameters +

image:
the image where the class resides
type_token:
the token for the class
context:
the generic context used to evaluate generic instantiations in
deprecated:
Functions that expose MonoGenericContext are going away in mono 4.0
+Returns +
the MonoClass that represents type_token in image +
+ +
+
+
mono_class_get_image
+ +
Prototype: mono_class_get_image
+

+ +

+
+
mono_class_get_interfaces
+ +
MonoClass* +mono_class_get_interfaces (MonoClass* klass, gpointer *iter) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
a Monoclass* on each invocation, or NULL when no more are available. +
+Remarks +

+ This routine is an iterator routine for retrieving the interfaces implemented by this class. + + You must pass a gpointer that points to zero and is treated as an opaque handle to + iterate over all of the elements. When no more values are + available, the return value is NULL. + + +

+
+
mono_class_get_method_from_name
+ +
MonoMethod* +mono_class_get_method_from_name (MonoClass *klass, const char *name, int param_count) + +
+

+Parameters +

klass:
where to look for the method
name:
name of the method
param_count:
number of parameters. -1 for any number.
+Remarks +

+ Obtains a MonoMethod with a given name and number of parameters. + It only works if there are no multiple signatures for any given method name. + +

+
+
mono_class_get_methods
+ +
MonoMethod* +mono_class_get_methods (MonoClass* klass, gpointer *iter) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
a MonoMethod on each iteration or NULL when no more methods are available. +
+Remarks +

+ This routine is an iterator routine for retrieving the fields in a class. + + You must pass a gpointer that points to zero and is treated as an opaque handle to + iterate over all of the elements. When no more values are + available, the return value is NULL. + + +

+
+
mono_class_get
+ +
Prototype: mono_class_get
+

+ +

+
+
mono_class_get_name
+ +
const char* +mono_class_get_name (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the name of the class. +
+ +
+
+
mono_class_get_namespace
+ +
const char* +mono_class_get_namespace (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the namespace of the class. +
+ +
+
+
mono_class_get_nested_types
+ +
MonoClass* +mono_class_get_nested_types (MonoClass* klass, gpointer *iter) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
a Monoclass* on each invocation, or NULL when no more are available. +
+Remarks +

+ This routine is an iterator routine for retrieving the nested types of a class. + This works only if klass is non-generic, or a generic type definition. + + You must pass a gpointer that points to zero and is treated as an opaque handle to + iterate over all of the elements. When no more values are + available, the return value is NULL. + + +

+
+
mono_class_get_nesting_type
+ +
Prototype: mono_class_get_nesting_type
+

+ +

+
+
mono_class_get_parent
+ +
MonoClass* +mono_class_get_parent (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the parent class for this class. +
+ +
+
+
mono_class_get_properties
+ +
MonoProperty* +mono_class_get_properties (MonoClass* klass, gpointer *iter) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
a MonoProperty* on each invocation, or NULL when no more are available. +
+Remarks +

+ This routine is an iterator routine for retrieving the properties in a class. + + You must pass a gpointer that points to zero and is treated as an opaque handle to + iterate over all of the elements. When no more values are + available, the return value is NULL. + + +

+
+
mono_class_get_property_from_name
+ +
Prototype: mono_class_get_property_from_name
+

+ +

+
+
mono_class_get_property_token
+ +
Prototype: mono_class_get_property_token
+

+ +

+
+
mono_class_get_rank
+ +
int +mono_class_get_rank (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the rank for the array (the number of dimensions). +
+ +
+
+
mono_class_get_type
+ +
MonoType* +mono_class_get_type (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the MonoType from the class. +
+Remarks +

+ This method returns the internal Type representation for the class. + + +

+
+
mono_class_inflate_generic_method
+ +
Prototype: mono_class_inflate_generic_method
+

+ +

+
+
mono_class_inflate_generic_type
+ +
Prototype: mono_class_inflate_generic_type
+

+ +

+
+
mono_class_init
+ +
gboolean +mono_class_init (MonoClass *class) + +
+

+Parameters +

class:
the class to initialize
+Remarks +

+ Compute the instance_size, class_size and other infos that cannot be + computed at mono_class_get() time. Also compute vtable_size if possible. + Returns TRUE on success or FALSE if there was a problem in loading + the type (incorrect assemblies, missing assemblies, methods, etc). + + LOCKING: Acquires the loader lock. + +

+
+
mono_class_instance_size
+ +
gint32 +mono_class_instance_size (MonoClass *klass) + +
+

+Parameters +

klass:
a class
+Returns +
the size of an object instance +
+Remarks +

+ + +

+
+
mono_class_is_assignable_from
+ +
gboolean +mono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass) + +
+

+Parameters +

klass:
the class to be assigned to
oklass:
the source class
+Returns +
true if an instance of object oklass can be assigned to an + + instance of object klass
+ +
+
+
mono_class_is_enum
+ +
gboolean +mono_class_is_enum (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
true if the MonoClass represents an enumeration. +
+ +
+
+
mono_class_is_subclass_of
+ +
gboolean +mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, + gboolean check_interfaces) + +
+

+Parameters +

klass:
class to probe if it is a subclass of another one
klassc:
the class we suspect is the base class
check_interfaces:
whether we should perform interface checks
+Remarks +

+ This method determines whether klass is a subclass of klassc. + + If the check_interfaces flag is set, then if klassc is an interface + this method return true if the klass implements the interface or + if klass is an interface, if one of its base classes is klass. + + If check_interfaces is false then, then if klass is not an interface + then it returns true if the klass is a subclass of klassc. + + if klass is an interface and klassc is System.Object, then this function + return true. + + +

+
+
mono_class_is_valuetype
+ +
gboolean +mono_class_is_valuetype (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
true if the MonoClass represents a ValueType. +
+ +
+
+
mono_class_min_align
+ +
gint32 +mono_class_min_align (MonoClass *klass) + +
+

+Parameters +

klass:
a class
+Returns +
minimm alignment requirements +
+Remarks +

+ + +

+
+
mono_class_num_events
+ +
int +mono_class_num_events (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the number of events in the class. +
+ +
+
+
mono_class_num_fields
+ +
int +mono_class_num_fields (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the number of static and instance fields in the class. +
+ +
+
+
mono_class_num_methods
+ +
int +mono_class_num_methods (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the number of methods in the class. +
+ +
+
+
mono_class_num_properties
+ +
int +mono_class_num_properties (MonoClass *klass) + +
+

+Parameters +

klass:
the MonoClass to act on
+Returns +
the number of properties in the class. +
+ +
+
+
mono_class_value_size
+ +
gint32 +mono_class_value_size (MonoClass *klass, guint32 *align) + +
+

+Parameters +

klass:
a class
+Returns +
the size of a value of kind klass +
+Remarks +

+ This function is used for value types, and return the + space and the alignment to store that kind of value object. + + +

+
+
mono_class_vtable
+ +
MonoVTable* +mono_class_vtable (MonoDomain *domain, MonoClass *class) + +
+

+Parameters +

domain:
the application domain
class:
the class to initialize
+Remarks +

+ VTables are domain specific because we create domain specific code, and + they contain the domain specific static class data. + On failure, NULL is returned, and class->exception_type is set. + +

+
+
mono_class_get_method_from_name_flags
+ +
MonoMethod* +mono_class_get_method_from_name_flags (MonoClass *klass, const char *name, int param_count, int flags) + +
+

+Parameters +

klass:
where to look for the method
name_space:
name of the method
param_count:
number of parameters. -1 for any number.
flags:
flags which must be set in the method
+Remarks +

+ Obtains a MonoMethod with a given name and number of parameters. + It only works if there are no multiple signatures for any given method name. + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-codegen.html b/docs/deploy/mono-api-codegen.html new file mode 100644 index 0000000000..ef2db8fafb --- /dev/null +++ b/docs/deploy/mono-api-codegen.html @@ -0,0 +1,162 @@ + + + + mono-api-codegen.html + + + +

Code manager

+ + +
+
mono_code_manager_commit
+ +
void +mono_code_manager_commit (MonoCodeManager *cman, void *data, int size, int newsize) + +
+

+Parameters +

cman:
a code manager
data:
the pointer returned by mono_code_manager_reserve ()
size:
the size requested in the call to mono_code_manager_reserve ()
newsize:
the new size to reserve
+Remarks +

+ If we reserved too much room for a method and we didn't allocate + already from the code manager, we can get back the excess allocation + for later use in the code manager. + +

+
+
mono_code_manager_destroy
+ +
void +mono_code_manager_destroy (MonoCodeManager *cman) + +
+

+Parameters +

cman:
a code manager
+Remarks +

+ Free all the memory associated with the code manager cman. + +

+
+
mono_code_manager_foreach
+ +
void +mono_code_manager_foreach (MonoCodeManager *cman, MonoCodeManagerFunc func, void *user_data) + +
+

+Parameters +

cman:
a code manager
func:
a callback function pointer
user_data:
additional data to pass to func
+Remarks +

+ Invokes the callback func for each different chunk of memory allocated + in the code manager cman. + +

+
+
mono_code_manager_invalidate
+ +
void +mono_code_manager_invalidate (MonoCodeManager *cman) + +
+

+Parameters +

cman:
a code manager
+Remarks +

+ Fill all the memory with an invalid native code value + so that any attempt to execute code allocated in the code + manager cman will fail. This is used for debugging purposes. + +

+
+
mono_code_manager_new_dynamic
+ +
MonoCodeManager* +mono_code_manager_new_dynamic (void) + +
+

+Returns +

the new code manager +
+Remarks +

+ Creates a new code manager suitable for holding native code that can be + used for single or small methods that need to be deallocated independently + of other native code. + + +

+
+
mono_code_manager_new
+ +
MonoCodeManager* +mono_code_manager_new (void) + +
+

+Returns +

the new code manager +
+Remarks +

+ Creates a new code manager. A code manager can be used to allocate memory + suitable for storing native code that can be later executed. + A code manager allocates memory from the operating system in large chunks + (typically 64KB in size) so that many methods can be allocated inside them + close together, improving cache locality. + + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-counters.html b/docs/deploy/mono-api-counters.html new file mode 100644 index 0000000000..76706d2967 --- /dev/null +++ b/docs/deploy/mono-api-counters.html @@ -0,0 +1,128 @@ + + + + mono-api-counters.html + + + +

Counters

+ +

Counters is a Mono API for flexible statistics collection + and is used to track different events inside the JIT. + +

You would typically register an address with the + mono_counters_register routine and increment the + counters from your application as you go. At the end of the + program you would call mono_counters_dump which will display + all the registered counters. + +

If you need more complicated counter computation, a + function can be provided instead of an address. In that case + the MONO_COUNTER_CALLBACK flag must be ored in the + type request. + +

The types that can be rendered are: + +

+       MONO_COUNTER_INT
+       MONO_COUNTER_UINT
+       MONO_COUNTER_WORD
+       MONO_COUNTER_LONG
+       MONO_COUNTER_ULONG
+       MONO_COUNTER_DOUBLE
+       MONO_COUNTER_STRING
+
+ +

To organize the output, you register also a section where + the counter will be displayed, or one of the following values + when you register your counter: + +

+
+       MONO_COUNTER_JIT
+       MONO_COUNTER_GC
+       MONO_COUNTER_METADATA
+       MONO_COUNTER_GENERICS
+       MONO_COUNTER_SECURITY
+
+ + +
+
mono_counters_dump
+ +
void +mono_counters_dump (int section_mask, FILE *outfile) + +
+

+Parameters +

section_mask:
The sections to dump counters for
outfile:
a FILE to dump the results to
+Remarks +

+ Displays the counts of all the enabled counters registered. + To filter by variance, you can OR one or more variance with the specific section you want. + Use MONO_COUNTER_SECTION_MASK to dump all categories of a specific variance. + +

+
+
mono_counters_enable
+ +
void +mono_counters_enable (int section_mask) + +
+

+Parameters +

section_mask:
a mask listing the sections that will be displayed
+Remarks +

+ This is used to track which counters will be displayed. + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-debug.html b/docs/deploy/mono-api-debug.html new file mode 100644 index 0000000000..78b31a386d --- /dev/null +++ b/docs/deploy/mono-api-debug.html @@ -0,0 +1,180 @@ + + + + mono-api-debug.html + + + + +
+
mono_debug_il_offset_from_address
+ +
gint32 +mono_debug_il_offset_from_address (MonoMethod *method, MonoDomain *domain, guint32 native_offset) + +
+

+Remarks +

+ Compute the IL offset corresponding to NATIVE_OFFSET inside the native + code of METHOD in DOMAIN. + +

+
+
mono_debug_add_method
+ +
Prototype: mono_debug_add_method
+

+ +

+
+
mono_debug_close_mono_symbol_file
+ +
Prototype: mono_debug_close_mono_symbol_file
+

+ +

+
+
mono_debug_find_method
+ +
Prototype: mono_debug_find_method
+

+ +

+
+
mono_debug_using_mono_debugger
+ +
Prototype: mono_debug_using_mono_debugger
+

+ + +

Mono Debugger Interface

+ +

These are methods that are invoked by the debugger at + runtime. + + +

+
mono_debugger_breakpoint_callback
+ +
Prototype: mono_debugger_breakpoint_callback
+

+ +

+
+
mono_debugger_check_runtime_version
+ +
Prototype: mono_debugger_check_runtime_version
+

+ +

+
+
mono_debugger_event
+ +
Prototype: mono_debugger_event
+

+ +

+
+
mono_debugger_handle_exception
+ +
Prototype: mono_debugger_handle_exception
+

+ +

+
+
mono_debugger_insert_breakpoint_full
+ +
Prototype: mono_debugger_insert_breakpoint_full
+

+ +

+
+
mono_debugger_insert_breakpoint
+ +
Prototype: mono_debugger_insert_breakpoint
+

+ +

+
+
mono_debugger_lock
+ +
Prototype: mono_debugger_lock
+

+ +

+
+
mono_debugger_method_has_breakpoint
+ +
Prototype: mono_debugger_method_has_breakpoint
+

+ +

+
+
mono_debugger_remove_breakpoint
+ +
Prototype: mono_debugger_remove_breakpoint
+

+ +

+
+
mono_debugger_runtime_invoke
+ +
Prototype: mono_debugger_runtime_invoke
+

+ +

+
+
mono_debugger_unlock
+ +
Prototype: mono_debugger_unlock
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-decimal.html b/docs/deploy/mono-api-decimal.html new file mode 100644 index 0000000000..52a9bdb862 --- /dev/null +++ b/docs/deploy/mono-api-decimal.html @@ -0,0 +1,151 @@ + + + + mono-api-decimal.html + + + +

Decimal Support

+ +

You can use the mono_decimal functions to access and + manipulate System.Decimal types from C. + + +

+
mono_decimal2double
+ +
Prototype: mono_decimal2double
+

+ +

+
+
mono_decimal2Int64
+ +
Prototype: mono_decimal2Int64
+

+ +

+
+
mono_decimal2string
+ +
Prototype: mono_decimal2string
+

+ +

+
+
mono_decimal2UInt64
+ +
Prototype: mono_decimal2UInt64
+

+ +

+
+
mono_decimalCompare
+ +
Prototype: mono_decimalCompare
+

+ +

+
+
mono_decimalDiv
+ +
Prototype: mono_decimalDiv
+

+ +

+
+
mono_decimalFloorAndTrunc
+ +
Prototype: mono_decimalFloorAndTrunc
+

+ +

+
+
mono_decimalIncr
+ +
Prototype: mono_decimalIncr
+

+ +

+
+
mono_decimalIntDiv
+ +
Prototype: mono_decimalIntDiv
+

+ +

+
+
mono_decimalMult
+ +
Prototype: mono_decimalMult
+

+ +

+
+
mono_decimalRound
+ +
Prototype: mono_decimalRound
+

+ +

+
+
mono_decimalSetExponent
+ +
Prototype: mono_decimalSetExponent
+

+ +

+
+
mono_double2decimal
+ +
Prototype: mono_double2decimal
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-domains.html b/docs/deploy/mono-api-domains.html new file mode 100644 index 0000000000..3966740020 --- /dev/null +++ b/docs/deploy/mono-api-domains.html @@ -0,0 +1,307 @@ + + + + mono-api-domains.html + + + +

Application Domains

+ +

Synopsis

+ +
+#include <metadata/appdomain.h> + +/* Managed AppDomain */ +typedef struct _MonoAppDomain MonoAppDomain; + +/* Unmanaged representation */ +typedef struct _MonoDomain MonoDomain; + +/* Represents System.Runtime.Remoting.Contexts.Context */ +typedef struct _MonoAppContext MonoAppContext +MonoAssembly* mono_domain_assembly_open (MonoDomain *domain, + const char *name); + +gboolean mono_domain_finalize (MonoDomain *domain, + guint32 timeout) ; + + + +MonoDomain* mono_domain_get_by_id (gint32 domainid) ; +MonoDomain* mono_domain_get (); +gboolean mono_domain_has_type_resolve (MonoDomain *domain); + +void mono_domain_set_internal (MonoDomain *domain); +gboolean mono_domain_set (MonoDomain *domain, + gboolean force); +MonoReflectionAssembly* mono_domain_try_type_resolve (MonoDomain *domain, + char *name, + MonoObject *tb); +gboolean mono_domain_owns_vtable_slot (MonoDomain *domain, + gpointer vtable_slot); + + + +
+ +

Application domains are used to isolate multiple + applications on a single Mono virtual machine. They are + conceptually similiar to processes, the difference is that + processes are managed by the operating system, while + application domains are managed by the Mono virtual machine. + +

For more information on applications domains see the AppDomain FAQ. + +

The MonoDomain is the unmanaged representation of + the System.AppDomain + managed type, while the MonoAppDomain type represents + the managed version (MonoAppDomain has a pointer to + a MonoDomain). + + +

+
mono_domain_assembly_open
+ +
MonoAssembly* +mono_domain_assembly_open (MonoDomain *domain, const char *name) + +
+

+Parameters +

domain:
the application domain
name:
file name of the assembly
+Remarks +

+ fixme: maybe we should integrate this with mono_assembly_open ?? + +

+
+
mono_domain_create
+ +
Prototype: mono_domain_create
+

+ +

+
+
mono_domain_finalize
+ +
+gboolean +mono_domain_finalize (MonoDomain *domain, guint32 timeout) + +
+

+Parameters +

domain:
the domain to finalize
timeout:
msects to wait for the finalization to complete, -1 to wait indefinitely
+Returns +
TRUE if succeeded, FALSE if there was a timeout +
+Remarks +

+ Request finalization of all finalizable objects inside domain. Wait + timeout msecs for the finalization to complete. + + +

+
+
mono_domain_foreach
+ +
Prototype: mono_domain_foreach
+

+ +

+
+
mono_domain_free
+ +
Prototype: mono_domain_free
+

+ +

+
+
mono_domain_get_by_id
+ +
Prototype: mono_domain_get_by_id
+

+ +

+
+
mono_domain_get_id
+ +
MonoDomain* +mono_domain_get_by_id (gint32 domainid) + +
+

+Parameters +

domainid:
the ID
+Returns +
the a domain for a specific domain id. +
+ +
+
+
mono_domain_get
+ +
MonoDomain* +mono_domain_get () + +
+

+Returns +

the current domain, to obtain the root domain use + + mono_get_root_domain().
+ +
+
+
mono_domain_has_type_resolve
+ +
gboolean +mono_domain_has_type_resolve (MonoDomain *domain) + +
+

+Parameters +

domain:
application domains being looked up
+Remarks +

+ Returns true if the AppDomain.TypeResolve field has been + set. + +

+
+
mono_domain_is_unloading
+ +
Prototype: mono_domain_is_unloading
+

+ +

+
+
mono_domain_set_internal
+ +
void +mono_domain_set_internal (MonoDomain *domain) + +
+

+Parameters +

domain:
the new domain
+Remarks +

+ Sets the current domain to domain. + +

+
+
mono_domain_set
+ +
gboolean +mono_domain_set (MonoDomain *domain, gboolean force) + +
+

+Parameters +

domain:
domain
force:
force setting.
+Returns +
+ + TRUE on success; + FALSE if the domain is unloaded
+Remarks +

+ Set the current appdomain to domain. If force is set, set it even + if it is being unloaded. + + +

+
+
mono_domain_try_type_resolve
+ +
MonoReflectionAssembly* +mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb) + +
+

+Parameters +

domain:
application domainwhere the name where the type is going to be resolved
name:
the name of the type to resolve or NULL.
tb:
A System.Reflection.Emit.TypeBuilder, used if name is NULL.
+Returns +
A MonoReflectionAssembly or NULL if not found +
+Remarks +

+ This routine invokes the internal System.AppDomain.DoTypeResolve and returns + the assembly that matches name. + + If name is null, the value of ((TypeBuilder)tb).FullName is used instead + + +

+
+
mono_domain_owns_vtable_slot
+ +
gboolean +mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot) + +
+

+Remarks +

+ Returns whenever VTABLE_SLOT is inside a vtable which belongs to DOMAIN. + + +

Contexts

+ + +
+
mono_context_get
+ +
Prototype: mono_context_get
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-dynamic-codegen.html b/docs/deploy/mono-api-dynamic-codegen.html new file mode 100644 index 0000000000..c25acd6b79 --- /dev/null +++ b/docs/deploy/mono-api-dynamic-codegen.html @@ -0,0 +1,361 @@ + + + + mono-api-dynamic-codegen.html + + + +

Dynamic Code Generation

+ +

The dynamic code generation interface inside the Mono + runtime is similar to the API exposed by + System.Reflection.Emit. + +

This interface is used by Mono internally to generate code + on the flight in a cross-platform fashion. For example, + P/Invoke marshalling in Mono is implemented in terms of this + interface, but it is also used in various other parts of the + runtime. + +

Unlike Reflection.Emit, the dynamic code generation + interface does not start with an assembly builder. The code + generation interface starts directly at the method level, + which is represented by a pointer to the MonoMethodBuilder + structure. + +

To JIT this method, the process is this: + +

    +
  • Create a MonoMethodBuilder object using + the mono_mb_new method. The method's class + is specified as the first argument. + +
  • Create the method signature, using + mono_metadata_signature_alloc. The call + takes the number of arguments that the method takes. + Then you must initialize the types for each one of the + parameters. + +
  • Emit the CIL code, using one of the + mono_mb_emit_* functions. There are some + helper routines that you can use. + +
  • Create the MonoMethod from the + MethodBuilder using + mono_mb_create_method. + +
  • Release the MonoMethodBuilder resources + using mono_mb_free. +
+ +

The result of this process is a MonoMethod which + can be called using mono_create_jit_trampoline + routine or can be passed to any other functions that require + the MonoMethod. + +

Example: + +

+MonoMethod *adder ()
+{
+    MonoMethodBuilder *mb;
+    MonoMethodSignature *sig;
+    MonoMethod *method;
+    
+    mb = mono_mb_new (mono_defaults.object_class, "adder", MONO_WRAPPER_NONE);
+
+    /* Setup method signature */
+    sig = mono_metadata_signature_alloc (2);
+    sig->ret = &mono_get_int32_class ()->byval_arg;
+    sig->params [0] = &mono_get_int32_class ()->byval_arg;
+    sig->params [1] = &mono_defaults.int32_class->byval_arg;
+
+    /* Emit CIL code */
+    mono_mb_emit_ldarg (mb, 0);
+    mono_mb_emit_ldarg (mb, 1);
+    mono_mb_emit_byte (mb, CEE_ADD);
+    mono_mb_emit_byte (mb, CEE_RET);
+
+    /* Get the method */
+    method = mono_mb_create_method (mb, sig, max_stack);
+    
+    /* Cleanup */
+    mono_mb-free (mb);
+    return method;
+}
+	
+ + +
+
mono_mb_new
+ +
Prototype: mono_mb_new
+

+ + +

The possible values for the type argument are: + +

+        MONO_WRAPPER_NONE
+        MONO_WRAPPER_DELEGATE_INVOKE
+        MONO_WRAPPER_DELEGATE_BEGIN_INVOKE
+        MONO_WRAPPER_DELEGATE_END_INVOKE
+        MONO_WRAPPER_RUNTIME_INVOKE
+        MONO_WRAPPER_NATIVE_TO_MANAGED
+        MONO_WRAPPER_MANAGED_TO_NATIVE
+        MONO_WRAPPER_REMOTING_INVOKE
+        MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK
+        MONO_WRAPPER_XDOMAIN_INVOKE
+        MONO_WRAPPER_XDOMAIN_DISPATCH
+        MONO_WRAPPER_LDFLD
+        MONO_WRAPPER_STFLD
+        MONO_WRAPPER_LDFLD_REMOTE
+        MONO_WRAPPER_STFLD_REMOTE
+        MONO_WRAPPER_SYNCHRONIZED
+        MONO_WRAPPER_DYNAMIC_METHOD
+        MONO_WRAPPER_ISINST
+        MONO_WRAPPER_CASTCLASS
+        MONO_WRAPPER_PROXY_ISINST
+        MONO_WRAPPER_STELEMREF
+        MONO_WRAPPER_UNBOX
+        MONO_WRAPPER_LDFLDA
+        MONO_WRAPPER_UNKNOWN
+
+ +

Emitting IL

+ +

Functions that can be used to generate IL on the flight, + similar in spirit to System.Reflection.Emit.ILGenerator. + + +

+
mono_mb_emit_add_to_local
+ +
Prototype: mono_mb_emit_add_to_local
+

+ +

+
+
mono_mb_emit_branch
+ +
Prototype: mono_mb_emit_branch
+

+ +

+
+
mono_mb_emit_byte
+ +
Prototype: mono_mb_emit_byte
+

+ +

+
+
mono_mb_emit_exception
+ +
Prototype: mono_mb_emit_exception
+

+ +

+
+
mono_mb_emit_i2
+ +
Prototype: mono_mb_emit_i2
+

+ +

+
+
mono_mb_emit_i4
+ +
Prototype: mono_mb_emit_i4
+

+ +

+
+
mono_mb_emit_icon
+ +
Prototype: mono_mb_emit_icon
+

+ +

+
+
mono_mb_emit_ldarg_addr
+ +
Prototype: mono_mb_emit_ldarg_addr
+

+ +

+
+
mono_mb_emit_ldarg
+ +
Prototype: mono_mb_emit_ldarg
+

+ +

+
+
mono_mb_emit_ldflda
+ +
Prototype: mono_mb_emit_ldflda
+

+ +

+
+
mono_mb_emit_ldloc_addr
+ +
Prototype: mono_mb_emit_ldloc_addr
+

+ +

+
+
mono_mb_emit_ldloc
+ +
Prototype: mono_mb_emit_ldloc
+

+ +

+
+
mono_mb_emit_ldstr
+ +
Prototype: mono_mb_emit_ldstr
+

+ +

+
+
mono_mb_emit_managed_call
+ +
Prototype: mono_mb_emit_managed_call
+

+ +

+
+
mono_mb_emit_native_call
+ +
Prototype: mono_mb_emit_native_call
+

+ +

+
+
mono_mb_emit_stloc
+ +
Prototype: mono_mb_emit_stloc
+

+ + +

Local variables and Methods

+ +
+
mono_mb_create_method
+ +
MonoMethod* +mono_mb_create_method (MonoMethodBuilder *mb, MonoMethodSignature *signature, int max_stack) + +
+

+Returns +

the newly created method. + +
+Remarks +

+ Create a MonoMethod from this method builder. + +

+
+
mono_mb_add_data
+ +
Prototype: mono_mb_add_data
+

+ +

+
+
mono_mb_add_local
+ +
Prototype: mono_mb_add_local
+

+ +

+
+
mono_mb_free
+ +
Prototype: mono_mb_free
+

+ + +

Patching Addresses

+ +
+
mono_mb_patch_addr
+ +
Prototype: mono_mb_patch_addr
+

+ +

+
+
mono_mb_patch_addr_s
+ +
Prototype: mono_mb_patch_addr_s
+

+ + +

Method Signatures

+ +
+
mono_metadata_signature_alloc
+ +
Prototype: mono_metadata_signature_alloc
+

+ +

+
+
mono_metadata_signature_dup
+ +
Prototype: mono_metadata_signature_dup
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-embedding.html b/docs/deploy/mono-api-embedding.html new file mode 100644 index 0000000000..1c4cef595d --- /dev/null +++ b/docs/deploy/mono-api-embedding.html @@ -0,0 +1,428 @@ + + + + mono-api-embedding.html + + + +

Embedding Mono

+ +

The simplest way of embedding Mono is illustrated here: +

+int main (int argc, char *argv)
+{
+	/*
+	 * Load the default Mono configuration file, this is needed
+	 * if you are planning on using the dllmaps defined on the
+	 * system configuration
+	 */
+	mono_config_parse (NULL);
+
+	/*
+	 * mono_jit_init() creates a domain: each assembly is
+	 * loaded and run in a MonoDomain.
+	 */
+	MonoDomain *domain = mono_jit_init ("startup.exe");
+
+	/*
+	 * Optionally, add an internal call that your startup.exe
+	 * code can call, this will bridge startup.exe to Mono
+	 */
+	mono_add_internal_call ("Sample::GetMessage", getMessage);
+
+	/*
+	 * Open the executable, and run the Main method declared
+	 * in the executable
+	 */
+	MonoAssembly *assembly = mono_domain_assembly_open (domain, "startup.exe");
+
+	if (!assembly)
+		exit (2);
+	/*
+	 * mono_jit_exec() will run the Main() method in the assembly.
+	 * The return value needs to be looked up from
+	 * System.Environment.ExitCode.
+	 */
+	mono_jit_exec (domain, assembly, argc, argv);
+}
+
+/* The C# signature for this method is: string GetMessage () in class Sample */
+MonoString*
+getMessage ()
+{
+	return mono_string_new (mono_domain_get (), "Hello, world");
+}
+
+ + +
+
mono_jit_init
+ +
Prototype: mono_jit_init
+

+ +

+
+
mono_jit_exec
+ +
int +mono_jit_exec (MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[]) + +
+

+Parameters +

assembly:
reference to an assembly
argc:
argument count
argv:
argument vector
+Remarks +

+ Start execution of a program. + +

+
+
mono_set_dirs
+ +
void +mono_set_dirs (const char *assembly_dir, const char *config_dir) + +
+

+Parameters +

assembly_dir:
the base directory for assemblies
config_dir:
the base directory for configuration files
+Remarks +

+ This routine is used internally and by developers embedding + the runtime into their own applications. + + There are a number of cases to consider: Mono as a system-installed + package that is available on the location preconfigured or Mono in + a relocated location. + + If you are using a system-installed Mono, you can pass NULL + to both parameters. If you are not, you should compute both + directory values and call this routine. + + The values for a given PREFIX are: + + assembly_dir: PREFIX/lib + config_dir: PREFIX/etc + + Notice that embedders that use Mono in a relocated way must + compute the location at runtime, as they will be in control + of where Mono is installed. + +

+
+
mono_main
+ +
int +mono_main (int argc, char* argv[]) + +
+

+Parameters +

argc:
number of arguments in the argv array
argv:
array of strings containing the startup arguments
+Remarks +

+ Launches the Mono JIT engine and parses all the command line options + in the same way that the mono command line VM would. + +

+
+
mono_parse_default_optimizations
+ +
Prototype: mono_parse_default_optimizations
+

+ + +

+
+
mono_jit_cleanup
+ +
Prototype: mono_jit_cleanup
+

+ +

+
+
mono_set_defaults
+ +
Prototype: mono_set_defaults
+

+ + +

Internal Calls

+ +

The Mono runtime provides two mechanisms to expose C code + to the CIL universe: internal calls and native C + code. Internal calls are tightly integrated with the runtime, + and have the least overhead, as they use the same data types + that the runtime uses. + +

The other option is to use the Platform Invoke (P/Invoke) + to call C code from the CIL universe, using the standard + P/Invoke + mechanisms. + +

To register an internal call, use this call you use the + mono_add_internal_call + routine. + + +

+
mono_add_internal_call
+ +
Prototype: mono_add_internal_call
+

+ + +

P/Invoke with embedded applications

+ +

Unlike internal calls, Platform/Invoke is easier to use and + more portable. It allows you to share code with Windows and + .NET that have a different setup for internal calls to their + own runtime. + +

Usually P/Invoke declarations reference external libraries + like: + +

+	[DllImport ("opengl")]
+	void glBegin (GLEnum mode)
+	
+ +

Mono extends P/Invoke to support looking up symbols not in + an external library, but looking up those symbols into the + same address space as your program, to do this, use the + special library name "__Internal". This will direct Mono to + lookup the method in your own process. + +

There are situations where the host operating system does + not support looking up symbols on the process address space. + For situations like this you can use + the mono_dl_register_library. + +

mono_dl_register_library

+ +

Data Marshalling

+ +

Managed objects are represented as MonoObject* + types. Those objects that the runtime consumes directly have + more specific C definitions (for example strings are of type + MonoString *, delegates are of type + MonoDelegate* but they are still MonoObject + *s). + +

As of Mono 1.2.x types defined in mscorlib.dll do not have + their fields reordered in any way. But other libraries might + have their fields reordered. In these cases, Managed + structures and objects have the same layout in the C# code as + they do in the unmanaged world. + +

Structures defined outside corlib must have a specific + StructLayout definition, and have it set as sequential if you + plan on accessing these fields directly from C code. + +

Important Internal calls do not provide support for + marshalling structures. This means that any API calls that + take a structure (excluding the system types like int32, + int64, etc) must be passed as a pointer, in C# this means + passing the value as a "ref" or "out" parameter. + +

Mono Runtime Configuration

+ +

Certain features of the Mono runtime, like DLL mapping, are + available through a configuration file that is loaded at + runtime. The default Mono implementation loads the + configuration file from $sysconfig/mono/config + (typically this is /etc/mono/config). + +

See the mono-config(5) man page for more details + on what goes in this file. + +

The following APIs expose this functionality: + + +

+
mono_config_parse
+ +
void +mono_config_parse (const char *filename) +
+

+Parameters +

filename:
the filename to load the configuration variables from.
+Remarks +

+ Pass a NULL filename to parse the default config files + (or the file in the MONO_CONFIG env var). + +

+
+
mono_config_parse_memory
+ +
void +mono_config_parse_memory (const char *buffer) + +
+

+Parameters +

buffer:
a pointer to an string XML representation of the configuration
+Remarks +

+ Parses the configuration from a buffer + +

+
+
mono_get_config_dir
+ +
Prototype: mono_get_config_dir
+

+ + +

Function Pointers

+ +

To wrap a function pointer into something that the Mono + runtime can consume, you should use the mono_create_ftnptr. + This is only important if you plan on running on the IA64 + architecture. Otherwise you can just use the function + pointer address. + + +

+
mono_create_ftnptr
+ +
Prototype: mono_create_ftnptr
+

+ + +

Advanced Execution Setups

+ +

These are not recommended ways of initializing Mono, they + are done internally by mono_jit_init, but are here to explain + what happens internally. + + +

+
mono_runtime_exec_managed_code
+ +
void +mono_runtime_exec_managed_code (MonoDomain *domain, + MonoMainThreadFunc main_func, + gpointer main_args) + +
+

+Parameters +

domain:
Application domain
main_func:
function to invoke from the execution thread
main_args:
parameter to the main_func
+Remarks +

+ Launch a new thread to execute a function + + main_func is called back from the thread with main_args as the + parameter. The callback function is expected to start Main() + eventually. This function then waits for all managed threads to + finish. + It is not necesseray anymore to execute managed code in a subthread, + so this function should not be used anymore by default: just + execute the code and then call mono_thread_manage (). + +

+
+
mono_runtime_exec_main
+ +
Prototype: mono_runtime_exec_main
+

+ +

+
+
mono_init_from_assembly
+ +
MonoDomain* +mono_init_from_assembly (const char *domain_name, const char *filename) + +
+

+Parameters +

domain_name:
name to give to the initial domain
filename:
filename to load on startup
+Returns +
the initial domain. +
+Remarks +

+ Used by the runtime, users should use mono_jit_init instead. + + Creates the initial application domain and initializes the mono_defaults + structure. + This function is guaranteed to not run any IL code. + The runtime is initialized using the runtime version required by the + provided executable. The version is determined by looking at the exe + configuration file and the version PE field) + + +

+
+
mono_init
+ +
MonoDomain* +mono_init (const char *domain_name) + +
+

+Returns +

the initial domain. +
+Remarks +

+ + Creates the initial application domain and initializes the mono_defaults + structure. + This function is guaranteed to not run any IL code. + The runtime is initialized using the default runtime version. + + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-exc.html b/docs/deploy/mono-api-exc.html new file mode 100644 index 0000000000..774a8a61d4 --- /dev/null +++ b/docs/deploy/mono-api-exc.html @@ -0,0 +1,694 @@ + + + + mono-api-exc.html + + + +

Exception Handling

+ +
+void mono_raise_exception (MonoException *ex) ; +void mono_unhandled_exception (MonoObject *exc); +void mono_print_unhandled_exception (MonoObject *exc); +MonoException* mono_exception_from_name_domain (MonoDomain *domain, + MonoImage *image, + ; +MonoException* mono_exception_from_name (MonoImage *image, + const char *name_space; +MonoException* mono_exception_from_name_msg (MonoImage *image, + const char *name_space; +MonoException* mono_exception_from_name_two_strings (MonoImage *image, + const char *name_space; +MonoException* mono_get_exception_appdomain_unloaded (void); +MonoException* mono_get_exception_argument (const char *arg, + const char *msg); +MonoException* mono_get_exception_argument_null (const char *arg); +MonoException* mono_get_exception_argument_out_of_range (const char *arg); +MonoException* mono_get_exception_arithmetic (); +MonoException* mono_get_exception_array_type_mismatch (); +MonoException* mono_get_exception_bad_image_format (const char *msg); +MonoException* mono_get_exception_cannot_unload_appdomain (const char *msg); + +MonoException* mono_get_exception_divide_by_zero (); +MonoException* mono_get_exception_execution_engine (const char *msg); +MonoException* mono_get_exception_file_not_found2 (const char *msg, + MonoString *fname); +MonoException* mono_get_exception_file_not_found (MonoString *fname); +MonoException* mono_get_exception_index_out_of_range (); +MonoException* mono_get_exception_invalid_cast (); +MonoException* mono_get_exception_io (const char *msg); +MonoException* mono_get_exception_missing_method (const char *class_name, + const char *member_name); +MonoException* mono_get_exception_not_implemented (const char *msg); +MonoException* mono_get_exception_null_reference (); +MonoException* mono_get_exception_overflow (); +MonoException* mono_get_exception_security (); +MonoException* mono_get_exception_serialization (const char *msg); +MonoException* mono_get_exception_stack_overflow (void); +MonoException* mono_get_exception_synchronization_lock (const char *msg); +MonoException* mono_get_exception_thread_abort (); +MonoException* mono_get_exception_thread_state (const char *msg); +MonoException* mono_get_exception_type_initialization (const gchar *type_name, + MonoException *inner); +MonoException* mono_get_exception_type_load (MonoString *class_name, + char *assembly_name); +MonoException* mono_get_exception_invalid_operation (const char *msg); +MonoException* mono_get_exception_missing_field (const char *class_name, + const char *member_name); +MonoException* mono_get_exception_not_supported (const char *msg); +MonoException* mono_get_exception_reflection_type_load (MonoArray *types, + MonoArray *exceptions); + +
+ +

Raising and Catching exceptions

+ + +
+
mono_raise_exception
+ +
void +mono_raise_exception (MonoException *ex) + +
+

+Parameters +

ex:
exception object
+Remarks +

+ Signal the runtime that the exception ex has been raised in unmanaged code. + +

+
+
mono_unhandled_exception
+ +
void +mono_unhandled_exception (MonoObject *exc) + +
+

+Parameters +

exc:
exception thrown
+Remarks +

+ This is a VM internal routine. + + We call this function when we detect an unhandled exception + in the default domain. + + It invokes the * UnhandledException event in AppDomain or prints + a warning to the console + +

+
+
mono_print_unhandled_exception
+ +
void +mono_print_unhandled_exception (MonoObject *exc) + +
+

+Parameters +

exc:
The exception
+Remarks +

+ Prints the unhandled exception. + + + +

Exception Types: General API

+ + +
+
mono_exception_from_name_domain
+ +
MonoException* +mono_exception_from_name_domain (MonoDomain *domain, MonoImage *image, + const char* name_space, const char *name) + +
+

+Parameters +

domain:
Domain where the return object will be created.
image:
the Mono image where to look for the class
name_space:
the namespace for the class
name:
class name
+Returns +
the initialized exception instance. +
+Remarks +

+ Creates an exception object of the given namespace/name class on + the given domain. + + +

+
+
mono_exception_from_name
+ +
MonoException* +mono_exception_from_name (MonoImage *image, const char *name_space, + const char *name) + +
+

+Parameters +

image:
the Mono image where to look for the class
name_space:
the namespace for the class
name:
class name
+Returns +
the initialized exception instance. +
+Remarks +

+ Creates an exception of the given namespace/name class in the + current domain. + + +

+
+
mono_exception_from_name_msg
+ +
MonoException* +mono_exception_from_name_msg (MonoImage *image, const char *name_space, + const char *name, const char *msg) + +
+

+Parameters +

image:
the Mono image where to look for the class
name_space:
the namespace for the class
name:
class name
msg:
the message to embed inside the exception
+Returns +
the initialized exception instance. +
+Remarks +

+ Creates an exception and initializes its message field. + + +

+
+
mono_exception_from_name_two_strings
+ +
MonoException* +mono_exception_from_name_two_strings (MonoImage *image, const char *name_space, + const char *name, MonoString *a1, MonoString *a2) + +
+

+Parameters +

image:
the Mono image where to look for the class
name_space:
the namespace for the class
name:
class name
a1:
first string argument to pass
a2:
second string argument to pass
+Returns +
the initialized exception instance. +
+Remarks +

+ Creates an exception from a constructor that takes two string + arguments. + + + +

Obtaining Common Exceptions

+ +

There are a number of common exceptions that are used by + the runtime, use the routines in this section to get a copy of + those exceptions. + + +

+
mono_get_exception_appdomain_unloaded
+ +
MonoException* +mono_get_exception_appdomain_unloaded (void) + +
+

+Returns +

a new instance of the System.AppDomainUnloadedException +
+ +
+
+
mono_get_exception_argument
+ +
MonoException* +mono_get_exception_argument (const char *arg, const char *msg) + +
+

+Parameters +

arg:
the name of the invalid argument.
+Returns +
a new instance of the System.ArgumentException +
+ +
+
+
mono_get_exception_argument_null
+ +
MonoException* +mono_get_exception_argument_null (const char *arg) + +
+

+Parameters +

arg:
the name of the argument that is null
+Returns +
a new instance of the System.ArgumentNullException +
+ +
+
+
mono_get_exception_argument_out_of_range
+ +
MonoException* +mono_get_exception_argument_out_of_range (const char *arg) + +
+

+Parameters +

arg:
the name of the out of range argument.
+Returns +
a new instance of the System.ArgumentOutOfRangeException +
+ +
+
+
mono_get_exception_arithmetic
+ +
MonoException* +mono_get_exception_arithmetic () + +
+

+Returns +

a new instance of the System.ArithmeticException. +
+ +
+
+
mono_get_exception_array_type_mismatch
+ +
MonoException* +mono_get_exception_array_type_mismatch () + +
+

+Returns +

a new instance of the System.ArrayTypeMismatchException +
+ +
+
+
mono_get_exception_bad_image_format
+ +
MonoException* +mono_get_exception_bad_image_format (const char *msg) + +
+

+Parameters +

msg:
an informative message for the user.
+Returns +
a new instance of the System.BadImageFormatException +
+ +
+
+
mono_get_exception_cannot_unload_appdomain
+ +
MonoException* +mono_get_exception_cannot_unload_appdomain (const char *msg) + +
+

+Parameters +

inner:
the inner exception.
+Returns +
a new instance of the System.CannotUnloadAppDomainException +
+ +
+
+
mono_get_exception_class
+ +
Prototype: mono_get_exception_class
+

+ +

+
+
mono_get_exception_divide_by_zero
+ +
MonoException* +mono_get_exception_divide_by_zero () + +
+

+Returns +

a new instance of the System.DivideByZeroException +
+ +
+
+
mono_get_exception_execution_engine
+ +
MonoException* +mono_get_exception_execution_engine (const char *msg) + +
+

+Parameters +

msg:
the message to pass to the user
+Returns +
a new instance of the System.ExecutionEngineException +
+ +
+
+
mono_get_exception_file_not_found2
+ +
MonoException* +mono_get_exception_file_not_found2 (const char *msg, MonoString *fname) + +
+

+Parameters +

msg:
an informative message for the user.
fname:
the name of the file not found.
+Returns +
a new instance of the System.IO.FileNotFoundException +
+ +
+
+
mono_get_exception_file_not_found
+ +
MonoException* +mono_get_exception_file_not_found (MonoString *fname) + +
+

+Parameters +

fname:
the name of the file not found.
+Returns +
a new instance of the System.IO.FileNotFoundException +
+ +
+
+
mono_get_exception_index_out_of_range
+ +
MonoException* +mono_get_exception_index_out_of_range () + +
+

+Returns +

a new instance of the System.IndexOutOfRangeException +
+ +
+
+
mono_get_exception_invalid_cast
+ +
MonoException* +mono_get_exception_invalid_cast () + +
+

+Returns +

a new instance of the System.InvalidCastException +
+ +
+
+
mono_get_exception_io
+ +
MonoException* +mono_get_exception_io (const char *msg) + +
+

+Parameters +

msg:
the message to present to the user
+Returns +
a new instance of the System.IO.IOException +
+ +
+
+
mono_get_exception_missing_method
+ +
MonoException* +mono_get_exception_missing_method (const char *class_name, const char *member_name) + +
+

+Parameters +

class_name:
the class where the lookup was performed.
member_name:
the name of the missing method.
+Returns +
a new instance of the System.MissingMethodException +
+ +
+
+
mono_get_exception_not_implemented
+ +
MonoException* +mono_get_exception_not_implemented (const char *msg) + +
+

+Parameters +

msg:
the message to pass to the user
+Returns +
a new instance of the System.NotImplementedException +
+ +
+
+
mono_get_exception_null_reference
+ +
MonoException* +mono_get_exception_null_reference () + +
+

+Returns +

a new instance of the System.NullReferenceException +
+ +
+
+
mono_get_exception_overflow
+ +
MonoException* +mono_get_exception_overflow () + +
+

+Returns +

a new instance of the System.OverflowException +
+ +
+
+
mono_get_exception_security
+ +
MonoException* +mono_get_exception_security () + +
+

+Returns +

a new instance of the System.Security.SecurityException +
+ +
+
+
mono_get_exception_serialization
+ +
MonoException* +mono_get_exception_serialization (const char *msg) + +
+

+Parameters +

msg:
the message to pass to the user
+Returns +
a new instance of the System.Runtime.Serialization.SerializationException +
+ +
+
+
mono_get_exception_stack_overflow
+ +
MonoException* +mono_get_exception_stack_overflow (void) + +
+

+Returns +

a new instance of the System.StackOverflowException +
+ +
+
+
mono_get_exception_synchronization_lock
+ +
MonoException* +mono_get_exception_synchronization_lock (const char *msg) + +
+

+Parameters +

inner:
the inner exception.
+Returns +
a new instance of the System.SynchronizationLockException +
+ +
+
+
mono_get_exception_thread_abort
+ +
MonoException* +mono_get_exception_thread_abort () + +
+

+Returns +

a new instance of the System.Threading.ThreadAbortException. +
+ +
+
+
mono_get_exception_thread_state
+ +
MonoException* +mono_get_exception_thread_state (const char *msg) + +
+

+Parameters +

msg:
the message to present to the user
+Returns +
a new instance of the System.Threading.ThreadStateException +
+ +
+
+
mono_get_exception_type_initialization
+ +
MonoException* +mono_get_exception_type_initialization (const gchar *type_name, MonoException *inner) + +
+

+Parameters +

type_name:
the name of the type that failed to initialize.
inner:
the inner exception.
+Returns +
a new instance of the System.TypeInitializationException +
+ +
+
+
mono_get_exception_type_load
+ +
MonoException* +mono_get_exception_type_load (MonoString *class_name, char *assembly_name) + +
+

+Parameters +

class_name:
the name of the class that could not be loaded
assembly_name:
the assembly where the class was looked up.
+Returns +
a new instance of the System.TypeLoadException. +
+ +
+
+
mono_get_exception_invalid_operation
+ +
MonoException* +mono_get_exception_invalid_operation (const char *msg) + +
+

+Parameters +

msg:
the message to pass to the user
+Returns +
a new instance of the System.InvalidOperationException +
+ +
+
+
mono_get_exception_missing_field
+ +
MonoException* +mono_get_exception_missing_field (const char *class_name, const char *member_name) + +
+

+Parameters +

class_name:
the class where the lookup was performed
member_name:
the name of the missing method.
+Returns +
a new instance of the System.MissingFieldException +
+ +
+
+
mono_get_exception_not_supported
+ +
MonoException* +mono_get_exception_not_supported (const char *msg) + +
+

+Parameters +

msg:
the message to pass to the user
+Returns +
a new instance of the System.NotSupportedException +
+ +
+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-gc.html b/docs/deploy/mono-api-gc.html new file mode 100644 index 0000000000..047b6cf092 --- /dev/null +++ b/docs/deploy/mono-api-gc.html @@ -0,0 +1,119 @@ + + + + mono-api-gc.html + + + +

Garbage Collector Interface

+ +

Public Interface

+ +

The public interface of the Mono GC is fairly limited, and + its the only one that embedders should be using: + + +

+
mono_gc_collect
+ +
void +mono_gc_collect (int generation) + +
+

+Parameters +

generation:
GC generation identifier
+Remarks +

+ Perform a garbage collection for the given generation, higher numbers + mean usually older objects. Collecting a high-numbered generation + implies collecting also the lower-numbered generations. + The maximum value for generation can be retrieved with a call to + mono_gc_max_generation(), so this function is usually called as: + + mono_gc_collect (mono_gc_max_generation ()); + +

+
+
mono_gc_max_generation
+ +
int +mono_gc_max_generation (void) + +
+

+Returns +

the maximum generation number. +
+Remarks +

+ Get the maximum generation number used by the current garbage + collector. The value will be 0 for the Boehm collector, 1 or more + for the generational collectors. + + +

+
+
mono_gc_get_heap_size
+ +
int64_t +mono_gc_get_heap_size (void) + +
+

+Returns +

the size of the heap in bytes +
+Remarks +

+ Get the amount of memory used by the garbage collector. + + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-gchandle.html b/docs/deploy/mono-api-gchandle.html new file mode 100644 index 0000000000..84b9fc22dd --- /dev/null +++ b/docs/deploy/mono-api-gchandle.html @@ -0,0 +1,228 @@ + + + + mono-api-gchandle.html + + + +

GC Handles

+ +

Synopsys

+ +
+guint32 mono_gchandle_new (MonoObject *obj, + gboolean pinned); +guint32 mono_gchandle_new_weakref (MonoObject *obj, + gboolean track_resurrection); +MonoObject* mono_gchandle_get_target (guint32 gchandle); +void mono_gchandle_free (guint32 gchandle); + +
+ +

GC handles are wrappers that are used to keep references to + managed objects in the unmanaged space and preventing the + object from being disposed. + +

These are the C equivalents of the System.GCHandle + structure. + +

There are two kinds of GCHandles that can be created: + +

+ +

To retrieve the target address of an object pointed to by a + GCHandle you should use + mono_gchandle_get_target. + +

For example, consider the following C code: +

+static MonoObject* o = NULL; +
+ +

The object in `o' will *NOT* be scanned. + +

If you need to store an object in a C variable and prevent + it from being collected, you need to acquire a GC handle for + it. + +

+ guint32 handle = mono_gchandle_new (my_object, TRUE); +
+ +

TRUE means the object will be pinned, so it won't move in + memory when we'll use a moving GC. You can access the + MonoObject* referenced by a handle with: + +

+ MonoObject* obj = mono_gchandle_get_target (handle); +
+ +

When you don't need the handle anymore you need to call: + +

+ mono_gchandle_free (handle); +
+ +

Note that if you assign a new object to the C var, you need + to get a new handle, it's not enough to store a new object in + the C var. + +

So code that looked like this: + +

+ static MonoObject* o = NULL; + ... + o = mono_object_new (...); + /* use o */ + ... + /* when done to allow the GC to collect o */ + o = NULL; +
+ +

should now be changed to: + +

+ static guint32 o_handle; + ... + MonoObject *o = mono_object_new (...); + o_handle = mono_gchandle_new (o, TRUE); + /* use o or mono_gchandle_get_target (o_handle) */ + ... + /* when done to allow the GC to collect o */ + mono_gchandle_free (o_handle); +
+ + +
+
mono_gchandle_new
+ +
guint32 +mono_gchandle_new (MonoObject *obj, gboolean pinned) + +
+

+Parameters +

obj:
managed object to get a handle for
pinned:
whether the object should be pinned
+Returns +
a handle that can be used to access the object from + + unmanaged code.
+Remarks +

+ This returns a handle that wraps the object, this is used to keep a + reference to a managed object from the unmanaged world and preventing the + object from being disposed. + +

+ If pinned is false the address of the object can not be obtained, if it is + true the address of the object can be obtained. This will also pin the + object so it will not be possible by a moving garbage collector to move the + object. + +

+ +

+
+
mono_gchandle_new_weakref
+ +
guint32 +mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection) + +
+

+Parameters +

obj:
managed object to get a handle for
pinned:
whether the object should be pinned
+Returns +
a handle that can be used to access the object from + + unmanaged code.
+Remarks +

+ This returns a weak handle that wraps the object, this is used to + keep a reference to a managed object from the unmanaged world. + Unlike the mono_gchandle_new the object can be reclaimed by the + garbage collector. In this case the value of the GCHandle will be + set to zero. + +

+ If pinned is false the address of the object can not be obtained, if it is + true the address of the object can be obtained. This will also pin the + object so it will not be possible by a moving garbage collector to move the + object. + +

+ +

+
+
mono_gchandle_get_target
+ +
MonoObject* +mono_gchandle_get_target (guint32 gchandle) + +
+

+Parameters +

gchandle:
a GCHandle's handle.
+Remarks +

+ The handle was previously created by calling mono_gchandle_new or + mono_gchandle_new_weakref. + + Returns a pointer to the MonoObject represented by the handle or + NULL for a collected object if using a weakref handle. + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-image.html b/docs/deploy/mono-api-image.html new file mode 100644 index 0000000000..cbb8f2dfa9 --- /dev/null +++ b/docs/deploy/mono-api-image.html @@ -0,0 +1,517 @@ + + + + mono-api-image.html + + + +

Image Manipulation

+ +

Images are the component of assemblies that actually hold + the CIL code and metadata + in the extended PE/COFF file. + +

Synopsis

+ +
+#include <metadata/image.h> + +typedef struct _MonoImage MonoImage; +typedef enum { + MONO_IMAGE_OK, + MONO_IMAGE_ERROR_ERRNO, + MONO_IMAGE_MISSING_ASSEMBLYREF, + MONO_IMAGE_IMAGE_INVALID +} MonoImageOpenStatus; + +MonoImage* mono_image_open (const char *fname, + MonoImageOpenStatus *status); + + + +void mono_image_close (MonoImage *image); +void mono_image_addref (MonoImage *image); + + +MonoAssembly* mono_image_get_assembly (MonoImage *image); +guint32 mono_image_get_entry_point (MonoImage *image); +const char* mono_image_get_filename (MonoImage *image); +const char* mono_image_get_name (MonoImage *image); +const char* mono_image_get_resource (MonoImage *image, + guint32 offset, + guint32 *size); + + +gboolean mono_image_is_dynamic (MonoImage *image); + +MonoImage* mono_image_loaded (const char *name); +gpointer mono_image_lookup_resource (MonoImage *image, + guint32 res_id, + guint32 lang_id, + gunichar2 *name); +const char * mono_image_strerror (MonoImageOpenStatus status); +guint32 mono_image_strong_name_position (MonoImage *image, + guint32 *size); +const char* mono_image_get_public_key (MonoImage *image, + guint32 *size); +const char* mono_image_get_strong_name (MonoImage *image, + guint32 *size); +gboolean mono_image_has_authenticode_entry (MonoImage *image); + +int mono_image_ensure_section_idx (MonoImage *image, + int section); +int mono_image_ensure_section (MonoImage *image, + const char *section); + +
+ +

Image APIs

+ +

Images are the actual elements in the runtime that contain + the actual code being executed. + + +

Opening and closing MonoImages

+ + +
+
mono_image_open
+ +
MonoImage* +mono_image_open (const char *fname, MonoImageOpenStatus *status) + +
+

+Parameters +

fname:
filename that points to the module we want to open
status:
An error condition is returned in this field
+Returns +
An open image of type %MonoImage or NULL on error. + + The caller holds a temporary reference to the returned image which should be cleared + when no longer needed by calling mono_image_close (). + if NULL, then check the value of status for details on the error
+ +
+
+
mono_image_open_full
+ +
Prototype: mono_image_open_full
+

+ +

+
+
mono_image_open_from_data
+ +
Prototype: mono_image_open_from_data
+

+ +

+
+
mono_image_open_from_data_full
+ +
Prototype: mono_image_open_from_data_full
+

+ +

+
+
mono_image_close
+ +
void +mono_image_close (MonoImage *image) + +
+

+Parameters +

image:
The image file we wish to close
+Remarks +

+ Closes an image file, deallocates all memory consumed and + unmaps all possible sections of the file + +

+
+
mono_image_addref
+ +
void +mono_image_addref (MonoImage *image) + +
+

+Parameters +

image:
The image file we wish to add a reference to
+Remarks +

+ Increases the reference count of an image. + +

+
+
mono_image_load_file_for_image
+ +
Prototype: mono_image_load_file_for_image
+

+ + +

Image Information

+ + +
+
mono_image_get_guid
+ +
Prototype: mono_image_get_guid
+

+ +

+
+
mono_image_get_assembly
+ +
MonoAssembly* +mono_image_get_assembly (MonoImage *image) + +
+

+Parameters +

image:
the MonoImage.
+Returns +
the assembly that holds this image. +
+Remarks +

+ Use this routine to get the assembly that owns this image. + + +

+
+
mono_image_get_entry_point
+ +
guint32 +mono_image_get_entry_point (MonoImage *image) + +
+

+Parameters +

image:
the image where the entry point will be looked up.
+Returns +
the token for the entry point method in the image +
+Remarks +

+ Use this routine to determine the metadata token for method that + has been flagged as the entry point. + + +

+
+
mono_image_get_filename
+ +
const char* +mono_image_get_filename (MonoImage *image) + +
+

+Parameters +

image:
a MonoImage
+Returns +
the filename. +
+Remarks +

+ Used to get the filename that hold the actual MonoImage + + +

+
+
mono_image_get_name
+ +
const char* +mono_image_get_name (MonoImage *image) + +
+

+Parameters +

name:
a MonoImage
+Returns +
the name of the assembly. +
+ +
+
+
mono_image_get_resource
+ +
const char* +mono_image_get_resource (MonoImage *image, guint32 offset, guint32 *size) + +
+

+Parameters +

image:
the image where the resource will be looked up.
offset:
The offset to add to the resource
size:
a pointer to an int where the size of the resource will be stored
+Returns +
the pointer to the resource whose offset is offset. +
+Remarks +

+ This is a low-level routine that fetches a resource from the + metadata that starts at a given offset. The size parameter is + filled with the data field as encoded in the metadata. + + +

+
+
mono_image_get_table_info
+ +
Prototype: mono_image_get_table_info
+

+ +

+
+
mono_image_get_table_rows
+ +
Prototype: mono_image_get_table_rows
+

+ +

+
+
mono_image_is_dynamic
+ +
gboolean +mono_image_is_dynamic (MonoImage *image) + +
+

+Parameters +

image:
the MonoImage
+Returns +
TRUE if the image was created dynamically, FALSE if not. +
+Remarks +

+ Determines if the given image was created dynamically through the + System.Reflection.Emit API + + +

+
+
mono_image_loaded_by_guid
+ +
Prototype: mono_image_loaded_by_guid
+

+ +

+
+
mono_image_loaded
+ +
MonoImage* +mono_image_loaded (const char *name) + +
+

+Parameters +

name:
name of the image to load
+Returns +
the loaded MonoImage, or NULL on failure. +
+Remarks +

+ This routine ensures that the given image is loaded. + + +

+
+
mono_image_lookup_resource
+ +
gpointer +mono_image_lookup_resource (MonoImage *image, guint32 res_id, guint32 lang_id, gunichar2 *name) + +
+

+Parameters +

image:
the image to look up the resource in
res_id:
A MONO_PE_RESOURCE_ID_ that represents the resource ID to lookup.
lang_id:
The language id.
name:
the resource name to lookup.
+Returns +
NULL if not found, otherwise a pointer to the in-memory representation + + of the given resource. The caller should free it using g_free () when no longer + needed.
+ +
+
+
mono_image_strerror
+ +
const char * +mono_image_strerror (MonoImageOpenStatus status) + +
+

+Parameters +

status:
an code indicating the result from a recent operation
+Returns +
a string describing the error +
+ + +

Public Keys, Strong Names and Certificates

+ + +
+
mono_image_strong_name_position
+ +
guint32 +mono_image_strong_name_position (MonoImage *image, guint32 *size) + +
+

+Parameters +

image:
a MonoImage
size:
a guint32 pointer, or NULL.
+Returns +
the position within the image file where the strong name + + is stored.
+Remarks +

+ If the image has a strong name, and size is not NULL, the value + pointed to by size will have the size of the strong name. + + +

+
+
mono_image_get_public_key
+ +
const char* +mono_image_get_public_key (MonoImage *image, guint32 *size) + +
+

+Parameters +

image:
a MonoImage
size:
a guint32 pointer, or NULL.
+Returns +
NULL if the image does not have a public key, or a pointer + + to the public key.
+Remarks +

+ This is used to obtain the public key in the image. + +

+ If the image has a public key, and size is not NULL, the value + pointed to by size will have the size of the public key. + +

+ +

+
+
mono_image_get_strong_name
+ +
const char* +mono_image_get_strong_name (MonoImage *image, guint32 *size) + +
+

+Parameters +

image:
a MonoImage
size:
a guint32 pointer, or NULL.
+Returns +
NULL if the image does not have a strong name, or a + + pointer to the public key.
+Remarks +

+ If the image has a strong name, and size is not NULL, the value + pointed to by size will have the size of the strong name. + + +

+
+
mono_image_has_authenticode_entry
+ +
gboolean +mono_image_has_authenticode_entry (MonoImage *image) + +
+

+Parameters +

image:
the MonoImage
+Returns +
TRUE if the image contains an authenticode entry in the PE + + directory.
+Remarks +

+ Use this routine to determine if the image has a Authenticode + Certificate Table. + + + +

Low-level features

+ + +
+
mono_image_rva_map
+ +
Prototype: mono_image_rva_map
+

+ +

+
+
mono_image_ensure_section_idx
+ +
int +mono_image_ensure_section_idx (MonoImage *image, int section) + +
+

+Parameters +

image:
The image we are operating on
section:
section number that we will load/map into memory
+Returns +
TRUE on success +
+Remarks +

+ This routine makes sure that we have an in-memory copy of + an image section (.text, .rsrc, .data). + + +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-internal.html b/docs/deploy/mono-api-internal.html new file mode 100644 index 0000000000..ddd03e3771 --- /dev/null +++ b/docs/deploy/mono-api-internal.html @@ -0,0 +1,587 @@ + + + + mono-api-internal.html + + + +

Mono Internals

+ +

This section documents some of the internal APIs used + inside Mono that developers extending or altering Mono might + want to use. + +

Marshalling functions

+ + +
+
mono_marshal_alloc
+ +
Prototype: mono_marshal_alloc
+

+ +

+
+
mono_marshal_asany
+ +
Prototype: mono_marshal_asany
+

+ +

+
+
mono_marshal_free_array
+ +
Prototype: mono_marshal_free_array
+

+ +

+
+
mono_marshal_free_asany
+ +
Prototype: mono_marshal_free_asany
+

+ +

+
+
mono_marshal_free
+ +
Prototype: mono_marshal_free
+

+ +

+
+
mono_marshal_get_castclass
+ +
Prototype: mono_marshal_get_castclass
+

+ +

+
+
mono_marshal_get_delegate_begin_invoke
+ +
Prototype: mono_marshal_get_delegate_begin_invoke
+

+ +

+
+
mono_marshal_get_delegate_end_invoke
+ +
Prototype: mono_marshal_get_delegate_end_invoke
+

+ +

+
+
mono_marshal_get_delegate_invoke
+ +
Prototype: mono_marshal_get_delegate_invoke
+

+ +

+
+
mono_marshal_get_icall_wrapper
+ +
Prototype: mono_marshal_get_icall_wrapper
+

+ +

+
+
mono_marshal_get_isinst
+ +
Prototype: mono_marshal_get_isinst
+

+ +

+
+
mono_marshal_get_ldfld_remote_wrapper
+ +
Prototype: mono_marshal_get_ldfld_remote_wrapper
+

+ +

+
+
mono_marshal_get_ldfld_wrapper
+ +
Prototype: mono_marshal_get_ldfld_wrapper
+

+ +

+
+
mono_marshal_get_managed_wrapper
+ +
Prototype: mono_marshal_get_managed_wrapper
+

+ +

+
+
mono_marshal_get_native_wrapper
+ +
MonoMethod* +mono_marshal_get_native_wrapper (MonoMethod *method, gboolean check_exceptions, gboolean aot) + +
+

+Parameters +

method:
The MonoMethod to wrap.
check_exceptions:
Whenever to check for pending exceptions
+Remarks +

+ generates IL code for the pinvoke wrapper (the generated method + calls the unmanaged code in piinfo->addr) + The wrapper info for the wrapper is a WrapperInfo structure. + +

+
+
mono_marshal_get_proxy_cancast
+ +
Prototype: mono_marshal_get_proxy_cancast
+

+ +

+
+
mono_marshal_get_ptr_to_struct
+ +
MonoMethod* +mono_marshal_get_ptr_to_struct (MonoClass *klass) + +
+

+Parameters +

klass:
+Remarks +

+ generates IL code for PtrToStructure (IntPtr src, object structure) + The wrapper info for the wrapper is a WrapperInfo structure. + +

+
+
mono_marshal_get_remoting_invoke_for_target
+ +
Prototype: mono_marshal_get_remoting_invoke_for_target
+

+ +

+
+
mono_marshal_get_remoting_invoke
+ +
Prototype: mono_marshal_get_remoting_invoke
+

+ +

+
+
mono_marshal_get_remoting_invoke_with_check
+ +
Prototype: mono_marshal_get_remoting_invoke_with_check
+

+ +

+
+
mono_marshal_get_runtime_invoke
+ +
Prototype: mono_marshal_get_runtime_invoke
+

+ +

+
+
mono_marshal_get_stelemref
+ +
Prototype: mono_marshal_get_stelemref
+

+ +

+
+
mono_marshal_get_stfld_remote_wrapper
+ +
Prototype: mono_marshal_get_stfld_remote_wrapper
+

+ +

+
+
mono_marshal_get_stfld_wrapper
+ +
Prototype: mono_marshal_get_stfld_wrapper
+

+ +

+
+
mono_marshal_get_struct_to_ptr
+ +
MonoMethod* +mono_marshal_get_struct_to_ptr (MonoClass *klass) + +
+

+Parameters +

klass:
+Remarks +

+ generates IL code for StructureToPtr (object structure, IntPtr ptr, bool fDeleteOld) + The wrapper info for the wrapper is a WrapperInfo structure. + +

+
+
mono_marshal_get_synchronized_wrapper
+ +
Prototype: mono_marshal_get_synchronized_wrapper
+

+ +

+
+
mono_marshal_get_unbox_wrapper
+ +
Prototype: mono_marshal_get_unbox_wrapper
+

+ +

+
+
mono_marshal_get_xappdomain_invoke
+ +
Prototype: mono_marshal_get_xappdomain_invoke
+

+ +

+
+
mono_marshal_load_type_info
+ +
MonoMarshalType* +mono_marshal_load_type_info (MonoClass* klass) + +
+

+Remarks +

+ Initialize klass->marshal_info using information from metadata. This function can + recursively call itself, and the caller is responsible to avoid that by calling + mono_marshal_is_loading_type_info () beforehand. + + LOCKING: Acquires the loader lock. + +

+
+
mono_marshal_method_from_wrapper
+ +
Prototype: mono_marshal_method_from_wrapper
+

+ +

+
+
mono_marshal_realloc
+ +
Prototype: mono_marshal_realloc
+

+ +

+
+
mono_marshal_set_last_error
+ +
void +mono_marshal_set_last_error (void) + +
+

+Remarks +

+ This function is invoked to set the last error value from a P/Invoke call + which has SetLastError set. + +

+
+
mono_marshal_type_size
+ +
Prototype: mono_marshal_type_size
+

+ + +

Metadata Loading Errors

+ +

The routines in this section are used to cope with errors + during metadata loading. Errors in metadata handling can + happen for many reason, and these include (this is not an + exhaustive list). + +

    +
  • An assembly referenced is missing. +
  • Fields referenced are missing. +
  • Methods referenced are missing. +
+ +

The mono_loader_set_* routines are invoked during + metadata loading to flag that an error has happened. The + class loading errros are flagged in a per-thread basis. + +

In various spots in the runtime the + mono_loader_get_last_error routine is called to check + if there was a problem, and then errors are propagated upwards + on the stack until we reach a point where an exception can be + raised and no runtime locks are held. + +

The mono_loader_error_prepare_exception takes a + MonoLoaderError structure (the value returned from + mono_loader_get_last_error), turns that into an + exception and clears the error condition from the current + thread. + + +

+
mono_loader_set_error_field_load
+ +
Prototype: mono_loader_set_error_field_load
+

+ +

+
+
mono_loader_set_error_method_load
+ +
Prototype: mono_loader_set_error_method_load
+

+ +

+
+
mono_loader_set_error_type_load
+ +
void +mono_loader_set_error_type_load (const char *class_name, const char *assembly_name) + +
+

+Remarks +

+ Set the loader error for this thread. + + +

+
+
mono_loader_get_last_error
+ +
Prototype: mono_loader_get_last_error
+

+ +

+
+
mono_loader_clear_error
+ +
void +mono_loader_clear_error (void) + +
+

+Remarks +

+ Disposes any loader error messages on this thread + +

+
+
mono_loader_error_prepare_exception
+ +
MonoException* +mono_loader_error_prepare_exception (MonoLoaderError *error) + +
+

+Parameters +

error:
The MonoLoaderError to turn into an exception
+Remarks +

+ This turns a MonoLoaderError into an exception that can be thrown + and resets the Mono Loader Error state during this process. + + + +

Metadata Loader Locking: Internals

+ +

The locking functions here are used by code in class.c and + metadata.c to lock access to the shared hashtables inside the + MonoImage. + + +

+
mono_loader_lock
+ +
void +mono_loader_lock (void) + +
+

+Remarks +

+ See docs/thread-safety.txt for the locking strategy. + +

+
+
mono_loader_unlock
+ +
Prototype: mono_loader_unlock
+

+ + +

Garbage Collector Internal Interface

+ +

The internal interface of the Mono GC is the interface used + between the runtime engine and the garbage collector. + + +

+
mono_gc_disable
+ +
Prototype: mono_gc_disable
+

+ +

+
+
mono_gc_enable
+ +
Prototype: mono_gc_enable
+

+ +

+
+
mono_gc_is_finalizer_thread
+ +
gboolean +mono_gc_is_finalizer_thread (MonoThread *thread) + +
+

+Parameters +

thread:
the thread to test.
+Remarks +

+ In Mono objects are finalized asynchronously on a separate thread. + This routine tests whether the thread argument represents the + finalization thread. + +

+ Returns true if thread is the finalization thread. + +

+
+
mono_gc_out_of_memory
+ +
Prototype: mono_gc_out_of_memory
+

+ +

+
+
mono_gc_start_world
+ +
Prototype: mono_gc_start_world
+

+ +

+
+
mono_gc_stop_world
+ +
Prototype: mono_gc_stop_world
+

+ +

+
+
mono_gc_alloc_fixed
+ +
Prototype: mono_gc_alloc_fixed
+

+ +

+
+
mono_gc_enable_events
+ +
Prototype: mono_gc_enable_events
+

+ +

+
+
mono_gc_free_fixed
+ +
Prototype: mono_gc_free_fixed
+

+ +

+
+
mono_gc_make_descr_from_bitmap
+ +
Prototype: mono_gc_make_descr_from_bitmap
+

+ + + +

+
+
mono_gc_base_init
+ +
Prototype: mono_gc_base_init
+

+ +

+
+
mono_gc_invoke_finalizers
+ +
Prototype: mono_gc_invoke_finalizers
+

+ +

+
+
mono_gc_is_gc_thread
+ +
Prototype: mono_gc_is_gc_thread
+

+ +

+
+
mono_gc_pending_finalizers
+ +
Prototype: mono_gc_pending_finalizers
+

+ +

+
+
mono_gc_register_thread
+ +
Prototype: mono_gc_register_thread
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-jit.html b/docs/deploy/mono-api-jit.html new file mode 100644 index 0000000000..471c46cc84 --- /dev/null +++ b/docs/deploy/mono-api-jit.html @@ -0,0 +1,141 @@ + + + + mono-api-jit.html + + + +

Synopsis

+ +
+G_GNUC_UNUSED char * mono_pmip (void *ip); +void mono_print_method_from_ip (void *ip); + +void mono_threads_request_thread_dump (void); + + +
+ +

Useful Debugging Functions

+ +

These functions are useful when running the Mono VM inside + a debugger. + + +

+
mono_pmip
+ +
G_GNUC_UNUSED char * +mono_pmip (void *ip) + +
+

+Parameters +

ip:
an instruction pointer address
+Returns +
the name of the method at address ip. +
+Remarks +

+ This method is used from a debugger to get the name of the + method at address ip. This routine is typically invoked from + a debugger like this: + + (gdb) print mono_pmip ($pc) + + +

+
+
mono_print_method_from_ip
+ +
#ifdef __GNUC__ +/* Prevent the linker from optimizing this away in embedding setups to help debugging */ + __attribute__((used)) +#endif +void +mono_print_method_from_ip (void *ip) + +
+

+Parameters +

ip:
an instruction pointer address
+Remarks +

+ This method is used from a debugger to get the name of the + method at address ip. + + This prints the name of the method at address ip in the standard + output. Unlike mono_pmip which returns a string, this routine + prints the value on the standard output. + +

+
+
mono_print_thread_dump
+ +
Prototype: mono_print_thread_dump
+

+ +

+
+
mono_threads_request_thread_dump
+ +
void +mono_threads_request_thread_dump (void) + +
+

+Remarks +

+ Ask all threads except the current to print their stacktrace to stdout. + + +

Helper Tools For Native Ports

+ + + +
\ No newline at end of file diff --git a/docs/deploy/mono-api-jitinternal.html b/docs/deploy/mono-api-jitinternal.html new file mode 100644 index 0000000000..476c9d7f9f --- /dev/null +++ b/docs/deploy/mono-api-jitinternal.html @@ -0,0 +1,247 @@ + + + + mono-api-jitinternal.html + + + +

Notification Interface

+ +

This is an internal profiler interface. In general, users + would not be using this interface, but would be using the + profiler interface. + +

These methods must be called to notify the profiler of an + event that must be recorded. Mono's JIT engine currently + calls these routines, but if you are extending Mono in some + way these are the methods that you might invoke to notify the + profiler of an event. + + +

+
mono_profiler_load
+ +
void +mono_profiler_load (const char *desc) + +
+

+Parameters +

desc:
arguments to configure the profiler
+Remarks +

+ Invoke this method to initialize the profiler. This will drive the + loading of the internal ("default") or any external profilers. + + This routine is invoked by Mono's driver, but must be called manually + if you embed Mono into your application. + +

+
+
mono_profiler_allocation
+ +
Prototype: mono_profiler_allocation
+

+ +

+
+
mono_profiler_stat_hit
+ +
Prototype: mono_profiler_stat_hit
+

+ +

+
+
mono_profiler_thread_start
+ +
Prototype: mono_profiler_thread_start
+

+ +

+
+
mono_profiler_thread_end
+ +
Prototype: mono_profiler_thread_end
+

+ +

+
+
mono_profiler_appdomain_event
+ +
Prototype: mono_profiler_appdomain_event
+

+ +

+
+
mono_profiler_appdomain_loaded
+ +
Prototype: mono_profiler_appdomain_loaded
+

+ +

+
+
mono_profiler_assembly_event
+ +
Prototype: mono_profiler_assembly_event
+

+ +

+
+
mono_profiler_assembly_loaded
+ +
Prototype: mono_profiler_assembly_loaded
+

+ +

+
+
mono_profiler_class_event
+ +
Prototype: mono_profiler_class_event
+

+ +

+
+
mono_profiler_class_loaded
+ +
Prototype: mono_profiler_class_loaded
+

+ +

+
+
mono_profiler_code_transition
+ +
Prototype: mono_profiler_code_transition
+

+ +

+
+
mono_profiler_method_end_jit
+ +
Prototype: mono_profiler_method_end_jit
+

+ +

+
+
mono_profiler_method_enter
+ +
Prototype: mono_profiler_method_enter
+

+ +

+
+
mono_profiler_method_jit
+ +
Prototype: mono_profiler_method_jit
+

+ +

+
+
mono_profiler_method_leave
+ +
Prototype: mono_profiler_method_leave
+

+ +

+
+
mono_profiler_module_event
+ +
Prototype: mono_profiler_module_event
+

+ +

+
+
mono_profiler_module_loaded
+ +
Prototype: mono_profiler_module_loaded
+

+ +

+
+
mono_profiler_shutdown
+ +
Prototype: mono_profiler_shutdown
+

+ +

+
+
mono_profiler_startup
+ +
Prototype: mono_profiler_startup
+

+ +

+
+
mono_profiler_gc_event
+ +
Prototype: mono_profiler_gc_event
+

+ +

+
+
mono_profiler_gc_heap_resize
+ +
Prototype: mono_profiler_gc_heap_resize
+

+ +

+
+
mono_profiler_gc_event
+ +
Prototype: mono_profiler_gc_event
+

+ +

+
+
mono_profiler_gc_heap_resize
+ +
Prototype: mono_profiler_gc_heap_resize
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-marshal.html b/docs/deploy/mono-api-marshal.html new file mode 100644 index 0000000000..22d1b8f898 --- /dev/null +++ b/docs/deploy/mono-api-marshal.html @@ -0,0 +1,78 @@ + + + + mono-api-marshal.html + + + + + + +
+
mono_delegate_free_ftnptr
+ +
Prototype: mono_delegate_free_ftnptr
+

+ +

+
+
mono_delegate_to_ftnptr
+ +
Prototype: mono_delegate_to_ftnptr
+

+ +

+
+
mono_ftnptr_to_delegate
+ +
Prototype: mono_ftnptr_to_delegate
+

+ +

+ +
\ No newline at end of file diff --git a/docs/deploy/mono-api-metadata.html b/docs/deploy/mono-api-metadata.html new file mode 100644 index 0000000000..39d59d5d88 --- /dev/null +++ b/docs/deploy/mono-api-metadata.html @@ -0,0 +1,1313 @@ + + + + mono-api-metadata.html + + + +

Metadata Reading

+ +

The Metadata API gives developers low-level access to the + information encoded in CLI modules: type and + methods definitions encoded in metadata as well as access to + the CIL code and embedded resources. + +

Managed developers access this information using either the + System.Reflection API or a library + like Cecil. + +

To start using the Metadata API it is necessary + to open an + assembly or a CIL image (a .dll or .exe file) using one of + the + CIL image + opening API calls. + +

Metadata Heaps

+ +

ECMA CLI images contain four heaps that store different + kinds of information, these are: + +

+ +

The ECMA file format also has an extra section called the + "#~" stream, this stream is the one that holds the metadata + tables. There is a high-level API to get access to the + contents of this API, described in the + section Metadata Tables. + + +

+
mono_metadata_guid_heap
+ +
const char * +mono_metadata_guid_heap (MonoImage *meta, guint32 index) + +
+

+Parameters +

meta:
metadata context
index:
index into the guid heap.
+Returns +
an in-memory pointer to the index in the guid heap. +
+ +
+
+
mono_metadata_string_heap
+ +
const char * +mono_metadata_string_heap (MonoImage *meta, guint32 index) + +
+

+Parameters +

meta:
metadata context
index:
index into the string heap.
+Returns +
an in-memory pointer to the index in the string heap. +
+ +
+
+
mono_metadata_blob_heap
+ +
const char * +mono_metadata_blob_heap (MonoImage *meta, guint32 index) + +
+

+Parameters +

meta:
metadata context
index:
index into the blob.
+Returns +
an in-memory pointer to the index in the Blob heap. +
+ +
+
+
mono_metadata_user_string
+ +
const char * +mono_metadata_user_string (MonoImage *meta, guint32 index) + +
+

+Parameters +

meta:
metadata context
index:
index into the user string heap.
+Returns +
an in-memory pointer to the index in the user string heap ("US"). +
+ +
+
+
mono_metadata_decode_blob_size
+ +
guint32 +mono_metadata_decode_blob_size (const char *xptr, const char **rptr) + +
+

+Parameters +

ptr:
pointer to a blob object
rptr:
the new position of the pointer
+Returns +
the size of the blob object +
+Remarks +

+ This decodes a compressed size as described by 23.1.4 (a blob or user string object) + + + + +

Metadata Tables

+ +

Metadata is encoded in a number of tables included on every + CIL image. These tables contain type definitions, member + definitions and so on, these constants are defined in the ECMA 335 + specification Partition II section 22. The following table + shows the C constants defined in the Mono runtime and how they + map to the equivalent ECMA CLI metadata table: + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ECMA CLI Table Name + + C Constant Name + + Table Schema (Array Size + Columns Constants) +
AssemblyMONO_TABLE_ASSEMBLY +Array size: +MONO_ASSEMBLY_SIZE +
    +
  • MONO_ASSEMBLY_HASH_ALG +
  • MONO_ASSEMBLY_MAJOR_VERSION +
  • MONO_ASSEMBLY_MINOR_VERSION +
  • MONO_ASSEMBLY_BUILD_NUMBER +
  • MONO_ASSEMBLY_REV_NUMBER +
  • MONO_ASSEMBLY_FLAGS +
  • MONO_ASSEMBLY_PUBLIC_KEY +
  • MONO_ASSEMBLY_NAME +
  • MONO_ASSEMBLY_CULTURE +
+
AssemblyOSMONO_TABLE_ASSEMBLYOS +Array size: +MONO_ASSEMBLYOS_SIZE +
    +
  • MONO_ASSEMBLYOS_PLATFORM +
  • MONO_ASSEMBLYOS_MAJOR_VERSION +
  • MONO_ASSEMBLYOS_MINOR_VERSION +
+
AssemblyProcessorMONO_TABLE_ASSEMBLYPROCESSORArray +size: MONO_ASSEMBLYPROCESSOR_SIZE +
    +
  • MONO_ASSEMBLY_PROCESSOR +
+
AssemblyRefMONO_TABLE_ASSEMBLYREF +Array size: +MONO_ASSEMBLYREF_SIZE +
    +
  • MONO_ASSEMBLYREF_MAJOR_VERSION +
  • MONO_ASSEMBLYREF_MINOR_VERSION +
  • MONO_ASSEMBLYREF_BUILD_NUMBER +
  • MONO_ASSEMBLYREF_REV_NUMBER +
  • MONO_ASSEMBLYREF_FLAGS +
  • MONO_ASSEMBLYREF_PUBLIC_KEY +
  • MONO_ASSEMBLYREF_NAME +
  • MONO_ASSEMBLYREF_CULTURE +
  • MONO_ASSEMBLYREF_HASH_VALUE +
+
AssemblyRefProcessorMONO_TABLE_ASSEMBLYREFPROCESSORArray +size: MONO_ASSEMBLYREFPROC_SIZE +
    +
  • MONO_ASSEMBLYREFPROC_PROCESSOR +
  • MONO_ASSEMBLYREFPROC_ASSEMBLYREF +
+
AssemblyRefOSMONO_TABLE_ASSEMBLYREFOS +Array size: +
  • MONO_ASSEMBLYREFOS_SIZE +
      +
    • MONO_ASSEMBLYREFOS_PLATFORM +
    • MONO_ASSEMBLYREFOS_MAJOR_VERSION +
    • MONO_ASSEMBLYREFOS_MINOR_VERSION +
    • MONO_ASSEMBLYREFOS_ASSEMBLYREF +
    +
  • ClassLayoutMONO_TABLE_CLASSLAYOUT +Array size: +MONO_CLASSLAYOUT_SIZE +
      +
    • MONO_CLASS_LAYOUT_PACKING_SIZE +
    • MONO_CLASS_LAYOUT_CLASS_SIZE +
    • MONO_CLASS_LAYOUT_PARENT +
    +
    ConstantMONO_TABLE_CONSTANT +Array size: +MONO_CONSTANT_SIZE +
      +
    • MONO_CONSTANT_TYPE +
    • MONO_CONSTANT_PADDING +
    • MONO_CONSTANT_PARENT +
    • MONO_CONSTANT_VALUE +
    +
    CustomAttributeMONO_TABLE_CUSTOMATTRIBUTE +Array size: +MONO_CUSTOM_ATTR_SIZE +
      +
    • MONO_CUSTOM_ATTR_PARENT +
    • MONO_CUSTOM_ATTR_TYPE +
    • MONO_CUSTOM_ATTR_VALUE +
    +
    DeclSecurityMONO_TABLE_DECLSECURITY +Array size: +MONO_DECL_SECURITY_SIZE +
      +
    • MONO_DECL_SECURITY_ACTION +
    • MONO_DECL_SECURITY_PARENT +
    • MONO_DECL_SECURITY_PERMISSIONSET +
    +
    EventMapMONO_TABLE_EVENTMAP +Array size: +MONO_EVENT_MAP_SIZE +
      +
    • MONO_EVENT_MAP_PARENT +
    • MONO_EVENT_MAP_EVENTLIST +
    +
    EventPtrMONO_TABLE_EVENT_POINTER +Array size: +MONO_EVENT_POINTER_SIZE +
      +
    • MONO_EVENT_POINTER_EVENT +
    +
    EventMONO_TABLE_EVENT +Array size: MONO_EVENT_SIZE +
      +
    • MONO_EVENT_FLAGS +
    • MONO_EVENT_NAME +
    • MONO_EVENT_TYPE +
    +
    ExportedTypeMONO_TABLE_EXPORTEDTYPE +Array size: +MONO_EXPORTEDTYPE_SIZE +
      +
    • MONO_EXP_TYPE_FLAGS +
    • MONO_EXP_TYPE_TYPEDEF +
    • MONO_EXP_TYPE_NAME +
    • MONO_EXP_TYPE_NAMESPACE +
    • MONO_EXP_TYPE_IMPLEMENTATION +
    +
    FieldMONO_TABLE_FIELD +Array size: MONO_FIELD_SIZE +
      +
    • MONO_FIELD_FLAGS +
    • MONO_FIELD_NAME +
    • MONO_FIELD_SIGNATURE +
    +
    FieldLayouttMONO_TABLE_FIELDLAYOUT +Array size: +MONO_FIELDLAYOUT_SIZE +
      +
    • MONO_FIELD_LAYOUT_OFFSET +
    • MONO_FIELD_LAYOUT_FIELD +
    +
    FieldMarshalMONO_TABLE_FIELDMARSHAL +Array size: +MONO_FIELD_MARSHAL_SIZE +
      +
    • MONO_FIELD_MARSHAL_PARENT +
    • MONO_FIELD_MARSHAL_NATIVE_TYPE +
    +
    FieldPtrMONO_TABLE_FIELD_POINTER +Array size: +MONO_FIELD_POINTER_SIZE +
      +
    • MONO_FIELD_POINTER_FIELD +
    +
    FieldRVAMONO_TABLE_FIELDRVA +Array size: +MONO_FIELDRVA_SIZE +
      +
    • MONO_FIELD_RVA_RVA +
    • MONO_FIELD_RVA_FIELD +
    +
    FileMONO_TABLE_FILE +Array size: MONO_FILE_SIZE +
      +
    • MONO_FILE_FLAGS +
    • MONO_FILE_NAME +
    • MONO_FILE_HASH_VALUE +
    +
    GenericParamMONO_TABLE_GENERICPARAM +Array size: +MONO_GENERICPARAM_SIZE +
      +
    • MONO_GENERICPARAM_NUMBER +
    • MONO_GENERICPARAM_FLAGS +
    • MONO_GENERICPARAM_OWNER +
    • MONO_GENERICPARAM_NAME +
    +
    GenericParamConstraintMONO_TABLE_GENERICPARAMCONSTRAINTArray +size: MONO_GENERICPARAMCONSTRAINT_SIZE +
      +
    • MONO_GENPARCONSTRAINT_GENERICPAR +
    • MONO_GENPARCONSTRAINT_CONSTRAINT +
    +
    ImplMapMONO_TABLE_IMPLMAP +Array size: +MONO_IMPLMAP_SIZE +
      +
    • MONO_IMPLMAP_FLAGS +
    • MONO_IMPLMAP_MEMBER +
    • MONO_IMPLMAP_NAME +
    • MONO_IMPLMAP_SCOPE +
    +
    InterfaceImplMONO_TABLE_INTERFACEIMPL +Array size: +
  • MONO_INTERFACEIMPL_SIZE +
      +
    • MONO_INTERFACEIMPL_CLASS +
    • MONO_INTERFACEIMPL_INTERFACE +
    +
  • ManifestResourceMONO_TABLE_MANIFESTRESOURCEArray +size: MONO_MANIFESTRESOURCE_SIZE +
      +
    • MONO_MANIFEST_OFFSET +
    • MONO_MANIFEST_FLAGS +
    • MONO_MANIFEST_NAME +
    • MONO_MANIFEST_IMPLEMENTATION +
    +
    MemberRefMONO_TABLE_MEMBERREF +Array size: +MONO_MEMBERREF_SIZE +
      +
    • MONO_MEMBERREF_CLASS +
    • MONO_MEMBERREF_NAME +
    • MONO_MEMBERREF_SIGNATURE +
    +
    MethodImplMONO_TABLE_METHODIMPL +Array size: +MONO_METHODIMPL_SIZE +
      +
    • MONO_METHODIMPL_CLASS +
    • MONO_METHODIMPL_BODY +
    • MONO_METHODIMPL_DECLARATION +
    +
    MethodSpecMONO_TABLE_METHODSPEC +Array size: +MONO_METHODSPEC_SIZE +
      +
    • MONO_METHODSPEC_METHOD +
    • MONO_METHODSPEC_SIGNATURE +
    +
    MethodSemanticsMONO_TABLE_METHODSEMANTICSArray +size: MONO_METHOD_SEMA_SIZE +
      +
    • MONO_METHOD_SEMA_SEMANTICS +
    • MONO_METHOD_SEMA_METHOD +
    • MONO_METHOD_SEMA_ASSOCIATION +
    +
    ModulerefMONO_TABLE_MODULEREF +Array size: +MONO_MODULEREF_SIZE +
      +
    • MONO_MODULEREF_NAME +
    +
    ModuleMONO_TABLE_MODULE +Array size: +MONO_MODULE_SIZE +
    +Columns: +
      +
    • MONO_MODULE_GENERATION +
    • MONO_MODULE_NAME +
    • MONO_MODULE_MVID +
    • MONO_MODULE_ENC +
    • MONO_MODULE_ENCBASE +
    +
    TypeRefMONO_TABLE_TYPEREF +Array size: +MONO_TYPEREF_SIZE +
      +
    • MONO_TYPEREF_SCOPE +
    • MONO_TYPEREF_NAME +
    • MONO_TYPEREF_NAMESPACE +
    +
    MethodPtrMONO_TABLE_METHOD_POINTER +Array size: +MONO_METHOD_POINTER_SIZE +
      +
    • MONO_METHOD_POINTER_METHOD +
    +
    MethodMONO_TABLE_METHOD +Array size: +MONO_METHOD_SIZE +
      +
    • MONO_METHOD_RVA +
    • MONO_METHOD_IMPLFLAGS +
    • MONO_METHOD_FLAGS +
    • MONO_METHOD_NAME +
    • MONO_METHOD_SIGNATURE +
    • MONO_METHOD_PARAMLIST +
    +
    NestedClassMONO_TABLE_NESTEDCLASS +Array size: +MONO_NESTEDCLASS_SIZE +
      +
    • MONO_NESTED_CLASS_NESTED +
    • MONO_NESTED_CLASS_ENCLOSING +
    +
    ParamPtrMONO_TABLE_PARAM_POINTER +Array size: +MONO_PARAM_POINTER_SIZE +
      +
    • MONO_PARAM_POINTER_PARAM +
    +
    ParamMONO_TABLE_PARAM +Array size: MONO_PARAM_SIZE +
      +
    • MONO_PARAM_FLAGS +
    • MONO_PARAM_SEQUENCE +
    • MONO_PARAM_NAME +
    +
    PropertyMapMONO_TABLE_PROPERTYMAP +Array size: +MONO_PROPERTY_MAP_SIZE +
      +
    • MONO_PROPERTY_MAP_PARENT +
    • MONO_PROPERTY_MAP_PROPERTY_LIST +
    +
    PropertyPtrMONO_TABLE_PROPERTY_POINTERArray +size: MONO_PROPERTY_POINTER_SIZE +
      +
    • MONO_PROPERTY_POINTER_PROPERTY +
    +
    PropertyMONO_TABLE_PROPERTY +Array size: +MONO_PROPERTY_SIZE +
      +
    • MONO_PROPERTY_FLAGS +
    • MONO_PROPERTY_NAME +
    • MONO_PROPERTY_TYPE +
    +
    StandaloneSigMONO_TABLE_STANDALONESIG +Array size: +
  • MONO_STAND_ALONE_SIGNATURE_SIZE +
      +
    • MONO_STAND_ALONE_SIGNATURE +
    +
  • TypeDefMONO_TABLE_TYPEDEF +Array size: +MONO_TYPEDEF_SIZE +
      +
    • MONO_TYPEDEF_FLAGS +
    • MONO_TYPEDEF_NAME +
    • MONO_TYPEDEF_NAMESPACE +
    • MONO_TYPEDEF_EXTENDS +
    • MONO_TYPEDEF_FIELD_LIST +
    • MONO_TYPEDEF_METHOD_LIST +
    +
    TypeSpecMONO_TABLE_TYPESPEC +Array size: +MONO_TYPESPEC_SIZE +
      +
    • MONO_TYPESPEC_SIGNATURE +
    +
    +
    + +

    Each table can contain zero or more rows, you must call the + mono_metadata_table_rows + to obtain the number of rows in a table, and then you can + extract individual row values by using + the mono_metadata_decode_row + or + the mono_metadata_decode_row_col. + When decoding rows you must provide an guint32 array large + enough to hold as many columns as the table contains. + +

    The metadata tables are stored in the MonoImage, you obtain + a pointer to the MonoTableInfo by calling + the mono_image_get_table_info + and then you can scan those tables, for example: + +

    +	/*
    +	 * Dumps a few fields from the AssemblyRef table
    +	 */
    +	void DumpAssemblyRefs (MonoImage *image)
    +	{
    +		/* Get a pointer to the AssemblyRef metadata table */
    +		MonoTableInfo *t = mono_image_get_table_info (image, MONO_TABLE_ASSEMBLYREF);
    +
    +		/* Fetch the number of rows available in the table */
    +		int rows = mono_table_info_get_rows (t);
    +		int i;
    +
    +		/* For each row, print some of its values */
    +		for (i = 0; i < rows; i++){
    +			/* Space where we extract one row from the metadata table */
    +			guint32 cols [MONO_ASSEMBLYREF_SIZE];
    +
    +			/* Extract the row into the array cols */
    +			mono_metadata_decode_row (t, i, cols, MONO_ASSEMBLYREF_SIZE);
    +
    +			fprintf (output, "%d: Version=%d.%d.%d.%d\n\tName=%s\n", i + 1,
    +                        	cols [MONO_ASSEMBLYREF_MAJOR_VERSION],
    +                        	cols [MONO_ASSEMBLYREF_MINOR_VERSION],
    +                        	cols [MONO_ASSEMBLYREF_BUILD_NUMBER],
    +                        	cols [MONO_ASSEMBLYREF_REV_NUMBER],
    +                        	mono_metadata_string_heap (image, cols [MONO_ASSEMBLYREF_NAME]));
    +		}
    +	}
    +	
    + +

    The above program shows the following output when ran on + the C# compiler: + +

    +	1: Version=1.0.5000.0
    +		Name=mscorlib
    +	2: Version=1.0.5000.0
    +		Name=System
    +	3: Version=1.0.5000.0
    +		Name=System.Xml
    +	
    + +

    + +

    Metadata Tables API

    + +

    These are the APIs for dealing with tables: + + +

    +
    mono_image_get_table_info
    + +
    Prototype: mono_image_get_table_info
    +

    + +

    +
    +
    mono_image_get_table_rows
    + +
    Prototype: mono_image_get_table_rows
    +

    + +

    +
    +
    mono_metadata_get_table
    + +
    Prototype: mono_metadata_get_table
    +

    + +

    +
    +
    mono_metadata_decode_row_col
    + +
    guint32 +mono_metadata_decode_row_col (const MonoTableInfo *t, int idx, guint col) + +
    +

    +Parameters +

    t:
    table to extract information from.
    idx:
    index for row in table.
    col:
    column in the row.
    +Remarks +

    + This function returns the value of column col from the idx + row in the table t. + +

    +
    +
    mono_metadata_decode_row
    + +
    void +mono_metadata_decode_row (const MonoTableInfo *t, int idx, guint32 *res, int res_size) + +
    +

    +Parameters +

    t:
    table to extract information from.
    idx:
    index in table.
    res:
    array of res_size cols to store the results in
    +Remarks +

    + This decompresses the metadata element idx in table t + into the guint32 res array that has res_size elements + +

    +
    +
    mono_metadata_compute_size
    + +
    Prototype: mono_metadata_compute_size
    +

    + +

    +
    +
    mono_metadata_custom_attrs_from_index
    + +
    Prototype: mono_metadata_custom_attrs_from_index
    +

    + +

    +
    +
    mono_metadata_decode_signed_value
    + +
    gint32 +mono_metadata_decode_signed_value (const char *ptr, const char **rptr) + +
    +

    +Parameters +

    ptr:
    pointer to decode from
    rptr:
    the new position of the pointer
    +Returns +
    the decoded value +
    +Remarks +

    + This routine decompresses 32-bit signed values + (not specified in the spec) + + +

    +
    +
    mono_metadata_decode_value
    + +
    guint32 +mono_metadata_decode_value (const char *_ptr, const char **rptr) + +
    +

    +Parameters +

    ptr:
    pointer to decode from
    rptr:
    the new position of the pointer
    +Returns +
    the decoded value +
    +Remarks +

    + This routine decompresses 32-bit values as specified in the "Blob and + Signature" section (22.2) + + +

    +
    +
    mono_metadata_encode_value
    + +
    Prototype: mono_metadata_encode_value
    +

    + + +

    Metadata access API

    + +

    This is the low-level API for accessing the metadata + images. + + +

    +
    mono_cli_rva_image_map
    + +
    Prototype: mono_cli_rva_image_map
    +

    + +

    +
    +
    mono_pe_file_open
    + +
    MonoImage* +mono_pe_file_open (const char *fname, MonoImageOpenStatus *status) + +
    +

    +Parameters +

    fname:
    filename that points to the module we want to open
    status:
    An error condition is returned in this field
    +Returns +
    An open image of type %MonoImage or NULL on error. if + + NULL, then check the value of status for details on the error. + This variant for mono_image_open DOES NOT SET UP CLI METADATA. + It's just a PE file loader, used for FileVersionInfo. It also does + not use the image cache.
    + +
    +
    +
    mono_metadata_events_from_typedef
    + +
    Prototype: mono_metadata_events_from_typedef
    +

    + +

    +
    +
    mono_metadata_field_info
    + +
    Prototype: mono_metadata_field_info
    +

    + +

    +
    +
    mono_metadata_free_array
    + +
    Prototype: mono_metadata_free_array
    +

    + +

    +
    +
    mono_metadata_free_marshal_spec
    + +
    Prototype: mono_metadata_free_marshal_spec
    +

    + +

    +
    +
    mono_metadata_free_mh
    + +
    Prototype: mono_metadata_free_mh
    +

    + +

    +
    +
    mono_metadata_free_type
    + +
    Prototype: mono_metadata_free_type
    +

    + +

    +
    +
    mono_metadata_get_constant_index
    + +
    Prototype: mono_metadata_get_constant_index
    +

    + +

    +
    +
    mono_metadata_get_marshal_info
    + +
    Prototype: mono_metadata_get_marshal_info
    +

    + +

    +
    +
    mono_metadata_implmap_from_method
    + +
    Prototype: mono_metadata_implmap_from_method
    +

    + +

    +
    +
    mono_metadata_interfaces_from_typedef
    + +
    Prototype: mono_metadata_interfaces_from_typedef
    +

    + +

    +
    +
    mono_metadata_locate
    + +
    const char * +mono_metadata_locate (MonoImage *meta, int table, int idx) + +
    +

    +Parameters +

    meta:
    metadata context
    table:
    table code.
    idx:
    index of element to retrieve from table.
    +Returns +
    a pointer to the idx element in the metadata table + + whose code is table.
    + +
    +
    +
    mono_metadata_locate_token
    + +
    const char * +mono_metadata_locate_token (MonoImage *meta, guint32 token) + +
    +

    +Parameters +

    meta:
    metadata context
    token:
    metadata token
    +Returns +
    a pointer to the data in the metadata represented by the + + token token.
    + +
    +
    +
    mono_metadata_methods_from_event
    + +
    Prototype: mono_metadata_methods_from_event
    +

    + +

    +
    +
    mono_metadata_methods_from_property
    + +
    Prototype: mono_metadata_methods_from_property
    +

    + +

    +
    +
    mono_metadata_nested_in_typedef
    + +
    Prototype: mono_metadata_nested_in_typedef
    +

    + +

    +
    +
    mono_metadata_nesting_typedef
    + +
    Prototype: mono_metadata_nesting_typedef
    +

    + +

    +
    +
    mono_metadata_packing_from_typedef
    + +
    Prototype: mono_metadata_packing_from_typedef
    +

    + +

    +
    +
    mono_metadata_properties_from_typedef
    + +
    Prototype: mono_metadata_properties_from_typedef
    +

    + +

    +
    +
    mono_metadata_token_from_dor
    + +
    Prototype: mono_metadata_token_from_dor
    +

    + +

    +
    +
    mono_metadata_typedef_from_field
    + +
    guint32 +mono_metadata_typedef_from_field (MonoImage *meta, guint32 index) + +
    +

    +Parameters +

    meta:
    metadata context
    index:
    FieldDef token
    +Returns +
    the 1-based index into the TypeDef table of the type that + + declared the field described by index, or 0 if not found.
    + +
    +
    +
    mono_metadata_typedef_from_method
    + +
    Prototype: mono_metadata_typedef_from_method
    +

    + +

    +
    +
    mono_metadata_type_equal
    + +
    Prototype: mono_metadata_type_equal
    +

    + +

    +
    +
    mono_metadata_type_hash
    + +
    Prototype: mono_metadata_type_hash
    +

    + +

    +
    +
    mono_metadata_declsec_from_index
    + +
    Prototype: mono_metadata_declsec_from_index
    +

    + +

    +
    +
    mono_metadata_free_method_signature
    + +
    Prototype: mono_metadata_free_method_signature
    +

    + + +

    Retrieving Objects from Tokens

    + + +
    +
    mono_metadata_parse_custom_mod
    + +
    Prototype: mono_metadata_parse_custom_mod
    +

    + +

    +
    +
    mono_metadata_parse_field_type
    + +
    MonoType* +mono_metadata_parse_field_type (MonoImage *m, short field_flags, const char *ptr, const char **rptr) + +
    +

    +Parameters +

    m:
    metadata context to extract information from
    ptr:
    pointer to the field signature
    rptr:
    pointer updated to match the end of the decoded stream
    +Returns +
    The MonoType that was extracted from ptr. +
    +Remarks +

    + Parses the field signature, and returns the type information for it. + + +

    +
    +
    mono_metadata_parse_marshal_spec
    + +
    Prototype: mono_metadata_parse_marshal_spec
    +

    + +

    +
    +
    mono_metadata_parse_method_signature_full
    + +
    Prototype: mono_metadata_parse_method_signature_full
    +

    + +

    +
    +
    mono_metadata_parse_method_signature
    + +
    Prototype: mono_metadata_parse_method_signature
    +

    + +

    +
    +
    mono_metadata_parse_mh_full
    + +
    Prototype: mono_metadata_parse_mh_full
    +

    + +

    +
    +
    mono_metadata_parse_mh
    + +
    Prototype: mono_metadata_parse_mh
    +

    + +

    +
    +
    mono_metadata_parse_param
    + +
    MonoType* +mono_metadata_parse_param (MonoImage *m, const char *ptr, const char **rptr) + +
    +

    +Parameters +

    m:
    metadata context to extract information from
    ptr:
    pointer to the param signature
    rptr:
    pointer updated to match the end of the decoded stream
    +Returns +
    The MonoType that was extracted from ptr. +
    +Remarks +

    + Parses the param signature, and returns the type information for it. + + +

    +
    +
    mono_metadata_parse_signature
    + +
    Prototype: mono_metadata_parse_signature
    +

    + +

    +
    +
    mono_metadata_parse_typedef_or_ref
    + +
    Prototype: mono_metadata_parse_typedef_or_ref
    +

    + +

    +
    +
    mono_metadata_parse_type_full
    + +
    Prototype: mono_metadata_parse_type_full
    +

    + +

    +
    +
    mono_metadata_parse_type
    + +
    static MonoType* +mono_metadata_parse_type_internal (MonoImage *m, MonoGenericContainer *container, MonoParseTypeMode mode, + short opt_attrs, gboolean transient, const char *ptr, const char **rptr) + +
    +

    +Parameters +

    m:
    metadata context
    mode:
    king of type that may be found at ptr
    opt_attrs:
    optional attributes to store in the returned type
    ptr:
    pointer to the type representation
    rptr:
    pointer updated to match the end of the decoded stream
    transient:
    whenever to allocate the result from the heap or from a mempool
    +Returns +
    a MonoType structure representing the decoded type. +
    +Remarks +

    + + Decode a compressed type description found at ptr in m. + mode can be one of MONO_PARSE_MOD_TYPE, MONO_PARSE_PARAM, MONO_PARSE_RET, + MONO_PARSE_FIELD, MONO_PARSE_LOCAL, MONO_PARSE_TYPE. + This function can be used to decode type descriptions in method signatures, + field signatures, locals signatures etc. + + To parse a generic type, `generic_container' points to the current class'es + (the `generic_container' field in the MonoClass) or the current generic method's + (stored in image->property_hash) generic container. + When we encounter any MONO_TYPE_VAR or MONO_TYPE_MVAR's, they're looked up in + this MonoGenericContainer. + + LOCKING: Acquires the loader lock. + + + +

    Generics Support

    + + +
    +
    mono_metadata_generic_class_is_valuetype
    + +
    Prototype: mono_metadata_generic_class_is_valuetype
    +

    + +

    +
    +
    mono_metadata_inflate_generic_inst
    + +
    Prototype: mono_metadata_inflate_generic_inst
    +

    + +

    +
    +
    mono_metadata_load_generic_params
    + +
    Prototype: mono_metadata_load_generic_params
    +

    + + +

    Tokens

    + + +
    +
    mono_ldtoken
    + +
    Prototype: mono_ldtoken
    +

    + +

    +
    +
    mono_ldstr
    + +
    MonoString* +mono_ldstr (MonoDomain *domain, MonoImage *image, guint32 idx) + +
    +

    +Parameters +

    domain:
    the domain where the string will be used.
    image:
    a metadata context
    idx:
    index into the user string table.
    +Returns +
    a loaded string from the image/idx combination. +
    +Remarks +

    + + Implementation for the ldstr opcode. + +

    +
    +
    mono_exception_from_token
    + +
    MonoException* +mono_exception_from_token (MonoImage *image, guint32 token) + +
    +

    +Parameters +

    image:
    the Mono image where to look for the class
    token:
    The type token of the class
    +Returns +
    the initialized exception instance. +
    +Remarks +

    + Creates an exception of the type given by token. + + + +

    OpCodes

    + + +
    +
    mono_opcode_name
    + +
    Prototype: mono_opcode_name
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-methods.html b/docs/deploy/mono-api-methods.html new file mode 100644 index 0000000000..d8abf6ee8d --- /dev/null +++ b/docs/deploy/mono-api-methods.html @@ -0,0 +1,578 @@ + + + + mono-api-methods.html + + + +

    Methods

    + +

    Invoking Methods

    + + +
    +
    mono_runtime_invoke
    + +
    MonoObject* +mono_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc) + +
    +

    +Parameters +

    method:
    method to invoke
    obJ:
    object instance
    params:
    arguments to the method
    exc:
    exception information.
    +Remarks +

    + Invokes the method represented by method on the object obj. + + obj is the 'this' pointer, it should be NULL for static + methods, a MonoObject* for object instances and a pointer to + the value type for value types. + + The params array contains the arguments to the method with the + same convention: MonoObject* pointers for object instances and + pointers to the value type otherwise. + +

    + From unmanaged code you'll usually use the + mono_runtime_invoke() variant. + + Note that this function doesn't handle virtual methods for + you, it will exec the exact method you pass: we still need to + expose a function to lookup the derived class implementation + of a virtual method (there are examples of this in the code, + though). + +

    + You can pass NULL as the exc argument if you don't want to + catch exceptions, otherwise, *exc will be set to the exception + thrown, if any. if an exception is thrown, you can't use the + MonoObject* result from the function. + +

    + If the method returns a value type, it is boxed in an object + reference. + + +If you want to invoke generic methods, you must call the method on the +"inflated" class, which you can obtain from the +mono_object_get_class() + +

    +MonoClass *clazz; +MonoMethod *method; + +clazz = mono_object_get_class (obj); + +/* + * If there are more Add methods declared, you + * may use mono_method_desc_search_in_class (clazz, ":Add(T)"), + * you must substitute ":Add(T)" with the correct type, for example + * for List<int>, you would use ":Add(int)". + */ +method = mono_class_get_method_from_name (clazz, "Add", 1); +mono_runtime_invoke (method, obj, args, &exception); +
    + + +
    +
    +
    mono_runtime_invoke_array
    + +
    MonoObject* +mono_runtime_invoke_array (MonoMethod *method, void *obj, MonoArray *params, + MonoObject **exc) + +
    +

    +Parameters +

    method:
    method to invoke
    obJ:
    object instance
    params:
    arguments to the method
    exc:
    exception information.
    +Remarks +

    + Invokes the method represented by method on the object obj. + + obj is the 'this' pointer, it should be NULL for static + methods, a MonoObject* for object instances and a pointer to + the value type for value types. + + The params array contains the arguments to the method with the + same convention: MonoObject* pointers for object instances and + pointers to the value type otherwise. The _invoke_array + variant takes a C# object[] as the params argument (MonoArray + *params): in this case the value types are boxed inside the + respective reference representation. + +

    + From unmanaged code you'll usually use the + mono_runtime_invoke() variant. + + Note that this function doesn't handle virtual methods for + you, it will exec the exact method you pass: we still need to + expose a function to lookup the derived class implementation + of a virtual method (there are examples of this in the code, + though). + +

    + You can pass NULL as the exc argument if you don't want to + catch exceptions, otherwise, *exc will be set to the exception + thrown, if any. if an exception is thrown, you can't use the + MonoObject* result from the function. + +

    + If the method returns a value type, it is boxed in an object + reference. + +

    +
    +
    mono_runtime_delegate_invoke
    + +
    MonoObject* +mono_runtime_delegate_invoke (MonoObject *delegate, void **params, MonoObject **exc) + +
    +

    +Parameters +

    delegate:
    pointer to a delegate object.
    params:
    parameters for the delegate.
    exc:
    Pointer to the exception result.
    +Remarks +

    + Invokes the delegate method delegate with the parameters provided. + + You can pass NULL as the exc argument if you don't want to + catch exceptions, otherwise, *exc will be set to the exception + thrown, if any. if an exception is thrown, you can't use the + MonoObject* result from the function. + + +

    +
    +
    mono_method_body_get_object
    + +
    Prototype: mono_method_body_get_object
    +

    + +

    +
    +
    mono_method_desc_free
    + +
    void +mono_method_desc_free (MonoMethodDesc *desc) + +
    +

    +Parameters +

    desc:
    method description to be released
    +Remarks +

    + Releases the MonoMethodDesc object desc. + +

    +
    +
    mono_method_desc_from_method
    + +
    Prototype: mono_method_desc_from_method
    +

    + +

    +
    +
    mono_method_desc_full_match
    + +
    Prototype: mono_method_desc_full_match
    +

    + +

    +
    +
    mono_method_desc_match
    + +
    Prototype: mono_method_desc_match
    +

    + +

    +
    +
    mono_method_desc_new
    + +
    MonoMethodDesc* +mono_method_desc_new (const char *name, gboolean include_namespace) + +
    +

    +Parameters +

    name:
    the method name.
    include_namespace:
    whether the name includes a namespace or not.
    +Returns +
    a parsed representation of the method description. +
    +Remarks +

    + Creates a method description for name, which conforms to the following + specification: + + [namespace.]classname:methodname[(args...)] + + in all the loaded assemblies. + + Both classname and methodname can contain '*' which matches anything. + + +

    +
    +
    mono_method_desc_search_in_class
    + +
    Prototype: mono_method_desc_search_in_class
    +

    + +

    +
    +
    mono_method_desc_search_in_image
    + +
    Prototype: mono_method_desc_search_in_image
    +

    + +

    +
    +
    mono_method_full_name
    + +
    Prototype: mono_method_full_name
    +

    + +

    +
    +
    mono_method_get_class
    + +
    Prototype: mono_method_get_class
    +

    + +

    +
    +
    mono_method_get_flags
    + +
    Prototype: mono_method_get_flags
    +

    + +

    +
    +
    mono_method_get_last_managed
    + +
    Prototype: mono_method_get_last_managed
    +

    + +

    +
    +
    mono_method_get_marshal_info
    + +
    Prototype: mono_method_get_marshal_info
    +

    + +

    +
    +
    mono_method_get_name
    + +
    Prototype: mono_method_get_name
    +

    + +

    +
    +
    mono_method_get_object
    + +
    Prototype: mono_method_get_object
    +

    + +

    +
    +
    mono_method_get_param_names
    + +
    Prototype: mono_method_get_param_names
    +

    + +

    +
    +
    mono_method_get_param_token
    + +
    Prototype: mono_method_get_param_token
    +

    + +

    +
    +
    mono_method_get_signature
    + +
    Prototype: mono_method_get_signature
    +

    + +

    +
    +
    mono_method_get_index
    + +
    Prototype: mono_method_get_index
    +

    + +

    +
    +
    mono_method_get_signature_full
    + +
    Prototype: mono_method_get_signature_full
    +

    + +

    +
    +
    mono_method_get_token
    + +
    Prototype: mono_method_get_token
    +

    + +

    +
    +
    mono_method_has_marshal_info
    + +
    Prototype: mono_method_has_marshal_info
    +

    + +

    +
    +
    mono_method_verify
    + +
    Prototype: mono_method_verify
    +

    + + +

    Method Signatures

    + + +
    +
    mono_method_signature
    + +
    MonoMethodSignature* +mono_method_signature (MonoMethod *m) + +
    +

    +Remarks +

    + Return the signature of the method M. On failure, returns NULL. + +

    +
    +
    mono_signature_explicit_this
    + +
    gboolean +mono_signature_explicit_this (MonoMethodSignature *sig) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    +Returns +
    TRUE if this the method signature sig has an explicit + + instance argument. FALSE otherwise.
    + +
    +
    +
    mono_signature_get_call_conv
    + +
    guint32 +mono_signature_get_call_conv (MonoMethodSignature *sig) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    +Returns +
    the call convention of the method signature sig. +
    + +
    +
    +
    mono_signature_get_desc
    + +
    Prototype: mono_signature_get_desc
    +

    + +

    +
    +
    mono_signature_get_param_count
    + +
    guint32 +mono_signature_get_param_count (MonoMethodSignature *sig) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    +Returns +
    the number of parameters in the method signature sig. +
    + +
    +
    +
    mono_signature_get_params
    + +
    MonoType* +mono_signature_get_params (MonoMethodSignature *sig, gpointer *iter) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    iter:
    pointer to an iterator
    +Returns +
    the next parameter type of the method signature sig, + + NULL when finished.
    +Remarks +

    + Iterates over the parameters for the method signature sig. + A void* pointer must be initualized to NULL to start the iteration + and it's address is passed to this function repeteadly until it returns + NULL. + + +

    +
    +
    mono_signature_get_return_type
    + +
    MonoType* +mono_signature_get_return_type (MonoMethodSignature *sig) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    +Returns +
    the return type of the method signature sig +
    + +
    +
    +
    mono_signature_hash
    + +
    Prototype: mono_signature_hash
    +

    + +

    +
    +
    mono_signature_is_instance
    + +
    gboolean +mono_signature_is_instance (MonoMethodSignature *sig) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    +Returns +
    TRUE if this the method signature sig has an implicit + + first instance argument. FALSE otherwise.
    + +
    +
    +
    mono_signature_vararg_start
    + +
    int +mono_signature_vararg_start (MonoMethodSignature *sig) + +
    +

    +Parameters +

    sig:
    the method signature inspected
    +Returns +
    the number of the first vararg parameter in the + + method signature sig. -1 if this is not a vararg signature.
    + +
    +
    +
    mono_param_get_objects
    + +
    Prototype: mono_param_get_objects
    +

    + +

    +
    +
    mono_get_method_full
    + +
    Prototype: mono_get_method_full
    +

    + +

    +
    +
    mono_get_method
    + +
    Prototype: mono_get_method
    +

    + + +

    Methods Header Operations

    + + +
    +
    mono_method_get_header
    + +
    Prototype: mono_method_get_header
    +

    + +

    +
    +
    mono_method_header_get_clauses
    + +
    Prototype: mono_method_header_get_clauses
    +

    + +

    +
    +
    mono_method_header_get_code
    + +
    Prototype: mono_method_header_get_code
    +

    + +

    +
    +
    mono_method_header_get_locals
    + +
    Prototype: mono_method_header_get_locals
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-object.html b/docs/deploy/mono-api-object.html new file mode 100644 index 0000000000..51cdd0dcbe --- /dev/null +++ b/docs/deploy/mono-api-object.html @@ -0,0 +1,1134 @@ + + + + mono-api-object.html + + + +

    Object API

    + +

    The object API deals with all the operations shared by + objects, value + types, arrays. + +

    The object API has methods for accessing fields, properties, events, delegates. + +

    There are some advanced uses that are useful to document + here dealing with remote fields. + +

    Synopsis

    + +
    +#include <metadata/object.h> + +typedef struct MonoVTable MonoVTable; +typedef struct _MonoThreadsSync MonoThreadsSync; + +typedef struct { + MonoVTable *vtable; + MonoThreadsSync *synchronisation; +} MonoObject; + +typedef struct { + guint32 length; + guint32 lower_bound; +} MonoArrayBounds; + +typedef struct { + MonoObject obj; + /* bounds is NULL for szarrays */ + MonoArrayBounds *bounds; + /* total number of elements of the array */ + guint32 max_length; + /* we use double to ensure proper alignment on platforms that need it */ + double vector [MONO_ZERO_LEN_ARRAY]; +} MonoArray; + +MonoObject* mono_object_new (MonoDomain *domain, + MonoClass *klass); + + +MonoObject* mono_object_new_from_token (MonoDomain *domain, + MonoImage *image, + guint32 token); +MonoObject* mono_object_new_specific (MonoVTable *vtable); +MonoObject* mono_object_clone (MonoObject *obj); +MonoClass* mono_object_get_class (MonoObject *obj); +MonoDomain* mono_object_get_domain (MonoObject *obj); +MonoMethod* mono_object_get_virtual_method (MonoObject *obj, + MonoMethod *method); + +MonoObject* mono_object_isinst (MonoObject *obj, + MonoClass *klass); +gpointer mono_object_unbox (MonoObject *obj); +MonoObject* mono_object_castclass_mbyref (MonoObject *obj, + MonoClass *klass); + +guint mono_object_get_size (MonoObject* o); +MonoObject* mono_value_box (MonoDomain *domain, + MonoClass *class, + gpointer value); + + +MonoArray* mono_array_new (MonoDomain *domain, + MonoClass *eclass, + uintptr_t n); +MonoArray* mono_array_new_full (MonoDomain *domain, + MonoClass *array_class, + uintptr_t *lengths, + intptr_t *lower_bounds); +MonoArray* mono_array_new_specific (MonoVTable *vtable, + uintptr_t n); +MonoClass* mono_array_class_get (MonoClass *eclass, + guint32 rank); +MonoArray* mono_array_clone (MonoArray *array); + + +uintptr_t mono_array_length (MonoArray *array); + +char* mono_array_addr_with_size (MonoArray *array, + int size, + uintptr_t idx); + +gint32 mono_array_element_size (MonoClass *ac); + + +const char* mono_field_get_name (MonoClassField *field); +MonoClass* mono_field_get_parent (MonoClassField *field); +MonoType* mono_field_get_type (MonoClassField *field); +void mono_field_get_value (MonoObject *obj, + MonoClassField *field, + void *value); +MonoObject* mono_field_get_value_object (MonoDomain *domain, + MonoClassField *field, + MonoObject *obj); +void mono_field_set_value (MonoObject *obj, + MonoClassField *field, + void *value); +void mono_field_static_get_value (MonoVTable *vt, + MonoClassField *field, + void *value); +void mono_field_static_set_value (MonoVTable *vt, + MonoClassField *field, + void *value); + + +guint32 mono_property_get_flags (MonoProperty *prop); +MonoMethod* mono_property_get_get_method (MonoProperty *prop); + +MonoClass* mono_property_get_parent (MonoProperty *prop); +MonoMethod* mono_property_get_set_method (MonoProperty *prop); +MonoObject* mono_property_get_value (MonoProperty *prop, + void *obj, + void **params, + MonoObject **exc); +void mono_property_set_value (MonoProperty *prop, + void *obj, + void **params, + MonoObject **exc); + +MonoMethod* mono_event_get_add_method (MonoEvent *event); +guint32 mono_event_get_flags (MonoEvent *event); +const char* mono_event_get_name (MonoEvent *event); +MonoClass* mono_event_get_parent (MonoEvent *event); +MonoMethod* mono_event_get_raise_method (MonoEvent *event); +MonoMethod* mono_event_get_remove_method (MonoEvent *event); +gpointer mono_load_remote_field (MonoObject *this, + MonoClass *klass, + MonoClassField *field, + gpointer *res); +MonoObject* mono_load_remote_field_new (MonoObject *this, + MonoClass *klass, + MonoClassField *field); +void mono_store_remote_field (MonoObject *this, + MonoClass *klass, + MonoClassField *field, + gpointer val); +void mono_store_remote_field_new (MonoObject *this, + MonoClass *klass, + MonoClassField *field, + MonoObject *arg); + +
    + +

    MonoObject is the base definition for all managed objects + in the Mono runtime, it represents the System.Object + managed type. + +

    All objects that derive from System.Object + do have this base definition. Derived objects are declared + following the pattern where the parent class is the first + field of a structure definition, for example: + +

    + typedef struct { + MonoObject parent; + int my_new_field; + } MyNewObject +
    + + +

    Core Object Methods

    + + +
    +
    mono_object_new
    + +
    MonoObject* +mono_object_new (MonoDomain *domain, MonoClass *klass) + +
    +

    +Parameters +

    klass:
    the class of the object that we want to create
    +Returns +
    a newly created object whose definition is + + looked up using klass. This will not invoke any constructors, + so the consumer of this routine has to invoke any constructors on + its own to initialize the object. + +

    + It returns NULL on failure.

    + + +

    For example, if you wanted to create an object of type + System.Version, you would use a piece of code like this: + +

    +MonoClass *version_class; +MonoObject *result; + +/* Get the class from mscorlib */ +version_class = mono_class_from_name (mono_get_corlib (), + "System", "Version"); + +/* Create an object of that class */ +result = mono_object_new (mono_domain_get (), version_class); +
    + +
    +
    +
    mono_object_new_alloc_specific
    + +
    Prototype: mono_object_new_alloc_specific
    +

    + +

    +
    +
    mono_object_new_fast
    + +
    Prototype: mono_object_new_fast
    +

    + +

    +
    +
    mono_object_new_from_token
    + +
    MonoObject* +mono_object_new_from_token (MonoDomain *domain, MonoImage *image, guint32 token) + +
    +

    +Parameters +

    image:
    Context where the type_token is hosted
    token:
    a token of the type that we want to create
    +Returns +
    A newly created object whose definition is + + looked up using token in the image image
    + +
    +
    +
    mono_object_new_specific
    + +
    MonoObject* +mono_object_new_specific (MonoVTable *vtable) + +
    +

    +Parameters +

    vtable:
    the vtable of the object that we want to create
    +Returns +
    A newly created object with class and domain specified + + by vtable
    + +
    +
    +
    mono_object_clone
    + +
    MonoObject* +mono_object_clone (MonoObject *obj) + +
    +

    +Parameters +

    obj:
    the object to clone
    +Returns +
    A newly created object who is a shallow copy of obj +
    + +
    +
    +
    mono_object_get_class
    + +
    MonoClass* +mono_object_get_class (MonoObject *obj) + +
    +

    +Parameters +

    obj:
    object to query
    +Returns +
    the MonOClass of the object. +
    +Remarks +

    + + +

    +
    +
    mono_object_get_domain
    + +
    MonoDomain* +mono_object_get_domain (MonoObject *obj) + +
    +

    +Parameters +

    obj:
    object to query
    +Returns +
    the MonoDomain where the object is hosted +
    +Remarks +

    + + +

    +
    +
    mono_object_get_virtual_method
    + +
    MonoMethod* +mono_object_get_virtual_method (MonoObject *obj, MonoMethod *method) + +
    +

    +Parameters +

    obj:
    object to operate on.
    method:
    method
    +Remarks +

    + Retrieves the MonoMethod that would be called on obj if obj is passed as + the instance of a callvirt of method. + +

    +
    +
    mono_object_isinst_mbyref
    + +
    Prototype: mono_object_isinst_mbyref
    +

    + +

    +
    +
    mono_object_isinst
    + +
    MonoObject* +mono_object_isinst (MonoObject *obj, MonoClass *klass) + +
    +

    +Parameters +

    obj:
    an object
    klass:
    a pointer to a class
    +Returns +
    obj if obj is derived from klass +
    + +
    +
    +
    mono_object_unbox
    + +
    gpointer +mono_object_unbox (MonoObject *obj) + +
    +

    +Parameters +

    obj:
    object to unbox
    +Returns +
    a pointer to the start of the valuetype boxed in this + + object. + + This method will assert if the object passed is not a valuetype.
    +Remarks +

    + + +

    +
    +
    mono_object_castclass_mbyref
    + +
    MonoObject* +mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass) + +
    +

    +Parameters +

    obj:
    an object
    klass:
    a pointer to a class
    +Returns +
    obj if obj is derived from klass, throws an exception otherwise +
    + +
    +
    +
    mono_object_is_alive
    + +
    Prototype: mono_object_is_alive
    +

    + +

    +
    +
    mono_object_get_size
    + +
    guint +mono_object_get_size (MonoObject* o) + +
    +

    +Parameters +

    o:
    object to query
    +Returns +
    the size, in bytes, of o +
    +Remarks +

    + + + + +

    Value Types

    + + +
    +
    mono_value_box
    + +
    MonoObject* +mono_value_box (MonoDomain *domain, MonoClass *class, gpointer value) + +
    +

    +Parameters +

    class:
    the class of the value
    value:
    a pointer to the unboxed data
    +Returns +
    A newly created object which contains value. +
    + +
    +
    +
    mono_value_copy
    + +
    Prototype: mono_value_copy
    +

    + +

    +
    +
    mono_value_copy_array
    + +
    Prototype: mono_value_copy_array
    +

    + + + +

    Array Methods

    + +

    Use the mono_array_new_* methods to create arrays + of a given type. + +

    For example, the following code creates an array with two + elements of type System.Byte, and sets the values + 0xca and 0xfe on it: + +

    +
    +	MonoArray *CreateByteArray (MonoDomain *domain)
    +	{
    +	    MonoArray *data;
    +
    +	    data = mono_array_new (domain, mono_get_byte_class (), 2);
    +	    mono_array_set (data, guint8, 0, 0xca);
    +	    mono_array_set (data, guint8, 0, 0xfe);
    +
    +	    return data;
    +	}
    +
    +	
    + +

    Creating Arrays

    + + +
    +
    mono_array_new
    + +
    MonoArray* +mono_array_new (MonoDomain *domain, MonoClass *eclass, uintptr_t n) + +
    +

    +Parameters +

    domain:
    domain where the object is created
    eclass:
    element class
    n:
    number of array elements
    +Remarks +

    + This routine creates a new szarray with n elements of type eclass. + +

    +
    +
    mono_array_new_full
    + +
    MonoArray* +mono_array_new_full (MonoDomain *domain, MonoClass *array_class, uintptr_t *lengths, intptr_t *lower_bounds) + +
    +

    +Parameters +

    domain:
    domain where the object is created
    array_class:
    array class
    lengths:
    lengths for each dimension in the array
    lower_bounds:
    lower bounds for each dimension in the array (may be NULL)
    +Remarks +

    + This routine creates a new array objects with the given dimensions, + lower bounds and type. + +

    +
    +
    mono_array_new_specific
    + +
    MonoArray* +mono_array_new_specific (MonoVTable *vtable, uintptr_t n) + +
    +

    +Parameters +

    vtable:
    a vtable in the appropriate domain for an initialized class
    n:
    number of array elements
    +Remarks +

    + This routine is a fast alternative to mono_array_new() for code which + can be sure about the domain it operates in. + +

    +
    +
    mono_array_class_get
    + +
    MonoClass* +mono_array_class_get (MonoClass *eclass, guint32 rank) + +
    +

    +Parameters +

    element_class:
    element class
    rank:
    the dimension of the array class
    +Returns +
    a class object describing the array with element type element_type and + + dimension rank.
    + +
    +
    +
    mono_array_clone
    + +
    MonoArray* +mono_array_clone (MonoArray *array) + +
    +

    +Parameters +

    array:
    the array to clone
    +Returns +
    A newly created array who is a shallow copy of array +
    + + +

    Using Arrays

    + + +
    +
    mono_array_set
    + +
    Prototype: mono_array_set
    +

    + +

    +
    +
    mono_array_setref
    + +
    Prototype: mono_array_setref
    +

    + +

    +
    +
    mono_array_length
    + +
    uintptr_t +mono_array_length (MonoArray *array) + +
    +

    +Parameters +

    array:
    a MonoArray*
    +Remarks +

    + Returns the total number of elements in the array. This works for + both vectors and multidimensional arrays. + +

    +
    +
    mono_array_addr
    + +
    Prototype: mono_array_addr
    +

    + +

    +
    +
    mono_array_addr_with_size
    + +
    char* +mono_array_addr_with_size (MonoArray *array, int size, uintptr_t idx) + +
    +

    +Parameters +

    array:
    a MonoArray*
    size:
    size of the array elements
    idx:
    index into the array
    +Remarks +

    + Returns the address of the idx element in the array. + +

    +
    +
    mono_array_get
    + +
    Prototype: mono_array_get
    +

    + +

    +
    +
    mono_array_element_size
    + +
    gint32 +mono_array_element_size (MonoClass *ac) + +
    +

    +Parameters +

    ac:
    pointer to a #MonoArrayClass
    +Returns +
    the size of single array element. +
    + + + +

    Fields

    + + +
    +
    mono_field_from_token
    + +
    Prototype: mono_field_from_token
    +

    + +

    +
    +
    mono_field_get_flags
    + +
    Prototype: mono_field_get_flags
    +

    + +

    +
    +
    mono_field_get_name
    + +
    const char* +mono_field_get_name (MonoClassField *field) + +
    +

    +Parameters +

    field:
    the MonoClassField to act on
    +Returns +
    the name of the field. +
    + +
    +
    +
    mono_field_get_parent
    + +
    MonoClass* +mono_field_get_parent (MonoClassField *field) + +
    +

    +Parameters +

    field:
    the MonoClassField to act on
    +Returns +
    MonoClass where the field was defined. +
    + +
    +
    +
    mono_field_get_type
    + +
    MonoType* +mono_field_get_type (MonoClassField *field) + +
    +

    +Parameters +

    field:
    the MonoClassField to act on
    +Returns +
    MonoType of the field. +
    + +
    +
    +
    mono_field_get_value
    + +
    void +mono_field_get_value (MonoObject *obj, MonoClassField *field, void *value) + +
    +

    +Parameters +

    obj:
    Object instance
    field:
    MonoClassField describing the field to fetch information from
    value:
    pointer to the location where the value will be stored
    +Remarks +

    + Use this routine to get the value of the field field in the object + passed. + + The pointer provided by value must be of the field type, for reference + types this is a MonoObject*, for value types its the actual pointer to + the value type. + + For example: + int i; + mono_field_get_value (obj, int_field, &i); + +

    +
    +
    mono_field_get_value_object
    + +
    MonoObject* +mono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj) + +
    +

    +Parameters +

    domain:
    domain where the object will be created (if boxing)
    field:
    MonoClassField describing the field to fetch information from
    obj:
    The object instance for the field.
    +Returns +
    a new MonoObject with the value from the given field. If the + + field represents a value type, the value is boxed. +
    + +
    +
    +
    mono_field_set_value
    + +
    void +mono_field_set_value (MonoObject *obj, MonoClassField *field, void *value) + +
    +

    +Parameters +

    obj:
    Instance object
    field:
    MonoClassField describing the field to set
    value:
    The value to be set
    +Remarks +

    + Sets the value of the field described by field in the object instance obj + to the value passed in value. This method should only be used for instance + fields. For static fields, use mono_field_static_set_value. + + The value must be on the native format of the field type. + +

    +
    +
    mono_field_static_get_value
    + +
    void +mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value) + +
    +

    +Parameters +

    vt:
    vtable to the object
    field:
    MonoClassField describing the field to fetch information from
    value:
    where the value is returned
    +Remarks +

    + Use this routine to get the value of the static field field value. + + The pointer provided by value must be of the field type, for reference + types this is a MonoObject*, for value types its the actual pointer to + the value type. + + For example: + int i; + mono_field_static_get_value (vt, int_field, &i); + +

    +
    +
    mono_field_static_set_value
    + +
    void +mono_field_static_set_value (MonoVTable *vt, MonoClassField *field, void *value) + +
    +

    +Parameters +

    field:
    MonoClassField describing the field to set
    value:
    The value to be set
    +Remarks +

    + Sets the value of the static field described by field + to the value passed in value. + + The value must be on the native format of the field type. + +

    +
    +
    mono_field_get_object
    + +
    Prototype: mono_field_get_object
    +

    + + + +

    Properties

    + + +
    +
    mono_property_get_object
    + +
    Prototype: mono_property_get_object
    +

    + +

    +
    +
    mono_property_get_flags
    + +
    guint32 +mono_property_get_flags (MonoProperty *prop) + +
    +

    +Parameters +

    prop:
    the MonoProperty to act on.
    +Returns +
    the flags for the property. +
    +Remarks +

    + The metadata flags for a property are encoded using the + PROPERTY_ATTRIBUTE_* constants. See the tabledefs.h file for details. + + +

    +
    +
    mono_property_get_get_method
    + +
    MonoMethod* +mono_property_get_get_method (MonoProperty *prop) + +
    +

    +Parameters +

    prop:
    the MonoProperty to act on.
    +Returns +
    the setter method of the property (A MonoMethod) +
    + +
    +
    +
    mono_property_get_name
    + +
    Prototype: mono_property_get_name
    +

    + +

    +
    +
    mono_property_get_parent
    + +
    MonoClass* +mono_property_get_parent (MonoProperty *prop) + +
    +

    +Parameters +

    prop:
    the MonoProperty to act on.
    +Returns +
    the MonoClass where the property was defined. +
    + +
    +
    +
    mono_property_get_set_method
    + +
    MonoMethod* +mono_property_get_set_method (MonoProperty *prop) + +
    +

    +Parameters +

    prop:
    the MonoProperty to act on.
    +Returns +
    the setter method of the property (A MonoMethod) +
    + +
    +
    +
    mono_property_get_value
    + +
    MonoObject* +mono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc) + +
    +

    +Parameters +

    prop:
    MonoProperty to fetch
    obj:
    instance object on which to act
    params:
    parameters to pass to the propery
    exc:
    optional exception
    +Returns +
    the value from invoking the get method on the property. +
    +Remarks +

    + Invokes the property's get method with the given arguments on the + object instance obj (or NULL for static properties). + +

    + You can pass NULL as the exc argument if you don't want to + catch exceptions, otherwise, *exc will be set to the exception + thrown, if any. if an exception is thrown, you can't use the + MonoObject* result from the function. + + +

    +
    +
    mono_property_set_value
    + +
    void +mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc) + +
    +

    +Parameters +

    prop:
    MonoProperty to set
    obj:
    instance object on which to act
    params:
    parameters to pass to the propery
    exc:
    optional exception
    +Remarks +

    + Invokes the property's set method with the given arguments on the + object instance obj (or NULL for static properties). + +

    + You can pass NULL as the exc argument if you don't want to + catch exceptions, otherwise, *exc will be set to the exception + thrown, if any. if an exception is thrown, you can't use the + MonoObject* result from the function. + + + +

    Events

    + + +
    +
    mono_event_get_object
    + +
    Prototype: mono_event_get_object
    +

    + +

    +
    +
    mono_event_get_add_method
    + +
    MonoMethod* +mono_event_get_add_method (MonoEvent *event) + +
    +

    +Parameters +

    event:
    The MonoEvent to act on.
    +Returns +
    the add' method for the event (a MonoMethod). +
    + +
    +
    +
    mono_event_get_flags
    + +
    guint32 +mono_event_get_flags (MonoEvent *event) + +
    +

    +Parameters +

    event:
    the MonoEvent to act on.
    +Returns +
    the flags for the event. +
    +Remarks +

    + The metadata flags for an event are encoded using the + EVENT_* constants. See the tabledefs.h file for details. + + +

    +
    +
    mono_event_get_name
    + +
    const char* +mono_event_get_name (MonoEvent *event) + +
    +

    +Parameters +

    event:
    the MonoEvent to act on
    +Returns +
    the name of the event. +
    + +
    +
    +
    mono_event_get_parent
    + +
    MonoClass* +mono_event_get_parent (MonoEvent *event) + +
    +

    +Parameters +

    event:
    the MonoEvent to act on.
    +Returns +
    the MonoClass where the event is defined. +
    + +
    +
    +
    mono_event_get_raise_method
    + +
    MonoMethod* +mono_event_get_raise_method (MonoEvent *event) + +
    +

    +Parameters +

    event:
    The MonoEvent to act on.
    +Returns +
    the raise method for the event (a MonoMethod). +
    + +
    +
    +
    mono_event_get_remove_method
    + +
    MonoMethod* +mono_event_get_remove_method (MonoEvent *event) + +
    +

    +Parameters +

    event:
    The MonoEvent to act on.
    +Returns +
    the remove method for the event (a MonoMethod). +
    + + + +

    Remote Fields

    + +
    +
    mono_load_remote_field
    + +
    gpointer +mono_load_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer *res) + +
    +

    +Parameters +

    this:
    pointer to an object
    klass:
    klass of the object containing field
    field:
    the field to load
    res:
    a storage to store the result
    +Returns +
    an address pointing to the value of field. +
    +Remarks +

    + This method is called by the runtime on attempts to load fields of + transparent proxy objects. this points to such TP, klass is the class of + the object containing field. res is a storage location which can be + used to store the result. + + +

    +
    +
    mono_load_remote_field_new
    + +
    MonoObject* +mono_load_remote_field_new (MonoObject *this, MonoClass *klass, MonoClassField *field) + +
    +

    +Parameters +

    this:
    klass:
    field:
    +Remarks +

    + Missing documentation. + +

    +
    +
    mono_store_remote_field
    + +
    void +mono_store_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer val) + +
    +

    +Parameters +

    this:
    pointer to an object
    klass:
    klass of the object containing field
    field:
    the field to load
    val:
    the value/object to store
    +Remarks +

    + This method is called by the runtime on attempts to store fields of + transparent proxy objects. this points to such TP, klass is the class of + the object containing field. val is the new value to store in field. + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-profiler.html b/docs/deploy/mono-api-profiler.html new file mode 100644 index 0000000000..c0b89c9601 --- /dev/null +++ b/docs/deploy/mono-api-profiler.html @@ -0,0 +1,268 @@ + + + + mono-api-profiler.html + + + +

    Profiling Interface

    + +

    Profiler Operation

    + +

    The following methods can be used by dynamic profiler + methods to monitor different aspects of the program. + +

    A custom profiler will have one public method defined in + the shared library which is the entry point that Mono calls at + startup, it has the following signature: + +

    +	void mono_profiler_startup (const char *desc)
    +	
    + +

    Where "desc" is the set of arguments that were passed from + the command line. This routine will call + mono_profiler_install to activate the profiler and + will install one or more filters (one of the various + mono_profiler_install_ functions). + +

    In addition, a profiler developer will typically call + mono_profiler_set_events to register which kinds of + traces should be enabled, these can be an OR-ed combination of + the following: + +

    +	MONO_PROFILE_NONE
    +        MONO_PROFILE_APPDOMAIN_EVENTS
    +        MONO_PROFILE_ASSEMBLY_EVENTS
    +        MONO_PROFILE_MODULE_EVENTS    
    +        MONO_PROFILE_CLASS_EVENTS     
    +        MONO_PROFILE_JIT_COMPILATION  
    +        MONO_PROFILE_INLINING         
    +        MONO_PROFILE_EXCEPTIONS       
    +        MONO_PROFILE_ALLOCATIONS      
    +        MONO_PROFILE_GC               
    +        MONO_PROFILE_THREADS          
    +        MONO_PROFILE_REMOTING         
    +        MONO_PROFILE_TRANSITIONS      
    +        MONO_PROFILE_ENTER_LEAVE      
    +        MONO_PROFILE_COVERAGE         
    +        MONO_PROFILE_INS_COVERAGE     
    +        MONO_PROFILE_STATISTICAL      
    +	
    + +

    Developers can change the set of monitored events at + runtime by calling mono_profiler_set_events. + + +

    +
    mono_profiler_install
    + +
    void +mono_profiler_install (MonoProfiler *prof, MonoProfileFunc callback) + +
    +

    +Parameters +

    prof:
    a MonoProfiler structure pointer, or a pointer to a derived structure.
    callback:
    the function to invoke at shutdown
    +Remarks +

    + Use mono_profiler_install to activate profiling in the Mono runtime. + Typically developers of new profilers will create a new structure whose + first field is a MonoProfiler and put any extra information that they need + to access from the various profiling callbacks there. + + +

    +
    +
    mono_profiler_install_allocation
    + +
    Prototype: mono_profiler_install_allocation
    +

    + +

    +
    +
    mono_profiler_install_appdomain
    + +
    Prototype: mono_profiler_install_appdomain
    +

    + +

    +
    +
    mono_profiler_install_assembly
    + +
    Prototype: mono_profiler_install_assembly
    +

    + +

    +
    +
    mono_profiler_install_class
    + +
    Prototype: mono_profiler_install_class
    +

    + +

    +
    +
    mono_profiler_install_coverage_filter
    + +
    Prototype: mono_profiler_install_coverage_filter
    +

    + +

    +
    +
    mono_profiler_install_enter_leave
    + +
    void +mono_profiler_install_enter_leave (MonoProfileMethodFunc enter, MonoProfileMethodFunc fleave) + +
    +

    +Parameters +

    enter:
    the routine to be called on each method entry
    fleave:
    the routine to be called each time a method returns
    +Remarks +

    + Use this routine to install routines that will be called everytime + a method enters and leaves. The routines will receive as an argument + the MonoMethod representing the method that is entering or leaving. + +

    +
    +
    mono_profiler_install_jit_compile
    + +
    void +mono_profiler_install_jit_compile (MonoProfileMethodFunc start, MonoProfileMethodResult end) + +
    +

    +Parameters +

    start:
    the routine to be called when the JIT process starts.
    end:
    the routine to be called when the JIT process ends.
    +Remarks +

    + Use this routine to install routines that will be called when JIT + compilation of a method starts and completes. + +

    +
    +
    mono_profiler_install_module
    + +
    Prototype: mono_profiler_install_module
    +

    + +

    +
    +
    mono_profiler_install_thread
    + +
    Prototype: mono_profiler_install_thread
    +

    + +

    +
    +
    mono_profiler_install_transition
    + +
    Prototype: mono_profiler_install_transition
    +

    + +

    +
    +
    mono_profiler_install_gc
    + +
    Prototype: mono_profiler_install_gc
    +

    + +

    +
    +
    mono_profiler_install_statistical
    + +
    Prototype: mono_profiler_install_statistical
    +

    + +

    +
    +
    mono_profiler_set_events
    + +
    void +mono_profiler_set_events (MonoProfileFlags events) + +
    +

    +Parameters +

    events:
    an ORed set of values made up of MONO_PROFILER_ flags
    +Remarks +

    + The events descriped in the events argument is a set of flags + that represent which profiling events must be triggered. For + example if you have registered a set of methods for tracking + JIT compilation start and end with mono_profiler_install_jit_compile, + you will want to pass the MONO_PROFILE_JIT_COMPILATION flag to + this routine. + + You can call mono_profile_set_events more than once and you can + do this at runtime to modify which methods are invoked. + +

    +
    +
    mono_profiler_get_events
    + +
    MonoProfileFlags +mono_profiler_get_events (void) + +
    +

    +Remarks +

    + Returns a list of active events that will be intercepted. + + +

    Coverage

    + +

    To support profiling modules that need to do code coverage + analysis, the following routines is provided: + + + + \ No newline at end of file diff --git a/docs/deploy/mono-api-reflection.html b/docs/deploy/mono-api-reflection.html new file mode 100644 index 0000000000..775871a1bb --- /dev/null +++ b/docs/deploy/mono-api-reflection.html @@ -0,0 +1,269 @@ + + + + mono-api-reflection.html + + + +

    Fetching Types, and Basic Reflection

    + + +
    +
    mono_reflection_get_custom_attrs_blob
    + +
    Prototype: mono_reflection_get_custom_attrs_blob
    +

    + +

    +
    +
    mono_reflection_get_custom_attrs
    + +
    Prototype: mono_reflection_get_custom_attrs
    +

    + +

    +
    +
    mono_custom_attrs_get_attr
    + +
    Prototype: mono_custom_attrs_get_attr
    +

    + +

    +
    +
    mono_reflection_get_token
    + +
    Prototype: mono_reflection_get_token
    +

    + +

    +
    +
    mono_reflection_get_type
    + +
    Prototype: mono_reflection_get_type
    +

    + +

    +
    +
    mono_reflection_parse_type
    + +
    Prototype: mono_reflection_parse_type
    +

    + +

    +
    +
    mono_reflection_type_from_name
    + +
    Prototype: mono_reflection_type_from_name
    +

    + +

    +
    +
    mono_reflection_get_custom_attrs_info
    + +
    Prototype: mono_reflection_get_custom_attrs_info
    +

    + + +

    Custom Attributes

    + + +
    +
    mono_custom_attrs_construct
    + +
    Prototype: mono_custom_attrs_construct
    +

    + +

    +
    +
    mono_custom_attrs_free
    + +
    Prototype: mono_custom_attrs_free
    +

    + +

    +
    +
    mono_custom_attrs_from_assembly
    + +
    Prototype: mono_custom_attrs_from_assembly
    +

    + +

    +
    +
    mono_custom_attrs_from_class
    + +
    Prototype: mono_custom_attrs_from_class
    +

    + +

    +
    +
    mono_custom_attrs_from_event
    + +
    Prototype: mono_custom_attrs_from_event
    +

    + +

    +
    +
    mono_custom_attrs_from_field
    + +
    Prototype: mono_custom_attrs_from_field
    +

    + +

    +
    +
    mono_custom_attrs_from_index
    + +
    MonoCustomAttrInfo* +mono_custom_attrs_from_index (MonoImage *image, guint32 idx) + +
    +

    +Returns +

    NULL if no attributes are found or if a loading error occurs. +
    + +
    +
    +
    mono_custom_attrs_from_method
    + +
    Prototype: mono_custom_attrs_from_method
    +

    + +

    +
    +
    mono_custom_attrs_from_param
    + +
    MonoCustomAttrInfo* +mono_custom_attrs_from_param (MonoMethod *method, guint32 param) + +
    +

    +Parameters +

    method:
    handle to the method that we want to retrieve custom parameter information from
    param:
    parameter number, where zero represent the return value, and one is the first parameter in the method
    +Returns +
    the custom attribute object for the specified parameter, or NULL if there are none. +
    +Remarks +

    + The result must be released with mono_custom_attrs_free(). + + +

    +
    +
    mono_custom_attrs_from_property
    + +
    Prototype: mono_custom_attrs_from_property
    +

    + +

    +
    +
    mono_custom_attrs_has_attr
    + +
    Prototype: mono_custom_attrs_has_attr
    +

    + + +

    + +
    +
    mono_module_file_get_object
    + +
    Prototype: mono_module_file_get_object
    +

    + +

    +
    +
    mono_module_get_object
    + +
    Prototype: mono_module_get_object
    +

    + +

    +
    +
    mono_method_body_get_object
    + +
    Prototype: mono_method_body_get_object
    +

    + +

    +
    +
    mono_event_get_object
    + +
    Prototype: mono_event_get_object
    +

    + +

    +
    +
    mono_assembly_get_object
    + +
    Prototype: mono_assembly_get_object
    +

    + +

    +
    +
    mono_param_get_objects
    + +
    Prototype: mono_param_get_objects
    +

    + +

    +
    +
    mono_field_get_object
    + +
    Prototype: mono_field_get_object
    +

    + +

    +
    +
    mono_property_get_object
    + +
    Prototype: mono_property_get_object
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-security.html b/docs/deploy/mono-api-security.html new file mode 100644 index 0000000000..9643964250 --- /dev/null +++ b/docs/deploy/mono-api-security.html @@ -0,0 +1,130 @@ + + + + mono-api-security.html + + + +

    Security Manager

    + + +
    +
    mono_get_context_capture_method
    + +
    Prototype: mono_get_context_capture_method
    +

    + + +

    Declarative Security

    + + +
    +
    mono_declsec_flags_from_assembly
    + +
    Prototype: mono_declsec_flags_from_assembly
    +

    + +

    +
    +
    mono_declsec_flags_from_class
    + +
    Prototype: mono_declsec_flags_from_class
    +

    + +

    +
    +
    mono_declsec_flags_from_method
    + +
    Prototype: mono_declsec_flags_from_method
    +

    + +

    +
    +
    mono_declsec_get_assembly_action
    + +
    Prototype: mono_declsec_get_assembly_action
    +

    + +

    +
    +
    mono_declsec_get_class_action
    + +
    Prototype: mono_declsec_get_class_action
    +

    + +

    +
    +
    mono_declsec_get_demands
    + +
    Prototype: mono_declsec_get_demands
    +

    + +

    +
    +
    mono_declsec_get_inheritdemands_class
    + +
    Prototype: mono_declsec_get_inheritdemands_class
    +

    + +

    +
    +
    mono_declsec_get_inheritdemands_method
    + +
    Prototype: mono_declsec_get_inheritdemands_method
    +

    + +

    +
    +
    mono_declsec_get_linkdemands
    + +
    Prototype: mono_declsec_get_linkdemands
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-string.html b/docs/deploy/mono-api-string.html new file mode 100644 index 0000000000..54b012b1df --- /dev/null +++ b/docs/deploy/mono-api-string.html @@ -0,0 +1,405 @@ + + + + mono-api-string.html + + + +

    Strings

    + +

    Strings representation inside the Mono runtime. + +

    Synopsis

    + +
    +#include <metadata/object.h> + +typedef struct { + MonoObject object; + gint32 length; + gunichar2 chars [0]; +} MonoString; + +MonoString* mono_string_new (MonoDomain *domain, + const char *text); +MonoString* mono_string_new_len (MonoDomain *domain, + const char *text, + guint length); +MonoString* mono_string_new_size (MonoDomain *domain, + gint32 len); +MonoString* mono_string_new_utf16 (MonoDomain *domain, + const guint16 *text, + gint32 len); +MonoString* mono_string_from_utf16 (gunichar2 *data); +mono_unichar2* mono_string_to_utf16 (MonoString *s); +char* mono_string_to_utf8 (MonoString *s); +gboolean mono_string_equal (MonoString *s1, + MonoString *s2); +guint mono_string_hash (MonoString *s); +MonoString* mono_string_intern (MonoString *str); +MonoString* mono_string_is_interned (MonoString *o); +MonoString* mono_string_new_wrapper (const char *text); +gunichar2* mono_string_chars (MonoString *s); +int mono_string_length (MonoString *s); +gunichar2* mono_unicode_from_external (const gchar *in, + gsize *bytes); + + + +
    + +

    All of the operations on strings are done on pointers to + MonoString objects, like this: + +

    + MonoString *hello = mono_string_new (mono_domain_get (), "hello, world"); +
    + +

    Strings are bound to a particular application domain, which + is why it is necessary to pass a MonoDomain argument as the + first parameter to all the constructor functions. + +

    Typically, you want to create the strings on the current + application domain, so a call to mono_domain_get() is + sufficient. + +

    Constructors

    + + +
    +
    mono_string_new
    + +
    MonoString* +mono_string_new (MonoDomain *domain, const char *text) + +
    +

    +Parameters +

    text:
    a pointer to an utf8 string
    +Returns +
    A newly created string object which contains text. +
    + +
    +
    +
    mono_string_new_len
    + +
    MonoString* +mono_string_new_len (MonoDomain *domain, const char *text, guint length) + +
    +

    +Parameters +

    text:
    a pointer to an utf8 string
    length:
    number of bytes in text to consider
    +Returns +
    A newly created string object which contains text. +
    + +
    +
    +
    mono_string_new_size
    + +
    MonoString* +mono_string_new_size (MonoDomain *domain, gint32 len) + +
    +

    +Parameters +

    text:
    a pointer to an utf16 string
    len:
    the length of the string
    +Returns +
    A newly created string object of len +
    + +
    +
    +
    mono_string_new_utf16
    + +
    MonoString* +mono_string_new_utf16 (MonoDomain *domain, const guint16 *text, gint32 len) + +
    +

    +Parameters +

    text:
    a pointer to an utf16 string
    len:
    the length of the string
    +Returns +
    A newly created string object which contains text. +
    + +
    +
    +
    mono_string_from_utf16
    + +
    MonoString* +mono_string_from_utf16 (gunichar2 *data) + +
    +

    +Parameters +

    data:
    the UTF16 string (LPWSTR) to convert
    +Returns +
    a MonoString. +
    +Remarks +

    + Converts a NULL terminated UTF16 string (LPWSTR) to a MonoString. + + + +

    Conversions

    + + +
    +
    mono_string_to_utf16
    + +
    mono_unichar2* +mono_string_to_utf16 (MonoString *s) + +
    +

    +Parameters +

    s:
    a MonoString
    +Remarks +

    + Return an null-terminated array of the utf-16 chars + contained in s. The result must be freed with g_free(). + This is a temporary helper until our string implementation + is reworked to always include the null terminating char. + +

    +
    +
    mono_string_to_utf8
    + +
    char* +mono_string_to_utf8 (MonoString *s) + +
    +

    +Parameters +

    s:
    a System.String
    +Remarks +

    + Returns the UTF8 representation for s. + The resulting buffer needs to be freed with mono_free(). + + deprecated Use mono_string_to_utf8_checked to avoid having an exception arbritraly raised. + + +

    Methods

    + + +
    +
    mono_string_equal
    + +
    gboolean +mono_string_equal (MonoString *s1, MonoString *s2) + +
    +

    +Parameters +

    s1:
    First string to compare
    s2:
    Second string to compare
    +Remarks +

    + Returns FALSE if the strings differ. + +

    +
    +
    mono_string_hash
    + +
    guint +mono_string_hash (MonoString *s) + +
    +

    +Parameters +

    s:
    the string to hash
    +Remarks +

    + Returns the hash for the string. + +

    +
    +
    mono_string_intern
    + +
    MonoString* +mono_string_intern (MonoString *str) + +
    +

    +Parameters +

    o:
    String to intern
    +Returns +
    The interned string. +
    +Remarks +

    + Interns the string passed. + +

    +
    +
    mono_string_is_interned
    + +
    MonoString* +mono_string_is_interned (MonoString *o) + +
    +

    +Parameters +

    o:
    String to probe
    +Remarks +

    + Returns whether the string has been interned. + +

    +
    +
    mono_string_new_wrapper
    + +
    MonoString* +mono_string_new_wrapper (const char *text) + +
    +

    +Parameters +

    text:
    pointer to utf8 characters.
    +Remarks +

    + Helper function to create a string object from text in the current domain. + +

    +
    +
    mono_string_chars
    + +
    gunichar2* +mono_string_chars (MonoString *s) + +
    +

    +Parameters +

    s:
    a MonoString
    +Remarks +

    + Returns a pointer to the UCS16 characters stored in the MonoString + +

    +
    +
    mono_string_length
    + +
    int +mono_string_length (MonoString *s) + +
    +

    +Parameters +

    s:
    MonoString
    +Remarks +

    + Returns the lenght in characters of the string + + + +

    Other Encodings

    + +

    These routines are used when coping with strings that come + from Mono's environment, and might be encoded in one or more + of the external encodings. + +

    For example, some file systems might historically contain a + mix of file names with both old and new encodings, typically + UTF8 for new files, and the old files would be encoded in an 8 + bit character set (ISO-8859-1 for example). + +

    These routines try a number of encodings, those specified + in the MONO_ENCODINGS environment variable and return + unicode strings that can be used internally. + +

    See the mono(1) man page for more details. + + +

    +
    mono_unicode_from_external
    + +
    gunichar2* +mono_unicode_from_external (const gchar *in, gsize *bytes) + +
    +

    +Parameters +

    in:
    pointers to the buffer.
    bytes:
    number of bytes in the string.
    +Remarks +

    + Tries to turn a NULL-terminated string into UTF16. + + First, see if it's valid UTF8, in which case just turn it directly + into UTF16. Next, run through the colon-separated encodings in + MONO_EXTERNAL_ENCODINGS and do an iconv conversion on each, + returning the first successful conversion to UTF16. If no + conversion succeeds, return NULL. + + Callers must free the returned string if not NULL. bytes holds the number + of bytes in the returned string, not including the terminator. + +

    +
    +
    mono_unicode_to_external
    + +
    gchar*mono_unicode_to_external (const gunichar2 *uni) + +
    +

    +Parameters +

    uni:
    an UTF16 string to conver to an external representation.
    +Remarks +

    + Turns NULL-terminated UTF16 into either UTF8, or the first + working item in MONO_EXTERNAL_ENCODINGS if set. If no conversions + work, then UTF8 is returned. + + Callers must free the returned string. + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-threads.html b/docs/deploy/mono-api-threads.html new file mode 100644 index 0000000000..96fa796ab2 --- /dev/null +++ b/docs/deploy/mono-api-threads.html @@ -0,0 +1,185 @@ + + + + mono-api-threads.html + + + +

    Working with threads

    + +

    Thread API

    + +
    +
    mono_thread_attach
    + +
    Prototype: mono_thread_attach
    +

    + +

    +
    +
    mono_thread_create
    + +
    Prototype: mono_thread_create
    +

    + +

    +
    +
    mono_thread_current
    + +
    Prototype: mono_thread_current
    +

    + +

    +
    +
    mono_thread_detach
    + +
    Prototype: mono_thread_detach
    +

    + +

    +
    +
    mono_thread_exit
    + +
    Prototype: mono_thread_exit
    +

    + +

    +
    +
    mono_thread_manage
    + +
    Prototype: mono_thread_manage
    +

    + +

    +
    +
    mono_thread_new_init
    + +
    Prototype: mono_thread_new_init
    +

    + +

    +
    +
    mono_threads_get_default_stacksize
    + +
    Prototype: mono_threads_get_default_stacksize
    +

    + +

    +
    +
    mono_threads_install_cleanup
    + +
    Prototype: mono_threads_install_cleanup
    +

    + +

    +
    +
    mono_threads_set_default_stacksize
    + +
    Prototype: mono_threads_set_default_stacksize
    +

    + +

    +
    +
    mono_thread_stop
    + +
    Prototype: mono_thread_stop
    +

    + + +

    +
    +
    mono_thread_get_main
    + +
    Prototype: mono_thread_get_main
    +

    + +

    +
    +
    mono_thread_set_main
    + +
    void +mono_thread_set_main (MonoThread *thread) + +
    +

    +Parameters +

    thread:
    thread to set as the main thread
    +Remarks +

    + This function can be used to instruct the runtime to treat thread + as the main thread, ie, the thread that would normally execute the Main() + method. This basically means that at the end of thread, the runtime will + wait for the existing foreground threads to quit and other such details. + +

    +
    +
    mono_pthread_key_for_tls
    + +
    Prototype: mono_pthread_key_for_tls
    +

    + + +

    Monitors

    + + +
    +
    mono_monitor_enter
    + +
    Prototype: mono_monitor_enter
    +

    + +

    +
    +
    mono_monitor_exit
    + +
    Prototype: mono_monitor_exit
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-type.html b/docs/deploy/mono-api-type.html new file mode 100644 index 0000000000..4364e7d2d6 --- /dev/null +++ b/docs/deploy/mono-api-type.html @@ -0,0 +1,274 @@ + + + + mono-api-type.html + + + +

    Type support

    + +

    Synopsis

    + +
    +#include <metadata/metadata.h> +#include <metadata/class.h> + +typedef struct _MonoType MonoType; + + + +MonoArrayType* mono_type_get_array_type (MonoType *type); +MonoClass* mono_type_get_class (MonoType *type); + + +char* mono_type_get_name (MonoType *type); +MonoMethodSignature* mono_type_get_signature (MonoType *type); +int mono_type_get_type (MonoType *type); + +gboolean mono_type_is_byref (MonoType *type); + + +guint32 mono_type_to_unmanaged (MonoType *type, + MonoMarshalSpec *mspec, + gboolean as_field; + + + +
    + +

    The MonoType represents the unmanaged version of + System.Type. + + +

    +
    mono_type_get_object
    + +
    Prototype: mono_type_get_object
    +

    + +

    +
    +
    mono_type_create_from_typespec
    + +
    Prototype: mono_type_create_from_typespec
    +

    + +

    +
    +
    mono_type_full_name
    + +
    Prototype: mono_type_full_name
    +

    + +

    +
    +
    mono_type_get_array_type
    + +
    MonoArrayType* +mono_type_get_array_type (MonoType *type) + +
    +

    +Parameters +

    type:
    the MonoType operated on
    +Returns +
    a MonoArrayType struct describing the array type that type + + represents. The info includes details such as rank, array element type + and the sizes and bounds of multidimensional arrays.
    +Remarks +

    + It is only valid to call this function if type is a MONO_TYPE_ARRAY. + + +

    +
    +
    mono_type_get_class
    + +
    MonoClass* +mono_type_get_class (MonoType *type) + +
    +

    +Parameters +

    type:
    the MonoType operated on
    +Returns +
    the MonoClass pointer that describes the class that type represents. +
    +Remarks +

    + It is only valid to call this function if type is a MONO_TYPE_CLASS or a + MONO_TYPE_VALUETYPE. For more general functionality, use mono_class_from_mono_type (), + instead + + +

    +
    +
    mono_type_get_desc
    + +
    Prototype: mono_type_get_desc
    +

    + +

    +
    +
    mono_type_get_modifiers
    + +
    Prototype: mono_type_get_modifiers
    +

    + +

    +
    +
    mono_type_get_name
    + +
    char* +mono_type_get_name (MonoType *type) + +
    +

    +Parameters +

    type:
    a type
    +Returns +
    the string representation for type as it would be represented in IL code. +
    + +
    +
    +
    mono_type_get_signature
    + +
    MonoMethodSignature* +mono_type_get_signature (MonoType *type) + +
    +

    +Parameters +

    type:
    the MonoType operated on
    +Returns +
    the MonoMethodSignature pointer that describes the signature + + of the function pointer type represents.
    +Remarks +

    + It is only valid to call this function if type is a MONO_TYPE_FNPTR. + + +

    +
    +
    mono_type_get_type
    + +
    int +mono_type_get_type (MonoType *type) + +
    +

    +Parameters +

    type:
    the MonoType operated on
    +Returns +
    the IL type value for type. This is one of the MonoTypeEnum + + enum members like MONO_TYPE_I4 or MONO_TYPE_STRING.
    + +
    +
    +
    mono_type_get_underlying_type
    + +
    Prototype: mono_type_get_underlying_type
    +

    + +

    +
    +
    mono_type_is_byref
    + +
    gboolean +mono_type_is_byref (MonoType *type) + +
    +

    +Parameters +

    type:
    the MonoType operated on
    +Returns +
    TRUE if type represents a type passed by reference, + + FALSE otherwise.
    + +
    +
    +
    mono_type_size
    + +
    Prototype: mono_type_size
    +

    + +

    +
    +
    mono_type_stack_size
    + +
    Prototype: mono_type_stack_size
    +

    + +

    +
    +
    mono_type_to_unmanaged
    + +
    guint32 +mono_type_to_unmanaged (MonoType *type, MonoMarshalSpec *mspec, gboolean as_field, + gboolean unicode, MonoMarshalConv *conv) + +
    +

    +Returns +

    A MonoMarshalNative enumeration value (MONO_NATIVE_) value + + describing the underlying native reprensetation of the type. + +

    + In addition the value pointed by + "conv" will contain the kind of marshalling required for this + particular type one of the MONO_MARSHAL_CONV_ enumeration values.

    + +
    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-types.html b/docs/deploy/mono-api-types.html new file mode 100644 index 0000000000..0774670f96 --- /dev/null +++ b/docs/deploy/mono-api-types.html @@ -0,0 +1,201 @@ + + + + mono-api-types.html + + + +

    Common core types

    + +

    These are accesor methods to retrieve the MonoClass + * handle for the various built-in CLI types. + + +

    +
    mono_get_object_class
    + +
    Prototype: mono_get_object_class
    +

    + +

    +
    +
    mono_get_int16_class
    + +
    Prototype: mono_get_int16_class
    +

    + +

    +
    +
    mono_get_int32_class
    + +
    Prototype: mono_get_int32_class
    +

    + +

    +
    +
    mono_get_int64_class
    + +
    Prototype: mono_get_int64_class
    +

    + +

    +
    +
    mono_get_double_class
    + +
    Prototype: mono_get_double_class
    +

    + +

    +
    +
    mono_get_enum_class
    + +
    Prototype: mono_get_enum_class
    +

    + +

    +
    +
    mono_get_intptr_class
    + +
    Prototype: mono_get_intptr_class
    +

    + +

    +
    +
    mono_get_sbyte_class
    + +
    Prototype: mono_get_sbyte_class
    +

    + +

    +
    +
    mono_get_single_class
    + +
    Prototype: mono_get_single_class
    +

    + +

    +
    +
    mono_get_string_class
    + +
    Prototype: mono_get_string_class
    +

    + +

    +
    +
    mono_get_thread_class
    + +
    Prototype: mono_get_thread_class
    +

    + +

    +
    +
    mono_get_uint16_class
    + +
    Prototype: mono_get_uint16_class
    +

    + +

    +
    +
    mono_get_uint32_class
    + +
    Prototype: mono_get_uint32_class
    +

    + +

    +
    +
    mono_get_uint64_class
    + +
    Prototype: mono_get_uint64_class
    +

    + +

    +
    +
    mono_get_uintptr_class
    + +
    Prototype: mono_get_uintptr_class
    +

    + +

    +
    +
    mono_get_void_class
    + +
    Prototype: mono_get_void_class
    +

    + +

    +
    +
    mono_get_array_class
    + +
    Prototype: mono_get_array_class
    +

    + +

    +
    +
    mono_get_boolean_class
    + +
    Prototype: mono_get_boolean_class
    +

    + +

    +
    +
    mono_get_byte_class
    + +
    Prototype: mono_get_byte_class
    +

    + +

    +
    +
    mono_get_char_class
    + +
    Prototype: mono_get_char_class
    +

    + + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-unsorted.html b/docs/deploy/mono-api-unsorted.html new file mode 100644 index 0000000000..cbf46050b6 --- /dev/null +++ b/docs/deploy/mono-api-unsorted.html @@ -0,0 +1,510 @@ + + + + mono-api-unsorted.html + + + + + + +
    +
    mono_bounded_array_class_get
    + +
    MonoClass* +mono_bounded_array_class_get (MonoClass *eclass, guint32 rank, gboolean bounded) + +
    +

    +Parameters +

    element_class:
    element class
    rank:
    the dimension of the array class
    bounded:
    whenever the array has non-zero bounds
    +Returns +
    a class object describing the array with element type element_type and + + dimension rank.
    + +
    +
    +
    mono_check_corlib_version
    + +
    const char* +mono_check_corlib_version (void) + +
    +

    +Returns +

    NULL if the runtime will work with the corlib, or a g_malloc + + allocated string with the error otherwise.
    +Remarks +

    + Checks that the corlib that is loaded matches the version of this runtime. + + +

    +
    +
    mono_compile_method
    + +
    gpointer +mono_compile_method (MonoMethod *method) + +
    +

    +Parameters +

    method:
    The method to compile.
    +Remarks +

    + This JIT-compiles the method, and returns the pointer to the native code + produced. + +

    +
    +
    mono_config_for_assembly
    + +
    Prototype: mono_config_for_assembly
    +

    + +

    +
    +
    mono_dllmap_insert
    + +
    void +mono_dllmap_insert (MonoImage *assembly, const char *dll, const char *func, const char *tdll, const char *tfunc) + +
    +

    +Parameters +

    assembly:
    if NULL, this is a global mapping, otherwise the remapping of the dynamic library will only apply to the specified assembly
    dll:
    The name of the external library, as it would be found in the DllImport declaration. If prefixed with 'i:' the matching of the library name is done without case sensitivity
    func:
    if not null, the mapping will only applied to the named function (the value of EntryPoint)
    tdll:
    The name of the library to map the specified dll if it matches.
    tfunc:
    if func is not NULL, the name of the function that replaces the invocation
    +Remarks +

    + LOCKING: Acquires the loader lock. + + This function is used to programatically add DllImport remapping in either + a specific assembly, or as a global remapping. This is done by remapping + references in a DllImport attribute from the dll library name into the tdll + name. If the dll name contains the prefix "i:", the comparison of the + library name is done without case sensitivity. + + If you pass func, this is the name of the EntryPoint in a DllImport if specified + or the name of the function as determined by DllImport. If you pass func, you + must also pass tfunc which is the name of the target function to invoke on a match. + + Example: + mono_dllmap_insert (NULL, "i:libdemo.dll", NULL, relocated_demo_path, NULL); + + The above will remap DllImport statments for "libdemo.dll" and "LIBDEMO.DLL" to + the contents of relocated_demo_path for all assemblies in the Mono process. + + NOTE: This can be called before the runtime is initialized, for example from + mono_config_parse (). + +

    +
    +
    mono_environment_exitcode_get
    + +
    Prototype: mono_environment_exitcode_get
    +

    + +

    +
    +
    mono_environment_exitcode_set
    + +
    Prototype: mono_environment_exitcode_set
    +

    + +

    +
    +
    mono_free_method
    + +
    Prototype: mono_free_method
    +

    + +

    +
    +
    mono_free_verify_list
    + +
    Prototype: mono_free_verify_list
    +

    + +

    +
    +
    mono_get_config_dir
    + +
    Prototype: mono_get_config_dir
    +

    + +

    +
    +
    mono_get_corlib
    + +
    Prototype: mono_get_corlib
    +

    + +

    +
    +
    mono_get_delegate_invoke
    + +
    MonoMethod* +mono_get_delegate_invoke (MonoClass *klass) + +
    +

    +Parameters +

    klass:
    The delegate class
    +Returns +
    the MonoMethod for the "Invoke" method in the delegate klass or NULL if klass is a broken delegate type +
    + +
    +
    +
    mono_get_method_full
    + +
    Prototype: mono_get_method_full
    +

    + +

    +
    +
    mono_get_method
    + +
    Prototype: mono_get_method
    +

    + +

    +
    +
    mono_get_root_domain
    + +
    MonoDomain* +mono_get_root_domain (void) + +
    +

    +Returns +

    the root appdomain, to obtain the current domain, use mono_domain_get () +
    +Remarks +

    + The root AppDomain is the initial domain created by the runtime when it is + initialized. Programs execute on this AppDomain, but can create new ones + later. Currently there is no unmanaged API to create new AppDomains, this + must be done from managed code. + + +

    +
    +
    mono_init_from_assembly
    + +
    MonoDomain* +mono_init_from_assembly (const char *domain_name, const char *filename) + +
    +

    +Parameters +

    domain_name:
    name to give to the initial domain
    filename:
    filename to load on startup
    +Returns +
    the initial domain. +
    +Remarks +

    + Used by the runtime, users should use mono_jit_init instead. + + Creates the initial application domain and initializes the mono_defaults + structure. + This function is guaranteed to not run any IL code. + The runtime is initialized using the runtime version required by the + provided executable. The version is determined by looking at the exe + configuration file and the version PE field) + + +

    +
    +
    mono_init
    + +
    MonoDomain* +mono_init (const char *domain_name) + +
    +

    +Returns +

    the initial domain. +
    +Remarks +

    + + Creates the initial application domain and initializes the mono_defaults + structure. + This function is guaranteed to not run any IL code. + The runtime is initialized using the default runtime version. + + +

    +
    +
    mono_init_version
    + +
    MonoDomain* +mono_init_version (const char *domain_name, const char *version) + +
    +

    +Returns +

    the initial domain. +
    +Remarks +

    + + Used by the runtime, users should use mono_jit_init instead. + +

    + Creates the initial application domain and initializes the mono_defaults + structure. + + This function is guaranteed to not run any IL code. + The runtime is initialized using the provided rutime version. + + +

    +
    +
    mono_jit_exec
    + +
    int +mono_jit_exec (MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[]) + +
    +

    +Parameters +

    assembly:
    reference to an assembly
    argc:
    argument count
    argv:
    argument vector
    +Remarks +

    + Start execution of a program. + +

    +
    +
    mono_lookup_internal_call
    + +
    Prototype: mono_lookup_internal_call
    +

    + +

    +
    +
    mono_lookup_pinvoke_call
    + +
    Prototype: mono_lookup_pinvoke_call
    +

    + +

    +
    +
    mono_main
    + +
    int +mono_main (int argc, char* argv[]) + +
    +

    +Parameters +

    argc:
    number of arguments in the argv array
    argv:
    array of strings containing the startup arguments
    +Remarks +

    + Launches the Mono JIT engine and parses all the command line options + in the same way that the mono command line VM would. + +

    +
    +
    mono_parse_default_optimizations
    + +
    Prototype: mono_parse_default_optimizations
    +

    + +

    +
    +
    mono_ptr_class_get
    + +
    Prototype: mono_ptr_class_get
    +

    + +

    +
    +
    mono_register_bundled_assemblies
    + +
    Prototype: mono_register_bundled_assemblies
    +

    + +

    +
    +
    mono_runtime_class_init
    + +
    Prototype: mono_runtime_class_init
    +

    + +

    +
    +
    mono_runtime_cleanup
    + +
    void +mono_runtime_cleanup (MonoDomain *domain) + +
    +

    +Parameters +

    domain:
    unused.
    +Remarks +

    + Internal routine. + + This must not be called while there are still running threads executing + managed code. + +

    +
    +
    mono_runtime_get_main_args
    + +
    MonoArray* +mono_runtime_get_main_args (void) + +
    +

    +Returns +

    a MonoArray with the arguments passed to the main program +
    + +
    +
    +
    mono_runtime_init
    + +
    void +mono_runtime_init (MonoDomain *domain, MonoThreadStartCB start_cb, + MonoThreadAttachCB attach_cb) + +
    +

    +Parameters +

    domain:
    domain returned by mono_init ()
    +Remarks +

    + Initialize the core AppDomain: this function will run also some + IL initialization code, so it needs the execution engine to be fully + operational. + + AppDomain.SetupInformation is set up in mono_runtime_exec_main, where + we know the entry_assembly. + + +

    +
    +
    mono_runtime_is_shutting_down
    + +
    gboolean +mono_runtime_is_shutting_down (void) + +
    +

    +Remarks +

    + Returns whether the runtime has been flagged for shutdown. + + This is consumed by the P:System.Environment.HasShutdownStarted + property. + + +

    +
    +
    mono_runtime_object_init
    + +
    Prototype: mono_runtime_object_init
    +

    + +

    +
    +
    mono_runtime_quit
    + +
    Prototype: mono_runtime_quit
    +

    + +

    +
    +
    mono_runtime_run_main
    + +
    int +mono_runtime_run_main (MonoMethod *method, int argc, char* argv[], + MonoObject **exc) + +
    +

    +Parameters +

    method:
    the method to start the application with (usually Main)
    argc:
    number of arguments from the command line
    argv:
    array of strings from the command line
    exc:
    excetption results
    +Remarks +

    + Execute a standard Main() method (argc/argv contains the + executable name). This method also sets the command line argument value + needed by System.Environment. + + +

    + +

    +
    +
    mono_table_info_get_rows
    + +
    Prototype: mono_table_info_get_rows
    +

    + +

    +
    +
    mono_upgrade_remote_class_wrapper
    + +
    Prototype: mono_upgrade_remote_class_wrapper
    +

    + +

    +
    +
    mono_verify_corlib
    + +
    Prototype: mono_verify_corlib
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-utils.html b/docs/deploy/mono-api-utils.html new file mode 100644 index 0000000000..c0f236e038 --- /dev/null +++ b/docs/deploy/mono-api-utils.html @@ -0,0 +1,624 @@ + + + + mono-api-utils.html + + + +

    Utility Methods

    + +

    Bitsets

    + +

    MonoBitsets are a set of routines used to manipulate sets + of bits. + + +

    +
    mono_bitset_alloc_size
    + +
    Prototype: mono_bitset_alloc_size
    +

    + +

    +
    +
    mono_bitset_clear
    + +
    Prototype: mono_bitset_clear
    +

    + +

    +
    +
    mono_bitset_clear_all
    + +
    Prototype: mono_bitset_clear_all
    +

    + +

    +
    +
    mono_bitset_clone
    + +
    Prototype: mono_bitset_clone
    +

    + +

    +
    +
    mono_bitset_copyto
    + +
    Prototype: mono_bitset_copyto
    +

    + +

    +
    +
    mono_bitset_count
    + +
    Prototype: mono_bitset_count
    +

    + +

    +
    +
    mono_bitset_equal
    + +
    Prototype: mono_bitset_equal
    +

    + +

    +
    +
    mono_bitset_find_first
    + +
    Prototype: mono_bitset_find_first
    +

    + +

    +
    +
    mono_bitset_find_last
    + +
    Prototype: mono_bitset_find_last
    +

    + +

    +
    +
    mono_bitset_find_start
    + +
    Prototype: mono_bitset_find_start
    +

    + +

    +
    +
    mono_bitset_foreach
    + +
    Prototype: mono_bitset_foreach
    +

    + +

    +
    +
    mono_bitset_free
    + +
    Prototype: mono_bitset_free
    +

    + +

    +
    +
    mono_bitset_intersection
    + +
    Prototype: mono_bitset_intersection
    +

    + +

    +
    +
    mono_bitset_invert
    + +
    Prototype: mono_bitset_invert
    +

    + +

    +
    +
    mono_bitset_mem_new
    + +
    Prototype: mono_bitset_mem_new
    +

    + +

    +
    +
    mono_bitset_new
    + +
    Prototype: mono_bitset_new
    +

    + +

    +
    +
    mono_bitset_set
    + +
    Prototype: mono_bitset_set
    +

    + +

    +
    +
    mono_bitset_set_all
    + +
    Prototype: mono_bitset_set_all
    +

    + +

    +
    +
    mono_bitset_size
    + +
    Prototype: mono_bitset_size
    +

    + +

    +
    +
    mono_bitset_sub
    + +
    Prototype: mono_bitset_sub
    +

    + +

    +
    +
    mono_bitset_test
    + +
    Prototype: mono_bitset_test
    +

    + +

    +
    +
    mono_bitset_test_bulk
    + +
    Prototype: mono_bitset_test_bulk
    +

    + +

    +
    +
    mono_bitset_union
    + +
    Prototype: mono_bitset_union
    +

    + +

    +
    +
    mono_bitset_find_first_unset
    + +
    Prototype: mono_bitset_find_first_unset
    +

    + +

    +
    +
    mono_bitset_intersection_2
    + +
    Prototype: mono_bitset_intersection_2
    +

    + + +

    Hashtables

    + +

    GHashTable is used when you need to store object + references into a hashtable, objects stored in a + MonoGHashTable are properly tracked by the garbage + collector. + +

    The MonoGHashTable data type has the same API as + the GLIB. + + +

    +
    mono_g_hash_table_destroy
    + +
    Prototype: mono_g_hash_table_destroy
    +

    + +

    +
    +
    mono_g_hash_table_foreach
    + +
    Prototype: mono_g_hash_table_foreach
    +

    + +

    +
    +
    mono_g_hash_table_foreach_remove
    + +
    Prototype: mono_g_hash_table_foreach_remove
    +

    + +

    +
    +
    mono_g_hash_table_foreach_steal
    + +
    Prototype: mono_g_hash_table_foreach_steal
    +

    + +

    +
    +
    mono_g_hash_table_insert
    + +
    Prototype: mono_g_hash_table_insert
    +

    + +

    +
    +
    mono_g_hash_table_lookup
    + +
    Prototype: mono_g_hash_table_lookup
    +

    + +

    +
    +
    mono_g_hash_table_lookup_extended
    + +
    Prototype: mono_g_hash_table_lookup_extended
    +

    + +

    +
    +
    mono_g_hash_table_new
    + +
    Prototype: mono_g_hash_table_new
    +

    + +

    +
    +
    mono_g_hash_table_new_full
    + +
    Prototype: mono_g_hash_table_new_full
    +

    + +

    +
    +
    mono_g_hash_table_remap
    + +
    Prototype: mono_g_hash_table_remap
    +

    + +

    +
    +
    mono_g_hash_table_remove
    + +
    Prototype: mono_g_hash_table_remove
    +

    + +

    +
    +
    mono_g_hash_table_replace
    + +
    Prototype: mono_g_hash_table_replace
    +

    + +

    +
    +
    mono_g_hash_table_size
    + +
    Prototype: mono_g_hash_table_size
    +

    + +

    +
    +
    mono_g_hash_table_steal
    + +
    Prototype: mono_g_hash_table_steal
    +

    + + +

    SHA1 Signatures

    + + +
    +
    mono_sha1_init
    + +
    Prototype: mono_sha1_init
    +

    + +

    +
    +
    mono_sha1_update
    + +
    Prototype: mono_sha1_update
    +

    + +

    +
    +
    mono_sha1_get_digest_from_file
    + +
    Prototype: mono_sha1_get_digest_from_file
    +

    + +

    +
    +
    mono_sha1_get_digest
    + +
    Prototype: mono_sha1_get_digest
    +

    + +

    +
    +
    mono_sha1_final
    + +
    Prototype: mono_sha1_final
    +

    + + +

    MD5 Signatures

    + + +
    +
    mono_md5_init
    + +
    Prototype: mono_md5_init
    +

    + +

    +
    +
    mono_md5_update
    + +
    Prototype: mono_md5_update
    +

    + +

    +
    +
    mono_md5_get_digest_from_file
    + +
    Prototype: mono_md5_get_digest_from_file
    +

    + +

    +
    +
    mono_md5_get_digest
    + +
    Prototype: mono_md5_get_digest
    +

    + +

    +
    +
    mono_md5_final
    + +
    Prototype: mono_md5_final
    +

    + + +

    +
    +
    mono_digest_get_public_token
    + +
    Prototype: mono_digest_get_public_token
    +

    + + +

    Memory Pools

    + +

    Memory pools are a convenient way of tracking memory + allocations that are used for one specific task, they are also + faster than using the standard memory allocation procedures, + as they are designed to be used only by a single thread at a + time. + +

    MonoMemPool objects are not thread safe, which + means that you should not share the objects across multiple + threads without providing proper locking around it (unlike + malloc and free which are thread safe). + +

    When a MonoMemPool is released with + mono_mempool_destroy all of the of the memory + allocated from that memory pool with + mono_mempool_alloc and mono_mempool_alloc0 + is released. + + +

    +
    mono_mempool_new
    + +
    MonoMemPool* +mono_mempool_new (void) + +
    +

    +Returns +

    a new memory pool. +
    + +
    +
    +
    mono_mempool_destroy
    + +
    void +mono_mempool_destroy (MonoMemPool *pool) + +
    +

    +Parameters +

    pool:
    the memory pool to destroy
    +Remarks +

    + Free all memory associated with this pool. + +

    +
    +
    mono_mempool_alloc
    + +
    gpointer +mono_mempool_alloc (MonoMemPool *pool, guint size) + +
    +

    +Parameters +

    pool:
    the momory pool to use
    size:
    size of the momory block
    +Returns +
    the address of a newly allocated memory block. +
    +Remarks +

    + Allocates a new block of memory in pool. + + +

    +
    +
    mono_mempool_alloc0
    + +
    gpointer +mono_mempool_alloc0 (MonoMemPool *pool, guint size) + +
    +

    +Remarks +

    + same as mono_mempool_alloc, but fills memory with zero. + +

    +
    +
    mono_mempool_empty
    + +
    Prototype: mono_mempool_empty
    +

    + +

    +
    +
    mono_mempool_invalidate
    + +
    void +mono_mempool_invalidate (MonoMemPool *pool) + +
    +

    +Parameters +

    pool:
    the memory pool to invalidate
    +Remarks +

    + Fill the memory associated with this pool to 0x2a (42). Useful for debugging. + +

    +
    +
    mono_mempool_stats
    + +
    void +mono_mempool_stats (MonoMemPool *pool) + +
    +

    +Parameters +

    pool:
    the momory pool we need stats for
    +Remarks +

    + Print a few stats about the mempool + +

    +
    +
    mono_mempool_contains_addr
    + +
    gboolean +mono_mempool_contains_addr (MonoMemPool *pool, + gpointer addr) + +
    +

    +Remarks +

    + Determines whenever ADDR is inside the memory used by the mempool. + + +

    JIT utilities

    + + +
    +
    mono_signbit_double
    + +
    Prototype: mono_signbit_double
    +

    + +

    +
    +
    mono_signbit_float
    + +
    Prototype: mono_signbit_float
    +

    + + +

    Disassembling Generated Code

    + +

    Routines used to debug the JIT-produced code. + + +

    +
    mono_disasm_code
    + +
    Prototype: mono_disasm_code
    +

    + +

    +
    +
    mono_disasm_code_one
    + +
    Prototype: mono_disasm_code_one
    +

    + + +

    Walking the Stack

    + + +
    +
    mono_walk_stack
    + +
    Prototype: mono_walk_stack
    +

    + +

    +
    +
    mono_stack_walk_no_il
    + +
    Prototype: mono_stack_walk_no_il
    +

    + + +

    Others

    + + +
    +
    mono_escape_uri_string
    + +
    Prototype: mono_escape_uri_string
    +

    + +

    + +
    \ No newline at end of file diff --git a/docs/deploy/mono-api-vm.html b/docs/deploy/mono-api-vm.html new file mode 100644 index 0000000000..d1dc657898 --- /dev/null +++ b/docs/deploy/mono-api-vm.html @@ -0,0 +1,55 @@ + + + + mono-api-vm.html + + + + + + \ No newline at end of file diff --git a/docs/deploy/mono-api-wapi.html b/docs/deploy/mono-api-wapi.html new file mode 100644 index 0000000000..778f9f9731 --- /dev/null +++ b/docs/deploy/mono-api-wapi.html @@ -0,0 +1,1588 @@ + + + + mono-api-wapi.html + + + +

    Windows Compatibility API

    + +

    Mono implements a small subset of the Win32 API for some + file system interaction, I/O, thread and process operations. + +

    On Windows, Mono uses directly the services provided by the + operating system. On other operating system it uses its own + implementation (referred to as the "io-layer" or "wapi"). + +

    Windows Compatibility API

    + + +
    +
    BindIoCompletionCallback
    + +
    Prototype: BindIoCompletionCallback
    +

    + +

    +
    +
    CloseHandle
    + +
    gboolean CloseHandle(gpointer handle) + +
    +

    +Parameters +

    handle:
    The handle to release
    +Remarks +

    + Closes and invalidates handle, releasing any resources it + consumes. When the last handle to a temporary or non-persistent + object is closed, that object can be deleted. Closing the same + handle twice is an error. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    closesocket
    + +
    Prototype: closesocket
    +

    + +

    +
    +
    CopyFile
    + +
    gboolean CopyFile (const gunichar2 *name, const gunichar2 *dest_name, + gboolean fail_if_exists) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode string, that names
    +Remarks +

    the file to be copied. + dest_name: a pointer to a NULL-terminated unicode string, that is the + new name for the file. + fail_if_exists: if TRUE and dest_name exists, the copy will fail. + + Copies file name to dest_name + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    CreateDirectory
    + +
    gboolean CreateDirectory (const gunichar2 *name, + WapiSecurityAttributes *security) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode string, that names
    +Remarks +

    the directory to be created. + security: ignored for now + + Creates directory name + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    CreateEvent
    + +
    gpointer CreateEvent(WapiSecurityAttributes *security G_GNUC_UNUSED, + gboolean manual, gboolean initial, + const gunichar2 *name G_GNUC_UNUSED) + +
    +

    +Parameters +

    security:
    Ignored for now.
    manual:
    Specifies whether the new event handle has manual or auto
    +Remarks +

    reset behaviour. + initial: Specifies whether the new event handle is initially + signalled or not. + name:Pointer to a string specifying the name of this name, or + %NULL. Currently ignored. + + Creates a new event handle. + + An event handle is signalled with SetEvent(). If the new handle is + a manual reset event handle, it remains signalled until it is reset + with ResetEvent(). An auto reset event remains signalled until a + single thread has waited for it, at which time the event handle is + automatically reset to unsignalled. + + Return value: A new handle, or %NULL on error. + +

    +
    +
    CreateFile
    + +
    gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, + guint32 sharemode, WapiSecurityAttributes *security, + guint32 createmode, guint32 attrs, + gpointer template G_GNUC_UNUSED) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode string, that names
    +Remarks +

    the file or other object to create. + fileaccess: specifies the file access mode + sharemode: whether the file should be shared. This parameter is + currently ignored. + security: Ignored for now. + createmode: specifies whether to create a new file, whether to + overwrite an existing file, whether to truncate the file, etc. + attrs: specifies file attributes and flags. On win32 attributes + are characteristics of the file, not the handle, and are ignored + when an existing file is opened. Flags give the library hints on + how to process a file to optimise performance. + template: the handle of an open %GENERIC_READ file that specifies + attributes to apply to a newly created file, ignoring attrs. + Normally this parameter is NULL. This parameter is ignored when an + existing file is opened. + + Creates a new file handle. This only applies to normal files: + pipes are handled by CreatePipe(), and console handles are created + with GetStdHandle(). + + Return value: the new handle, or %INVALID_HANDLE_VALUE on error. + +

    +
    +
    CreateMutex
    + +
    gpointer CreateMutex(WapiSecurityAttributes *security G_GNUC_UNUSED, gboolean owned, + const gunichar2 *name) + +
    +

    +Parameters +

    security:
    Ignored for now.
    owned:
    If %TRUE, the mutex is created with the calling thread
    +Remarks +

    already owning the mutex. + name:Pointer to a string specifying the name of this mutex, or + %NULL. + + Creates a new mutex handle. A mutex is signalled when no thread + owns it. A thread acquires ownership of the mutex by waiting for + it with WaitForSingleObject() or WaitForMultipleObjects(). A + thread relinquishes ownership with ReleaseMutex(). + + A thread that owns a mutex can specify the same mutex in repeated + wait function calls without blocking. The thread must call + ReleaseMutex() an equal number of times to release the mutex. + + Return value: A new handle, or %NULL on error. + +

    +
    +
    CreatePipe
    + +
    Prototype: CreatePipe
    +

    + +

    +
    +
    CreateProcess
    + +
    Prototype: CreateProcess
    +

    + +

    +
    +
    CreateProcessWithLogonW
    + +
    Prototype: CreateProcessWithLogonW
    +

    + +

    +
    +
    CreateSemaphore
    + +
    gpointer CreateSemaphore(WapiSecurityAttributes *security G_GNUC_UNUSED, gint32 initial, gint32 max, const gunichar2 *name) + +
    +

    +Parameters +

    security:
    Ignored for now.
    initial:
    The initial count for the semaphore. The value must be
    +Remarks +

    greater than or equal to zero, and less than or equal to max. + max: The maximum count for this semaphore. The value must be + greater than zero. + name: Pointer to a string specifying the name of this semaphore, + or %NULL. Currently ignored. + + Creates a new semaphore handle. A semaphore is signalled when its + count is greater than zero, and unsignalled otherwise. The count + is decreased by one whenever a wait function releases a thread that + was waiting for the semaphore. The count is increased by calling + ReleaseSemaphore(). + + Return value: a new handle, or NULL + +

    +
    +
    CreateThread
    + +
    Prototype: CreateThread
    +

    + +

    +
    +
    DeleteCriticalSection
    + +
    Prototype: DeleteCriticalSection
    +

    + +

    +
    +
    DeleteFile
    + +
    gboolean DeleteFile(const gunichar2 *name) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode string, that names
    +Remarks +

    the file to be deleted. + + Deletes file name. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    DuplicateHandle
    + +
    Prototype: DuplicateHandle
    +

    + +

    +
    +
    EnterCriticalSection
    + +
    Prototype: EnterCriticalSection
    +

    + +

    +
    +
    EnumProcesses
    + +
    Prototype: EnumProcesses
    +

    + +

    +
    +
    EnumProcessModules
    + +
    Prototype: EnumProcessModules
    +

    + +

    +
    +
    errno_to_WSA
    + +
    Prototype: errno_to_WSA
    +

    + +

    +
    +
    ExitThread
    + +
    Prototype: ExitThread
    +

    + +

    +
    +
    FileTimeToSystemTime
    + +
    gboolean FileTimeToSystemTime(const WapiFileTime *file_time, + WapiSystemTime *system_time) + +
    +

    +Parameters +

    file_time:
    Points to a %WapiFileTime structure that contains the
    +Remarks +

    number of ticks to convert. + system_time: Points to a %WapiSystemTime structure to receive the + broken-out time. + + Converts a tick count into broken-out time values. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    FindClose
    + +
    gboolean FindClose (gpointer handle) + +
    +

    +Parameters +

    wapi_handle:
    the find handle to close.
    +Remarks +

    + Closes find handle wapi_handle + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    FindFirstFile
    + +
    Prototype: FindFirstFile
    +

    + +

    +
    +
    FindNextFile
    + +
    Prototype: FindNextFile
    +

    + +

    +
    +
    FlushFileBuffers
    + +
    gboolean FlushFileBuffers(gpointer handle) + +
    +

    +Parameters +

    handle:
    Handle to open file. The handle must have
    +Remarks +

    %GENERIC_WRITE access. + + Flushes buffers of the file and causes all unwritten data to + be written. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    FormatMessage
    + +
    Prototype: FormatMessage
    +

    + +

    +
    +
    GetCurrentDirectory
    + +
    extern guint32 GetCurrentDirectory (guint32 length, gunichar2 *buffer) + +
    +

    +Parameters +

    length:
    size of the buffer
    buffer:
    pointer to buffer that recieves path
    +Remarks +

    + Retrieves the current directory for the current process. + + Return value: number of characters in buffer on success, zero on failure + +

    +
    +
    GetCurrentProcess
    + +
    Prototype: GetCurrentProcess
    +

    + +

    +
    +
    GetCurrentProcessId
    + +
    Prototype: GetCurrentProcessId
    +

    + +

    +
    +
    GetCurrentThread
    + +
    Prototype: GetCurrentThread
    +

    + +

    +
    +
    GetCurrentThreadId
    + +
    gsize +GetCurrentThreadId (void) + +
    +

    +Remarks +

    + Looks up the thread ID of the current thread. This ID can be + passed to OpenThread() to create a new handle on this thread. + + Return value: the thread ID. NB this is defined as DWORD (ie 32 + bit) in the MS API, but we need to cope with 64 bit IDs for s390x + and amd64. This doesn't really break the API, it just embraces and + extends it on 64bit platforms :) + +

    +
    +
    GetDiskFreeSpaceEx
    + +
    Prototype: GetDiskFreeSpaceEx
    +

    + +

    +
    +
    GetDriveType
    + +
    Prototype: GetDriveType
    +

    + +

    +
    +
    GetExitCodeProcess
    + +
    Prototype: GetExitCodeProcess
    +

    + +

    +
    +
    GetExitCodeThread
    + +
    Prototype: GetExitCodeThread
    +

    + +

    +
    +
    GetFileAttributesEx
    + +
    gboolean GetFileAttributesEx (const gunichar2 *name, WapiGetFileExInfoLevels level, gpointer info) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode filename.
    level:
    must be GetFileExInfoStandard
    info:
    pointer to a WapiFileAttributesData structure
    +Remarks +

    + Gets attributes, size and filetimes for name; + + Return value: %TRUE on success, %FALSE on failure + +

    +
    +
    GetFileAttributes
    + +
    guint32 GetFileAttributes (const gunichar2 *name) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode filename.
    +Remarks +

    + Gets the attributes for name; + + Return value: %INVALID_FILE_ATTRIBUTES on failure + +

    +
    +
    GetFileSize
    + +
    guint32 GetFileSize(gpointer handle, guint32 *highsize) + +
    +

    +Parameters +

    handle:
    The file handle to query. The handle must have
    +Remarks +

    %GENERIC_READ or %GENERIC_WRITE access. + highsize: If non-%NULL, the high 32 bits of the file size are + stored here. + + Retrieves the size of the file handle. + + If the library is compiled without large file support, highsize + has its value set to zero on a successful return. + + Return value: On success, the low 32 bits of the file size. If + highsize is non-%NULL then the high 32 bits of the file size are + stored here. On failure %INVALID_FILE_SIZE is returned. + +

    +
    +
    GetFileTime
    + +
    gboolean GetFileTime(gpointer handle, WapiFileTime *create_time, + WapiFileTime *last_access, WapiFileTime *last_write) + +
    +

    +Parameters +

    handle:
    The file handle to query. The handle must have
    +Remarks +

    %GENERIC_READ access. + create_time: Points to a %WapiFileTime structure to receive the + number of ticks since the epoch that file was created. May be + %NULL. + last_access: Points to a %WapiFileTime structure to receive the + number of ticks since the epoch when file was last accessed. May be + %NULL. + last_write: Points to a %WapiFileTime structure to receive the + number of ticks since the epoch when file was last written to. May + be %NULL. + + Finds the number of ticks since the epoch that the file referenced + by handle was created, last accessed and last modified. A tick is + a 100 nanosecond interval. The epoch is Midnight, January 1 1601 + GMT. + + Create time isn't recorded on POSIX file systems or reported by + stat(2), so that time is guessed by returning the oldest of the + other times. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    GetFileType
    + +
    WapiFileType GetFileType(gpointer handle) + +
    +

    +Parameters +

    handle:
    The file handle to test.
    +Remarks +

    + Finds the type of file handle. + + Return value: %FILE_TYPE_UNKNOWN - the type of the file handle is + unknown. %FILE_TYPE_DISK - handle is a disk file. + %FILE_TYPE_CHAR - handle is a character device, such as a console. + %FILE_TYPE_PIPE - handle is a named or anonymous pipe. + +

    +
    +
    GetFileVersionInfo
    + +
    Prototype: GetFileVersionInfo
    +

    + +

    +
    +
    GetFileVersionInfoSize
    + +
    Prototype: GetFileVersionInfoSize
    +

    + +

    +
    +
    GetLastError
    + +
    guint32 GetLastError(void) + +
    +

    +Remarks +

    + Retrieves the last error that occurred in the calling thread. + + Return value: The error code for the last error that happened on + the calling thread. + +

    +
    +
    GetLogicalDriveStrings
    + +
    Prototype: GetLogicalDriveStrings
    +

    + +

    +
    +
    GetModuleBaseName
    + +
    Prototype: GetModuleBaseName
    +

    + +

    +
    +
    GetModuleFileNameEx
    + +
    Prototype: GetModuleFileNameEx
    +

    + +

    +
    +
    GetModuleInformation
    + +
    Prototype: GetModuleInformation
    +

    + +

    +
    +
    GetPriorityClass
    + +
    Prototype: GetPriorityClass
    +

    + +

    +
    +
    GetProcessId
    + +
    Prototype: GetProcessId
    +

    + +

    +
    +
    GetProcessTimes
    + +
    Prototype: GetProcessTimes
    +

    + +

    +
    +
    GetProcessWorkingSetSize
    + +
    Prototype: GetProcessWorkingSetSize
    +

    + +

    +
    +
    GetStdHandle
    + +
    +static mono_mutex_t stdhandle_mutex; + +gpointer GetStdHandle(WapiStdHandle stdhandle) + +
    +

    +Parameters +

    stdhandle:
    specifies the file descriptor
    +Remarks +

    + Returns a handle for stdin, stdout, or stderr. Always returns the + same handle for the same stdhandle. + + Return value: the handle, or %INVALID_HANDLE_VALUE on error + +

    +
    +
    GetSystemInfo
    + +
    Prototype: GetSystemInfo
    +

    + +

    +
    +
    GetTempPath
    + +
    Prototype: GetTempPath
    +

    + +

    +
    +
    GetThreadContext
    + +
    Prototype: GetThreadContext
    +

    + +

    +
    +
    GetTickCount
    + +
    Prototype: GetTickCount
    +

    + +

    +
    +
    ImpersonateLoggedOnUser
    + +
    Prototype: ImpersonateLoggedOnUser
    +

    + +

    +
    +
    InitializeCriticalSectionAndSpinCount
    + +
    Prototype: InitializeCriticalSectionAndSpinCount
    +

    + +

    +
    +
    InitializeCriticalSection
    + +
    Prototype: InitializeCriticalSection
    +

    + +

    +
    +
    ioctlsocket
    + +
    Prototype: ioctlsocket
    +

    + +

    +
    +
    LeaveCriticalSection
    + +
    Prototype: LeaveCriticalSection
    +

    + +

    +
    +
    LockFile
    + +
    Prototype: LockFile
    +

    + +

    +
    +
    MoveFile
    + +
    gboolean MoveFile (const gunichar2 *name, const gunichar2 *dest_name) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode string, that names
    +Remarks +

    the file to be moved. + dest_name: a pointer to a NULL-terminated unicode string, that is the + new name for the file. + + Renames file name to dest_name. + MoveFile sets ERROR_ALREADY_EXISTS if the destination exists, except + when it is the same file as the source. In that case it silently succeeds. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    OpenEvent
    + +
    Prototype: OpenEvent
    +

    + +

    +
    +
    OpenMutex
    + +
    Prototype: OpenMutex
    +

    + +

    +
    +
    OpenProcess
    + +
    Prototype: OpenProcess
    +

    + +

    +
    +
    OpenSemaphore
    + +
    Prototype: OpenSemaphore
    +

    + +

    +
    +
    OpenThread
    + +
    Prototype: OpenThread
    +

    + +

    +
    +
    PulseEvent
    + +
    gboolean PulseEvent(gpointer handle) + +
    +

    +Parameters +

    handle:
    The event handle.
    +Remarks +

    + Sets the event handle handle to the signalled state, and then + resets it to unsignalled after informing any waiting threads. + + If handle is a manual reset event, all waiting threads that can be + released immediately are released. handle is then reset. If + handle is an auto reset event, one waiting thread is released even + if multiple threads are waiting. + + Return value: %TRUE on success, %FALSE otherwise. (Currently only + ever returns %TRUE). + +

    +
    +
    QueryPerformanceCounter
    + +
    Prototype: QueryPerformanceCounter
    +

    + +

    +
    +
    QueryPerformanceFrequency
    + +
    Prototype: QueryPerformanceFrequency
    +

    + +

    +
    +
    QueueUserAPC
    + +
    Prototype: QueueUserAPC
    +

    + +

    +
    +
    ReadFile
    + +
    gboolean ReadFile(gpointer handle, gpointer buffer, guint32 numbytes, + guint32 *bytesread, WapiOverlapped *overlapped) + +
    +

    +Parameters +

    handle:
    The file handle to read from. The handle must have
    +Remarks +

    %GENERIC_READ access. + buffer: The buffer to store read data in + numbytes: The maximum number of bytes to read + bytesread: The actual number of bytes read is stored here. This + value can be zero if the handle is positioned at the end of the + file. + overlapped: points to a required %WapiOverlapped structure if + handle has the %FILE_FLAG_OVERLAPPED option set, should be NULL + otherwise. + + If handle does not have the %FILE_FLAG_OVERLAPPED option set, this + function reads up to numbytes bytes from the file from the current + file position, and stores them in buffer. If there are not enough + bytes left in the file, just the amount available will be read. + The actual number of bytes read is stored in bytesread. + + If handle has the %FILE_FLAG_OVERLAPPED option set, the current + file position is ignored and the read position is taken from data + in the overlapped structure. + + Return value: %TRUE if the read succeeds (even if no bytes were + read due to an attempt to read past the end of the file), %FALSE on + error. + +

    +
    +
    ReleaseMutex
    + +
    gboolean ReleaseMutex(gpointer handle) + +
    +

    +Parameters +

    handle:
    The mutex handle.
    +Remarks +

    + Releases ownership if the mutex handle handle. + + Return value: %TRUE on success, %FALSE otherwise. This function + fails if the calling thread does not own the mutex handle. + +

    +
    +
    ReleaseSemaphore
    + +
    gboolean ReleaseSemaphore(gpointer handle, gint32 count, gint32 *prevcount) + +
    +

    +Parameters +

    handle:
    The semaphore handle to release.
    count:
    The amount by which the semaphore's count should be
    +Remarks +

    increased. + prevcount: Pointer to a location to store the previous count of + the semaphore, or %NULL. + + Increases the count of semaphore handle by count. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    RemoveDirectory
    + +
    gboolean RemoveDirectory (const gunichar2 *name) + +
    +

    +Parameters +

    name:
    a pointer to a NULL-terminated unicode string, that names
    +Remarks +

    the directory to be removed. + + Removes directory name + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    ReplaceFile
    + +
    Prototype: ReplaceFile
    +

    + +

    +
    +
    ResetEvent
    + +
    gboolean ResetEvent(gpointer handle) + +
    +

    +Parameters +

    handle:
    The event handle.
    +Remarks +

    + Resets the event handle handle to the unsignalled state. + + Return value: %TRUE on success, %FALSE otherwise. (Currently only + ever returns %TRUE). + +

    +
    +
    ResumeThread
    + +
    Prototype: ResumeThread
    +

    + +

    +
    +
    RevertToSelf
    + +
    Prototype: RevertToSelf
    +

    + +

    +
    +
    SetCriticalSectionSpinCount
    + +
    Prototype: SetCriticalSectionSpinCount
    +

    + +

    +
    +
    SetCurrentDirectory
    + +
    extern gboolean SetCurrentDirectory (const gunichar2 *path) + +
    +

    +Parameters +

    path:
    path to new directory
    +Remarks +

    + Changes the directory path for the current process. + + Return value: %TRUE on success, %FALSE on failure. + +

    +
    +
    SetEndOfFile
    + +
    gboolean SetEndOfFile(gpointer handle) + +
    +

    +Parameters +

    handle:
    The file handle to set. The handle must have
    +Remarks +

    %GENERIC_WRITE access. + + Moves the end-of-file position to the current position of the file + pointer. This function is used to truncate or extend a file. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    SetEvent
    + +
    gboolean SetEvent(gpointer handle) + +
    +

    +Parameters +

    handle:
    The event handle
    +Remarks +

    + Sets the event handle handle to the signalled state. + + If handle is a manual reset event, it remains signalled until it + is reset with ResetEvent(). An auto reset event remains signalled + until a single thread has waited for it, at which time handle is + automatically reset to unsignalled. + + Return value: %TRUE on success, %FALSE otherwise. (Currently only + ever returns %TRUE). + +

    +
    +
    SetFileAttributes
    + +
    extern gboolean SetFileAttributes (const gunichar2 *name, guint32 attrs) + +
    +

    +Parameters +

    name:
    name of file
    attrs:
    attributes to set
    +Remarks +

    + Changes the attributes on a named file. + + Return value: %TRUE on success, %FALSE on failure. + +

    +
    +
    SetFilePointer
    + +
    guint32 SetFilePointer(gpointer handle, gint32 movedistance, + gint32 *highmovedistance, WapiSeekMethod method) + +
    +

    +Parameters +

    handle:
    The file handle to set. The handle must have
    +Remarks +

    %GENERIC_READ or %GENERIC_WRITE access. + movedistance: Low 32 bits of a signed value that specifies the + number of bytes to move the file pointer. + highmovedistance: Pointer to the high 32 bits of a signed value + that specifies the number of bytes to move the file pointer, or + %NULL. + method: The starting point for the file pointer move. + + Sets the file pointer of an open file. + + The distance to move the file pointer is calculated from + movedistance and highmovedistance: If highmovedistance is %NULL, + movedistance is the 32-bit signed value; otherwise, movedistance + is the low 32 bits and highmovedistance a pointer to the high 32 + bits of a 64 bit signed value. A positive distance moves the file + pointer forward from the position specified by method; a negative + distance moves the file pointer backward. + + If the library is compiled without large file support, + highmovedistance is ignored and its value is set to zero on a + successful return. + + Return value: On success, the low 32 bits of the new file pointer. + If highmovedistance is not %NULL, the high 32 bits of the new file + pointer are stored there. On failure, %INVALID_SET_FILE_POINTER. + +

    +
    +
    SetFileTime
    + +
    gboolean SetFileTime(gpointer handle, const WapiFileTime *create_time, + const WapiFileTime *last_access, + const WapiFileTime *last_write) + +
    +

    +Parameters +

    handle:
    The file handle to set. The handle must have
    +Remarks +

    %GENERIC_WRITE access. + create_time: Points to a %WapiFileTime structure that contains the + number of ticks since the epoch that the file was created. May be + %NULL. + last_access: Points to a %WapiFileTime structure that contains the + number of ticks since the epoch when the file was last accessed. + May be %NULL. + last_write: Points to a %WapiFileTime structure that contains the + number of ticks since the epoch when the file was last written to. + May be %NULL. + + Sets the number of ticks since the epoch that the file referenced + by handle was created, last accessed or last modified. A tick is + a 100 nanosecond interval. The epoch is Midnight, January 1 1601 + GMT. + + Create time isn't recorded on POSIX file systems, and is ignored. + + Return value: %TRUE on success, %FALSE otherwise. + +

    +
    +
    SetLastError
    + +
    void SetLastError(guint32 code) + +
    +

    +Parameters +

    code:
    The error code.
    +Remarks +

    + Sets the error code in the calling thread. + +

    +
    +
    SetPriorityClass
    + +
    Prototype: SetPriorityClass
    +

    + +

    +
    +
    SetProcessWorkingSetSize
    + +
    Prototype: SetProcessWorkingSetSize
    +

    + +

    +
    +
    ShellExecuteEx
    + +
    Prototype: ShellExecuteEx
    +

    + +

    +
    +
    SignalObjectAndWait
    + +
    guint32 SignalObjectAndWait(gpointer signal_handle, gpointer wait, + guint32 timeout, gboolean alertable) + +
    +

    +Parameters +

    signal_handle:
    An object to signal
    wait:
    An object to wait for
    timeout:
    The maximum time in milliseconds to wait for
    alertable:
    Specifies whether the function returnes when the system
    +Remarks +

    queues an I/O completion routine or an APC for the calling thread. + + Atomically signals signal and waits for wait to become signalled, + or timeout ms elapses. If timeout is zero, the object's state is + tested and the function returns immediately. If timeout is + %INFINITE, the function waits forever. + + signal can be a semaphore, mutex or event object. + + If alertable is %TRUE and the system queues an I/O completion + routine or an APC for the calling thread, the function returns and + the thread calls the completion routine or APC function. If + %FALSE, the function does not return, and the thread does not call + the completion routine or APC function. A completion routine is + queued when the ReadFileEx() or WriteFileEx() function in which it + was specified has completed. The calling thread is the thread that + initiated the read or write operation. An APC is queued when + QueueUserAPC() is called. Currently completion routines and APC + functions are not supported. + + Return value: %WAIT_ABANDONED - wait is a mutex that was not + released by the owning thread when it exited. Ownershop of the + mutex object is granted to the calling thread and the mutex is set + to nonsignalled. %WAIT_IO_COMPLETION - the wait was ended by one + or more user-mode asynchronous procedure calls queued to the + thread. %WAIT_OBJECT_0 - The state of wait is signalled. + %WAIT_TIMEOUT - The timeout interval elapsed and wait's state is + still not signalled. %WAIT_FAILED - an error occurred. + +

    +
    +
    SleepEx
    + +
    guint32 +SleepEx (guint32 ms, gboolean alertable) + +
    +

    +Parameters +

    ms:
    The time in milliseconds to suspend for
    alertable:
    if TRUE, the wait can be interrupted by an APC call
    +Remarks +

    + Suspends execution of the current thread for ms milliseconds. A + value of zero causes the thread to relinquish its time slice. A + value of %INFINITE causes an infinite delay. + +

    +
    +
    Sleep
    + +
    Prototype: Sleep
    +

    + +

    +
    +
    SuspendThread
    + +
    Prototype: SuspendThread
    +

    + +

    +
    +
    TerminateProcess
    + +
    Prototype: TerminateProcess
    +

    + +

    +
    +
    TlsAlloc
    + +
    Prototype: TlsAlloc
    +

    + +

    +
    +
    TlsFree
    + +
    Prototype: TlsFree
    +

    + +

    +
    +
    TlsGetValue
    + +
    Prototype: TlsGetValue
    +

    + +

    +
    +
    TlsSetValue
    + +
    Prototype: TlsSetValue
    +

    + +

    +
    +
    TransmitFile
    + +
    Prototype: TransmitFile
    +

    + +

    +
    +
    TryEnterCriticalSection
    + +
    Prototype: TryEnterCriticalSection
    +

    + +

    +
    +
    UnlockFile
    + +
    Prototype: UnlockFile
    +

    + +

    +
    +
    VerLanguageName
    + +
    Prototype: VerLanguageName
    +

    + +

    +
    +
    VerQueryValue
    + +
    Prototype: VerQueryValue
    +

    + +

    +
    +
    WaitForInputIdle
    + +
    guint32 WaitForInputIdle(gpointer handle, guint32 timeout) + +
    +

    +Parameters +

    handle:
    a handle to the process to wait for
    timeout:
    the maximum time in milliseconds to wait for
    +Remarks +

    + This function returns when either handle process is waiting + for input, or timeout ms elapses. If timeout is zero, the + process state is tested and the function returns immediately. + If timeout is %INFINITE, the function waits forever. + + Return value: 0 - handle process is waiting for input. + %WAIT_TIMEOUT - The timeout interval elapsed and + handle process is not waiting for input. %WAIT_FAILED - an error + occurred. + +

    +
    +
    WaitForMultipleObjectsEx
    + +
    guint32 WaitForMultipleObjectsEx(guint32 numobjects, gpointer *handles, + gboolean waitall, guint32 timeout, + gboolean alertable) + +
    +

    +Parameters +

    numobjects:
    The number of objects in handles. The maximum allowed
    +Remarks +

    is %MAXIMUM_WAIT_OBJECTS. + handles: An array of object handles. Duplicates are not allowed. + waitall: If %TRUE, this function waits until all of the handles + are signalled. If %FALSE, this function returns when any object is + signalled. + timeout: The maximum time in milliseconds to wait for. + alertable: if TRUE, the wait can be interrupted by an APC call + +

    + This function returns when either one or more of handles is + signalled, or timeout ms elapses. If timeout is zero, the state + of each item of handles is tested and the function returns + immediately. If timeout is %INFINITE, the function waits forever. + + Return value: %WAIT_OBJECT_0 to %WAIT_OBJECT_0 + numobjects - 1 - + if waitall is %TRUE, indicates that all objects are signalled. If + waitall is %FALSE, the return value minus %WAIT_OBJECT_0 indicates + the first index into handles of the objects that are signalled. + %WAIT_ABANDONED_0 to %WAIT_ABANDONED_0 + numobjects - 1 - if + waitall is %TRUE, indicates that all objects are signalled, and at + least one object is an abandoned mutex object (See + WaitForSingleObject() for a description of abandoned mutexes.) If + waitall is %FALSE, the return value minus %WAIT_ABANDONED_0 + indicates the first index into handles of an abandoned mutex. + %WAIT_TIMEOUT - The timeout interval elapsed and no objects in + handles are signalled. %WAIT_FAILED - an error occurred. + %WAIT_IO_COMPLETION - the wait was ended by an APC. + +

    +
    +
    WaitForMultipleObjects
    + +
    Prototype: WaitForMultipleObjects
    +

    + +

    +
    +
    WaitForSingleObjectEx
    + +
    guint32 WaitForSingleObjectEx(gpointer handle, guint32 timeout, + gboolean alertable) + +
    +

    +Parameters +

    handle:
    an object to wait for
    timeout:
    the maximum time in milliseconds to wait for
    alertable:
    if TRUE, the wait can be interrupted by an APC call
    +Remarks +

    + This function returns when either handle is signalled, or timeout + ms elapses. If timeout is zero, the object's state is tested and + the function returns immediately. If timeout is %INFINITE, the + function waits forever. + + Return value: %WAIT_ABANDONED - handle is a mutex that was not + released by the owning thread when it exited. Ownership of the + mutex object is granted to the calling thread and the mutex is set + to nonsignalled. %WAIT_OBJECT_0 - The state of handle is + signalled. %WAIT_TIMEOUT - The timeout interval elapsed and + handle's state is still not signalled. %WAIT_FAILED - an error + occurred. %WAIT_IO_COMPLETION - the wait was ended by an APC. + +

    +
    +
    WaitForSingleObject
    + +
    Prototype: WaitForSingleObject
    +

    + +

    +
    +
    WriteFile
    + +
    gboolean WriteFile(gpointer handle, gconstpointer buffer, guint32 numbytes, + guint32 *byteswritten, WapiOverlapped *overlapped) + +
    +

    +Parameters +

    handle:
    The file handle to write to. The handle must have
    +Remarks +

    %GENERIC_WRITE access. + buffer: The buffer to read data from. + numbytes: The maximum number of bytes to write. + byteswritten: The actual number of bytes written is stored here. + If the handle is positioned at the file end, the length of the file + is extended. This parameter may be %NULL. + overlapped: points to a required %WapiOverlapped structure if + handle has the %FILE_FLAG_OVERLAPPED option set, should be NULL + otherwise. + + If handle does not have the %FILE_FLAG_OVERLAPPED option set, this + function writes up to numbytes bytes from buffer to the file at + the current file position. If handle is positioned at the end of + the file, the file is extended. The actual number of bytes written + is stored in byteswritten. + + If handle has the %FILE_FLAG_OVERLAPPED option set, the current + file position is ignored and the write position is taken from data + in the overlapped structure. + + Return value: %TRUE if the write succeeds, %FALSE on error. + +

    +
    +
    WSACleanup
    + +
    Prototype: WSACleanup
    +

    + +

    +
    +
    WSAGetLastError
    + +
    Prototype: WSAGetLastError
    +

    + +

    +
    +
    WSAIoctl
    + +
    Prototype: WSAIoctl
    +

    + +

    +
    +
    WSARecv
    + +
    Prototype: WSARecv
    +

    + +

    +
    +
    WSASend
    + +
    Prototype: WSASend
    +

    + +

    +
    +
    WSASetLastError
    + +
    Prototype: WSASetLastError
    +

    + +

    +
    +
    WSAStartup
    + +
    Prototype: WSAStartup
    +

    + + +

    Extended APIs

    + +

    The extended APIs provide access to a few internals of the + WAPI stack that are not exposed through the standard Win32 + APIs. + + +

    +
    mono_once
    + +
    Prototype: mono_once
    +

    + +

    +
    +
    wapi_clear_interruption
    + +
    Prototype: wapi_clear_interruption
    +

    + +

    +
    +
    wapi_current_thread_desc
    + +
    Prototype: wapi_current_thread_desc
    +

    + +

    +
    +
    wapi_interrupt_thread
    + +
    Prototype: wapi_interrupt_thread
    +

    + +

    +
    +
    wapi_self_interrupt
    + +
    Prototype: wapi_self_interrupt
    +

    + +

    +
    +
    wapi_thread_clear_wait_handle
    + +
    void +wapi_thread_clear_wait_handle (gpointer handle) + +
    +

    +Remarks +

    + Clear the wait handle of the current thread. + +

    + +
    \ No newline at end of file diff --git a/eglib/aclocal.m4 b/eglib/aclocal.m4 index e5ba722dbb..4109da3641 100644 --- a/eglib/aclocal.m4 +++ b/eglib/aclocal.m4 @@ -573,7 +573,8 @@ to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi -fi]) +fi +]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further diff --git a/eglib/configure.REMOVED.git-id b/eglib/configure.REMOVED.git-id index 27c8e4e8e6..fa4fb32adc 100644 --- a/eglib/configure.REMOVED.git-id +++ b/eglib/configure.REMOVED.git-id @@ -1 +1 @@ -f63e8c4f995b49470fb7c4bd1f34dac0e85ad20c \ No newline at end of file +065fbf260bfbda470af4db973c37f1d93ec4fc4c \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/Accessibility.dll b/external/binary-reference-assemblies/v2.0/Accessibility.dll new file mode 100644 index 0000000000000000000000000000000000000000..cc876c0b5a018ee9e6c34936dcc9045018059f98 GIT binary patch literal 10752 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 G0{johC5RsY literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/I18N.CJK.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/I18N.CJK.dll.REMOVED.git-id new file mode 100644 index 0000000000..9af12d1910 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/I18N.CJK.dll.REMOVED.git-id @@ -0,0 +1 @@ +95c141cb1bf7ba0bb408fb0500979ff86e936078 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/I18N.MidEast.dll b/external/binary-reference-assemblies/v2.0/I18N.MidEast.dll new file mode 100644 index 0000000000000000000000000000000000000000..8c9f087cd3421fdecda4f87eeaba2620149b412d GIT binary patch literal 14848 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/I18N.Other.dll b/external/binary-reference-assemblies/v2.0/I18N.Other.dll new file mode 100644 index 0000000000000000000000000000000000000000..ebf62db1a6185c8a3798a77d3c1c4ced75397c5f GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/ICSharpCode.SharpZipLib.dll b/external/binary-reference-assemblies/v2.0/ICSharpCode.SharpZipLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..d610312fa001a1a67c23e501d0082a508f67fdc5 GIT binary patch literal 65024 zcmc${2Y6If7dE=jnUYBX6EHxi2^~T@y{8jNBZVdyCdnijm=scIHUf$b5k;|}q9O>2 z2vP)v2o@9srAZNxBBF=|8)Ad|uC-5@e0+Mp|33G5{=k0sde_?R?7h!!XXZ@C_=UnE zgs{S0yC%eD`1CiN@!w%K%uPGI*;H)s-5a)9N#7fmSLUt>t*Wjpt#+1&7C9>_Dr-Xv zU7^)=6`}5m(4?%~(DKS+S7ehWex0?Xvy+8LS1jV*qs{X5+)j(8Vg8C;h|AFYA+>WaoN!nJ zR6l!D#n;xv;_t&MisS7lecgpZCP#l1hVr32Nv3j<3x%5vr)n2Wado}!lbsxe(Zf+1 z6gCvjI~*5Q&j2<`*4xoF{imbrr6_v&sD3DIsw1i&svD{gx?rly=5Q_H+Q4;y>jW1L z7Y8>8E)gylt_ZFMZZ6z1xOd^cfYYx5;y?a*mzm`MR%Q$Ix})-YJGvHc2g>z8=};W~ zdiB0Q*GJbD0v84s0~ZhHgsX?!0jDUC;S?l-AwwuggoX(Pm8GELC};?!6G~95w zN#eRcBw>_AFOOa(yTRO8i{3VR`%oKE-z7)aLXOfTM>ahlN{9N(|8MsM z(t4xa4r|4rIljlbCN?=S&Dwm*l=oY{o-wbrEjzXS=I#(l8D6|3 zpwGd1dt>~bTQGRrwygeD$Ai*8*tu^+`_qe(SN)w6zxvhSf;MXp-Tcnt$4A#aFgoYM zz9EzE3_n`2qREn?puq8^Hx6$%bJ@fbx6itDY1Q76TWU{l>h#2zSI$1Y;KAn~9}>aH|lRMTYpzX)T?pP->>?n#j7t) z^!Gfsusrrqx2m7_T^+slWZKB7$I{#M{oqggZ|`;t-SF{aL+W;SpFQxWrO*6%IpwX* zfBv{)=Cxlg4?UB3@!FS9?cMry#J=0VonAGs_xAGC=#Y`tA!|mzKj0PnoNjH~BzAg# zh={BX-O=-tXBIS@F*~cp^D6?{w0LW8hvpaWS6;k4(suhkhhz8NT>(C?JU(OXrqQ># z7Y0xL{J}$Y$4@Sr;@O^4x$%5Zq59{(lDAWq-r~6Vmht;0h^xJoXrmX#W z{=Us|A;~?)>_@+uw=#Xy_;N4qy9d?!3*P_Fgh`|99I4o*4h!pGUtx z9pE1K_ulf^#}`cMw==6acClmD-4E=#W5TQV*IZmXa{A~d)~qvu?~m-?cV5av;i(Dt z-zp{yDcLdh-0(U1xf2sdJv*pfmmXbDgk2I#d!@F!rF%j~NZ((xkH+?zwq)3nDdPuq zJsfO#_@hHUBffjw@7kr&P5*c=gWJxZ+_|4lQWm?oYZ&8)Z2esy7J}? zk90_>Tim)u?7gr0|2)4oVr~7q(Nph!a^d|GBOe?&?zdMQdBZpD%1%DNAoHg`vu+AM z8Ibz)_PvQ=x6iqC@ub8%vrkfrLJ&|B;`+uQkn+vda#qgE{HcmA!MxM9x(4ZU~vzJU+!d%W|&y`w|F zxELIfcll6{nO#@C|M8%*9WC31?|Dvq^WpOBR}VMK@ErJPO4O;_rhR{W$4Ae9G41fA zuU@;<>6=#Ho&CPuw&j;zey;eJnt9!Re{ae8zkUDSd|$)qnGcrk95{R5@jvhS^ntBU z6)wL0*|*jXT@>)@wa3>5u6@nkWa=xY!edvI_5JyU@{$c(KfASVvt?r6jT?slwhp(y zSRCy$y_d7;_iv8!eKO>|a-WBOnOxOpdC`Ssj}<=~d++h4FK#|Dv;BonPv3j&z~kZR zn|!z3w(bs}h|OO;-0tm##er|M`zdtoF0LHgP=oVQ9smTLRtb=i(=QT0OP& zh5hF&gHsP#NB(_xlLJ#W`Yr!s<;FgqCtgoDyz8yw!++np`U}s|*t!X)l0Rv3_{6v& z`(IfdeXQ$1@%gCPqmF#o!nyD5jlXON>-66G(N8}1<|j8S-?sVL&1!eYy|#kaj|J@P ze8GR+J-1ax1*MmbeWjgq$B>AUO$*~sOtVitu51lG@I=qRPk*@Y?sZc;Y}{mDe(vq1 zafdd4{lYGv8NGiOH!N7`ySUX8P0zg5Wb&O6L&_bGdx{@cCKR3jWz>`@g-%b~qtULr zGezM~-#upc+`3$8v*Q=XoH6g+@axWFYhBqF-e~sC=7tAuyLZc9r`nw?OpEv|_~+XW z&Ud9B`g5%F^^A{4Z5&uDwk|sx{nnxQ<)>~s^4QTK$WB*2T!$SzZ|c23k>vcm=_wbtINi+G3)QH4D~%! zvSsNx=f_Qd|NNFGb{*@{@riwFH>^DJLCYcQ$JIC45IJbVwl`k&ytzGe?&j|{t$+Ke zfU}z{PaRlSJ0SJbZ(f^z;F;jA$E|Z)oTzE$U-ZRYgNh#=I=Q^b%JGwD`G3;%+%wmF z7j;`B{MJ3|b9>UF8!jDK=D4TqC#C(>ckJ$oV+w!!sMIxkYF|&tSN16t)7l)mdOG~z zedA|+7P#l8lcklXw*3D44-E?v8{TO7>4LSBzFv0t@EwcxKmXo4NBigebSmq|(zo`P zj@i26qt@Ub}pgrSGI!*7$dSm~<-tRO!ke7F5K{Y;dQ{U+?^= z_1u!J&mE}j()Vmx&STR9_E=K=-`dhb?HJY7mftYw&G)DrNZ zVm{fo@quTL^=h}~^PAVcQ@o_>PetE8y=-!w-=cDLmEHI0VSSrkyt~w=y7?Gkn{(6K zkKH(H^Vv1w>u&AeW>dhD1qU8!((vh*Z~SoLwy;yj{SO^DI4|Msp&zfTKUr2W_p=Ur zTQt<)+;z+4Gt<{rPEUQK)%o#`d#fhjaBcS>d&vZUCFt6-u7})f3a=czHpQ9ziKoSk zvwqKgf1t^cyt&rQch*}5IJ=g<^jnKb`!Z79X~(Bm483Xc{xv7YA3j#%e`@%pK}Y-L zuGzZk{b%3${LW8aPrYz$V|3e}wr#uroi}$!FIu0wV%dhyw!Zt`Tx378x5t>z^WH8! z)+usU$@+I%_-aX2Y*l_reI;Q5AIHk181TKE zClG!k{8jMRzA3_+~!WF{S1G;7K3&Ed)yd1Wbkn`avj}q`NV5c@b4&9rO zec)3)gutzVqkK<8|0(oI@Kwa2>urEs2VGaVzTn;AK8B9Y3tofV25vTNcf#$3dlc?6 z(n^JXI^0K)6A^YYd@AoA$cv$O!}-EdT|~pZ0r@%D5+EOd%Yxh)x=HY#M7&+ltp=YD ze+B&AaBo9D6wV1pefK%ost`U1^4*ZBuXlpG1@;G^p9n{FR0O{_^z-4I2xo==6m-pC zO9H2Bqx`EOPlG!T_aIzr*#Ce}{gL|mD1=#xxD+lJ{_WsP5XKk$W$<2*`@qkHehlQ- z;LnDm?K$;RJ8XO4a1^dd?oZBLtYC<{pefhu(juQzX*8_+$M0kAL+WrB1{*^C*Zz- z?Hc$)@FT%9A=5oV_eVYWTX0W6{uKUw@TbB?d3}U%x5GaNz7BFSWa_H{ke`Ko3HlN^ z8eb?ZjT_V#e}d}@`xW@#LB9xYDct>VuR*sJ?seFog})H45biA8y|7apy3eTZQJWor z9}oR-$Zj}ltIObbK>rftpONQgaB9y==-vSz40$#jjhj@?{?JjsrF`FodmQpE#MuGY z4)%A!Tf&coZ5@0{w+C!AR?!(#f9Q5mJh-Q!r?F@>{9E8tdwJjnLH0m59sVJ38mHz$ zj)pD`j{1+2^zeUx{zv!&;f^5fY4GXZd=73t!qELm;~U-MhoC!6X~X{oJ;aS*%}+zz-Q;A;^k1oB<*KZ8&GYBKZ{@F`u=*Fx?G{{Z~g z;bh=Y(2akGxbdi0n%{nePiJl`;1qYPE_yYy1*@iI|qm0 z;zl^qliXaB(Gzif^k)|f?a$loVz+%iaCG3LK)YDe@{N{u(YH0>`-}$|t!+pX%GiT3 zgYjO*HyF>gp>#U6rH}&|;~8IUyS}Yme8F;5JF@m+e7F6c_I7cxJ(c0c4y13*SlfZp z5uv0B3Z+sFXSp_%^s^ZsU`@v`(hO$I45RRC!ZwB3Mf;AFW;o;Mj-dy*#%s`yrhOkU56U-O?nz5~r*$tux zv*{eNg-B&~AG0Pml0>%LaL4O1L z8*CQae3Zo)Q&Tk70xU$_A|7H}XJ$p>8D@Q%-657T8^&y@*od40#Rz5_#BR1tQ^w=y z^+WNAupmDg0TtyFtbQr?M`8OLmeX7*E0}!>rr@A<6Ih7&oEXx4msz0l6|+NNfmnro z&+HuA+A4oC`-xd7Dpy4gf581MB9%a9R@`)o5(`FYwo}I|gTZcO))VYO5v#OdHXJNO z^j6w%yb&C42tr#Bk5+;qVu&)FSshq_7^Wm~yn8ubf^rkH_3FcF2xjnF<$2Uh0~oEB zZdK^|K4jZiWj3>Y%*HGCaJ*mC!>X^Cs4Qfg&2kv2+^4+Bwj05GQFB{4cUt{~U=MPE zZPBm|R<+nknU%OSB{`GMICun@2xnayE#Rq25$3&d(S+2V_R(NOgT zl$z#jw5mE5i-16}it`IpZ|0EOIAow&z-%wrV5OB>t0Ga%o5>ahY#Q5s1Pc+Z)LG2_ zV%AlCl37Qq&HA9|uD-=A8tk0tslLrD5iA7jf*qXZSTIG2RCh9)sJ<22j$v8|7KhS_m2htgO5fB?866U?E_3W-GyZ zDJiNyvyU{^9Q7C|z6a|LTN~U)fugltwSOm4)vlJ=u#LdD5(3u4;t%#9SQF)Djn%dD zX7d{{OM7oyawAsKh~3o5JLGGP*inNiqQ9L+wFJ8rcoWOxSuSRr#+uo72doYD0IW-n z+XI28>^A~0vgS{FD_9kuHb6h1RkZT40^9nu2Zs6tG_oop#-}4R1AV#xhasdQQm~v= zL@whkJ~Vc^AP0$B#@VcwA?LHanDxt8UgOgXll^+1Xy6WDkl4%CPZ`fJe#7`HoD5j=W!U&chn490PcQyA+Q?_|7> z@gc^?7?(1xVqDMIz_^F;Q(y~mp5jPZ5GU5qCge`T};P`w2(1~Il_?8+F;*q<>m zfLbk!Wm)rMS>p`IfW90_g6RJ)y42IMmW@(2ts3&p3~9KI0@8haE)tY^&RtC02cHbN@mJ;q&(pD-R|JlTX+MqfgX5p;(t;zE;2 zz$;CPfqyk|1J$NfHlL=HPE$r2TlBl>#-S(hGY+$mCK9q9rhn6FXc8FH81on> zGP)S2G2X-YC~_G+`$fhE#`hWbFdk(5jPVTP*Ni_fUS|B8(Ru@=YdO{qXzXHN;4I*oz&nB81>Oa`8h9VV+`@B*U(f=`4faQXa%O26MEQ1O>=(2c zasp#c&=SZKf@lTo38GTn#<(bG8RVyeUNU;cN`xFe`!&Xm9BV75_I?nRZ5PWQGae42 z*^OpBMVtwu@@EFVf)f4`v<|WiuQa1r)@H8&sXr@1i`9(6UvjiUjWxpoWsqpc*n=^S zaVQYA+iVkX0?Rcl%QC15E)pHnQ55_pgc*ab|n;FZ1=o|k~=QG**|5o#~n@ed< zIEryRk$Z!w{vT#s98Bwqr&)fUQ(nRH8kV;(zQedDm|FZ8%hVQ%xXALatp6*R zYSq?)FsKDtsqMl<=N7$jNA!TkE_yLW0sD$r#(|6pjA@M7z|phEvs}#RVXR}E&G-Q0 zqm0i0F($W|NcSw`7RDWndl(Nge#Ur)@dD$|z`o*7mMtwQ1wY0R#?Fkr7zZ<^GfrT1 zGfoHg6?eDn2%Hbp#|JsbJ>HV);aNsG%B^VmG1UyWY(q<`&ySIUB93s}(~RdCzi0f7 zQE5f#_yL=X=8PQ}d$sBa%|OO9){J2+Va;@4jF{W174V5xALHtl!-`sBdZ=7NM&y02)^rAI^R?#km*7n^(S^;AihlJ2N{}!JEz~qo4z^o9Q6KFeyu^j#u z4q3`LmBY{C)aH7{mATJHctt$PDCweIQ(Du^GO9I=;o}&c zt*LBft!bvK0a|&!vx+-7{2X9k@o;OZ|EC#WU|h-g8skQwjHU07Xa;GnENPpqG*{-f zD+E5(t`r#5egm*IV<*O5jC~mM+J6n}M8>-I-$A~E@t*dS&O*i~+f!=eJ5^hnE0Y=D z?sPlk^PT1Z2Y1U>vP0<{VP2~}t;4K}(3s<^Zs~aFsk2|ZO~4V2&Xn%nw&3pGwoZ*~ zG2I(1Mm#aByAzvhEfta7{VHlfXZhVdR&S;%Hp5obUBw3l^^nt%gTKM%G-3-Hu_wAm znIRp^y5D9s;_=l6=&69su{QBy_gin!nd6P_;Yu@u?drbBswY9;H zcYng#MrXd%Dxo?P&msq%-No&ovz_96Yt;xjPbfWBTRUm-up;YmRdm*v>@VKz4Qm%K z+uPP|I^!DbX)vlmlLhw(SHd-$tWT3seVUBw(_~biCZqZ^8P%u3xCVRaIS8u3NP|rd zOIM-{M%Qk#9zCA0#u_%N&wd)aOT?ij1{*eNF@q_C8ri6>4V$1gG8whs5G|E?j)Wd@ z%5Z~aVd0>&yTpVZ`>pXt?qxlODkiH#$RxvdZ;vBtvYrb1^;Mi2>vztg9-muH_H>U1 zOR8a84%-NwIbQ9NuA~|4ZEq$H;QCD4muNqOi7Pm$G@07-sz}#U5ssci6@zifvJ9I~ z+Xjoy>P1k`Ol!7bYuob+Yp%gM^}JxsH&`Un9AmJ4J=2x(21{zhM)g#^Y*ey|TF8f6 zP3U>a`rjG#@-wP#s~1H*Q;Ih6NoW-Dlv$|T)}cwsi3Ef&*zcC$Hko1okaHC8X? z^!(gvvU|abjF1a@Hdu-cwgmB923ys$m(65vg1HUb`#r;za)a&Z*~ezGPkRouRp>U9 zbGWTaXI!#cgPlU|CcB8->kQlFo|!h2*}|`i>6#5^so|4sI-7?&yDDZF@!E!`D<+Ew zf7E8O{$MlpklaINd9g5?!ML2a>Nc?sxf{%}6*-t}XCrnX{3)AhI~BgvWa8WK2Fq<) zn)TvWqJUPF~Tj8qbPZMW4MY!ujBgG~gx zTVwMuzHGPMV=%gN?lYLXSGY1?W3un+jC$);e11T?-@zIz2ID$=P`6 z)+covUxUu%_32DrpEp}%#^dXIN=v0))S{M5R^N!tZ^WKz#9s1Z)P84FJr&uSOZ0ML zJUgR4>&1pDOAWTBm&f{o7gLpGI&;v7xx!$Zke|suZp5f3o3@kagC?VXZL)8?Y_iS_ z8`q~dYp{5;uWc{sW#JlJr8B;dOh);c>}0PflktkhunC&~4CbIKG8tXF!MFy!*-+(W zJ$JqvUp3g@xV|+8vqvnonJlh{$NHLKi^B}G)?n0r>%G`eWrN0KExn=JxRwkiUg~wl zX0m1x4*O<3r0D3yWGaRYsf1Y##xwdBJ)VPRbdyC#ge!0AHjx_9#ICb?kr#0lpYYS~ zl~OOZ(?Kga-L_NE`bB5;qB=q~m|V$iGg7$&w(T0*$t%EjY1xkt-_TtZVb|GC+EBVEp}{*7-%=y?uel#6Q4&U+CR}lg56}_Z?Nwp zvh4>nChPN{#^n9(%@$d`*=YMAE#!IS?}!QZ!v+hCoM1nqr{ZWI8K)dISVUy7$+*Ri z88+&zpXp2tMo5#<{BYc`QI9;Kv3ijj*V6WjCzBbsl$QAYrI^$F>da>8- z26OC-3|GF@ZH|kPi>w9{_NdKx#;NCLkNUv=lfeR`KCxf+Vu$U&Ypfn8ykFa|8SG5p zZ+1o7eb$RMQNfDEVBt|VAFIIzN3Bxr1{)FOwEJjmo+Cf1t&hWCrBPvEvhT`%jR!|s zPrfH&6+Q0K*n)^|K6qTBv8N(peQwZG;d%-5V!`-af_AmA1uH>bY=BQQojGPk#o;px zT1dyds0mh+Er>d!8jMp3)ro?pO!iR}_KjM|d2$!2vGYp1(63a}b|mUH zAA>p0M9uN(XvF&|>OP-N2KzH=p-*Rx)eE2KWjlYfX z=#27B=Z0UT{o<#bjM!%Q0**u$gQyY`KPQ z3~VN=hAq#q-PMRKYQ&btgnNZt7Zc^hw#DqWn5pcFDYxVsX&#Q56F?aR&PiIhgD+avyKld}DW8Ox89wO1asvb%xDky<$C%35G2pcB&T} z8#}=|(Xf@oVh?Mu+SoYd7K6=>4fbO5W5bmK!}hcnJFmPH`>m?mc8WD^;*5}T*4Axu z*4Ej1?#Tx8-HaNpYEYYtIz5J?h>-llX492B48KvpX&Zv|1cwEjYjmlZkCuN$%78!<<3 z?=)LBV%;0D0ljg0py$r_%7Yq{{Y+a8Z5=9NRexVv|RuW6$`_@Ysk zMF_dvU@LonVKv!mwBJjH?G3P%2HTF1s|@xLQhCK-#~QIqy)&(*?N6{ZMo6X4y}s)V zX77_}-C(dLeXfc(4A!C%>(Yn~?=#S5h8zLg79(Df7n8kCx5-)NpBeVrS}HQ+n;Kgz z>iQh^HQDSw7ksxi3i-Ad3s$_@ReUa2U)|H(Z?gOP1beYZ`lKs6jF3zEG+0dbB5dy% zw%1@Y*_*JvYuI+eW-?kqyl2>G1!1xSeabEG8@A8;Omdj)8>G3@u>IC2+>815-ETE* zt@<8OP1dDvobrJYFSc*67aIoKhlVW;Hj^!iiBonNwp`duHo9}1vfHo~z-BTJ()`G< z&4SHj_x4R!_87Lu`Zich_5y5s4clw5>1>hM+V_(6W6ic$?Cq=g>1>hs9PEH$yM&O3 zH6~X&I>TMuIbAW?xUM(&>1>{`^ovuD7^(R8yV1{NE&6rx`^>O~_Ur9;(u)oEJL|=6 z^83n*<@;SUSVX_!em@v&P`_LJelb`Y*cFXo%mVw%U{m{f{Ddld>%*cROflGke${@e z!5;5-yPrj4^Tg_YXH=`fHiOypko=s)uCcp#M$p+j$9w(K6_XwGVptjXd)QC65qr|l zM@wa~xB{E67kkprPh&JCs5bzjd-j3H&{$YYxWMBtzN7{ed=r;PD6M5=}fNq zOhz-h&gO|7{llys@!bu%xr9i z#bneY<22hmK0DNzT%+i0o}kt=*_6nuekP;S$=*f|)I&^0y{C_6s~10`{rc0tQfYDUTlPay2j+#lc}+J;?@B;*D%-vVA(ozEFBQ1j564o z0l{8u8*Dj-Z8vNN6GsM&@y|7EUknIW#u)4>axfXK8O9nmnng`UYX+0iENU_ulMN<9 z242N?#kKW|=-Pc^0b-ckwL{0O**+`{u;G_N%4O=-_fzG%W zIQ5WVXH;*t#lKLq$@#WOV~fS?f!qB}cB=n&|6)B&UPHSywo}ktY%-dsOElX&@zB5z z{0-)Kdf>e_ACXnkffYL&@`jn+0MqgI(>*l2BI zF!A!hFRUKjCe{s1Q7Uxipmkl9!DwA)vNs3DDN_v_tqx5_t3!i{cLyHwuQo!`2~Vxg z#KD2b{Y`dm;06C_hV9D0Gx&~}-d}tN9rvHEGqh%~GE-+R5p!$$Gw{SPt~inr8Y6mOYc6I}Bzda)E`xfhEGc*%?P4_K))en#}N!RQ&$ zYJ<@;qBRDiXGE_VtZ>i@`#O!)i&C)lTrxUMi|V#Y-KdA;l5Nu1PK9i5c-h7UY}Rdp zY;Wl{N9CX>Wvjt%9kknGvU_0LX4n?NMsLfYznwOE#@Apldj9ve9+JzlU1N*I(m|W? zJw@4*7mIaZ?`TY(W4^1$6T1ejQcZRU>^;LqrG8&y_2Sf^t9T=Vc6T7ZFsnCHeLv7_ z@;U4-Bi>htx5r>Vc{8M9+T?Cm4=K-ByqW5|*GOe^zpLUCBR`s%O-5_C1Db6fKUFsw zJ;OX`#G~i-I+J^5Zx(EXlymVREgrt5Jm{?eoymBgYPP$C-{AdLleHRrMl~6IQthx2 zlGcMqG)B)K&Zs&&uY?ZX9dJ~$omVcl_EV1Q%(wU8aOJeYZW^5K#U?glQ@ukf>7jV? z+9*Gr$^6dfX>xw&bjJBzFc{@$GRn_nl%K&kKb^^1(%DYOLa%r`9nTJKu$Z>hgAWFL zqvf|#Gz`8f4CdJ7ZR2Nyrj4Er8cdu-yo*LEgF6P|yRx$H?i5$s2ddv`OqT2iFBYtL zvwZ6%+;RBicWc5Uj3*gy@gdD0kX7+4UbkSuw<7<$M#j2`mloiA1wa+wH8o{Q%_45c z3sUv;Wq3+c6>ip7G2&ymMqYF9@&-jnJ(WZ+1L>`z7U6C9o*RXE5wa>)04?HWPG>)3 zD3_m56;1FxT?OB0CAk@7i)h0dS(1M$&-E$)drAJ?+J|#&#bxj=t<2p!uB_)6F2BIH zh!r8P$Qv!t>vbZ-U!Src#|`9=R5KP4!WxoQO?KkFB&t?#?Y+{JHR+v;)O6w$BvM>_ zFNS-?6eDFtEMs{!<7S{L-UeF49-vhm`&a!JY^8GQrTPl#t6~r|77-7$;`_Ih?@b&s zi$jiKc@kqLTP4b}$r}EOtrr=uukBx;SH&M}{a@tkYg_gx>NEJ}1-{X(8di z4rRZRJzR#gaPHoB*;uYyDkptk?mttY+#Bo7KA_-R-2WL~UV9$y7gdbsyGFL1Y<=(E zC_}Es+gKDqrIM(ZU*FMT z9=l|izgYhpr*{2SoI2W1bB-VF>#v(kBt)d@f8@|Cp z>HK%Au5Zb)D12j04m4JLf0EK6t6fWN6XzvM=q=0IpsQ2GM+l?WkGx)4PVY9_$~h9M zJThB^cU#;PW~M+Xt70r`WI8f0svr8+8KF!~TD`Fbu~cz8&?4>wTE$bGj!g3a%ha#* z(tgPrc@^J7wus*hjl4HiVd+TW{eUXInXH#VmuXH^g=}9co358>%5utBm7I=uop{%$ zDOk@obTia_J3+ELdvR;DagG3JvHyu3ylo_+q%MgB#~p$ZG1&?p1p(R zI=nba#kX6jZtn(Kc|5U+d9d2WgFqkgD2H6eC`%%H&d02g<-fjE*SGKWwIpZiT}a2m zxmYIKVDx^k*2ER7|v1qF`VIFTuSM)v5 zg70ur&HM&b#6RgPxrEm1*1Fegud7* zYq4`1&1Za)(fbbir@KIgxs9*lF2+X~Nu$qwS6QZ&i6XpZS*xL$hDS~z2`^omimCxlvY#z zZ?m>{tWE!Q9rb@ZmXq&aTJNdadQYwly*2;)8dZjr?d~nhdX{;avWo9lQ*R%~Ww?Gt zCqtUyv6tZ<)v6n{ewXXe`)onweStZ)=<6l9VwZb-?=arG8@ZB~_fbF2C52J$vNKse zWv3b&1KA>q{;S3+Xymbp3by`#i{;&`mmnQgyuhh>%W{6C(yC%xx0WJM>45jMhKZ@7 z6W&+aSv)Gb!gYg-0*}L+|N6sE5LSFE(}wS9)`<-G8SrBSokRxlcY%Ecowvn96O3`=;`G+wg&OD=OB*j)HHPZ7{i|xb!!@WE*iwoHG>2_6%7*f zG&G36?JyHzQj~gV(v^qB!M6F3FSnh@x#N?XoN}5dZPyz5q3usFo&~OL{}ans7_Tbp z#L@OPb)7id-cQ}a=Uclt?m7|KVF~mDJ3O!AxmJf&z`_n|fRj6{SNDsV9X12!b=U@c zq{BPF)xdi3Zin}QyE}XY+}~k8@K}eAc(0qRC3-FzA}(}D$9oBX?r=gq#`agq=--qrN_2OFS4Uql9sBDjhUQzao7La`v3hAr#3JbP`C{&)`1wGvg;%^2~UA47@ zDIbJ&1nvdai<4p9EIkl1(y~R+IpB{Xz2hZy0LP67;<*mWAB=u;pyNnO802i=XC2d_ z`GWB~#$Oq)GWvGHw}laRJVLhXR0QnNsoWAH`gHnMjp0woQGd89!o<+ducHi;QJ+p_ zbmun_hMwBhi<-_VV%5Ov=8{YW(q~?mc77N7y`7_w`<~XjA@6DZ3G|d2S$16Q%?2rk@X7tvn1| zt1Jd?P?i8Uvt}!6wzK9vR=q2b^sg47|${54_hx<)6>#EaY?^#b?wUc&~H{tWR4;0-v*F17Eb{16Nwc z16NxLfNL$qzzr;K=G?b(YTG%T_bha!AL1!A>ef;L+{e~KoYzqfbAt0a%^}Zm3SVl~oNdJizbIv*HleHeJ7buq9NJ_CVvK@Uc| zSh-#B>1eczm9DOrmC6=vr5fvPrJCu_nypr<^X*ou+xPJ4bd=df@*x|^M{U&NCv24F zX&bfpIUA+?wT)W*MxT2uHqqPXR=gXezt4QggMAhNhx;r9Ciy%99O3gQFx_V{Fx%$| zV4lxYz_C7011I@B3oQ0|4p`>%0?_00BCyJ51+dmU&M8Q?{$+B8!9Z0!R4 zlhI-ehwN_~3~X*AeH$Bv?_?{49B#V<7-zeu=`ytw?vXDnuc!ko7Qch2x6=tXqi4$B zHl())rVDy6yMlL*(r?EpqC5ON__grqy@E5~kA{y8A>L&VA4MJupWe|vPLx`!tuw4E ztm~{FTK8B#wH~wnV*SI~%9dsuZ7Z?Our0T}Y+GmBY5T}_!1kH#wC#J_RaZY`Z~K1W`?>E=zJL4r`nC0o@GJG3;WyXs ze!my|*7&{Sx6kjapUpqYf0TcLzsrBJ{~i8M`+wno$v+`rQb1`yMZnB}y8`A1yb!QD zU_-z=0iOk&3Ft>xigyGZ#cBwr(l~dqil$iKw7@%oL-5Y^ws=2yd(>GMywSNQv=R7S zzDUsuYopd88kSi6K3{LlSc64Jym`Kp7>a|C9E8rrDk=}FsC?A(XvDl3F(x5Km5345 zh%r<2!>>N{7xTmbym@?}cm%&8un51Ou^8?21Xfp1<4w}fp=3V~K94i|zXyK$4- z-yK3PrQgHyr)-sBPO<#6SNN-5v3!QoRd}a!l}jkY%M@hpEr!x{X;(VbhP(z0rBca| zNo>7&s4w(x)>jXunvp0|n8sn`Ro^+ZDMHTYkV_b!bB;%t>dst(KQ3(eRqpL{bxY>+jIL!6< z?``_;R#}pXT+Tv9H{)|dscch+QE6wgW)7F(kzt*v{9Lvd85PEt8P_vzfHMpy~`}Gv^JE|l-Dk6 zUe-?-=MuvxHGNx0AWf-H7*2I{6JrjCDIQMkUc)$-HUFev-iks#J3JPtt!AX2>A>$u zs2ERf1JXYWI~&l7v4?)2)fZ?N{uqsX7=v(=sUjHT5WVH~2FNY3=fW8s-t>m&t+1#V zi&_HPfGHTULLhenQ$;UqK^2Ty?I1^Dq*5^og#n{sS1}TG0mfpKQt^u{^q#)nKvl%! zw?^@HGoUI)BDRV#DGHd07Zu@KJ=#4zA% zNKeHtV6eh>vfRdK><0ji>@QUv)1AZko;0Yj8hXj%hR z(Lr%T4rL5era;qCDF=2^DxvQTL>($qfdiBp;6SAgI7pcejK>a070Gyq3~B~%eZkv% zfq09Vawp_bKvm>m{f{?U167fy%!Ql}RK;lJZpdSRcy6WK1007px8NzN@&NE=yvJS@ z6BK%H|3o03_bCrUE&!@x65gw#iX!DPXo`V2xl$g7Tmn=@sq!S`G9aE-C`%wu2C8C; z@(g4TP!;8P1Brs)LRkvAQh6R&h4+rA_;s1(z+07`@+$BV znL~ehS$J#66`Rf$RfR@oxNMkbQxw@KcXN_6MriRh)#}1c;uao`QS> zP{rHq&j7>KFMz|Rcul_0Jo}Pz-?G-;_MxWR#v+J-%+~(-&K16-&4b3eIKae zx91`tp9iY=ZK^29UjtFMmKfj-mN;Obr4KO3(hu0eG62}pG6>kpG6Wc683t@?iAUUa zKvlH2BmzS%$-pp6D)b$J(=D?sbb^?wP6CclR|C`3t-zbqbHI^mKp1}aTI~(YP$vL0 z)w_UM>J?zN>cJDvQR+EhjyeHPv2xWiV4hkF%vZMqN2}X$mNrJ+9!|fdwLK22V)Y7e zylS0IXK8tY{uHF2$!>%>f)d4Q=m?{+O*op;TTCSkE;~L5ni>O;i@gGEEcJ*3Rkt$li;pR@iRf~2PBV99Va$HmE+|{mPPAa}ymL$dPab0g6;jAe3pc*KRirVU#$rW|wxCTxt z+gV-fc6z+4Ko9nh)s|T1Dw$R#ECo%t=IGO)KIlv$$B1SX~7Cr@Bu-HnD=y zJ9Ac;70R?x4d&K5i>4%dT;(#ZSt&BXf66Y;Nw>r_r^j6^JB1k$Cas@9()t-B?^304 zy`?ydaC^)Y-Xy-*S%o`KAVQ;Jf}1&HS67zOJ(~gNEOqJafiUsaMP=@3E{e{n{$q6| zR#v-2ZjrOXZ0{sAKNrYUQGgVu+f!HVGL^`^2pJo}jXtFrsM8oaBb1hmVW3d|O_w{f zrq)$X8RNbXXJrkwR1^IBPH>d8xIi(rVuJ-a(RF zocg~7!QhK-QT$JhFZ4NpvNtaWow?3cP#~(E)6-oQrL|=wB{^%IqR8WNR_D29)M|Qz z3wH&Yqr&M))I$j8H1ro|A;t|ZW~F%%Y5!Sd+0>D_uA({&Rx=}|y|mg{RW=hT|L2q< zwD4(JFqX&w+U-?{3-NBoq8juJ;jT&aRMwy#+%- zky^xL#FOcvZ+cL$jQFty32Axh$(aIEuZxP6?xtGinGGz-T~o_)LVgM-nx2-IoD-j3 zkeQz$lG1YXSddAun3J4c5LeJwNIxc;g_xLvn7IBTIV+_gcU(q7R=P+?FUZPCO3tD3 z_s(%)zCcH;(q>Q(W)4hAvJ83w3N=nwDm)S~`4k|qK+mXl7Eo0P)KjgyD4muX2GM$r zG$nbPk~C9EwQFjP@W@_Q?yktJE0@7Avq+(c6D;%;6jj#IR9Ehtp~WpOqfF5_+$vNC z6eN*C(G>2i^VAAC5}>}dg+o?_2kV05g#6Uhw9HhIo0pZ7oK%pIo|QNfBt9=Ku^=xe zIXPD(jmy-e?40D>Lg`sqBjZOT$0uOjxjpLxq`g0dGNSm;SozpPRvS5E}%-s z-Jvn9)!D+m1U*BB)4C4Qi@9DE+gPPD>Qs%>ACaGuk`bS&2hb=r1osrZOfnSuAh)F~ zrMGMU8mtXzY5FjRU_1LHmJLRkx0)hU&gv?f89#)2C|80|9Bd3+{F zU@;+`yBq_C=3J`w40LjM+zN#rR5wOIcWp76K*|{VL@`03hmahC=gurItn>&hDJYnz zs;x$Umy@vEYhd0jLNTx|7d#7=%Y6oRYFN|fV!?@V5CbD^@C>1EZ-EBH;wB!0p0);| z=}AUSa@7=7yRlrU7CEjOSM@ZQuox>UgO7=|vZB;$#gkl7=By}k73(`4A*(6FSu+K} zM%P*No4C1+%l44dXrUSO0EE60;Z2_<5vKuCBL z1m5W64CyhW;*br+fk(xGN2$Q0;=t2Vq2hocSq_rLED37^DC6^38J{v^=gXFGqhBRn(<8x;DO)@!pwxT6SfP_|JWZ zuE6Y$qXB*MqU|YY&e!)B+7KnzfC7_LsjJoqFKR05s*7AEFQJHXn^9~eDtV=`uP&#J^j?By&lPQ~Bigd>$ zYijDWQj1=!E74n%b21CiKXcL&^7Ak{OsS}xUO_89UiVWi$Je6I6xP+^`e+@Aj*x*< zl7yL5WIkGQ@kUKI=2a%sab1!;*{SYxGQxnhvqjQI5Qg1iyf2aLd~B|C3~PDbTs zp{3A@`Wn1&Chi4VDRCzhQ|p|?IM%{gN0W68BlnexjJy<4UR#oa-H*V=bBa6=Vlk-_ zs|eDibBDqqUQI1-G#8B&6*S?MPp&CRA*HMoR3RFMW5lPX@w}@|@T|*9qLG9| zG?o-nbs;HvG#S!U3bN9ZGP80pRi_k?AD>QAdRpd4^08gj#l#Vq|5I?EupudpSxQ<; z7HJc+F!y3%kW!G!tA><&B$O)!q<`*R8XJD<*@i4B@m_`vYlJnv@B0{8N5u)cu zF^E%%b$bT3eQBeyf2NFJCtI#gu&~I%0Hv7_ib{YUhMEx+SQG28f=VkErPY;nRq(Mg z=RwezI^?uUhZovNH<}I^MeWQg7o8AegsGUqQ$xA46o*RMkSi!zR&&BE6}zToI45Jg zBEek&LFOG_lZ%;GD}W?=Y%dcfA*nW*=gWd?ELAJNH`Q|G1qFo`wU`TWoTimg>)yrM zBpEZHU$ij0Vv<~lutE!|sd8LJIF;cc0Vk9YY4Aqs+K9z5v}r>Qt1^OA$rv2DkoGZJ z(q+z?5$;-?h{&Zf+c6+l&&0lw)+Mx8LN=U-oLaG(kjJ&fuEM%fHgGH|MFQRN@^+_4 zI7f1o)9RcB(oAu=s1D{Q^LWgt zd^Cw)^}!-ec+geyDzU1gw$Yv{WMSpNk5tSk6?*Zo?wKMC$ik8b*=t1~!_R$)XfuLT z;5PNp@gns&J_4ddJ)@I&&rGVGtV<6DvBG zxLuy&2%Ju0fq*e$gv*1=#rBjB|06XmKbu4^uFl1t6Nf+-NrW)%`+PxIJ(XHrIQC1VBO&1G{=_|0%!)gTm-8_6m zhm?f(-8|Knxjn@-BEvZYXCwL#JX9Ory&;)UjL=+AU+~pwm`81Ky*{HJ3IV zNusqVEp%l^r^8pzG;}*`tLT0fCEOuP+!b#0%Np-&dq?Y~iPMGNy3j`#jH30!lgf%B zXRUV%F{l`=;ri>sfJOmgjXdJ@013K~s0&HDkSr?Y&5g|ypVH#~MUEJ|FjjFNqoasQ zeyFQ;40;B^EgYYln3g6|UA1!L#i0m}IjY@7@t#ub0BXz1u`Qq-nD(#)Qy)(Av9Cb$ zVoy!;XpOOL5txvil$MbjWbGEfC`6NHj@M4O2Bj*l8G}ra8q&-v5xI4R2uL?CkK<`I z_OyXJ>oz4BWjKDO|O5G|82~>nCm4q?)H1rTdv1C%$4PT`U!h zbH-S??{z)fpCi6rxg;*OUsLYcXEd(3V_QFx48TNz(h-TjIc2=f}W1a#U;n|3fRXOkuj+jPQxvSXR$P~ zW4n#-<#{SanOooyO^m>2Bb?y5wa@^H;oLEzTz-H6SBde9Zd7y_U8=$YqNXMfr@0vL zrnzy<%jZv2nY7r{Z>AB>nlhTVXfUT*P1f((til@9MXk%L(RqwasKd009vxpr&l`Dt zsZDZ)ysXzqZ6yt67@FmQ8fBa3#>o%%6oe=!f{PMuO^({e0%{7L=$AY7Ju^koJ|Uqk z1hhq=JXZw4L5|lFkA@VviRP!-VmgJGt`&zfkavJn`-}zV5?3{CDd-Ri$04{Kv5rE0 z;S`l7F^nPRc*)g;1+%MyPW5Os;vP+cycdiPt_^ThdZX&_(H;c!qVgu@^5C-~7_Bvt zy>xm4A&)gNc;GoestdzGIUlcaIb>`awa^Z9YxBHHpy|ltRCvK8Cp#L$aWi2U;wG-4 zYb?T(r0JYwS+Tt366GvnjGvTuu|1TbrX%1Z~OboKeQMVYwSbLE7f z1*@S1_0%b3j;j>&x;|>+5+b3g^EmNw89sdEeF+E3;*VsY16A_am|I1wCmKKHXr3mw zMCcP}PyLRLqtTwnSNL+x#ZSGoUcs`QdgW46(|diA!Cho7u5mj1|Fn1RF>+P+9Y6D) z9pf=GU;&Mo+_QI|WG*o20yR5gYcg;QklhUmFPn8O(Y94A+ zB~cnRQWRBvODQdtsMJV_luB*Yq)1I9S3*@Pp)`L4HHo68pYQLSbMKwm+4UOoM1Lx!V5;K zN0TEPA{;40S@+4ojKJC*dDb@FqLnnHDZ~MuwDp1=tq=>&L+;6G;0H-kD(NAUH$wOq zUNJVB89&RaDcmD7;ckR&Ba=T*t7HXdI1P6k*brWwIRi7Sc)Txe6qr0%Kn(qhavTNo_d%qk2mE&7eWqqwlzhE-Py?R(@{fI$PASX8G27}x1ZL|g5K zmrua6jLy%K7P6`%*#K#|O1@y6@E<-TelaEXqpA={TY|bB(wYd22uR9G;%bseu(B#A z{fcVulwXibmuuysieYCG1EGiNE&1h@gAQrrV9Dt7=}*`p4FjGAQ^uIUDL_X z8B{cOn85@S;wfolfgvryQfZRHC)$&4A`BACGD*V1ApO9>>gAK~NotrFv@ z<&aNEOGvj4rCZ__$nm8?_)V1zEKXmr8x|&u&&+rw6YdW$OozKsv=+J_X94SKCxnFs zgzngr)l_%q`LOCr5;jWGo}m(b8g1o;G)N|M>j{|d^{R`BGzrx(Ip**g3y%aX9ukQl zjLeuGA6s2XX=HVRQiP8JGn`yVFo|2VCl`cCnhG1dhTh4AkV;w^#(q_Ak{%1B!G-+> zMLwIO4J@G$ohcoc=18%HVxif}j5cILk$UzsDW7I|8OMOgdnoh;njRG<^tHY_b5uv5 z%rR0zwq7Xe_vC^sL0sn8ppH#G=goty82#>y;tS)+YEq1({xw!a!0x^7H>?K2y6dR4 znjAhkILT39?rnV&Cc<=OHbcOrWG^@?3a3>Q^W_Q1X7f*a zyunD*rYAyDv|&0#tH^E2vQQuAMcBo+Yfen_yh_I9@4~0E( z^%CzbAEj>#R4a%H`CbdgX393Ysj|F9nb)xKuClHytHsLIiuld8LT1Amjcmg-S9MJ$ z%*j-pG!@{O;s~viRpW4aWZe3bHdnOB*4e}MW3eW|@GiMGX67xhj%TG!fL2g_>FDG$ zGozE|vr%Dlzr1lq$NC$M+*U3b609s~AD+!0t73a5s|#*`D2|-CC@4!)hnJQJehg^8 zEU+vn&j&|$VEIvsj?S!{vbDV3&fy{04I1+FcybHg$If^`^5)J?EXYBddd@PiTOkX0 zNRxta6N^V!bW7yqMS;TVc|Rh%RdjERX!apra$>P7BPIuYc}xy=R}bZBd#j;NJr6PN z)hUIv{K{pF=X$0XjEFC{%KKBn(IFhK;AkW?EJMvhoPD1Sf%JjIfSZ1^X@E$N@x_Eh zI&$mj$c?9?oJTgxZQhBvr^FEokW1xmd`=TRuEoab<>x2QyV05H1MU%J93V>1=9R5O zpqrfn@w6NYk^4FHOrq0$*iJg}=*lUgwlD<}7l)NlL~Bt!yt6Ws;+7IFadM4i6I)>6 zH8HW>h}UiF&MUKUtK7K1s;co``7}%PK)hFe+$|2G6_ehCse<-iq!bOEB%u;k`hG`Q zeI*I&%(j>f+vG0lFXbkIAXPRj6J?a9R5ld1qSY!%#1h+^jwP00<)UTD_>5niFNO}Iak=HZc?xwkPn{7!l19x~CWf+u;Y^}5)$|>kWyYscR&I=(Pt8{{4 zrdhs@@@x#D2~%fYiN`rESx1S}B|EB+YKa|9Ti&LQq?V-CGV#;=(7cb6xfdPHmU!3m zY{bbX2{30JN~4NyG+CAP$imimZ{Y) zMA-3P?o6swdq%cTp|T_aEK?KOm{2W+k9utXtIY;Qwql8>>L_PIUo+%Wne@Uknm>Bl z7eZ)qczJ+0Gj3+^^yP7)r_EW)WO>@afquR)|16qN)HB#fAx=r)a)va_PAWeVOdkxf z`8+iJYpdaCV-#8Cr!9}B!9ZgbImjsr0lb=~P1LmpoIMXAVs+=K9_wgZ7Gs{(ug5Hn z%IV=Wdx#DS*^oF*U~(#W@m_G)BTnR6*A=|; zL7y1#0S`tOer3CxP^A{%cY|;Ac7?i`ht}jHrKRq|Qiac#l%m&`V zh4t<5AEsFVtuK&w!pW<%J&G9fG~vjlXV$kO&NqpMo9%%i(j!Sq+YITT;jGrgX%_UylW z_doyQ;NQIQdq4cZiLW1W`Es>TZj}ng>vJLV!65Y`y{UAdp+MFzWeiK!5mT9r*(Omnqzz?$lb1t@9FY=U4Ed; zkIDZK-(w^$0;w@i;ymAJzE76QEkLN=TE1M#m$&Km6Cjf>mRrK8RiH^jxv%MRNtdtc z@(;TFlP<68@+#1Fa&xg*XuDjcU8uH7)oQI>vS03t?Od*2a``H`yg9eIr^^2-mGgXS zeCy?QzE*48PurZ@mfHDTy-q>3SZ-V#s_=rM=AOnVa0-^gfEpJ^c^6C;-va@oJ1ODhd04-mA;l@p73vBMH-ZW@igb~y*z=+iFwyFQn1=(F|(un>PX zElqq!5g z@!V;c%izH*Hq2_d4YscoG~`;XU5VWn^)8yCUIOVW*kt$j_g8ptme~2Kt8)e3dw3JC zIK0V~YQT7%S0joYjD`iM>Kbcb6aAWfMv-rb;1Y~nqoHf7UayGp8*BeT7p*#kgFcKL z>B!X)v9@cKto?(<3c|!K5>~1ds8Xopd{Idtpy`8EPumAg`tsY`rRLgOn)v405Bp0r z7d!^2+g5CJFf=+Sc-3NsnP!qpB>L2&aexV@;Z$v2TZL*lKmhn%m1|nnmL{t6BP^*{ zDf?{0e|OR4NVkh7?RgLZcsnlzL0+@XFa70V)_ksoHtnOe2d(C_o)6yj9F{hi*}>XuE2;QWT7OWgCDZa?mi(M}tKt7OVVJDiEz&%|mBl1* z5(-1`Bep1sfxNULSd0LmwMwZmCWy#l1+hYbw@S@({4~Z|rE4nmN3G_wO6gy7wN#=xWucE#rzAt+zepwQo&u_0VpEZPH?bCwLF4U-z*X;F|HS;yv zC`+Sg_Q7uYUHc?C+|i7NFIO2ESr^|gM4NpzDR$*ENNyTq6}nZL@iqGxa-r53L(Yv% zFI?3wGQ|Go3t_-Oe~Sh=8DQBw;MEub!dU39Rdo$EkYO+ZpjavQ*+=943xC~r5{`bp`h+hRtD8$uMfV6+Svfh z_NgMhs)>Wbp!hYQ8EmDV3MD=}D_3VgLhe6SGGJurq(fAR#GA25D+n8d&Tqw;PVGZ> zJv)4^T6Jc+`l=xhar+{)ucPy^sn|^k*Q;VbS%{kG#Vpk5uFt{yulNjj>Xqs?SEBVR z<}LMcU$?s&o=m96OOUH(v~^>kq@Zf(2I+sUSiy?11sACTnMbKFrnKU~<26`PCR)FS z*lVy23IiT7?nld(Ael7FS2d3%8k+LD)TmTY9&4`}CN&WH>#IEN$7qnpsQa)_gm6O2~{siJ?z|8 zsi0egL@BS<=z&W+E8EdCbpH1yod2j&=F-DvB6c7)RBNt%quB>R>oCNnDxD;wf7J~0 zC23ipTrwKGDvqYI2lFa3o5!;$V~nZMS1Dkq1xDI!=k_4zYv0izlhhkZsXZ$5%_R5D zgb){trgAP8@u9D)Y;V<3WUV?Ty15gl!0t>Dn4V{Jnq%<$HdY`{DP!WcsGR1r%~j1{ zy_&D@tTfPgV(aV&RbgZivlrkTW=&kck4z1&03$MrvLHPZhoqb~Rn?aviE8S;^vd(-OT38RSNo5(9mU!RH;NM(!q6S892aQ`yB6q zcEvTvpV7d@!q-yz(eXof$r0pLmF|^4Jn_XJe`fVlm%j7f=EpvNSK)iN)c1Ytw|5+w zoBGpTKl#zWf8jGRq2b{`}oo- z2RN4;e^J2gi0`GM>E83JXUrwdH7-6>&4m{x-XvTn^4C4aJEBf3E+moIiL*L66>7&lIPC1@Z=UwLKxlZwJbI#rx2@Z$MNwvvc zrNwztJP=9!Y5oGmIKMpHzj>|4w%WI#t+)}caZH=`esZgD9|L2JXy&JcX9{nC_nu!C z?h{+Za{vryZT8Y0Hl@IpDSL)_=ds2OXMK)R^~70w{yCmW+8VcX*Awq`K-zf*n4E8? zZ=MOE^hNI6t`l56Cr{EZZ#FaD_8d1!O$7CQL&kr%L*F(WCN6xQyXWC+@o<~(qP1P* zPY^BeBGVxt^2{pudk#No-2IMu{G^AQO3ub`wROJZk{&o zjdRyFKAtCkjvAhaA9n7RD90P|pxbi}s_<;UI$B6_ycQJ1S?3y^Jz^tvcv+S9Hz~bq z@JjJ}c!0L*J1h06PVjc*OrkR-t8?HY3pdR>f_Y&BIkIo*sD-z5SISXS$o)BJBHJfP z_cMQ<(Ji7ycw&TqW}V*kn8BG2n&W9GW7_ShZmo5U66vUOHr@&2sTux;h4_i*()mh1 zN#lsyWJR)eSJ(=!bhk$2w%>w%7KSU*WBZO#GD*shig(%AJZR=cspn|DNGorbv8lUO zDT(?{_BW1q35%~XB9#HAW^l=B$ktEMN;XFmdnOsJ`^O=gDl{P7Bkvv1P~2Q(PYI{fGEfpK+||I5oE#QIsOh zAdf>cBF&!LCi*V(mjbxIU7l1HJ}+xUwgUQufNW-?Zb@Ymw4CrOGv)FPVy1kjt|hEyS;NIBi#{sqeJd)7~~D|gS6;|>I(Z9 z?UUFvKl7Sr>05WdpP7y9XKHP_$Kf8B00&XdTM5xT(tnOS&8av*ToPwrFeIgp_a|og zY@GMqp9J&6Xo<`7dP+Ob^)c=C9JVp}`R64qU?vSFS_x0duJj5sO3lba@-!ri;_)6e zZ}i-;XxdQvFOCsQc1`R#rIOo~#edl9cdu35o^I(AUwB!PpOJyqki1Q0a~>K6(-)wl z{2E!dZrWzyNK)hh2)@3qwee`6%6;9i)3II->L#?_H3;2#R~i_23*UpvH;W>YAW0{W z4pCQpBL6`ijeFRS@<`wxVUt~>r#{{pYOB<*!Y9op(f$GNxpm5mH$2b&{bDn-lbCN{3iW zffKm%vzDU_=9 z2EdDR>e%#hP1?~A-lZt-#YT{RQHssFS!mP&^}Wu-ht>g_1<~lU^W=7Q^<>N z7izci=xw^!_4mlz@6W5Cbr26k0g%a$3cx#MJ^NcQq3}j$s9-`2u=0l7v zMJSh4>cA_@Q~|h$r7+SOy(zLW3%dK|9;N+y-q8G}Fl8LpyBY3bwd}>zTbm`ft6S{7 zBhw-D+fSluc&7pQV6boWEe_MKC?K;NsqgOGxJ*kR?`9K1TIA#Euj^;n9VUsU^f=r)s*BgxJp+_cd`B5PRPp{>D97k+~6xr)~- z(OY&tH^WR}9ATD)l-08C{;gpW-6d&eEh7oy+&qw2h1Ai@l;75E-m^F){GOS!ja}s{ z;`9tZZ47Zsyv_sYUheP4iPj>qmlO)p6>$5O#w(4XdD{|?ZfU#`V!DW2uUp-LbiCrX zbj02KE-RxT00E*t*&T(|9A^pKb{`Vdf|JyaY>M8XqufSa2b2Qeb61A1r~PL1*p&LG zuB^8uI7VIrFBf7|8&czDPYqE`w2&^3zCoMNxf}0IEm2kB4Nou0MM}BOo_o;lS2rJt zcs<4Z@>J{MqDOi`KY}MHxzrf17$SemMH0D@N3tcYI(m5+SD;T1Zw@V$$&{~qXuiwf zltS5(M!xr0&{496@&{ybJA>xp7ip6;_~jlt0&RU5M||q#SRCXncnq>=9C1w`zr*{g z?tRhHXRW*M!-vyTK5{!c{Q*}}XvOW3U!g^3uLA(m6HzkUjcV_=qcsk-i+H*l_p)-+ z_aNKrJ}jh=qXOb?SBh`va$2htX&j`iB`K5V>O)*wdqzD(=@Y&*?Rz<3J4by5$3!{x zmbU7o$Me(?t{RWmkXrZPPX*52$jZaCUUUaSv%tF-6~6%f*$N{5Elra(w82eIUlLs@!e?Lcih@ z_NwpOX%^F<%=#d|@Yfn>g|C|$3Zs8}?Zt`Gp?)4kjmTMd8aFA7?VdkOuJ=O4E1MrU zIEoK9%wdzx7=ro{$0!h^nTq@@OTW=ZkNfaXr(eym*Xw?qTk3o5lRur#Q&&Bj`O6W| z8hWvhaA)Xa_yHnz3A2rsIfNH5D7Kni!!Ib(DLtGBu-V@$t*H=3^ z>}Ngl&Tw8IoN=S?45ANd#5k@yaE#H%Fj$*i2fy>+O@)+8kMPesoChgeIentNdpM7Ty{+(dt>cy!q{!VF1M7ZpP0q#7FI>w#R+^TT|NdVc zd7cP|dE+np-1aGQ&4>H=GsH~}sItmOu$fw(4xKFbeK`f#y)ponke;+U`x*Crz~1lfL90Up{tkPdwuAJR?o8qqnyS5(l33fXa&fX^kPJk3bceKot#Qcz*_+ApAwhqR!cp@U;EhnnpUF~-^VlR|JWDB|cZ1TI z*9JGy?k+-C{_b8VG)fy;w6;4=ds+HfzF1^FchF0=A3uY_O`g~i?L=k&`4F>^gNHm0 z-VvWq=oFWa9KOAxvF?QucB&1UUIqLy;EOt|EIRmOY?*o76~d;TM&dNv?`1zyywTaN Nd)C@<5dRN;{|`h>Cyf9A literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Microsoft.Build.Engine.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/Microsoft.Build.Engine.dll.REMOVED.git-id new file mode 100644 index 0000000000..78caad0872 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/Microsoft.Build.Engine.dll.REMOVED.git-id @@ -0,0 +1 @@ +0a13f25c2b539d3eb3130747fa5b9c592c865adc \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/Microsoft.Build.Framework.dll b/external/binary-reference-assemblies/v2.0/Microsoft.Build.Framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..3cb0f44195b3084b82ef1c00f4824b54095faa79 GIT binary patch literal 25600 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 Q&dsNPOCPPBrD7cLKVv03`~Uy| literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Microsoft.Build.Tasks.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/Microsoft.Build.Tasks.dll.REMOVED.git-id new file mode 100644 index 0000000000..cf947de6ab --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/Microsoft.Build.Tasks.dll.REMOVED.git-id @@ -0,0 +1 @@ +fdc1308d76495ef02a4abc4008cf85738253a5e9 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/Microsoft.Build.Utilities.dll b/external/binary-reference-assemblies/v2.0/Microsoft.Build.Utilities.dll new file mode 100644 index 0000000000000000000000000000000000000000..fafd04706937972fa43eb8b2bf0cf144bbccfb75 GIT binary patch literal 37888 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 KKZ{^o;Qs)un)KNK literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Microsoft.VisualBasic.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/Microsoft.VisualBasic.dll.REMOVED.git-id new file mode 100644 index 0000000000..76d3501bae --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/Microsoft.VisualBasic.dll.REMOVED.git-id @@ -0,0 +1 @@ +553b666cbda33a40eefd4491c08219ab0a7e9899 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/Microsoft.VisualC.dll b/external/binary-reference-assemblies/v2.0/Microsoft.VisualC.dll new file mode 100644 index 0000000000000000000000000000000000000000..7a582aeaefad53c086ed8e6eba49c470da56d64c GIT binary patch literal 9216 zcmeHNYiu0V6+Zj0<2cDU5QGc_GFH+y&~)k~HqNs+wi9shI-9IxCn(gJ-M!un%+9Q4 zW@B%q!Xi*<^Mjy-h7z?^M4>-GO4Afk%0nU|?T<= zZO=poUTz!OXSiy?v2%`|S2Mb0*`Asfs#CO7!&3XUrPREg721LY&C7zMlbeYKA~8Df z#^pOJxxGb7+q_64(PC&+U%Pc(5bkCfpyCnrc_SqG^OMTBq2~+bLa`RgzwjA|z6o7e zOEkjay+lpyi2AFWXnwu!zmZj>S7p}(`IahK^TdP)Ie9ezak8udZ%Fb|!Af(4X=efs z-B7d5b-1gpZlWH|aUGcXW!Q@VSE!1+>gtw`t5P7ig8hn%xkaggeyf7YRYVb1R$W7? z@7gNWw86$3rd3~3Wlw5rPb4S-*WLbATD#WS-nFWWX*7@tynwo1dKb|i_~{wkOH-a> zSUHz1u9)k$k)=29?C*oT4Dy8**z}lon&aUguG^(MQ$SfIk&$bOU`F&oWHnvs`;X-X zxR(S^t`dHatFHk!``GvMvAF+ir2VmP#v18iiBC%Wg~YS5e?Z?HXIvWZiZ7w9NUo7~ z$HzI@ARR7sIkJ$Np=m%EsY1F;N=sOVbOW_Qvjh!`A;w;xUOYNqkG<`w|)a35Bw*zSP5qba^ zr9(3OQfw}9IWCiU6`hQ|skF)P^}s_dD}g^~Sqpr+rC;h5w46Dlpe45g=Tk3mAsql- zLC*nO>DR!;bOxx>-+{|$QADBT)B#*Ur-AJ>5ml&zI${c~p|^n>=&raz-E?(>LVff+ z@D_3!6&j%CISM7|hrl7)(4^2V`U7we9hs}pURu|zP?pXE_t8W16!h(N^A#%4d7ww% zUZBtftx+`kGCka)(Q0}WxSpN|_R=p~vb2bPr^L(QSk3+Lg3=1C9*o~^d06%`s5d0+ zY|#{7qh8x`J(mXTjBW}_7#YWQ?J-XqHr%3a_EMin7jymAnB8wB`+7Ec7+=ywPe7ls z9o-YzK|L=*b-&xYYu64jCLCd91Trzk4B-&eoKKZJU|YE=F=gZ|k*!h;+otXrW|&06 za5KU*bxYVqx5x0@Fw;RHvdExNl9@QgjAuKONe$YZcB&vUOeM@BVO#dFa9qQ-h{L^h zzMxwr8BRLzPR0xLg_2|B_Ib2rqGCVnRzh1Qwt!?s8g{FtWHD_TnOj9^$i7opw8?cv zK5drzSFRbH6eb-$>N`B;6|;stL-go~NKa>y>Ju*e(Fr3_u+dvQuTZN=+O9ECt4fJX z(J{PItu`TCSI=Qa8Qr0$(}tJWJ{jL@JEjrRNR?bqBcQ9)wb*wlyIgVZm8@E5B6Q{3x6zcQ! z{ef;4-ViUxDh;hqn0kpDfB2H0wT2FAf(bYMiZPlgx82ZGcKn>4uGR&w_ZfQ5vR%)} zxc>OSEd(77mA0d3c}8By&g2tF5U0reS0g_Go3-%YN=U09Wua$&<&z2drh|7}++)Z~ z11|#-``)CK%snfedTBVP!Fn~AbmH!koL7P`yIY4|r}DG^3ug`AW?cH|xL2yu_xZ)} z_l(?+PtQGt6^nq+4YYQyV`sMT{a&RDX;@8p_!XvQR_QSp&yzE@+@m40q-?zg)@jq# z@@K&9Sja7f+RUIY@v!8fcg_-qPlXHW5OOS)P}$;HUv%)(XA8Sy_3XmY@6z;;8As}; z>lqqob=;Rd+5SqH8F`%Ek3N!-J!qEjezcx9uNB6Fo;^!Ap7J^We0uAy=3Fn3~SD#wSN8hHRY!<`^>=Ycs)0s#k26? zIOZgcw#e~{XUDckNWhd^7x2~LN-i)afkz47F6jhXK7h{iG zQQ~SO(o{Z%ZAglji5|k&a3gQ-LEe$tw31Isc&B{MZ$20~ef-RYA8GeJ(Q^F51%EyF z;T`7>-v6)Ie)HaeM-E+ga{XV9o_X!}r_LUI^~ObQ(Ff-_8~$1T?%k*VIKJ@UujY(z zyZ+oN<ndkz zEYw|)GDE4LgOf#Vy7WQAT;i7X-q|Rg zgP7O0Ny``F@BW*|-|z&6Pe_SwlIR~}S0yX8eL$SfVP)(f9RpvJBG_THW&AQ8(y^1q zYiA2Hr-`QrJKm?`>ux#`Ux-8_;KaL;{&(}#l+J@z1f}NPj4@ybzNz5@oNYy+uk3mH z+oF7Mtm0l)6<3h?mrz>XE)|INZB|H|N`C%&IU{)#YIv%!Z^t=XWU`dCdybr5?JgK$ z^?f<)dB2svXB|9wA24Jv{SH>RW7vx{mrH&Fct0oK=8_ihjm)0PVH=kJZ$ZWFmm{?E zJ?EI=cm351Xk5L6rtgjFDs1cVU`ouo-xI_c2efdmnw zA`b3|A`Uv>io2+&Jok0n1xIlim%&{}9i8W{Gy46{se9|*PJ;S=-+b@Q@B6(#pHu%j zr%vss>ejt|d(Lmq7rGF_iO)|z39%cT{*Ge$^Q0T%jKOzjh+V1A4%zLP{p^ssmQc*! z9*s0d1FinXKwDcR?r#YCqaAJjP@BK1y4K$sX$qF6r>6}wOxH{mVzxsUXTFj>-^^{l z$QaVkku1cWh`C$F=DrB-$7er2R60MHCd-Wwm!G)sJ2;+#s28f0#s4jCKvKZpy)OuH zEQcK8bJ*+kw_k|K|j5?qVs6&mmLx}&5VpRhe>|4~I{-|u4ND?plh4}C`Az&fl zuMY9u2{C|}{qKt-aIkr1_D%Ola zwpWZ5SF_F2fC4}}*yh(-HeVF zkFk|UIo)jWI-}1$l)`fy`oWk$mkzH7Xtm2Z6-OW z)Q!+_pk3UInh7CY0nlF2YM>&Z7N8$kb3ALdiXRzGVzdG%73pRGrHc+A>c476Ckl^) za#+HeYeb$#IV@w@Sq56p=xi}aBh46Vo+HXw^JJjC;sPM5-|A;u%;hq3D7pyECJe!e?X}Fc$V!I zS8zEe0|mqjKxA_+YrZOOV|1K>b}?FJpxxSn?$w%8Ea+a(^a7@TV0t6dJDEPn^f}OD zx?kt;$4tLv>eb1@;Y^QZ8e+PJ=><%0WBL%&y-eR_`aRPECs`Q7w1#Pj=_yRNF};oH z9?<0EC~C2w`yFQr=*LVyXZjVWTm0zkhxs)siDvD%q+HPPOb=sv1gL3YqR4}VBa?_u z0d31a@t^e;@`W%>!zuRtB*N6sZFnaZEe)Wg)zl*%bfYuYSHE`!YqriX)?@spFs zB7PdvYNqo+O=(H;1W1nqHDi`0Pee>J(^jVKOk+&fFg*=aN6Q=qN-d*v%a|74aZZ7S zjmbnW0=43&Bj#f#(JjeDw=um2)YQ2l`Dn!NWO^s48Gm1LHOCWu1mR@yB-$ZaJi~Mk z(?2oY$MhA@W4d2Uwnoca$#qEk0n@)R{etP&OuuLP6H{jjX{IyvFfC*{oM|!BQJ}K@ zonk}sKvm8|Qx+j@sz!7oho^u#&`PvUtz$|pMq#4%@T?TGuaiYh3XQ#aOzW8bmZ&lE zzeqkF_P=HtNI4#MXgoNXnmWr;8llt1bQRO}OgA&Vn(6IKA7c6})7O}O%=9a!!bNtn zm=0q)f$4On^O-g>ZD+cM>A6g|f|})d$JqiqJ6%L~G2PAdK2VQXpX4`cVd_8ZYK7(# zOrK%8hv|ze2>F_W%>oEY3CbP6jD7k3j3L<)WSZdR%<)N5RMrETI0t; zE>7`HNu8GIFwkaERdhlEs?O9*nd_LM$sVUdONv%znrNdhQZ&nwiIqh=+@@@^IJIb= zC&@^+9{DZuq}b3>PnwBb=M=SgG8EcW6t;}jzbSq?TCA$kU zg;17to@`SFw8}HUK(a=j1eqPJ_2k%O>pWfqJu2M&re*pJ^uFWqA`3kVw83M_){8xm z<(XE*i+1FCz35zzlDYm`w8@6PExN>$Z>DqU#oKHsqxec2Dk#3*Q=l}9ig()37@$HW zn^fH58K}^l;;;=JSA3^ukdn0&-|HEyPzN+EbQ-Mqm26}2LpF3-@#CH$N_JiGGd6T* z@e7`VOqqD3_*DzJo-W?+8D`2{FBgB{8LrSfkXh(&kR5Ew#CMQcNFVWm=MYooN*@un zp~4X@o+2e1IpR|rnmFQH8>$(x%7%^`@efb2nNBQAK<&^}GS})6TFwYl)3sqlYR*U# zi7g4}8fYq+YuAX(oD!w^_=uez3%xXAk!O^Wy)$B|r%a*0j~I|MR-x~T3vIh8gvDW^)Ikt1j3%(9`9 zoTC*Q2iY7OD#@9v(4>*oIW;ykDW_JUStA$aEK+DL(D4fGbTs5N+E6H`$%dACnicvj z>b_i|rjgMc3$-So)gwD?veS_+tkRt|GVHO???>+Uv?|%Qk%c*J3f+KoD-^md0X;PG zTXN1-Xy~XNIp>*3l#U8}EOhv&X_@CM z*-Xe3a?JVehTh1*6&s@F|0J%hQ^nEo3mZXrj<_1ywX4$MRjTaTs!jRUZpgblwO;8wG9o+y+)yBknOOc zVY$~TG+7&wdz}r9&%IuuNa>{98%%`ty*l?s1Dyu6)^n3hwk7u#8!E}U)kLl%Mz?rw zS7`F+unozk{t`pyA^7HriEG|yGO~oAhXcvklm|f=R;MNAHoHpuU72g4YM_TrE2z;r&!aZ9 z*7KNwHi_Sr-jMsaf#fdeNdw7Ukcs3j$VBUT|MHY+(?xq53%xe_wp^rcH5L|J!pc^jC~X6Uma9NS4e*)Dm~)K4Vzf?5YNO&OovS_ZsLFwC4l4 z&zt#ijsB!GsdY`XUVJ$Ez8r;km-m87N4q=={cZGPILbHY?T@3MvZ0K!y}A38tgvjK z4N(ieq+}z?Udy%6#Im<6gf{yy_hqFyx9no~pA}kI_F1ll8p>KcuPIqeS=ff!AbVZO z;*gn0w$dAhOpdcR4YWzDE_)=$MAX(l4C zZ$r~EKQuL6kCtu9R!F>DcCgn%?*jeR(3ClRVy1)5(cZt=(0K3PZD@-3Ya5#D{lSK= z%@hu^$G$}F4uwu1ZAU+rE%aKll=5vj3N+IVC~vaK29;asWI2^4%DL2|t8~TXA#aL_ zAe)q9N7FLXO_?~n{9BKOrk2}f^U5dXSh8cwOL7LNbhI+(C=`Uus}QZ>c?w0!!=3_# zXtgg?Xm$A|o`DLTQobd}M4QDa7+Y0oBU^`Z}eJd2heCGyE}cWSKdk>&CkzHwsP3*y^36P%Y3=3bkb1uH3Vj95c?yZl?cQ3224wDVFI4D|%*VZp6gnKT;}lw) zxyQR$p^nV0-X#j1m$}b-yh7JxzV5A8=qYF}Rp{f)x4Z#`lCpNVE#%J{p4Fgahh@Fz z4J!28tdG6R6k410cW<*o+q1s$wkY(+tRKB0h2G54eJ3dNO;)NetWbeF%h#sRbhp>n zu2951$QM;;t9zd}uFxIsgMA$eeeB-qU8PWAc8RZ3p(C@mdRHsdlD)%yqCy+8-}A0f z=(6nly(cMjM|Op;TcIamszP66>%Mggr488XU9ZrP0h4`aC^UA!4Bzh* znlYf-w?UyL1L}NdD%1wq*$S;2u-JEwLKhEs-FvP=w<5pu6nYrwe1%?sm5mC00NDi! zX`V*kCWVH0+I$x)G{)26`@KT5JUiT%DzwzI+IN{kCwflxZMUIwd{-;9&2zEudW9bG zZ1vut(0tG+!7xpQCj{Yjxwxo`XS zDO8#JvF{~?j)&%}3a!X}-uJpfr{{j_dsCsSf!$@&+oj2Uh$FeFQ7R z6cTwm+{Fsz=B>yZq0s2ORe2*7nvqxMD^VzrcT!%dLY;YAy`vR6KW|-LnL<1B&dM93 z&|X*>tI$Vz`@DxL^kd!ydE*uG=HKi)T%j@f7vvqO(5(C&?xPfH2dY$PWBw(1lNGuX zR;m=*o4?gNU7`I*H$$QCfo3YyuV7o=EQN{-uF0FN(ENhbyc&gq1v}jH73wIsId6eN zTMF*TTcptLg00@;6nd)QE$?E5-Yj@9&q9vEC-Rmk*};W7-1Q0_Q8+wnsX}uLpU-Ph zsJZaZc})tfFMKzzS)t1dKgkOz^l)K^Z@EIR6kg#AEA(aIR&T39{RZyywkb4t;JbMd zg~kp1ByWX6^9O#D7gHz<&6NtB49!l3E`@BhLN`ISMxiGL-tJwi&}##4_MNWKr$E0` z=%;}@+-E72HE4(XY=s65((}$yXe4CkDRk(dn|L%fDWsmj>tL-=xr|gHwICD%8(EIRAEq{Qjc+yA&GjzruI7LRJ2< z{CgB?@aw+&6k6%8^F5%@*^oV?(3O5YkDh*!9_(KK`25Eddd2^n{Kpmg8k$ck)Ne?g z?`ee!hv<3FDl}opwER5^%^jlqo>!=T$lUxF6p9Z?&3jp)Gl$&adtIR`VROGi4-IMa zy{*toLw2~|Q|SF63-aGr=<6Z-ydNs0AG9R@BZY<>gw;Z!(u1~pKUQc8WS=Xv2`9UnuktG`~^kWuR{r`UL1Zg~ZU-{O=XYA9}y{2ZatFs{4LaXwlHu zy}0db^va1tWBGUp&p;Op-Qm_0x?$+*d|jdEhHmw`6ncN?&AwEHl84>w>#tDBuzlW4 zg(`<#l9#2>;$au$Wh=CH*lGDW3f(v?E#Irq1H%^N=PR^lSe>s>p}!!%K?;2~?0)YM zg`C6h_YPC&py87}hbUAw{4KAArVhW!h8l-&^%g75&BJ%NM<}#=c(re&LhlTJH?KsY zeg|*$mMV1c!Dr=oF0XfUNQ?He{P|?xuT}B;;3bpmkzH*|ba( z$^1+t^E1(UL8oF%jdbhz6wX4M%G_QH{h=(^hUkPmpwiI^d4oc9XVOHcxUMT(r_g%W zfYIALjY@M@S)tcN@|43wRNI^LgQljq3a1V&CW7pa{1Z&%YQTw0SfQ4(d-5&R23f0; z#UWD&R!VZ(l#I^0+7+U+E(_6F*9s-0vn~_KQb$c0mpX1DaU;%HRw;B(0{Ub5wKf^m zuhYbIn{<9%wKOJv_y+%gF;kl3w@b@=ychX$@4l3(OJovh820@ zVj?LwH64EODP6UkX+ zA~~*2B*(RhWQ{H~tjH6{i%gq5$}RMK`G@%ydIRTf3W?9kzqHBzf%CJ?rWN5D^FzKJ zISVdUvi6cY@-I;+cT8HrR)q$S8BlPkLgkQMrqB_P{XwC*kZn__4zleE4NplcxLlz| z$gVJu96eW>GW1Ge!PN$mEqI+NXC-6OIP-LJ9`oyaRB=>CdA+@9APHf67vNcM_} zq+hzh(3Isg5zY6Vo}0{)0WI>}Y(q;ux7yH%f;&v)Y9CWxaF>Ck|FolZ9y?m=*==Z& z|D2zDw?gNYHs;=ILo0G0GSGVQhtd;sA2pC{!N-;C#?sSsO(g67l&Q&2eVAyyxV7{W z&(kX1Zn_(x(EUA7LynShA3bAgx}GTg)MKGnONZwu#J>DlQ&aqBX-STST%)he++)hv z3-48k?i^TX@aS`LEi`iU1vW%?VoaHQQpQBGH%%nhsz0e5Xzh4GAzD{nRA}{>Lklc) z`k09Y`wW@1X(G8Iylkcu=Z~o@__K*zSB$}(3WaVNgF6)p-3!_43Oxy#g~%(up=2*X zW+C#CZz>txfwRzl*!+uiMPy1nl>?50OUctu(+AKU3#}#~T%CL&wk^hy6U}agsH#W4^^AB6PNWqV$Obo7A zU7$OSI~8mt*+j096`QhM3XQAS=CM#^0-}2%mTYcf$ia-Z4&b1jk>>`n~Bcj=$SR=d#V@eq>EbWnR70{+gJ> zVMh~{Y|XAeqgTulTTBy&Lri~t9m%GKr!J{A)^V--j&XJ(Rk zCW#%O$>Ii3hqwh)6Sslt;to)!xEC}@JOcVl(x+I5>ZplXDP$oXU!kHWRLvI9Io@f+ zzsUNpGTp$MG(t4-7sTk|BaXMy+U+EUzhKQDm^$!v8%;Pt9U_IpX&g>xYPV)@y?<4_ z9DA9Zm!$U5D8o4{m2@G(n&=&tG4(862C9oNr?Ok?Ese3x@0dQrRL0oDQYzzRE^>~@ z`M8%;?E}@ss~onsl0Ekyxli$xAETF@!h>*<@N+-fHG7Aphk1{4`IK|9hp8m=G%}Up z3zph_h4d0qM~1(%*|CSEWr}eK8SY&Y8MB7-qA_63=-!&L%(BG>rBm6YO?z0DQ?}tS z=p@#HyptxzaJ)TiPc@b;+vm;^97FN;xsxQ0Vmtpg(&=nL<}Ta0hV!cByvPeV1$iNS zPlDqYar|OXr>F-_5~QCjNdMRA*yp1?Y@f6Ca06SGRIWR;%4o(KWFMLK`MUzCG||Cn z?cpwtxr(La<#hIPPWEz1?B$XTFZXM7K2+8mg7k@M$ai%=4VF&=b&77#B=+8xj?_$~ znvkAQu1zv`YJajrtxcotApZJ2ipgTeP4lMk+ZTWLgf620af7H0Y2;vJBJ4C)8FRI=+Hi3;h2;;mM)Mx$&` ztKH1GAlux&j>{OU%%(N_%$3)(vQ*~`ryT9GL(YYigDKvkn&^4WS?sfvrjD&snp2`M|wt_Kqwwt_G@kGNAs-A9{=-}<+^FNZ!iC^*@sy9CeExOMN}SpugP-& zTEEQe7kilUO}y&2R!@9;o9C&ta4ObBhp|3dxjT4u(~PS&xnjz-^4ElAtz{n_XswYa z7}hC@dB*ZzJq0CwO;n(L9O5vh_T1&@lBWtke@4;!x`zB)Vw)eyys2y$X4W z#FjU6NfSYljn4plhKLZ}d=nJI@fnRz89rn2$rJQ!#So^&;%!l#SuVDu1~U)C%ehX# zVJJx}nI0xSN?nPVZ&O!8+ArN7lW4f-|8+GNA}+iI=lZ4_a(R&etP!hVq5=nvx~*G{Wl?ed;g0;AL)N- zHs0)!{%rPjD)$$%%b`DZK%O`;{YX%{r|;(6Uj^OZd5bka0{yb^JC4tQ?_DJ_@J_DZ zf%X@-gJy~EK|NxmBLnZsIUKZ5%mnr0eKi?q<dw*C-wthh?g5EDe5 zGXrlM`Wxs`;>@HBQ6)-}Gw>d*w?Su%)hQXGMr61$M4h-1bfK7w*F!B9$!Qs4skk1r zNi6P{fp^w8`)A$wl<@kTFrqHN%PK|2k(x`U*wWZL^ z(t@BK?F3Mt76C2P;-G%53v`&a7PLq^4RnG=tuaxf7CTC#7OP^LYdF4}G?W}nf=YB2cek13;lXKt2x$oxO@8#SdRX8u?i| zjHN|7wNi;rtyHE{D~;8ul_u!aN)vTzr7E^C0~Sifa>pBmrFetWJD?{zz6U+cp$}|= zr<#>H)UioCoEZWgnY96QR@O{ylW55bG5rYi^emy@1I<)@lei*lCg|f?8$hG(ROcqq zls(f$(&B!bM6qXS<|gr0RyXKRS=&K}yB`Fd?cSe7`lq-_bH96&xX~@LH;HfD-Jq4( zOT83d=_BgT+a&JDUOJG&gEom*vLBp6VNtb7oI7A?6@?!}_>OEbi^BWoa!fUcnI2WM zNqjY6DN`|zG#}HBA23coen0@95I!sLndX`6S>gG@b9&BAIlFV7%K0K^K<=R2^4uA@ zOLD)=?dLtnyTse>{abz#*6tMSWz#^@;n&?_D7<_T+O7oNXpG1g6W`_G0)I!2U>1@KA7Li>1e7<|h_u?$xjO%&o5T);FXixf$BhV2a@-2K+;JD^ z2gyXQVd^O+7|`r8zWFXr$#rn2O+7SD-KAeDK^cv;6J$KMg}c6<#gHGgpYfN0^@+Q$nWEj&{o@j~xyRXK=n3jit7gQrTj%4Q1VB?PL#1oy*2jkI0fp z>0~hy*8Ex-sB9})@=L{`h`F9y^>(KA^4!ZYk1>6YOY$Pu?scZJt={ACCrqgg=|n`w zt|kfpG|>+u-GQ|?1>tmhLmyV(RD?4jp*NoOL)Z<81M?sq;X#l%@YcUfg#D0cm?Z;1 zhvJ=m4sj6EVR&<*19Kw}@dt|ngbxALFiYtDT1B85-m^&W5gY-kiBYiO!2B74@Mu_a zh*D788H5c7=F)J4$HIm~RDfz&=Zg^@4~o+^SklDdu%Tg&j7IzspxE6ZokL6l)x;E} z!~HMJMqEiDokN_)^mjiKgjPQO?O}vHOpab(IgzzU~Ip|k-r=TXj77@^I#0t=FMGW*i zw3ddQ*ecL}iZ0Ls?L^Q+w39%Kw3A_{7!>`e;XCPK1gIuTw9^nC1*(Zs?R3!5+8Ll@ zwGD_L2darfwX+Z&4~o9i&O!KaP~36Q&O>-2s3xXs8$oAaHPXaP?IO@w+Qp#rwM#%3 zYg<8=XqSN=uWbWes$C8m(XIq-*RBR#q3r;TYS)3rwHrWB(ryAhN4o{|T`S_kt*+Ih^6)2?B@M0<*Pz4kHlfR>a+_8K)m^PqMZ^JeY0 z%tP8*=F7G1%v-fTGLL9)GGC#6!#t)HxXDh3Hl6t@EyBD@+sgbz?GENAX&*B`Su4yY z{Zq6fnV+V$Fh5<}!2AsDGUgk!JD8uPJ<0qW?G5JVX2mzJC6BdT8R1M z+A8KxYG*KiTDyq(v)Xp%d$ik`Kd(K;`~_`4^L^TP%wN{rxn%!UZ4~p@v`Xf0XvZ`E zi?)LKTiWT&-_fpS{+{+Q^AEIFnSZ2x!2DzFYv!M7sa~@CnT8hxfd5@9Vg7|SiTPJr zg!wnxM&{pXcQgM%d!6||wSO}IN%Q(By+f~HuIshTll1eLr|5SwPu2G@@27vnJY5%g zlrB@xW$xBTGasPOV4kA~n0xh3=6U-0%nS6L%m?awnGe=KVm?Iwk@-;Fn@@I!>tmQ7 zqR(PpthX~Csc&RHO23o&Xnim9a(zGZ3jKTLM?kFTXGxdX+AFUt3e2zYsd9~im{1|;b^IH9K=JWN3nIEga z!hDhbCG+F-egnzg5`8f9dVL)8fIgpjqaJ1+)K6yKtY6AJq~FARx&8$6R{b^R5&cu< zEA*e3$Mmd0WWPfn#C(-Ll6jYYDDxBb$;?mETbQ4$pUV6c{Zi(q>31?eU4M!B8Tz-( zH|Pa}$?jSDq0GIW{Biwj=1=PSL1h1FeF*bs^-|`0 z^eN1r*B3E=K|h`OKK&}@FY6C6e^q~(`D^+o%-_((P_p+IJ)iko`r*vq(HAj)Pd}0Q z2l@rfKhket{;~cX^H25nnSZ7y4{Ga+B z=0E9wVeW8##$0zghm*Y|=RwRDzR*o zKEZsn^F8L}&ZHuTaCXB4t~coq*2EEoUyQY4DE6R%yZLS3{rC;vxC#>$sae9Gl_hp& zXNf29`Q3mlaVI|a;`1;*L+OR+6X!&lI>N!`CH6NZ|^v`{!a4@IItJQx+zV2?#89fhY+ zA_`Qu$3rMIhik(Dl!0RFy4t1q*kGu+h2o;E0ThqQ0UC<0HZw+vn?h9d8KJiLoFHCI zkJ3}PHr|EoXSN2KgQo86P+Kq%RVfHg3A791vm&83F(-iJokpEut0mGD6V>g(XdsR@ zstLqfh@d)cCg*b2G%Yi8sDYWdU|J<=YR%|*C}SY3GMs%{(G=Ay zgV8WbC6TD5o@}Bv5w($UsL3oqZ9EX~h>6;chW1crFkBsNLMxm38C>bgPU6DWu54CX zE1MStqcP+u>d@C__Z%B)s~BVIENpC0!Ei{0R|diz!TNeJC(;%%ZBTehq_sWJ*2VEP zQ4Gq)IESZ1+Pk8%Cp%631u-);trMdpXrcu%JF4ku2!|Sv4tCW=mIvEJWh@qKZ3uVG zET1q}fjObZXe1U{7O!6rigg6SwegOo5C*=X+qby>*kD6nDz#O?Sg5%Tt*O$ZV)ZlP z@%F@+nn(Eo*o`PQ0mF2HDa>oEb z5qg!u-tI;M47sMrs#rZu^IrOBBlwr#vOq@|{wUHGBrnyaM!twg;Y-LPHIgR@M7x%b z5z=lcoLd-kjT}tr^dR~))F`I51sX7;L=>0a4FU}tZf^-lHzyc%MM5B~F?2Q4G=4DVn-4x!Z&AXY+!~ zsC@7yO@i8hx@PLiU|V$)JZK;WhZl)7iOE5P=E8FkpBxIa7ZcM19kEy_&?W-0M)H46 zLCIUB$7~IBF05=?$vzq3MP_&|dD5_$8OM^)D5^2JR&)eKU8GA)iw1-2BG>_l%6P0J zBqm3~O`W(-H8EMDZK)VoO2?Zc!3=QI}wGb}6675puHamI5jhi1setO-Qnemfd@IM0pD3ASR6p$u??p{9Arfrh97 zYa;E_qmhnw4Am(e(I~n`E((U&SYr%ic=5St8rI^Pu~qpKE6OO=9(Dusf`O)~(J1P2 zEF4Wx1`Q8AEz}l@wP0u)m^yP#D29czQ7v2vaYiA`#ovI&T5BNbQE3?u&W*&UanBi| zDvWcpfK{;& zh2#>k@W_Q;9D`vJUyTt`U5iOBw;ck@7)Dr-8x35A>sCcXX9GqHO{Fd~&>1jhLYEn+ z!_Ys0rk>$)OB-p4Z;dsJWvy`$h+>O_P7kzJM&WBJkatOLpRNdx|;wxuHukJ<+1XdEMg_Jt8R zBofOpLn}THAF6)wSl< zz-W@TW~0|gYAOp<7t`mr=mCt@Hq1=8?CDc58QN*=VN+qmMcV79!u4Pi*(I7Vgt2x+ zmMueDikNgTP?*^kG*!@o$VM!q9atl8mfJ;pxo96F+ABn7x#%hvonu7T7|~fFx+-v| zx~W_=jln%7xO#*jZi2iC3Qf>xf=Xwj=xP+SZ^Z_V_krb-jS)1u<<1bUv_%AXZ893E zzSC^3`Yx12ZrG)A45BU(?-Zy~tBCRDpBFAHreXXf){N=+F(!=Hx(FKj(6NG=ptBtd zKnN2c9>p%LBO0uWP#4fDV5-A&(0+JXpfwc6`o_ESRnjAN#FtGFlW{$O#er61+Th`Y zdTLu^gjX?ROwlOgKAc}SZ2|{o2iuxaGYpeCfle|o1ug{(T`*1{CSoW9dNL-OmNn3) z-W(#Z1pk4)inpMfsk56<4|(yx{fW9pn>%Q7kvp|b8op>~ri%t;tP%amR}@XOw?dww zrl42`AJ;|$y0c7lm5EL)>R8#kL{}GgRse;nieNh$6ycVbh~g6wSPB|~(N&>Xa0)Jr zut%Wvsy=|97lRXHFltO`6BfS4s3og!3pVra!i=J&ww^{@yO~)A95MX9SaPdU`t4{@c>vO@)q-JgUu*&YOFKbjPT!kAa z27RO?g_aP8YO8Uv{c}1oz6d{nM$EW&t&i}T!l$E5@@0sh)s#n7zapY?!T8c z()8qmio^uw$UxJ_;-NTgX_Nvl8_0)>gEeEhEPySxZ`F=AOIh0LYY0&su8nCsT;I-z zB$h7E(kLAk+2YJb=^1CNNj)^pg}{n#ragGQv3Oh2bn#T*h~t$WQ76#(PmefxFvM*%DQeo!K*Q%y(YwKv0 zSFh%%k(aVI_mAn-XQyB>ga?Rs)hEgMkIe=t~b4Ud%d*?k$h}|hcpQ?nVFRb;yGnzL=^lBv;+!Sa zjtw6cZ8~yEFxH3tzRJScQTOy*uZ?^yx!oDqh4!-II>Opev;|k$_Z|e{&FoR_0W42O zu{m77DugYJ+)T^b&?Kl&TpkUFSs!R>!kUXiada#8$#jVt#a6Q!`{FjyKvy=(1Uc9~ z^vzYrw8*~CvS_UIw)Or1ipaXBDccHR?u!#k!#>5hs7jO=NsZH^L>Z-$0_mJhk6{+f zNK2P2vAyd5*sl5Lr=zA+SS3}cTUMcSTfW)^7f#PpV+ zXJfGC-fh%(w~{h@MsxdYFCV5e`m#sHltPZkJ_NQcplL`s`5x-DH!yPUvj8MF3eaac zNZw~T5;hX;P0LK@lIWZ50^X+ZQKsyo*a4DQ@lCPD`Uc#WXu|{}?;nigWXtHFzO;Tu z0f(o2@}YRoGW0ARW*@KOW_~873xtGqv%MqMlBlX8mSw@|+|jxgRIP;_2l_`W z!(~-FCcMYI5N+y`(MSgmj9W`owk90T zCR9s_tRnVMh}8#M+i{eUkc_r7wmK!qdQLr~5D62+jO%E?;?uLuu!3-`l|y3Yyk6Os zB*R!o8+tZTlcNq~rW0q32?a+)AG%@MmD$%k{H{6sXKNLt7&>3G$I$$-ZBwv(^SQK< zp?${?3#elP`+{!U>zlKJt_JvCZDYLED7sxMaTwVp?CR8@u}f&=^lgnK>T0Nu+>|`Q z9rm=%77{NAdaBsGcY-Kk|18_hF7G+a?6QQh#-5CC+;V-4s!;K5N&2WDIiMa#7_lJT zA?n>Muw}c@?Qy|Q`P0#+Xk#jCLfQ8L;h3zG2TDkL+j_nnvqDB&khI5z8K;LoUgfc0t=X^HNLgL8;dYW`H(`+> zH5tKs!k$_bX>L$#s)@Ta5?I%BR>&~c5?Q6L*i5Gxqe$Bk9b;aoj70XsB{>LreUvvU z5=W)|GDTjq^c-xg(eorxd0li-3}eVRvrCLNnvG7Y*a=x~jZ>MeDz~PFcflQ0oGjz+ zn^6@*Xl9TYyNvH{^-x_F#!BBKj>dW7f^Qz6^9%^`8KZIHpO^*7`|=(}xk#*BK;pEq zY1n;>5#1VyF2{vXR4r*{fh>X5Ts>-|GVBpgL#gR!>O%5mfpEA1cZ*;gw_iHwth}d{ zgwbOZcNN`Pq(Nj|n8#K&_uMMNIRyFkkI{xU4O)3{tDVMrJ+3eL2@{h`?LHhGM`15* zcBi^TG>Y7F38o`r%0M=Pp_CZe^WrnH3!meQzQg9e&$C`pHKbZ7EF#%#-jXlZIp)HC{1 zUP1kgNN$pwn#@bD&PH|HMb$sj)`o_m5!8fdNcdjmN`BbJu-iKg>KLuZ<1Vc@Z8KO5 zMZs0Htc*Pcdra%Xq!Tw!dX6``#~H?*CL?ig4SRllD9Op+uEtkF9xOa?1}rwKeE{1D zr%k<#C)V6vc(R??l0BvNl`X+A`+%P*mTFab$TB?`r$VPZydJ3Y+o# zw4o_rP#cU_(T0sQYK)_MQZU05Un_4VJoA>Bya!AQTt(SO3gX!!VF#5K zs+BGdPe-jnOSKTM?P%cO99$jMMfmw1Fw~FXykOW6AVeJo8A7JG5;tz~nQPvk#ZBE< zkj>Ez?u5WJx+7Z2_d+?ohEE-t9*g5f`7GHSI{qbM78Fy6j*2C#!9s}#^-MU`xWi3D zj31!2M<`u-qDBx=F_^A9!W9-cq&DXr5bFXmk7Vp7ZdwRkLuP6Sj6sn;`Bsn18t)J3Xzha>DjX-HXJ zgoJp^i?($VC=E1A{T%rW169umVkk|+N=?t2h?&Nn4nxH87=lrs4iJ!luc;j(F(l&w=iw9lQqnISJV?(YU&otx;lbm{p3p{IEOcX2YgjJ^*h@B_bIdr0tP$k|)NHj(m8JWHLl?3%Okuaw9F`@FF>8 zWBgbVJv^iwIxF!IX<|)V(DnowMibpaQ60g4zZQ304jo(*xkCyHGp1m*u%y@3p8g6AW9j4PXLj>juLm9L^LP_N`Cm4n2cC^mJRON@g;3$H4 zp3;0yjKnizQ~A7<<~*H3OV^5Cjq^#T8L$$~RHw5lWC`cL-sfbx`UG>s4} zF?92UB8?#J-RSzSPJK6kgbODdk7ZIK1xT{UE=d4Z4=2nZ1vs_&XfxSW6Nh~6WO?y{ z=B+Y!$&{c9PgAyVdC7OtH3i4oRchsh3dI`_z?$3P#I5i=e7AhEsKg`R{LDBv3XM){ z18HpvZM(39-B!=tm$3k=xg;lpeK977z-tr*j5VmIzlS%23p0F{>7(qP2VvD%#EhM=x(2>bg25WJRQcOb%`{c5I3sygDA3#%!Sgcs zW|36Gc>%t0g*%zXld*X8xgC$THQ?F&xczBi`CzU2cra-p&uFdr<&4%?qx}AdRU3X* z@Q;IE)}On(a^}vruHN$E8Ml2dv}Bi-oS`SXvr>|CvXeAlhL)^p$?1skYso%6IXe}> z3HVIJ=O}z?@TtRRAwG+>43Sre?9Zye`yR^i zwg;l6cz?=>Ie6l+4Ie)qbH$^*_=JJl@ysc{FM*da`SA(jI~91?-%_0dl~(+tq<%3Q z;x>Hsq654c%6`0&p$%_gi2}!vJPJu8cn3mwV^lh1^yM9x_t@#4bUBrLX1O!#^Fsf<#!!eeO)eO%QYOz6>gEkc&eFZo^wE%zS0ZNMj0$9ai-`5?Vp72(?3)ZPWla zARI!DM?=~r>R@d-LS&K3UxECB&^Zk4R}M4=s0r~@zV6%Ra7tX=qgf)*h@-9x5Ep}8 z%A=NZZ{kM%?@~}+WQyF zeskYt$9EP`${1R?nfo~U?^50^<`gQ$`;p@K*WPEz{s%_x@2!&6@aPTU`&E7Q^8Y~D zwp(SZMZY#;E|FV`V|Mi{Cy&?ntp3;c_b+<&3u@_`eQ2v7RHkg2eMQf5(_UefF|+?o%DD6A%1C4N z-)=NqlUU;3KJ(wCWv@ys=l{&=^NYKn9{ryi3E5df+|f|BKb< z7d+L?J-`s(t%P>wYW2N*1AP!gdC@M;&6R&wZ z5(Rb?I@284MM*-_d_KGlDGxV9{5bQn-AnW1X#%{=Lu zz?*ygl+G?S@9|h#cu&s|(&~9fiBG94HPcvMH;gPTybLOzjG+eRVOvqLDMmM-*?lgI zfHVrEB@4WU%ZCBtaQJ39#MHW$pdTmC_-cnAcTxE(ss2@gn7<7#If(i@aF@JywFC!t1oO;rJ@pvS4kbZd$F&kPH^ z3|x0)&&i%cKgODU4C?N}aCf;<{YkD2mup~>%L##S;%5Z}jmH^y?_N3?l=p{%)Xfw> zo5pD&CZEGqcpQF=k5u?Rk#SeXUqo*iI&O)-2`Bj_#$=Hv`F^^+7>JjkAL4#~C_)D1 zlNT~f2hUAGzC;3)OhkhYG24{?q&KQ zUVjdA_%S-+gm(~5{3M)k;#YBma{v)~lan)t2!88JjKUjPDVsoBV*A+gunkDgU@zW% zH-OT}<7k^0{>!DOIDFs^@Qmavhvx8U$$s6Do}QlKcM?lSQ>Bv+OHWGCT<#;25zOx1 zOHK}h8^A{dA>qzSLWroqu_2QANEZi+903YY$aErUPvqbl3a*ig-K^N14ATSC(`7~% zA}+g|sJr_rXNtz<(KvFi)Oe7=gUBz{g_5IeE|(FIMv#z7o1WeuVgUI+)t}7OOHb!= zj7=rsSo-JkCrODc)lM>oG^B{4oG)`dpG&keImJnB1p6o%8}du}I$9*M(z9fubxA2G z*gDiTd$tq7*`%618;gc-pnGX{N~$l-y%ZsrK}*O8a4L)-9YWMhRY>ZtqT*z@YupRT z+6*={1BM1B4NQW3U{Vr=GpMr=CNoJe=I(wMQN&UhU=B#`UYeYu`4G>AUz#E`G@wso z-B;2@5>VE_B==&pX{ykHD2TSAkl*D>L1D6s(lJ1U+s{q%3XcpL6j~vyY3?d_71q}5 z88ljiyN=?rXLAdHQ&gC<4pXq5gP`c`XQ&OB>5eqY!Qn_lbGv+LF1EYWElYc$QQ9qJ zU;-Neg@G*?(-;XF24lLrkV;Br?}y$sYm|ntSvdrKTuqoklcnfBv>%yVoQw$ce_Bcs zbu|V1Q7f&J|5K?x3{pk1!$&IVPV}pmSG=WRBmXbljCG5>Vkl~3f<dulZELl67Me9Mu=W|hH_H4E=(dXhE zQD!o}MjGrUgXum_1qm19Y?K%7(&x&;@SxQUL1<~v(z&V9L=v2-F*cHXM)RTW8Dx1e znRLOtuAx;pJ)8<##8gB}ARlfm$jGIvqs%Fe*A$YuxG@mbADM&6|7j8!t%~+^QA3j@ zRE!!g%jFg+6mXfXpQS`7yOVV@L=x*7{e!-fU6-CM(^^ThsO%)9N=@K4JW4j&7NhAW z$TmNU^fE{f{gEN#{FI+hbD;;&3@%q16>&HEyL(p(8j3hd4JQCD`voCPG;AcK4%Y}B zA!`O9HzbBJ*_90fDf9;>Q8%Sh`?7bCOI^APO-?;WwV+`#QL;70_~c1XL}lcA;jm?gVeLqpp#d;+R6 zfcSL3lQtW2$jnYgrtU&^KXUy!istoEGPnIQ`*+cJ4U(j99oA2 zaE?%_qRKsyZ|7oy;)5WhGXA(*A`1lHNYbQeYVIrs_%kLuoz-$M}2 zZXqtjo&vvNDG1N2#Vfp=^b$&k=*qcd)t~kre(v(Wt}cy#`1~!;Z2Iu@y!b^UcXeN0 zvT^M6InLx^(;r!z(ehw-ZDh~HN%xQb?#Zs_E?L*{Uh;>}o%+Ucnd8zQ%GmTk>EHI8 zarCfN{cBEn?XU6a|NQg!hn#rOo6}$V>919r<5zw6k3H+2uL-#}br;RK?}hql&;FEs z`F)-5ekOu@bN`Y=g}@K0h<>G|qg&~=ZhJ=qc25`??k<ctE4#_r!BMEM-NzkMz~^|;4YiMxyQI9w&B;!gd1+^??}Rfw$> zHHfc8tcaY5OSF@4tw#68{MZrFEzIS%bG3HfGd6?LtxdYw8CBY?oQm%6(D}L_8h)H` z(EYVALUf|&M}B0v9pM<#ioumErIQdkxutt{_!S+_qZMz=7ZEx&p_{4y)tZ?3(Op!0 z7X@{o@=!_4yyX2z(vuo=8YlWifLpj$qI(Cu%#J1_CFMyF4Bi`19cg)@;+qr z3Oq_TrVkn3p~JF@K4hJo(}}p1+E;#5iW9}SUNSM-EG2cEv|i3-T*WEIaJYrT6$p!W zU%=2e{*qrrz;B{N{;f^VlHhTdXjM2o2T#}FC1JR09}M!HdeZo5xbPokss3;1|KAqa zEAWdP*sG2G|F??&TeDx=0`w~^7z;vlC#K-_3{I_gJn7BAXCc_7k9<*UK2=kgG*9lTMS?qLv>mVESya?Uvrgg5jr59PJ4E3fbJIdhB z>0SYj4N)Q-eqsfZDpxwS?52!N1>AZP=hzrm~pzCL~*>uQHh@ lS!7GLsl3zDgr^heuBKHZnU^eoqE64&@{_Uu{Yz+p{{#IyTLb_A literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Mono.CompilerServices.SymbolWriter.dll b/external/binary-reference-assemblies/v2.0/Mono.CompilerServices.SymbolWriter.dll new file mode 100644 index 0000000000000000000000000000000000000000..0771ccd910c4552e05f4c93fd5360f8178e136ff GIT binary patch literal 27648 zcmeHw34B}CvG-hAmgG&=y^Whre51P@pT6@D3o;JH7QG1D9}JDq;!LpuZ6yry#LI(_v*?C(0;F9 z%lG|0C3o(bIdkUBnKNh3a5Y`=&v)8~3v~XVU1(N7{+I72 zs#s_(9%SZOkIV5{NVKReU&ym4X~P3ZaEF?CKZr?W!^=7@DDA31#Ks%|7{2Eeu!@GQ#YU>e$a2GOH#;H&zWox4O^ z^R64~YPfIytj(sdvfqh75686^*K@c!VALAiZ^LywF7^+;H{d!F*U`9G1k@4jIgL?( z&#SGfKRk4)`wDk0{T|Rmg<6J()g4jiAy>Vx-b1qlo>5Yv!q<0A15ICZ)k$#Nfc#&EAp8_nWS)ZhPXraIl>n!1ylD?cc?J*c0W-!mO zlKwBl8}v{ycs}5sAm`rR#Bg^LTjNnlKNMlglnKnabOM)MBk4;e-93@%@1Mv#XAAs@ zz{Rc1d8WX#TQ6<>6Md?ct#oVacX7AI1bbFV3s5a6Q;cq2T^NKK z;?FX{rlMb6U|tK(`{)EZO!Cf@yoJDAkdhTCT{KPdJ}7zJ@CzNBxh1Y1pWgmag0o=WqDbGPK3VPcO97N-SL!#-eBC_xJadsVO`;uLFLt#RH)S|wPM zUHspDD7y`)ifsc%|zZe>ED5|l!d^y(5LBqvC>*#31B5?7@#3wX8^l^ZUDXs z7y-LbunSCVyI>zNv5Q3JwZNu;^J2k1FW6VRl#Q8!}Ux0HvLfQds6bg zO-~5+2f@BW&j{vrvCQvcoUSfSaCrfz3Y;bIy#kjBTrF^&z%1Y?rSl|xslaOl?h^Q< zz&{DBsbZN?fwKgz6qpb=B5<3)YX#mb@Nt1J3#@Uogh>KV6u44g4p5`5hzc6r>NWuH zbWfnk^njZ^?3 z;8ZC)m6m(GNcVx?N}nl|jovQN(~YttNUtt!5?BJ9N*4;h;#6tYWGY<>x<;3KmjPbq z?FWVF8huIVs$X__PY30GFZb6T?>fLAdyhLL=RRnn(M#S9fWH&SoEp6f=%y-P2BmZ# z*E>PrWS<-9W0786S}d?%;Cj$km&OEMDDY~5Ule$+z()lB9I&rMH4Og^a4H>N!}3oS zcnYA^mNO*1N#JDyZxDEoz=vzj0_P)0Po*E$j3WJP4M&CjH6H+cwPq{eftn8iR@Jio z8)^@OhRwC*UTdvA3zV4xI{~fUQFi7YpGvE0FN1`w?vDbN{a>Sj+G{{5)!x9lkg3rQ zfj0wAB_0J+iARBl?h*RKwKs$3(b~@gK3jVS;2&yP=7HLK0rk4wfG>IXU{%>x2aV~y z0=otF3mgR0=$yJo0WYZg3E(Al`v9-1+fS3|Gj%Tm-d^__;Jx6SL=V>e1-aj;BMm+v zWq&GgKjvrDUgrjVVmd_CLqyn5!`QqT2X1n3b@_7L}x2bO8l zdSeK0w59o``u&X>DeNkGF?g}z#9nE1nR(m6d3C^TVZPr5FE^?!jNS4(^jX8Ou@8lAH9|IaZD^O#Vq-Ul_BTdt>?@&f z8BXjmqt(uPAoNosW@A4Jy=Y9bu@^%5z!V#MIW!!YYGeNe>p z1UFcmzTY-o72Ig&xx+gQ3)}8%3f~wUw)5DY7N+c(wWPoj4+bra>pLqrV&+}tn-+dJ zm^ZO!Yi5S`+Sqp57=FBr`3m8m1Phi-`cdd<8{0}3gpaM zNe9Z_GkDGPqqssZgwHCdSQ)-T$cZTF7_Z#6Mh?#qsH`x~9uXp<9L zuYbkCnbrTp!srp$Wv7Lq_N;!Vh0#x8!LQob8~*c}zRHs(KHqA1A@Y+T@2B{~*j@+r zGFn^CdmU1CSyE8L{zePq**B|O*mkOF{z%hZ7AG|{f4u2#8;dsod(%BOHnsVNrh82c zUXGb$w~ftizPst0HpX-6!!~wOb2_lc#!joivJPwueB#?p7Uy=_)_kDpduF+-=;O`a z@S_fFLijNU77IV_z>W$3z{IxuZbA(|w6VJ@u!k$KCn~TPE3g9v5{X5Locms)m)e`;bcX!kViZ?v%8!0xv5c)qAZdv^(|vjeoK+Ub~es zUPqQOUW1jfuY|&p*X(ldnQ%xN#y&matjI(g z+d1LV$Rr!PHgrW~vWlaMUJzvGbjEsa=eXQ zIPrf)PB5i#xxYr3$w>Y6R=g&K}$ zohIjY-^&xzHugddM>jhU<@PsrLNkrNfCE;IZUc1D9g_YgPDXjx$CUGgvQKh3T}8iq zONul1PY(V+iv*U5N^x@O!s!M}^CIo0dcbN50%}5cVSmNB4+3g*l+YQvuzzEEn^1Nk z%{wTj&jY23767{GB+1<%aP)6Zv$niHWcVI_2B~nbmX~AkK~<(`#Dh3en-?fL8BtORMN^P~4>2t9p&~*GRRUHMjUx z556W8rKjRlX~n7R$^BSGHH}@I03=UN_kpG|Q|?^n@7pt$LA2mNWJt7xCl zUp|Qb7opb&T#z{l&_ze!?A(&iHmQNBD^DTgGoUO1AJPYU{*2If57k=JQg;F*2 zFw(Vjv`AB$_e$Dn2bE3=U0I%cr*e!qt)bGYR34?QXrR*Ph@6WBsv1>VdALaz%kNS= z0=Y#loNjQv+#y(l$W&9R{5%etf3ks8Y%x#I($+1xfOg~!?if$61V-$pSXB9E0TR5wQ(<7YTzmwBPw?Iw}DLs`pD*1Q3rTlx5>!RI&RpK*l z+JiKnaRPeiX+WGs0=jTY&O9#*Ma>#qizfAIbZn4$<^xvIB0x7S2dt)5fF3#nP@^G0 zm+)7adOGcv6Q1h?-YW2Jf!`7MIQrCO&Q_{N7`o^Q(5r}ZHF{2<@}NuVD_Bh*biho2(wRC>JrmBxBWhXh6i zPBwF&s1F6|skLE3AVh}&*3;C6SRg9t$pRB**-IOy;NCA$N~zPO)ag>HU+DcpPYOLL^k?a` z#@7SSQUb7FbchOkg)VD+Bk(%i&{(CjHEQ*{>DI=8&UOpy8L1b22m5EJC2+is=X-%p zy(sh|bp-m5KCIzXy_?PmBy>&V{$+SIj*D-qUk{nQ3w@A28W@J%I1Ly`2hI}-lSSL} zME*9RY!hkQ=)S;K(dY8OB>Gn168$`SJg~pA(Tjo4=+}YsF8wBO?geC@d60e|cpSP_>zANL>?!mwi9S08PSR%UI|7rm zrTR3duXp73p^$L^^}x) zN;sbv%JV{bUMNROdZxg3?N$9aqg`t@78$2%^NnT3k&wLBmkO5X^2@lL^BeXY?B`I`Y-0_Ov=S3Ch*-5q{beB+mZ-7T++ z_56rzEt(&Z{3yVBS_K%O>i|Qv7qFS00*unH0Au8H`SFx-3g9$a0yv$11UQ2(sq*7F z^b)t9=F=Ym7tlwm{dmGW-Q%YY`W|2xZS(r^R6OeQQ!m{P*iXxA{CG0{GT`a-xmrK1 zqh)n|ycF{W;0C&--jBGotig}S^#)*(uJ!wAGo94vqibksz(?27vOq0f4mt(t*XY-v z|ApR%^a7333pGx6XlDarJ}2-VLtv0&R3!^{kdQ z8myiVxUsqyuuy$!OOk@n_96Nr;AdP6-C?FYXzVebGyY__gYn=;g4YE<7rZU_i{P(< z)uBk}@X&igi$a;u#i46L4~6!HsL9t9Z92N?gr*fur!}o>$~J9j+TQeyrbn6@!_&ei zhP%S6!pZQ)@K|_D_`~7r!e0zO5#AsEZTJu2K;-bq1(8ogZjC$?`F=#bt>D7k;U)v~ zZ4ir)5cz2WykH`zQBYe!`8V|bBs?uYjE=xAwxQPG2lvqkpb>2aoD@AAu(@^`;F{=k zz=7yYz~SgTn|@C81f;h{7Xe-tT>^M*^d!JrqP>7GdR776A!Y9nY0JILd2$WYPpW2k zk-$3z{#@X11l|?p+{5Zl1zbjF0)AWSeIz=F^i$C^VBDVrd_GzP{8jWEz}KQ51Y8rn z5b!|s5P0lDa8Sjg))>(}XD)_3bq>d)z3qtR$JCL2c^ zvyAP=(xAJ*y-kv_%45Ql=rf+WfmArjpaVgpn*xU2!3u6z~uZ8U!5V4xzoiSJr zp9MX+X7K#O0mK#iDQq+^n=GqqLhDXwwRK72j-;^Fq725j7h6i$)HTiTg zl^2!@!ix3l3#np%VgTirWDm(^B{=}8qg1-lDX4%R_SEdq4G`qW8BXyfrW_74rRn?JN?=UY*CRIXZFB(l}Sd7#9-NPdpTAC^@ z9Ze^fjAjST%#PgP=x{1qRC)-LQ<4zuCUs}m=V((RGn$IWrT*2ad_h`+R!W~`$AsRS zhtmueCA~N|GL}ydZ79-`%@+Uaf|XjbnYFjD)deTkJ35d_51yPF>(6aWWvRVTNDU8U z#=2+DUv48k>A`%ikXv7juTB?66Pdo^XfmC9o9y_S)WD%w`Z`jD^iUR-v+CmRi+2@^ zBbAiiTp_)=lGK+P9EIPHRZ@FWg+gKoFGR*yCI$x5#hz2_{KdI^CS6veZ>&&E4coa2 zjdvu9iGygOY%s`TToSq{4`+`nk>k*Kp_mxlNPP@ZPfz0gxxD3=J?X3iL5~hn zf3BFwu)Fr9&q)z?6l}u!s4(ZG2!~@BFV2l-i->I!J$YP97%|I@Cre>9CRI6=b{26^ zgj+=c#jVm#ZU;rUIjAb$%3ydXno~|Cx8#UCw#oSLF1c}zn~M?!gm63Vmoru-vO@>w ztQZ;ODS!)g7upLWn^jxMbQ`Wq!V|5`oehg-Mu)T1nN2c=n@M0UGR@mv=t?J(2q()& zGZ{i4O^jv`SF_0!9<5`}LC461BU250Azw5LLY$demfD=gBxrSDUfeHHOeLus^Iigj za8WKfW+NSG%m>B64G1f&suHg%w5BPc%UmVXD=Pv{o<#YZ0BXu2yhA-`&U5iii9Fog z!U{aG6~yCA6$>&FD4iY5j3!g@^)NtzcnHYUgrfOWqR7#JbK;yqLzoz7L!z*O5~Iaj ze2B-CG%B7!Z^g4RO{*!}?nBjQjy~#1Y;I2`^BDTwS=7NZi)G_-@0&&!f|6iS9FjWL z#Fs7ai=$;@WTq3zO^NJaDn2qep28YhG%PWsy%s*m>y~&TnY7Dw##7m3ypTF;GzD>r zuQT4WV)=@AHZ_Dc$J2%Q2IVDEwV4^mR}E5Gp707BEAnU>D|v`q$hW+Mhqvl%HH&dq zODCW^rL(Q2h;wL-8y{w;+KVA4YsGTLnSrH5hAT4*ua^ZEf-U^q5n>37t3-xFCfsCz zS6T%UcTz5vLI1&3GRj5D3mKA;F8WJ@+J^_yL!($mnPU*$zdi>SVDC%vNUXqD72tY{ zGl|gxyfR^}z~Yu0rzMPHakOq0<%*O^p#O>pQgNld;20fPaycpN#9~;Jh;?Pzj0J85 zFNxH^5C@5ivk$5$EYpRen4&Y7Zp^tSUgQOc$~6UWZHmAPDsxhD#5EN>#Xu^lz89g) zW=B6kJK3vXrn0s|j+;GW^@=i&>J~*aCoEgvEUbwEW6pg9FNJ0*mxc>xQx^U!8YzD? zCqw0yijDiS942HYRP*5>W?fVAiV*~gBqhytWP!R6LW;7+A0EI0kT(zI^{7nUD^u&u zsk^On7>n8=j9897@%6kebu@sr5!07-!l-G_=M!VR7@!pc@5hu&ZM^P53lYtRi#&m@Ou1(X1j(VC>{&{mJ6oJRiw4f7itUl?PB2MxUS=j`W=RNxLHl!*$5hV-v+iau zalo)7&V08h$J3VCaP!6u;HVeCK9(ipcEgm}@avtLwJK`LU5Ae+_VC!x$|_ zNz}~)tUWW7!){~4uowc~%|u(hg4(2s*A{qASL+}N%8Z)vm6(bMQS2M2b9Mshn?I=yz?yV$9PACp;kjn}-zE9na91Lm#M*f!_ABY(6jMzK zH%LnGKxKDUD}D|!yn-@))kdL#swy81A*Q{26ZPeudIRFpA(IVaWs>*% z;@aGgR>wO)xTsu*JXyJQLGyBnK5vhr%2-UX1Acf1+4X|o)tn$Q>Sc)vHcqNY($r8d^wVE_*BO`g^Xywg}DsS=1)~1rwCnt1@ zCTY8xoW znGn$$)o>6LPglEqL8Ym34#w+)c5K@DE(9)XccRk4+;ebAMObVt$(WhRGAKAC+6d>g zW6xXO$M>a*l?0JeA*#GuSMvjPP%#bt zqPjyIL2Z|06d|Kx&{ZJg-H4UsH7fg_YQITPr7B2vpDL`Sq{iM#GK$O;$G3aKkKe))M@zX5R3g#m#H5bW& zM!6nzjkz@|(@Yzgw!wA*M+&qkg%zfm?rtxPWd~QP)tICgTT3*a7*v5CEY)!KSSZ>n zD<~sziDz+ciaPlFTcU8;Ssg)`yW3V83zG4}7zaG&siPVA|CX8@&fccNOu2436E#mI zD}uKjZS6Q+8IsGvv0yGHgGbUwYTl_D@F1Z z)h>_U>uEBoHDj}R?=tTlRUV^=OXxMocX?{7JbJUs;{r8`D+Y8Lt~siNKEu4vN1iD~ zUt8sAt#*4_xq#k}j1D0Bbf!$^)B=!}fydIK*9UDHTs~tVGD5hL7NN^ZbXbXAuCKx6 z_d&F7);(R_jmajyfbY=W#6|B6#E#$!;A+Cvf~(c-F-j#QCIx0w8{R0GC9n zZqVk_a=Zz}>ZU{;Ryd0{F06W$X3Vh|YG>?ro&c_tG=%Mt5gEO}2aryq#*>jdhIdJF zcuRy$eS+ve8}+5Ya~$k96WYuImV}n9U+In>DVawZoK=7WCyvl74UBD{!CM?`<)j$( zpQG~tw4M!3=Hi+sI?qJ?Z0-c;2`b(5_vqY)UvA>oA4+$tEB|r!ep}sdJGAb7c(+;U9mELY zuvEn8e1~Ybv#eo{cpjcr!S~Yez9B?_mB0q@k9F?B`&{o3t*;u!7#T!w=OyADdQ|`8 z`}=L9`W1cXS)P~hLdQSJR&T4*bxxhy5ML6|FY!*%?)vfCm80K3$JgFAQh#;4hG}>m zkL9BH-xy{_p1n6=jNs4{z5fo;`^NEl^IG9-b7a3mbiDnobYx$B$9cmol^P!$Gv6VW zy{S^qf6eUkwqt8t|5uKrUW}@oIi}t*qw3m9yT19F^8du_^ET_@+s5n0vpAkoV$>Hf zmoJfc#WUwW%SYd44>WFO;+-Ey)d&{}F{*f#6x7MyIMjC$hi(eae`Tea?wH@A! z8}IqmtxMfH@Ls>)@2`$&T9Di^yu9y=QIkFwn1^r1W(afP3lo~(7pv0zdZ*s)o(0kP zA|bvC8M@_ze?5Ha{!TZ)v<{N73NrLlQO4(nNCrNiyNWZp0O%et7-=MGnV}X5KPUWN za{K+!XcWKjrD-mZtC?Kwp(-Yevib~lo9~Uev{q;;8Zs4%>hq-~Cg)nEJQ~SaYgzv& zt2gF}X|2^pn%mo24cJ=k^FSKf6(m+DNI?xMyP}NvjnWpb!$>Ouy~2+Z4%8o1mX_+RMi?DR;odq}-zZ%O znL*7bDHLL&Ub@&MatcK5EDd$l`t;I=P4Qjky~6{2jnc=tGjx1s!=>Zni@6{nfI{lD zr5CF4NeZ{$$K5SwCQ9GQa?_`)+X5eHM(GB%AzioY`ov@@hUWsx!{;se6L&=xuyN4cxhAd|b6LFw4gU7iMGojHnTX{YnpN23o|$ z^l8e1M$+wd`J_r?ooWySyELO{B+dIeuGsI_=dfNz(&KfraP}>IMzt4T%bFqS`I4S* zc-{I8@!uKxeC6V%oGxgCp+!cA2gj0b9M}1N}3e$6g z*TLhw4L+EIKhPwK|Fz`CH~e4?my5e;naK+@;`K{tin_Q&b#<*O02gq%0!9@7IreZ- zAG)u$IabR^hYv@II9EjFI9T-S{l1_V#r+sIaBF=!a`fqJCcWQ781CpeF}M-+duv!P zAF2UWEV<0*bw{CIvQ}&|z0T{2qBwBXLB?dE;0rw#MPHzJ76=7>9~GbMWv}r2&=DSQ z759gPmsTDWejm7M{iq2-Re(Sr!Hzz&BYPvU8l(3R4HHje$6>=Q6fan(>&JQnu$0-! zMu&8EhtVtdUY~*gU65=nl-PlY!R2(_X!l|?7md=#YP|@#942(Vnn{SkEkxkTPbk%yiE;tFhI&>9khtVO1LmcD04j)V%g>t>j(+jLBiiY*VH*ptN z>8$~+)#$~44iB(OHJk*MaEXO1)mRusg6mI$LsJfy5l`S)P{)Il3t*r^KKjy#vaR)L zG6Zncj8;q*f1b=j1Z0$Fb0wP5icCbW`k31&?M1Ws1FekGHng(Ci1{?V^cBRq$6BlP z(hpHjBdT=bdaR}bhw~|pClHglKp^Hp4SQRC)<2&qUP4W?--WQnm53sjH7IWOjlBp) z7{^BGLkMxAhD1@V*@tmhx(xqOQutWlWfJNTdYeH-54YAKE|#9f_s>edz;wi<(zDX! z4&?(JFA<3_HBaLhJWT=+!}(0;sPZAaAkif`YZ)T60#;W|BR?*ekfI>re1DoS!)s6? zBpDq7dzp}wWA3&e9&YXY$gAKH%T*K&dbH$bu8^Klb&9 z$G-Q8ZKJ>N?El^cPoLH}x8Xtmj<2`<_K}NDo_uzF@0OpwR9yPkC;xoJxraTo^hXC? z>bRQ&grXL=Ipzed28BmzLLbb z6xHxyKA%$4xhrr+ydEjMPK&c|KDWvs9i!9eT&x?L> z2cD5aSKjMv99O=qDa&(eiSqNfRxZWo^VTDea=V>+l;xn@30!XiC%D#gljPr1`q+a@ z_dy4Kurt2(VjJ+6^WRQOXm{jk_?{_0Hp=2GZ5Vfcgj1Ga*%zF%`y@9nd&DKMKlgVh z%JFldF<5e1MPHncM?>_URmk5c^6{=Xcv3hm=JPt#Lc<`K0)IGi| zpY-wbsU#p??t6=}G4T$5p0yml$^OD82kJo-mvi=&s?G9HtKZRHSaLaP;>TwNSUVx@ zt}I*8&vSV{IE-zQ_Z(ReAGv?$mLdUXyXYCg9t}-G0Q#hnW zsPD}*TW9vn5vZMa(ro#%<%S^@FPS0&u@&(eC-T|e8Pq~8*2#Jt-;(COUJCn&g&X1& zhiWYGE|=%IUO^RaX0JlZ&Z@;T2Q_tlj*_R$LjHRD%B>BuEBO-3dI&yvj0!8 zlKR^sJ7@n-g#7=q|8H1;|6&7vxdHB5*&dnhG24>dZz!l)pGip10bGqJ z9|!EjQ>Q*W=U;(n7sq`$POer6-+k`iy}@gm@^}7~5dPaK{K0~!;@1F})`1JZZjaHH zha43F)jI?^&cy4}4N)o9R(=N0v2>|jZAgl7iY&CjZ5 zV6NxWPyEycG}2_A=eHWviw{_>$Pl0G$m4jB3{xr%uENMGv08%X%{J z4E(-*YXKQez&Pz&0Rh^(;e~A+!?TDMch50Y6)F2wL#pHj3d=Z7uVuUg3F|BW)h@Hd{{dZpLq0 zXz&XqgL{P~TXrf(*MCGC+7SCQ_{SgBXX7NlLaSUOc_Mv!spN-qPy|U|7Hk&IrM_<8+5Oa?#z0k@@}o+iOQvG zV##n5Y)+&)*c*B%Xt)7pmo#|Lt#sWC8p; zANekqkVYRPzr+3=BpPs7)=I%QI*lBoShM93lS z-&J9v-n5t_6Yisk8kaUKXlhzS8Sh5x4jnr593Qfs(G(mS1z%sH|)df7d2Zk?Myw zkmK=bLX+j7{}fcK0h~TZsSaRn9r@uGW;RhKAGdV z7v9eNOQxIR9>y8o2CthE-n(=+ec$^7ghSbP>DiRb>C4HcMFaYB+;q)=y#w6Toy+of z=Cb6D;I5#XUJ7#fAA;U|4i6TbBsg2}Zo$_CeFZEtRB*E3v4SfKq6KccpnyxyFJzgq zg7t;1g>HJRkjs5du&8KEk(i~IJJbsb%Lh| z#szl?{#x)&!9NQQFTG3m(J`g-OMTQTcn#1^FCgAcub2J_;S&dP_`d{;%Q!q)aF*bO zKp%a-jB|Jh=%yrE)lFxI7|#c0(~m+w4Q104f(HfvD41K$EnhA;N^p|kqH>l`Nq7s; zO-m{`x4w!?in8gO6&y2Y5Vye9g1;H`(I7WvhZ#qNS#qV|w*+?z-Y)o4!9RvM?dO8$ zR zx_UJ~vB6J67_p!*BtQ)^c*CefC>JD&CK!~LG*HWEI%R5=pr+B;lq=Nlh1x_xX41Q$GPTWABGe(Fwu0i?=4zbo7Um(BLZKd}6+(>> z>M1%=sJTKtO{;`jA=C@hEYxX2y+SdeHVXAIT_x1TLVZHlO6gaE%G5rkyFvNsR^e%y zq8=0~OM6s!FM&FrvbCoq-DjZIY1!HV$uq1^r)8jiCDcSvE46_3sz@#awN49ae-dgV zs7z4r3$<0Ku}q=1-vPCmrWw4Ogf~t504;`o(C^Zt+8l%WC8%9ASNl+Se>SMU36+_l zcpnKh$e=zJYO+CnBGlpxZtJ<)--TKw)O_ub#x|Hy%vQHh8=&Wanh$ELw$z~3mYLKE zz3VevbVBbrg4+bI5WGR~4#E2b9|JD#eO|(E3jS3v-^Dph5^NHT3T_nKCU}eB{er&` zJSg}#!QxELp<1v(Fe-SK;FW^62tE!B&?}i9pxf=ir!zxCTE9C7SS&bLaGcYV>EpzkBNu&dlPpg;`w6Fu}=LVJzV0 zXDvX?Vu^`lEk?Lg@N|i}NK$=Q@Oy%H3O<}wgBkt_k$FCADN?$M_D5bG;4hb z^011s+5Q^J&Hg&oP!%vhzeY@e8bY)EDwRePvROlCKTgkXM$D}2)mF>T%RUV)zf|x< z!3fZ_w>8jb|qc&p%@g7*kMAo#H0vx2`B zd_(Y$f*%NeDo8n8x>qnyut+c@I81PY;B>*`1(yh(A{Yf~)Si<7Dl7VS&U%Ee$>FwA zHlXb4#vJb1yK~syek$Ro1z#7*wR4$oDG@#1{47wk(dL5&q>VhB>Wx_W#)Q-o?Om3FPC#3n2WJW zg9MKf94~l`;5?v4O}U$ZD{{HkExG3b*XCXbJR_Iwyia7lDLG%B`z^%$1UX|Y2eAn!V)njpA1kMmq7xLxoL!KVe^&*S`kelD>} z@Hjuqv)?fB6!;O-R@(;bg>7{B8M_4o#No3M*65pl_GXtsUZdTT&y5nkO~UsIJ|y^v zNUBntslHtPN&f;%lVAC7L%9b9-x7RZFeAY6S%N;npkRsMaKUkc(*$P=)(b8XJVkJg zU{bJG@O;7Tf>#ONAb6YLoq`VwJ|Xx5&}_HY0_&mG+k)>3ekk~NK?*Y0BRD{?KrkdY zMDQrVaX>TA+TaMJI$Cgs;9S85!6kw#fEuj|a-X&Zc?L-Y*&5Fd{t&n|crWmFiMdbk ziQof>d0Qm^68tIUYs-p5fqdEnc{CWRc6FhJwnpsE@KnVqI+JQVX8Ppe`vnrgChN*WyL;Cpf5?l@p4xEZ)q@ z+w!mr6U{E86Tr)HP`Bl&6N?Pm0blDF9n=phxA{j|yay{+I;bbW z8*TAk0neu1uiWDwWASM4-U6Gtr)aOg+T!I6KH#8A2k-TdwRpq8v#AM#w-=4Gcy)s> zb5IMxtFd@1!LzBB!GrzdEnfTJsDtVryvIMm;#~wiZE6pAwHEL0H0seb>g6=*gEUGX z;>@KmjjD1`eKcvvO?hT{o9LVFZT^Wy>6>Wgkiiz!M~fWPCVHdb&44YrV#rHHCbflH zhwR9+sWXQ}tz6i8cH~VmN_Zn{bKzjWO>HaOV^LeYEAkH(nLMW6D4J}g+g-TVKgDb% zy1d|zMK*Oy;f}ni7Vpl&4~k6c4ejB=d;LcnyjQhzhdksz){=a$@Q+1KYDE4ti+8B- zK5G{;E+HwZ&UnWtXtUJIq1t&ze|em#{x;PSxH5v%D?d zW#BC|wf089v#Ad77FoQrz_Y1uRt@$qws=>iQMXk^9lU+eWr-#ET-CT@oBCbVLt1tZ-3_8VS9^B-euG{?2h6!M!Nl46zNX0s4nDbQv0;^!yYI$sV%g_z0%)qNN%Am z!&dq`taLlv`-(d)YRj;F#R-f07O3?GwTZ48_C)dN7IizQGYx7pJuvK<;%^w#KJ9U& zgU<16rHZW_oW})PKIg+f1Ji`@DFo zMHLUvEV;m-`e^*{V99oiw|IDI$+s=u;^9>#ms!-Q!}t1kT2y@asuG*(9e!rX6&CMe zP*+*hb)c@csC$uamqk5-Ja=2vbKu$3??C;R!9$IP-&(TALG3U3o<$uRKG^?#E0^Gi zCreCf6Ac>iQpsL}w~3Adb+eUj5~y1Y>Qbs3@oLGf7O!c58`nNAy-bns3axzc}^l}k6MA6X^zA>G{u zbs6m#*;8s#o9X(In@jJp(mgoxih}zs>UmHP7}S34uOn|P{fR|o9d$*)!xj}f>c-N2 z7F7-2BNjFNs2`R-YEetUd&;1;&>Bz&EUF9C(a{04G zU3=6v|GO4-=TTz^n$&)*SpHW0p21UEe_%=OJ8DOsO+D+N_7i&sledr9*Zsvvr)vA5 zL8;n0smDq`a_};XKXp(S4kXR+S!kv012Y_yzu0R~`?6j+>dk=9qIivIQk$g(O{$N$ z?siD}_7xAdBu^Q2sA!l$?Z@1)uXwn{)I6e z=81-+((~&E#d=;}W>MZPqi!v0HhEqy-KKbFV^iN6wa0H!$mLEu9bG+YzrV%Ig>D~p zZ&|BF{bbbBWl@Xz1#*cQR3EX0m=tT4S$vu)>3x3GV1L}A{xB+PQJcK~81?tEE`ztp zn>{*NYEoOgy#8Egr7Id8bx=b`@9`%r-lWlc3oMG}jXqSCG2bhbk>>hE>%qW(Sy zwbFl%MXesa(!a@~ZYY==+U%ef=bz`GnnLG0sJZ!D9n^}@1s1ho^or0$7PV<~XK0&6 z?J3`pcZo$^g4VUE?~dMHWK(Yx^oDHe#}(T`ms;t5T(Kg!!$Iu`UFM*^7uso2*Nq!YuOXHr{e-I%%gH=5~a{g~%M-?t>s8S`@JCI|KV(9M?Q`D5M=-D**nj~QBcyG30; z=8A$l3`%*1ADBFhza4oNMO|1!TNHSQLKa0o9^)>*(@X~{zx*zP+OIt^rnLM=4&Jcx zyG;tYj83B_l|NvnqgxBM`G4k+oLg>Eee@1m>E|X-cBVGPJ5!6IPsS`Qf5em|PxYN; zHdR`^Bkxg@C$+UG@0jYIa+^A~dUdf)eXV+%|1mS2_r&Uz4k}iCPWj^&Z)5cZ4(dGc zeqr%;f@f1VRbN{EgvI+w^_33l8StL8c)tVBrrrndmljVSd!>WQAA4!}Qx-1_o=uGb z?|{WS8a$ht2j0^bZ!vf_brN{bSiBf`Hnjn~XD#0O;Mvqp@P1|SZUE1wel+&l^5-nx zFUIb5P_KgbYm4^*cs7+WZkzvki&r#mrGpv?-U}9Q8hAFf7`zuPUMqMuwE?`BEZzm+ z+0=Kz`;EoB6+D}IXxydcFI&6=sipA4vE^ttJHQW3L zEnc{0rGr|L|HJZEE#C1sef^zDi6y^gQaB^Kx7?glkpFE zCwn%vBL901>iGP}{eLj?)GjZ$&HpEhVm<$CQFj*p&~Hi4d}+d>Z)HWt2bNpfvJ zw5azAZ*x$G3Lp3X&EmO>4){N|C_d-=#GrWn@^bm#P0Aau*$uk<%jE-2U8Khb zTNL+^N$vM?ub9*pFZY8@am(8jx3x*__j2o+)D|zdr%COnqsEV}Fe$F>XXRC9=~DNh zCgmM8-di!uqS&%*iuJT9*3+g~Pn%*rZHo1@Db~}bSWk;WkL99t)$*+8`e3!y)`7}N z72_-_UOByDyhU+8Oft0Qet5ZjvRMaEJMxZmP%Hfw<=r@bn}0?cFP*AO3Q=*P^zMKj5Htjo;&+XYpn!ld5F+A#3UpiQ+6++#^@@ji|6Ox_mnyW=B{be}tTo4h3xoF$ByaKK8p ziKa~0k+;As9n|Uyz6FX~Bl(P_K%L4Z{BRb>d^t8bBs(OWk{r&E@Ny65c22)=23>#{ z7qO%!T%9hJaGuDI1oE98PP@wyk4r}w(N3-=F%>`;?v(Jo)K7u#e@RB=taAJB;Y*_1 zNZdlyNFnQtumkT0S2wt}=1Ly%4oM@eov@G-Q#B;mByd|wOtn%R)++h~(0N|JBtWklL zk48`8=Ky?%gHv4w%)lKEZm}DInRFY_P4@yl^bpWXj{tGU1vaCT8Y$eKI)x=qI}8h# zm}Wt?YP24ZZ%rLJe6K@ZrBb>574aGL51<9$FgMsZa>UxX^>`y`dZ z2PCZ0o+0^f5=%S~9nPM}z z>y38y7;Ww>QH8l*)cDe*j}9Mermg-flB}mG|0mJvU$@)$zCfPs2i6X*)8G6)QV9A!lFe)($`*YLNI_J~bU=C~IlXbcaT+=fv8IHj%G?^)$5bm=Q^NQdbK%F>Vqjx0y zfrPmhy2NCViuqjPmHwH7SYFjvd39dBSgR37nC)4o(IT%r=S&H!G2V@^j$50Y8;AJ@ zC*v3O=@!ViX`4v?a~ThANONv2$kQxE>HmP_;OvX9Lil;niqYAU=_|d;FxTiMsh6R% ztoPE|-?5rXTRlp@a7+f(As-hhOR)2?%2hc?&j0TEEIx2MT1(qOQC$)00 z!{*vR?FG~>fY(tv#U!79SO3jY%6XDjt1>-y`kV7 z37?OA_>6xfy;!gv_(s8ZfbSx_l?D`k*Z+d#^Qz$6z#VzG=`P4;O9A2&!T@UVJs_VC z22j>*Kt4eV5TEr0aH@B&|9#@qynumxmbaBYF5Hh8KFP!H8E}FZAU?U%G}e5blo+D< zMSJ`qT2}N&(dT`CK)4~g2Qd#x&XwBJMIZS`YHt)}1S&N*!Zlh)ab=*CE-pSQP)XMn zj}6pmcNNzn{L|uNfKL|B32?o3@b)_r)JGCIRG4Adg$4+59aO{Ft~JL&e)dAJ45 zJ$niIt}%Fz;8uFCuqhZ4$*r`%bU#|`v-}l7wyslxH);ngZF5B`f-oOCn6ELP{Mq2@(^@e>93MJM+>rD?Z`V|*x|JNyMtS4c-c>bD>c?+ zG4K(@j4j*dKOk*#K$~9nWRUIcncxeO+X4D|Sz$g~R|xoC;fVZKweOUT$*-3@-t+8ACQCSTn^YW+U*U(#K(}8*Ua|NURi1xR#uSs|@@b6_O0NtUJfx%ESFjcY^ zSP|k>wSrF;PtWK6TIpY@%?Q02*h!~^lKD5%n$RAMrevrmpIf+3G~Ak>rGGPY31VtW zF3&I3e;qoxAfTh=3r6big*pl<_0L18f;#AP25?sS`32m1-$r<4`4zy{^4-AilL5X`O^44E>)D#5XWM*|~TW5rJk zV*1L8E5*hhDPT)`vY>|6R&cFrO1K^FD0vn!e=mCxn5sBf5Yf&8uG5tc{G_ywE=O)7 z>BklCB8Q(K0tC42z5x8Mamw-Wan zD1Z~s(hQEN1g`Xt1U@=wDiEjKnA`W`x2InEHE;mwnh(EXtOpj*>A({Fp3p}jx*Qm$ z9|EiBY2XO@3ve`T!Y_lz(c}yt)zV*pQ)rLNN5|5%Odrjl7l5^-q9ZbW^U6QZ&!!qmA^D z&x_x8?#%PjMRXVNV)`-g+w>sta{3wYDtZjKi+%~bmYxOPKraCI(r=mX$`^bv3$eFl64KXLWqx2*?(A&tulYg|^9#$^@gTvmzBIfwMC^TE~k07vLI z07vUL1IOui0BiLh0jKEq0gu%m0?yF)183`x1Lx~c0UPvR0T<~n0+;Hq09WX*0Z-Q7 z2A-<_8Q7}-1-M547}&0V4(!tP0xzX>4{)PC0C=Vz0QTxdz|DFY@O(WCyhtAkyjVX9 z_-%bG@N&Htc$GdCxJ#c7yjGtDyg{E2+^a7D-li`B-l;DKzL&u*@Yf8k`^Onv_s=r8 zoyo;5+~E3pA@p}~4oh7v2(NIh0iNvY0G{ef09#!ffNNZ50^41Ez%Cc-kaBH7c%$n= z;F+$AfxWIBz|F2Jfakle0bb;~7I?9Xwf(k>wY}VRBVw*{-2&X@`T_7-*WJJyT=xU_ zx_%10&GmEOovvR1?{*ykKIr1!+~?xDJmTWs{Dq5a^puNh^sI|*=6R{nZ(Q7`2VKu0 z)oZSofN#0jHvZ^3i12%o>SNdI2!H0{zNXA~5O!t03-o6G6*wUC6QDoyABEMl)^o?8 zYD#+U2A<)03b@Jh!k|{lhYb(W_Gr)f_h?t-^#zAyaCnwri{Qh88JV*@*+oMHX9>0l zZW7!hnBgvim1FSM_&&kig1Z7&^iQw4hkwUFc% z`qVwAuu{U660VbQorEJ2j!3vq!hI6nE#ch~en`R(N%&O>zbav^T=FlM{3To|;W`P| zNjM_mh=ltj+$Z7P65cK0ha~)vgkP2Ls}j~KB>xJ@U&56Vu9I+`gd-A;NVreJeG=X+ z;oTB`NWu?E_*DtND&cULTWp5l!BG+(!zG?7*eke8@Ik?Yf>g~iVZj-KrwaB8?h<@Z z@Sq?T5iBn_L-16=Ucp_04+q;VoII79GM!Ct{#f)5HF6r>uF7n~t@s$j3+F2M%{ z4+_$Fkr$jHc&cEp;4Z-j1rG|+1d$h{W4GtQKIQ!%{QFQGZ{gh_M;C1?y0U0j(RD>P z7d=q)aM6=R4aKX9dy3C1{!a1r#rGD!Sp0hNpNq$poLCYoIj7{plAR^jlw4bKf61>( z-Yof~#9LZYI=pmj>D1DNr6-lPm3EY#UHYxk%S*2=eY*6e(sxT~;DCYtfkOsP95`p- zqJgUieq-R318*4kCguuUwOE^uDr2)WqEt~y7Fhrb5I+i=d*f& zZ)IJC8fuhhBIO-9VIREl5g52O>YS6V^kvMuTY` z=G4;(J_4!ELT(EuwBsCQ<%D&>X2Grr-3b37zXy261jfx1&H`=|{Pu)Cgm;R}UcvhX z9}|30@DG9?3A$@Jw}9ZFT24Du!nL*MB3xU0A#iFfm(n$WbqLTU!1@5E>XVq6wU;5> zSbHV#q}pA;Hi^&6W%)}+v*f9g=NeT?E|-#$vNqSU%=X&rfH&#i2VNn$;g^{lBl7pv z{t)5)waops#JnOgs@Bf%pK9-gjI%X95c$ugtN{~$0`4FwysomLXR zui-?XPAAbkgii+QbPCl2zfNC6%qpOc_4Wc_1f}VC3)5m?3rf(i0&hY%iV`$h4a8Gg zl%Qcvz8v8gO3>*vt3k+x-z)~%a z+y(;CJK8#gLqPP7mPEJ$h~Ck<5e@@&ylHI%!V7>pwQ4;GM}g2m<97gx3M_99iSv{3n4rrL=Pq?gr|#UgO{YZvg7FQQL}e4^YScN8Shk z)agv^n}|OPsM9wzej~uyK%IKEOAzh@;_iWVDZ-n8I&Ic=Abc)Rr!Crd5Izs6)A`y? zgtr29x%;co(U+NNED@V9_EU99a!_!6K_+qFFiUkcRe+Zw+|U{2ic>Zx5WW|v(~q@>5WWwn)BW1R2tNSS=_lIH5PlGd zXQtZE5&kJqr-!vi5#9&X>1W#G2=52#^mFYAgdYLo>4x@8;N#i>#QXxN)AQOhz!$V% z0bkU94SY#^0r(s3CE&~2%fR1iuK-`sUIqSM`#tbA?RDVm+MB>Pw6}q8YJUK}rTq!` zw)QUY9qoPKAGE&!|Ehfm{8al0<$ea#>2vK9g#Q85Nz*?C>iXxv4E+$$rE40jUC#iz z^-Q2g_W-?mmWCAoFpDn07^$GEGftu!|JVJm`!5Jw9Qb2kX&7_6b~130)(Tv#wF8%E ze45;(xqA6LTK(gdg?|vQmCP89|9H?DlleP6?k*vnaawq@$ko6HjmPH<@(0c!{B-`< z1@YGI_ULq)74J-@lGG4yiL^&)LA*0wJv)+$R4;8!5qqOCRujarxN>1<&G6N?gRNi^Bro}%?U1XisQ#m&0#NShV!=!$gq zNIZs3Yj=wpTWqt5SlgNu&E06qpO7>|b2rY7wMR|rgrt*N)ZN@3Yx!EVXK8$Gw3F(R z$!JG&dry7MltznK5Nk=qlkwH5RVT!f-I4aDRCjAE{!iGemPeb9B+@iHnvAt|!eq>{ zxMHj3r&3+%F^l5K*v9mzrf5rdB9`h&k5y)c7g4TS5@~LZr4}r<__N}P_L!}PVGd@& zid@Cx$Vy?xiIRuKidTszdYYn%^|6*{@-Tr!WCIlWg6LJM>ixNv{{0z;Ro76?D4qQ# zhHC#*&UQBvERS`z#y2Ea&5b8I4wFY4MX9|d);bHXt4-4UNODao(hS$G5?9-vB1uUY zu@alrod7}VYhf2mM+FxpqFoVWsHiy`(PJ=go5wK*xvaA*O?YlJ)w0ImEmRIfrJL0r zPe#eet7#p6v~Q#{vu9c|HUpSd$j-havhjpSVix8i{zO{f7n6j@#=~P zSk~1FPtZ#3v1E$s5{XDp1BdE6ySh`fusg+HLKxvC(NuS$Q>AW+V>U{)S|h&2nq)95 zq05c8)ULv-S-aFc!L>nok*0WeqD2LpBWUF~+(-2dwbw?9D^_|G5Ex{uXZ+&iwwkMZF!N5e*YDO3%6A_r0&~J{V z0dnWbHAyh9cmi|4>eX02KoalLjYc{eqMdCiJjD>AzOyyD(FkJ{V)db7l3ZSADi&$4 zYY`6+OQIf2qLEgZk!lVh8sd>wr?%G0j2ppT*vJAwIU$*d98)owy$Dl}@;YlVw*WOQ zsB36gu&{B?%2f;M8_8TiIiu@V@Supcp>x+O^J4p?`sAFA7+FafSoKNFJ2XGm+6wov zBr0QSCX5dy%#5Xo2P>IYP-}%6A&S-7-1c}RHAQ_jQhf&-2Il4(hVcxw42^U`Jl0BL z1Is#NXt#P4mWr*8!BQ|pjp7VP!1F3JY7}wPJFqT|)QF`*BG#fL8r4@VHHwZ{Lt1LL z*_k5R%ojmNc5RZX32V-FRUpJ-k@*dfElIx#NbN)%TaR(rCUVx5M(88F06Qc13Xu|*RG zE7j43G_dHTkyQB@m<%dogqK8HqOgQkOd+g1sX9^O#A}dShY9dK#{C5#~fFBCBuqs%FbKm=0|bQZ9&f z@{BMEZW`*n^kktsWqk;*W@rUBMa8)i+BqY@TigY!`b!8y6#lGz7tNH zm(oWPPy;U2b0i+zmf>NJ#8m_KNF3!ej>LgSIZ||8dkk|}>ycQtLplnt)P_V8Pk@JWXF?%f$wd=K?iJ?Gf|<1|gFSKvs`tM*gQk`>(T>O$^Oy1x z<;d*1_V)OO*)!RQ4llc5R{iY5W1BD(U@FnX;Vd37Y@|mltJ&IwEAPUCp9d@69pAE6 z#tQ1GP8DPUky;a-)sCT$wNhskt=x=JV@#~nsYncwmS`({0%4q^jp27>p_7#DR+RU| zNtzYuiZsXCc}Fq3r!&$4|89Jb$1-AlED`TytA;wAm|fIHS`?TwXEugB)&&IfU&9lM z@?kg?fh(zNS&KP}S7*i~3#Y>;9J4XI2rw-HnVqp7mdTx)#t2FwDt0!GKVt1v*PaqS zzIhcNNs-lcMjB~&KAlM=aEibS8XsyoAKdDF=HsTm&i!1h`6ToUbS z??F@XQiu3}gew{E#34#kvWu%P^y<~r$a=NY?3qgz%_9C_!pE@-5XUY+qyXaBg%Nja zT9Z>HTr+N*%vwBKtm;O0sV(uU4VV(uY9>jmAZIgPr!;Q*FDYG#BHp5+F|AbhJT9t^V)S`M-)H+hI4;L0TpN3@+Rkx(D`{_uw z(dv#AMfj9N8dcWq_9ow$kc_6r+&*DE>@l^fo=+us&qZw}g##~Z<;vSE*h^fMg~jKZ zcq?@q`vZ6rr8nkVJ}a2h(FOaJZHIAa7Vla$XC3zGY}c>{SU+|SNi~#dY1~|{K^jY& zBy~oOJ%}NpYR`(9tI_UeEJ?Ugkwlgo0tPWR5$`biV@WqgLWgX3jF_1{*!@YPKogv+ z9XoyXs#VDiG3@lJIwD=;Xm(5v?=YdCI^JC4@L*SGYRT$(Q5+RuT(UZ{CgAljRGHZw zYvp)W(7$+KH&R(e(Wa#7vm3!Fb6TGYxMZxPGj0QX-87LH`sJxJ@zK zVej_2j%^?@S+v)8qC;Y>*cc~dabxrO2nTD5gj9?-Iu2`*)2eEt6|wPFk~~SsVS}_m z9Br(uCdt;k20jWCw=yJ-SQ3w8>D(U0+L?U;mN!Y*Cw7z40ZZdlKL;)nYVl?j^))Cq zXOkmguExUEB!+}_dnd+a3SO-vj^(`is!N$`rUf`NiY5-PNOZM%Hror&%jZKoVw1))nvPwRh^U!J+cc z$?0c|Ynjm6+R|D(W>RGJgfX?zsT0ObnK(W&rnaTIX3~_J$i(KF@n=z$3W&#lMwiczw!>h!wPU=yL%*t_W3XjaXACT^78{vt9E{Dim_;L>2t(s092DYAJ>G$3 zaJ&;+FL(tE7Gw;^j_^DqF)DvA~~&!okPso8*MN}PPhyC{hx7pF5$bhXG_#1hgF z?5m7jE)Ec6sfZD%+IuEew^5VovqmT(7bMV!W7zshx6=6 zPm&fyFt03ut+#TNSp@_a#M*H{VpK`!P8={LX(4i6jRlL{@uC3yEzH9_w-=4r=fMfa zaq!8rv3$W@z^8yVz93jLi8jPqqsr%?cIGyo+Ob*1S%Wk-&Zqbk0o%d#(MCRJsGl86 zcEyu2xKt1u0#t0gxxePa&T4aKVm%3|ZcMe~aRLMYYZ7=8_F9Gk@T6oeHu$_*hK2-8j#O0*ZP_3o$O~QGW>8#? zo;L6jxPB2_%%XSit>Ecl455J{$*qHR3;({enDisAsW zJGq9I%D#h|+M`j-mpm^T8wKffDIzId>vVSLdf`Apwl(R{v^56qYYQFlAf5sdKJv=--`v!l)3Z8&+F znZQFLp1KZO$<2;M+B%_PtR;E4v~s^mIcdOj!t2KF)WX$peRzm$ZJ}fhs+MuG`$juM zG+_)&TP}twCu~xz4I?#z4R|uf6-lu#wI5Dfx-MfGi{b-3^{jU(c4vHAYDJK}$K;T; z^Ru>?cv=tthZza0V}1y(O5=t!7GD^ssOWk;F=gYD`GgNduzWO5DU_q-;}Ce->K557 zLekve@v=-3^oz63Pe{zhC<10;gk)s2zyz&DENZsOzUu&m9TfA}@mP++BA5fWrzSOv zogTw7m?X`|TAX!1Qmv|4Zi)F6i=`|=N-HxyUr4i^s!d z%{?0$0(<4O-JC5ZtspB|7%tbVK|Pe?ARkJ}IgiAfhwMxsJr>Sv9%?dBv{c57z*9%b z1G6qaBeV$PXqj-*ugXMbW#-xhwOY{$1+Xq zrJa$6GREyGm5!BlDAlw!*2T*j{$7gPAoerCd9WudLq|_3Pr^?EdC4K)3^3yeMOs@| zA@j87e>lg-Ugof9LzK@Y&84L+>5S#AE0*udF0gLI^Ym8P&#DLi#_DI5Y(9CxhngR=c91uziZQti^&{8p=?YuR&S$S2KgfaW1pf;bx-YxG`bPTtH{LgJ|cujoV+4Zo|RhZ$d4?`YkKRf&yL@w7NOG*63BzRQS0uc|vv7Ty1V-(cW)Tby9UPJot|ozp(SLG}eO1$+33Jc1Bi|Q_dJ->7^+rWRx!zktZ{DR(2e(vM}t_ z_^U&g;egX|s3XU|oDsGUH~_ZNvCc-6xvoi)u{Sp(ux-Gmiz#EHZPCVb)*gdDKEZgx zYviw7jKjUB#hbNlN%VB#mWS~$S~doJvDGYDEK_3nf)WlGl^Q&!I9O@Y=vuWZ;yzAW zHi<`S!vuomn0dc~YoZ2*<^N2FC`Uf>+=e$n_(tEW*cn-6_gqhx0or5LdY;UpLmi`Mic@#wDI7>kF+%$I8phf7K`Hm2fh z@Yp9B<)?i~_%#fBcrj^GnZAsL4)3qIA^OKD^HaAW*fP^~;VB-QUYyq%$~9qw7gZyP zca26Y`p`iw#3c}uWesE0%GQLJSfpkxJCctr&Brh@S*ycmkxfgDisCRA&!w%6shX&5 zTGF(kw#ppE^>gJNq|LRq9*QfZ%@vcf(^?j$gkfNOCBd*(UI>{noI}5R2_n@$PRZ5F zeIPt3KrAfi1&2?6nowAQZ>A*rYfHp*Vc)Nkwx=#nq`B3Z|w8 zrFixg1%vH~P!injd`-dNTO@PwfSezp*ZI7DSLmGerZ8U>lelOaFpZf zf+gmRv*fH@hAn1CnNs#W2208jWlGtTC|8lSuwz(;52=kS4U&zMX1?snIjICV#@>;0 zv`sOOodDanWyNU`EP?x6hPzS+AEH&iIF_r&m26{eMD=pQ$g%2*1E*0Tj%%Oac_bJR8V61h)an|h~s1lEGMVx>`R;^ zauR1EPeEm}>-TUWO~5$i!+sDRCB+9loH0*EdOv&R-gVzT5dVm&!nwUo#cZuIBaPSCa_&JxBkv;e*gWuvP#n* zt32@Jum2|9-Ul1kVOFZ12YqIhdL{5?I)J&SYEM)j@6L4`bk^a^q<|8dPd`L zZKbzVtT|KlpOGBXPd#7hHMOiy8WT%>(wIk((wHG2X!`!ce0rMu?&qib`)Hx9E+Ub( zE{_Rm`%!h4n^c=EEtydvtvHO0?Ec)=Kr@O*q45H9E3zKuX7K11<28J`vSjP$q*17oy6 zgIm76>PuH&ZlvzwloxZ}cSF1epNaTP^-sW0qigVEM8<0TB=M*Pc*2J}4EPmxE1qqy z$EO`s7j+=ii6>lPe4_YWaR<${MQ1^z1OIW-Fg1XUr(XEscLW$kOg(7aVFry~0^qwF zKWk0_6X1>;0b(SCP5?WB$5e4JlA!JEBZx`ix6X0!ljLJ<$5|iW6f4NlA(J~1#AMWL zGT3<07Jj}xfkLM2k(l9T$WDe56QR&V{E7P-{J?txQbI?(L}@DZZmUP!6l%mz%URv1 zsKW|(;^*IHxk@vZm<6@lt$I#_R8%U$?a(fHECSt(FrK~O=igDhnr|s`TZ<6q$ofw} zdHiT`D%!6G)Ob*>h-dwJ?^qxyas3?45{Crt&OxsjC~kW^%ahXa%LQ=%Gdedz>j}_g zB0iHv=NjnC%^g8}gnIA&cXY1C&)d27N7CKw%Ky3c{-?U%a%A0`Xg0LuC#-GK$BD0s zzL%Rrs2VT(!d)v2<0G}?{{zdt!q#k&SZ@rk5&Mehw#(M73H{oFvBYjEh0*yH(eO@N z!v$h_xP=JYi^2NZ-~pC^YQ}%8^8&m?;wz%{WgQqJE$Hopc)TNz>i>CL{HI=hdlPz= z=cOoSu>VY3{ZpN;a_UqK{}O?Ik*|t&yZUQqd%yow`~8zy=C1x4#$a_kmT}DrA>1PZ zmB8|bXI|F+E28&*_1Bx%3LA`({T0#iwlC9>ZS^Z>4cDh@e7Mj2inQ#t>3aUZnSK80 zDyU!or;nsX7*%m&OnqfW)fMUO`o(L?{~NQ49)97CGsg>^M-XjpYW%+-IT$SnPDv$^Fad;C<|Ipun>{u znJUtUNS*8MMSvT@%bW;nsL~Lp0nOjkbnU@o+0H%7^ijz;KK8i0nAL z>XlDEyn=4@M0O|}uRKEq@ju#MLwmTx8Jbs!KmeL(xw+nOCdcUL65U&#>E+1mO!Qr* z7cm3)3n_!WkD}`3nUc58dFA6h%rtvJWNkE@#P1)W2>&Xpvn|X&CQpXtH8G>Z(PS5n zZ}HT;CyZZXtqFIiOSjQ*LT<$17&}=FDq0ZjOfW9-Gt})+>(YN}$ak zF|lSmS}P026YPCm4Gy0VrlR@EGf}FvPcW8oj7F1i?q{}hGL^uKaL^UVBZUgcFU^zT zNZ7nzkCM$B`~=g2Nn#MdKv5r)p+R4lTul zf{mWry*zUO5WWi-D9z=u%5BeC2KuI<+h8VWW1M305Xr`uC!E1!hrfB?@F3E>1Hzdo zoJlAIRlJ~B{mft{^SOWYkc_TC-vTfDYX0X9yC8`H%Ub$^Q(eD9q-zhu?-{<&a1+Dp z40{>=#L&ZVCd20p|6n-8u!~_g!wn4AGTg{;3&R11K88Ot{E^|;3;~993~w+T#W0s) z5yN7J6B$|oV$pq(QjHFw*EGB;JXa3yjXU;H4HcFFhE~de05?M+f*y^l84CIJoUjYc zg8X~J|K&sonaBfnoQ)}dlfR$6st;tRbG##POr1Vnb}@8 zEw9_7X9s)F&4Q?6!9ubPPKFl^s;s=%>p_$C;(tY7B=ki%L6=F*o9V$&I9D`Z>fx#D za-R=v#Zw*{ldaAdtU|kTr7%L!)?Pi^gBHv5c#zQRapBY)qG(77p!Pnb@St&e&kt@K z5cUSo%;dI3KZA!AhBq7is8mMxW|%?mNKd{u#C(~p1klK8)?&(yI&sCNZ@lPm%}5&b z#;>cLhI*!X9-`-?$BQ(e#UxV?ccZYivKvb^viT#ObxQ}x^VIUYo2ax?nS+9(*# z47PGHI#3XOt`ZbN3m>LLk6z--mf_=*(ZhCdANMu)_ zDY}r{?a+s_4;8CG5!y>A3O_`Ii;XIEu$k3C$H^bC|y>BB^EciSDv>FQJf0<|iG)J(t*fRh}9YJfudNSczvEM?%UmLQE+C)q&j2)7?|mx0 zn!tOn!tx+^sxNplciO3FSP*EL;OOAVGH~JQDcIMeW-qRNb{Ni=1MKFoeL;FHxPqn8 z@T0k9M+ZFvf}?eBNDl=^!zWD*P7Oi5P{`wPVWm78W=_hzdQ<=rYL37_7LIO4=tcyp zpd`4>Lp+;dKyy1|V1rPo1=nQ3X~5ONB67lB&2;N5o-)K!BF?AMHl+%9 zJ?dLGzTK`7++N7O6$!AB~Rl_{p8V}CwFe{e%<}nljppAQr^VehkTd*r25alJnw5&8wM=ud+D9jyw6|!`|vXc z|90MUhu)ceS?bzPKKte71B+tbOM6Ewxc`||bDuaA+3uuEk8VNgp|DzPtqx422tS|ICeP;Zy2rthVeZf-;~#{ zyezA<+_e1jM<4~KA8q7-Tyq>HAguU^&mDnBWKr;Sq97+L1&<^^gm#7-&UXaB7y}mZqH5Xsx)!Qced# z{J0%$<>At~-T9bGdZ!F8sFV=@AhusFg*MNTN5GCXa?9g#JCVOZd(`7L%277J*B)rl zGDxh&hY$1kV#HF&cYzb8qw%3O)rKb-ZG4Kv@;wKZXhP1XO9;O(Mh=`VfqL|Smz28@ ze7T?%6z9+PGMYu2uK}=xnHu}p=q%K-(~@g~PBG-iH#zv8M+6^!EXUUn_~?=CGz^N5 z@%bJGYsBeQh;>tsL=y$47QV_X~7&Fm{~ zJ#Jt1fJt2lL0$7ytD3z|edTp&m1X7IB%5^AxJmf>4Sz@E?u^+f!;N7#9DKgzVRt?^ z0;{&cP>pZeC>r#PrAw`bC%yqH z>J0Au1e-?h@0X$|9?M(^XU>+`g*X<(Pkj-y)EFJ+s5d3m=wL;;U--^a1S!pa;t|9= zE>_t*_Y7McH;7q5R*c7v*{kN5<8Dw*V5)9PaQ^%dQQ1a%hp^6gizM>oF{Qd1m7Hom zy63v!N1M1L#3R9M^w~zIhw+yt*zWlOC3imNh5)w)TNrzD_RUm2OIo7^<5@i>FjJ4< zSpf5l8i7=(>`;vy%NnsBq+*p5|Aiaw9R8MhB9r|&Wht+YP+qzmdpW*vv>pLnb+S@Ld*o>csc4(w!xYX8wc1V|? zOn&S^8Aw~ET1d5{YQ=1{<^=AioC&xJH3c7(j+ull&di-trpHXf^)gi&co`@?$L@C; zd3Y(R49>3>WpSAk#Ws}WG|+4-+$KDxx&+PDLBH5zlzTZEmqz$Mc0oLvdW`?V=({zT zqxhoV(dbv@U{c6^I936TKvfo~416+&b9~M?Sgneuj7H4HOv5td8TAOKydz)U->imTzAs(T1v~ z)VuQp88p0f3Og!o4i9sI;GA|>!ywolHX$oD;FM$HB@;VZzJ6)?c(t%#Ov(Jh&WbBj z12bq8v*T`IH^;H~BVtA@hF_&!K{M2^sq)Qu+wf`DziWuqXfFPbows3-aA6xUU}w;L zLpL7S6qrHWR(OpED4xtIcLr`qam(?o5W@104a#hAwr7frV5hSBCc3$Kx!&1IeGu&KAtS+r7% zcOtw3;B&u@RcFc5J}SFahPoXwWRg^_2$DpynXk+zbyrS>z0lGSD}2py~yP<`)k4}xI|lu%i{)S?bV`5@p*<&cRx)3Z!V2_ zR^friI|bgn**UP*YGbQ(PzukmMgKRH z-U3e%{#G^7Yg5vr|Cjpzu>~~z-ACfTDchS~dpUyTz2#x?EH@vY6*zs}rA}fw3gKGd z32+9hfOBxUy$MGm3$esph3`hJA{L6={jPWM@LxmNOsu|-6E04s9ULPHE{0R61tG7Z z*p=49@v*b!e^rudDO?`AH@p!Y-=-U4{@M7O)?Azho$PbY!*lu#)Y4FE{z1=bU@hD> z+5mq66Mx4JCjjclQ|b%=>w0lnRSq7{+I-g7h;KRTG-O7Lj9DHpX?f|%XC1b?gs9{< zPW}$ADVzS|C6-CQ`bhYjm_F#nt)UKR)H$22fjQ&bm(#0_6Ai+OiR;w>ecGTgUWtGj zc0qsEtPPGHYZuW;>2J%amgZFwPag@aQ@AyhYy$<6=RzY7o_;uIvp!6zmic16sxiIr l$pZH)>$eDb@p+N@F`8X7Ri3Itx=jC83$t?n`%hZn{{R3V-Y)F+os35d?8SQO~nhb?vIC@B4Xv=Y02^doSAmtY@vYhuXEPdRKL) zk~eaNum~Znc>VE*5HI5={p-g3&!|M$E8-O|vBT}X$d{G=??o0)E}P?=HGAfy*~QbH z6N+cdm|5-|U+SDacZRcUhBJ4-VCVFiC8cT2nz_fgsxIguM1RF1?mgicqPNx{ydpgm zn-F6aA;#l{f6Eu+rxQjc>28{>YW;?T`%gc`9>n3Nf7mW;mN)-z{B%hzMP#AgVPw}T z!kY%-&;QV#=bwH5L_3ABoAT_?y-hl;ymUc1^n;^a+eO>z>bIVTB1LJlOQ+48AhbT9 zFPu|^pQeA^gy^0&d(Ld6Y1@Ep;Q?`tot}z3{NMQBEE-q*qrR!4i8$s&qoWkzMo!be zLMMjar2n01OZs<_|L6SO2lwr+2yMG)-_2{8mXX#vqixH!)Q2Ww8kq5f5Ye{@u^vB{ zmBJoeKD%tjq&bw4;EB0_pV7UB^vT7~cF%6T7Rm4O#qeJ z6F|{J;ipi_BZ8s@5fnWZan#cxw#L2?i?Xrg_lhHbbM=UaL#&OfjkAe&O;q5 z${fgjt4yYPmM0JPb{D&oX@oxpZQ^InbW5SkU}g?;B6BLUhPfey#{4z5TclFo7NnBr zj#MhUlzBh%A?BmZSC|)4X&gk_OJ)e?J zdul$jnz;jhckxELM>BVE1GI_M49Xt_PH@#(k}==QA?%s8aSkyh^MzQ4SioGuT#>mh z(;=Q?z5!yMw4@qtYk5yghxno;&4K${(O!Fl>7GT=IOYK6SY{s{&lPMx%{?|OL zjHcQymXKeR62nSs<65biI2YJNw^Cao9aq}XMdy-A#T)ZMhzi(rXnG4DRuNEcP|2c& zXr@Ns_@r}3KGb0miFW`}W1tE}G|H2j!YU5sN!`kssUn!wGFIs#lvOROOcBoNSuU3; z&?4G<8LC3G6q1L0G>8ut&72?0ytnOwtN-X73S_Rci zoh7~&m8j)a=BLuxXi7859L%&h+via;%*`JsR(5iSZ0Og}z6`eR%%jJH6f)vl;Z6{2< zA$qWS!=?Ig<}uE^A@WoUGQW1kCbGKWQd3yj@g_#K%;0h@tkjnqVm5DI0+dtvRg`nA zD^!K}Rm^48AIe+#T`X2VW^i_E#jE3vYS;k)M*i- z?BjBeLRCQR=h#ymi&0LndJF2Xh*3_mIu2!5;*?XYzJMwe@k#@$A2^n#Tv3~#XG#<5 zS*G$UkEf#vjc1l3EHt{ItlGI$EUS*JyhR3-Q^_WUTC$-kL=VNyV#h4VgKDPsR(vp$ z-eNe%`aw}_JjVtp4vtOZ*ia~n&E?n>#g}7uaBR9u-N&k2@#D<(oHmTO7N?rQTY8jP7&(10FM2^YK;=eb-LSVi`FVFxV;uo zKI%G`iedGbOJ%UyObRV@f~vrgsi~f2&<{A&XPhci#YSV zOD$#fwGzs)2cUK+Un^m(YFT}wI9Y9D^{o=i>J3&`l{8lGvAU*YvZ`nGqtb!ZcdUL= zIgQ66SQWZd6{`}Lx`)+7mwJ%Z442x(YPL&lV|A-bz0Ru2rQT+> z#HEh1TJBOOSv~GjU$ENbQa4yV;ZjX;0fqCfOZl>T-ld$Zwv)oRq(W7QS6wQL)tl-W zj%BmjuYS*?ln)iA9#AdTCK$odF4Yw05^r&fy@fcZ98f*1wK$944kg6fs*jb9#`~b` z%G;_ht94L^#RqDXmCn#xpq$EwY7EC-=h!hd2{9qwhw@R6smazl)OH$5h*K{0olB)~ z>wiF1AeP0oc)8J8>NB+qt3;^7P+eKIbE$4zt_M_ws8@5X7WC!W1R9AmYEM>AWRNFq`p-9v#MqFjhfHuEmoJ+0#<&wZmJMh)j_P@V|7g}v<|HtW7XXM0e~w{tya`%8~NL|1rr0oQnT2Oq<=B(5esdx6_L`-8jKzsGYR z>`R^_z#lp1H_u|&!Of_ZsAi>LJZQ5Gc2lsWDb32jmdy6dY)}!sno<4ZnHB6=$M$aK z3FeQ@relrk<8=!d^@$hSka!sb(K|UTQ`JrMtf-^Njb${v?gBa zRRyl_ssUf{qVd^^9R_)$Bt7;UmvP%mzNjp(QNnfYyrEB?S(#(u&dZ!?vn)jA+|UAw1T~r z?HxXyV86z8zE@A!2iZQ(q`j<&vpxgh*JiA?$CDhims>e#%sVi1Kz$zOI~17!S+~r036=6) z3fB292e2)^k1D7ed)W&+JdAF((iBv7w^3!eeBwzO7Wm*+BqwBDX?6C&W7PSbVqcV$a zb5FVk(CBF%?fjV&K>Z)UnWF;eC@x}q2J<$M&R4|WeH@?_Ggd#3c{&O)s(ucN(s)`$ zuww*f%i@fz7J4h%JXyiDna_B|UPsX9rvhm2?_}!dy$^A}`lEo4!Bfl&T=v_5Pm!O*n7eTF*>JQ{{*e~6?MGYu411gB z@8C%;b&h$3`8%^&5cM`B2xVRGxlX^|u@_o4BerK|gEo=KnXQ;znS-g67#&0{P7Znj z_C_DF%h~?Wm&W!iQyW`t44=Y0$Ned0u@|*|YY>f+mUG-=A4=75&C7${fxR}!qM~Nb zp)-t4ylCp}Ye8=6(8~9jUx4~n{1)T|zZy&oV8$`ine9M5vsY=>o{ZV2&J{tQRbyk zdY5S$Mm23mCp<>~2jJ*d66Fm-U{3D|=xzXBC;9Z^O68Xk!| zF^-5>&>4{iCPlOZJ4DcX)3}J}b$8@!L{~7^GdD4xX1>6DnR$SDig|(gBhx#IY6xZ~GTVcC{k@~+OM6h%Vq_LG zr!dQz70hbpGEgtODyjAtKQWs`Q`8&O^P{8hg(rjAjakSX z$1IMzS7w$+t&nzc)M}KP98FxryodQPvz((_*?y6^hj|Fp+bxe;hqCq2#BZ2CG7FhX z4EY_*FlGjG4@bMQUBE11&SzFLpJcwoe24i7XtcXQ+UH|7N&Cm>t!Pn+B|2h=?y&Vz z{;|)&^J6s85%Zk%J7c%Q;xRM)riu0gZQW^`grW?h-xe9eX(@Zf51E$OXq|Ov3n8q@O%qw z8uu>vy~q2ij|hsROl_^Jtphv7(HXKgsBeYS?_>0HP#m$8SA`xe#(tvx{9q4L zofT45iNFr^YBO2qhp5F+&JJdk)=2f}u+PuP9MNHQu&$`}3aM)B6H%_Y-ny8N_HrMleVJCnN6;RlnlcKp?(8ZyuO80CCA9eypc+6 zq`GvxW-2$>tVCJ7M~JKi$}c2F@0pm=F)Sojs`8HMA#qYwc5D+8FV)>0J2g`MLlR|d zWyhf*$x?0ZSR_@Ic%$R=kQ7&pMyWg`RnN57cl;qZL#itsZx1n)z0=)NX|q+2trQ`h z9+k0`BEHkJA(^gPR*B3`Z-lfmwf9MIYm>Sb(oVM5uG1k$N2zi;{SsoR{7zl`3^lS- ziNB#HcKRcvlPov0lQq;(3lQrpV|OB^E82GV&@M9e09wy+sU`N>PV;?rRbzh+v0NE@ z4KZES*x&8s7urL{KJ64FRgL{?lyWF zs>WW}IU=-=jE(OcV<>Dm>&pIZ=JtRRsdi(Fbfxvo zP}H+hSEe@WbVb`&uj)!WXPH&KI>}Y;E4Q!OR|o5AiG51D?E$)~7B|{2m9c8!(c%8! z$*yu#=ho0NlWH0^&84)n_e`mdcP{ZaRDI|3KC|=~Y6%H5tBT;cddz+W+df|^I(r*R z>0*vG?-C!T$ErklmwHuKHTJkJ*G%QI8ma6?s-Te?(@0Hiq!u(%cQsNQ8mX5WsdpNw zPt8hP?$T0jLk(2>umy74)vn#cZgr_D(Y$MWskD8&SZ2~F-6mB~SF@sb3nLcabz+#I zT6R6;FjVs{Q%$klt`VU!CI&Xj9NYDpslDlqR7E4Tw2^wak$S3;da056S0nXdBlTLm zx%IP+Vm~)hO}d#g{Tr#2MyhKg)xVJ{Zlo4AQp*~tjg8ceEJQSdzJ)G$ZB6 z+b=ZA{GpMenPp_!v&|}`kxFi)x-?QF%}Nx+oA>*)Y_qyEd%kIgJe+NwXHS@w*qME= zktz0MuQ#a!>Cc7TuFqESZuUNt`Uovl%GgKQADYw`*=NG4WbBLV3nukl_HSW#xMByC zo7v67m&nYrc>nNfsj!|1ztg00!tau*EWRN8ZmF7e9~FL&RCjk=6245T!0z*dmrE7f zeOb6!tu&Nf?Ychvepe=)rRt>GuVi(f8m7ngD}B3P^D)$zMyjlln%hX-*+{Kwq&7BE z+Z(CMHP zobSV>vJc3)=JT>Elg_5$5xT0e7w05KysFn?pOKSpQVVjjq^jok+gIrV2>%W=xhtnV zV%on0O;+Y~i=gk}(!T>u*5&kycvBNl8*}m__Dc0k&X98i1^y294 zC%3@)n^gHwLeb{nN-+Y;;!+QZ$+=^kHmT<3PIcO)s>)sHbeHPB+`F8fQmxBf?evoB ziQJ7&Z>hHDZgV=MdNcP;r=L`Z(O!U5C(&LDslG&e!BSmCd!bVOj`qT(a__Ox>69w4 z$2Mn_RM9=&bjC=P(PNA=PO9u4Q=JJ?4eYVdnIu(lkGq^HQqAtM+L?vOFsT0_y+R?8S|ZH-j4wRcNJTYHaGw6)8mqODyn6>aSb zsc35-FsX$Rt4*pZVy#KlMLc3sOCugLsjU%pCbcqRlSw@s@uW*>S1(Vw6s{XPp7(i1 zs^5D25Ns&Vo)g1#bwG*exja%=H6p&}d?QoD#IG{NV&dx}pV#X|Y)j-eU13G`T;z*V zwePuID(czp$n7%LvRz#8PN{nK+!tx69*DgpVpVSO2KjrK;#P zIBJhcjfwh~RI7VUjM^vFlf7m}?U!m#uem05qSvBEYDv^vGV@BW`=Z{F%B}Y*lZxp5 za3fV0bx>xe^d1~_NU9FK>(%$9`lO{<<@bI)%7~Rfz3<9gBBu8~8g*2vaS+Ku;nN&~rj*LDn)lSs;xl}Rnouds^(z{=D zy^I~{Jvh3-q^3omHK{q#=cGE(`_||$rFu8JD*7v_zUX~_^m(big}Nx!uf5kqe*E)5-KFSkx-|Glm-k}OFlT>!!4ly_Ma>&e%xv7`47xw8L^P5!T`(zu6-?@I*V~rG@HI4+!n4RvWtEzTv zQfy<4u4?S|z7e4|SFFY!-1nM~p)&eza_H)S_^?mC+SF9b)=*v5*y;YDyR7B8q@5;p zSK@0X)gk3jsE1yQ_*dtTLYql-xbvw{FTEDNtLbf0<3fF*Do#b^W%#^|cXPM=Mr>gDW% z`yP*xN|g0Yh?L5HYv0dhtV-P5_q<81?fY{~nyVIVjgsL~Rbo@$0kOK$_HCwYk6Lf- zQWUF@s>V)t;o8bfx{qn7J=pJtqB|#2@wK*DwGV42`$Bj9I!G1Xr8KsaY=Q3H847pr zOfkBLWW?yMrlIJrrlIJrrlIJrrlIJrrlIIAs-fP;+%?pxM(ScCMRyC0OuA=fs2hzk zJ^GnriDo4__q)Z|J~6Z3d_&nQ`rTygdUalC;v*ftmE~T9r`k7)&gBz>ud5~YMW%8~?8_Ue4Q7R2kB!sI)!4W7j|d$pTc zoT2uiXS&ip{m>PSQZHF2sX@VGWqaG(j|whwDXpBYYWR~-Lmh5ENoGC=UN$&`gU5a9#NTsd(r^?K4`=9qQ)UW+*4nw)+UGteH zGXwHAISdt@cTe1O8S9+4!lZ`ft%;iZF{|1;ZhHY?Rg)@nbqfUl`{6P zydUD0n3RaWQ>r6*VexlMbs{e4`UR~&BGucO+v3-o)b994r3z`aEq;SZ?T)XN%9_7F{&A`N@~6i?VNwg? zw@4M49~S?#R4MtFx4I@qH_BhmD?|4)or>b9FS^btAPpcN=4;9aP?X{I*z)O_Ktqs6k8gs zEA8m`SY~$4Zxdpu-ucrK3^f?BPh{pe#0)hxe`n|k8JnN~kyO-|ir|x`*5@Rgaw+XI z#d=we&XINwUhZ|~2$DHs6y%s^ADx8suK2&tb@i3o&;i$cQe-WIS{kaxe#?MO z4n0<5uNtr>F;&*Ge875>qU(S(8Kdg}Lp?H}Iyha%9v`sOr06>}88Y^8pYSL{S=&9H zm?>k&J8vL|{!1oxqW$BESu(bDz!sC*HQ&@Za^%a*`%#ObXod`sF`6NU+SF%U zOo5E;>N8oYCF0#ax5W%}#SSQRZ8%8J6emrpTAV?9daPPpLTs=rlfKKbI!0G3#V>sx zjTxfX!tcyOU5Z9&da$mv{Wr=Ks|Yr$ISFI*TJW8k^FGB=J(zOHA(hya`az;pXyKE@ z2{Mzemdd1}^`N1m3e2(QT`ngYF}j+NO0+8YA=s?GH!?*x#HQ#iKz*NRsJw#tu~YRJ z?hpQwC>39wnN|C+X|7D|I~g-vN;_6&nbe$w*|JU=iFr~L6_}J57k|h{#za}cA)ooK z%qlUzpk7@d%iWcj9%85tDW^gg>M?vz&Le4&RL!~vCRMo98Rd?Gc7C_(F^s%3NmpOF zy`9v>uhJF6(Vuk9$50pB)~kkkzQD+&t&LC8W7;*z9eNAAqBhi?g3d{Xdbc3Qq>dHz zOMO)n$k-?(V!jz)*{^MTWX_;5DCBGIPbiO%6jng4lyHwgoXm?L=&~jO|BE zDsKHD8T)A9%p^m7F|gcFoViA3ULCkB+)&D(Ta%>X%(XJpXV9{6Lq#A{Dr63ed01xB z``9B=r4Fi0GE~PwhaBr=tjD1FzJ{V}-$!L^z@WR53{^a6d%$BdHe=9~Bty}63pdEv zEbJ9S(afrqF`8M1T7=DP;cX@BJ^*6lh+4(B)=oo5vW5_eKy!H=7>~R z2iL0~xN4~qYukDx>uQMzX;rU&q_-eMVM3&#JPK8?IntV)V?!%`o$8}|oDZJ*R zt16LMXvC^SPg87(y|D1MWIc0ik@)M@_0q z+|~9(vK}LKJ^8Gx<>|tk$zPgOM9KwS*>@Ela(t~T@pfTiimq0Q4-0cszH!Bthzo@c zk(Z?UvCuEZP@Y3(CS8`X;34&@p<)}U^da+ojaXa6uE=uThZLpgs!9wRvN+`j85=)j zUCJ*~%^$KOMX|a*(-8L!`6R_I6@8B9F4g)Wr&F3qwG*njRD037k5nI-m3?W??EyyY z+>moAhWdWU#T17uXCHbc#aAjPl%G_YL$9a!OVwlOFDZdijTw3_C0MFyC>J7C^-xP{ zs8nl*I#a`>dS+*PN%k)%47JslulBG4nLRLS*pb07gM@O)qeQTsa>V&J-lgJ zj#Q(DUrEW8YRd5Nv>s9|9Ns#uw^Vlz@0Qk2s`bMMrsYZX;_&L!0a6_rJ}hmJR2QL! zx>SvDA2B{{q>ROmxR^3ls&*r0r;U>;Z^Yec#ZncGxRNqns`3%{rA?6PjuEwKB~mRP zF)U`1RP+gPnN+nSK20;!_7PvCO_i~CMtqw#L#opwZlukY>e`4u(#oY$NBXAEm&!3R zA^ldVqDG!esgSDW$fr|plPYIq%kq@&SU#^$KyKilPRQ69sPEEgG zkJ-N(d5cN?FcRxQ8B<1KJt$RSpF@t7QjN!Y*HHAkG!N)8(SXkw4ApFuSp_yy5u>nH zl;z?Ysq|4lnPMX{el@A~qt5#n<#IB9`#20TB+_I^;Y`BQav*2aQZr_Hjg@%{)kl1jruHo zy;QG^I-CBeRQpGLo&K0q?~nQ=eS@y-r$!}2)=EWVU5jT)8J{ueiaukoW<2hS9Z)v5 z^2pdE)tbD=6Sg!ew^hcf+XQAjE!D1+7>N zMXQ-NWQ^7?d!?fF%RX*_zQ0S~Autquhu|%}1+-TY{EkV@NqE<#a6F7E%Q&LP#N|=- zs-gZEwaKBYhr}PF=4HIEm*dZpKah&n(1!9DeSe0b;zwWeF%+%D4b^3|p&qjL9R0W~ z_mF+`=qIGA5wk}>opDs}C${KF@Q1Q>y6^q5DYi6NS2gwpqnCw$A~WwBeQT1T9!Kni zjO|2BSK9r8lX?v8oz6HZ$C~ayp3+sbpmxq+L&ZRSCS&ydtkY7_H?j;htlc#qshX6w zt5>CJM)&y)bqnrUoi_F5T!vJ3`X<-suGm*@)E7fhU+QIy`qCg3^~F%s7pWBLi&SpZ z7ei5Bbfujmbw%^~6ImyzuQSf-y|&ZU(nYE0`p8gpMI;r<{g5FQf9m|TUJkK(^^!|1 z5hw6_k-F0Q@~tV>J5Ey0#Uh-^eEWIEbe-uzd-%;J3Evsn`l0^xZ^sVI{deyp z^Ze9C;Qy@W|8Lv-=l4Wa+~j$yz58hIN93WW`Vh5!^f3Ndiz@0s-J|(Cr;(=zvyiFz z%`3@b_*F3jw20d{hgKshp3_TZwe=*ud^8bNJPnodJFq7Re~yKoy-EI+f2m;u z*Kh8>W^d-qmpH1OT|Y-Fs`v;Vtn^@8d1c!~oPx)OC!JC&+PdZ6@i(rMqAH#QNcHSB zl~U6GTticMw3Q5=fMl|@`W>84#F>O`ZRJVSJz9?DkK)V(&ZPZFPbH;HZG32pRNf*B zZ;>LhIaAvs+J2`TeLb)BLG#m?TX@W^t}!>4($;v|noV0HnO8oVpWf^B)%8DLKWME} z{{QYZj6d%e^Hyv7SMzA=VQoDh%PZ%5d2E;Sh-s@qb6M>Q$UI`2{nz!LdHty!LE7AV z%u~hq+?%0dOCJQSq9}m=8q^FBf6axjstQWQ zd%?M{36^J{ySsJgD9&Tv~_a}U2~o7UlY?it&^fb>+czj|mseAklZ!;O{{ z)mo%d=CX=VTakyT3JEvda*{l@2q z`N*`2O3q&j{@q;yZI1odt?1`5ttaNapm}Iptm1#YZ+|`K{I7Vl?K1cF&+o8}@0e+4 z>0>-@bhdATr$*Db4FH?s9f8Jq2I$7`2<~`}G##y4E5G}YP1IKu|GDQ4XhmPoXfCt=&DM_7Z%yM#^Xl);1AiS=^SbM=(f?f@ZRJ3FuimGA`YNID` z($P)VVok(t+;j8RX=O*Xrp$?;-UqYCxXSq3D38MmF00j?$0I=P;`!~oMccXle}Ps! z7nFKJQ5&8MN;yWpg-6edCxudub_c+S{x#F=QN(JL!qfYciRO8wT|?2F)bG}=L8g9B zZyQ#RHvBCWDz&-|tt1`kw37VIgH{gnThYpa&cluG)HSYwwuR2*jqeI-?-BnbllB+p z0Iq-n|<;?};-Q-=){)09`{_utik=-{=23zbdrVyH?LP7%}}WtLD*GXhxl? z_?dI)tcAZ>fWNcz?`qcks%VECi|bm|sOR66Qh6<{-^=~GeA;*ALA38S;u)}3*SYb} znJV9f)~?j_p3r*3;=1!p`KstH`>%>Zll|9m7{OaXeyi&)v{u8v^V5}!h3`vSUH7Gp z9;(8)3T`|O+Ith7D=b2L_t8AsIgPHN^mi`9w%~6!&|dhn$LiWr!%uC|=v}}S6RvQv z2lbJmGrWFg(6&qSXy<&R=Z*8Vcdoxiwbh+g&!5M<@%EbUEfn*a#C+D$>>56sX?J4p zW?Q4yu4XS||8k}_wyqK8V?@g_-v=o}YCYiXjlX}y^ZyD{8+r35m49C6=-1BX{bj6(8o&S2y|2a|BU3*@|Ln2i zsnqoDup6}Dsnk@1c2#S>y4OB`)Tqs+5qu8U_9IF*cXyT&ZuIG@z*8kv+Em7MIqZw35(z5a|6$QdBev|q{Qz73t&eo z^!pZ(N?H5|K7PnQjU0NutDEwCycK^_bZ7iG$fRdXW-9c1DCGIk2Y;C+K2i9HQ}MsU zz8+_DxGAUNJsjkQNPKTT5n2>_Zo$*d#_! zV$VutOXBB_I%M8(+~DWf-VpSZSQ-H@-`!k;o1kY*QcwJS+l%LtLVf#--AQS_h2rg` zZoWr(OA7`4_Qy$uo&%F9MDjJC(LA1`@tmgqzN1BG@*rO~rB(76--}wEsBMaG33BFx zEs__56O*fbr=jN6zU5rAqEelUxwqBa+Y#ca-786w(vGp8XFFK?w_Fd1dWWvA6k*(5S-s+>?n-c67sobC9WG4H$DfAmR1J&J0 z?fev#e#ga4c`>EC-w1VoN-ywmN`LTp%0TdR%24pDlu_X2lp^q_lu}TnP66FgXM*0T z<$lF#Wa>gNiP?tPm06g2J93_guR*jZ^)dGO46-Oo*pPuu5*=g6o1&U^43zh`(fikUl@ zo?xzn_KVF?%%k02$w;&K7mLzI41@E*BwWBzhrUQEQMxT7Duxbns0Qx*c_cW+KHnlc}#NI(;uWG zcS8DtfHUyd23!Q62*~Ar<|2Qw??rWO`m+I7)hE-p2NZIt(M&gSApJnV4Ye%({eVdE zLHaT91b9(x07rBGBgMt^6Yw<2_#E`kIOL!i`vvUajPn7CB_^X7f3xIN{5SBl%J?4a zoUtA3mGKiu-#{$nJ{Kyxll}-OQRwI%&7)DmzuQG;62HKOeB32kXiLjoTNIj{6}Xtk zp_)f&8TvCW@Im%0W6ye5=6e|n1MyetGFJs=T7oihp0s3v2eD7r1`f1r&fFY00yRH{ zoZXo(f^TQe_dO_%WbQ^jJw1Me<=f0Rk#i&SkR#Kgwmgp-yj$8}hclB~ZgN}{U0c2t zcm{RmI?62cd%R^9`n}(!Vjk>UEYGy;;+M(&cT?VI`5{`N-wik@4kCI`e1aMlB6>2g z3^hCva1g(7@M2(@g?_8}C_I}SRhA8{uKBDK8(W0S90GT2I*a?YgQM(I<~hm-B3e( z&~D3`tYp8vmK|BCK}#*KWwj65Yw<`=4Z6gAxX!%EwDOESXgQHJGssQ3l2snG6Z7r_twjUu3GGE z$ac0l17s9N2oKW1Hd z+ufKOceOnmbP&ITLac2|v+)J6%5t&oHJ?zfIYy;(ND8*`bw?K7HCFp};+k{SpOBM_ zoc_MKs@OegE&Gpzr-%6!d++i-NxA zcTv#y`wF@Lg}g0_<$-p^La{u=e2lq?`7HA#=9|oSm`9nPGS4zEF@IqG!L+rfI-4>5 zm?6w4W)ia{vjej`voCWHb0l*-a|&}d^HydB^G7eKqX0eXrUi}f-fTi;g^kKuZ4{kmo7BQCX4$5J<+fYE#Wu>Uv{7a? zXWq@3%WPE73LEusE$6J~oLbJ=WTSD|!kN$5XdGU!(Kzg|(Kx)!WnZ(=IP9^}IPAC4 zIJ{${aX4(FarnSS<8aJI<8Xpo`OG#C{b{f*0?*kh!3(xK!ArJ#!0&ALgV${jf^O3wk$w5%g=i3vAK!H88a4UeMX}02tHs5SY;P12CoO zad1IX8i&PAX&fq>(uh?zrER>sDUI6-jy}lIwH)=fQ@)>_df38F{Ry>G>rVTpV2r&U zOt7B=Q|uSP4Etp;%l=tlcxJ=b5$^>5<(w{ZQ>aQ!cE{X4k+ z*En+zXYS|B!|eHhJ;&H{g3Er!WgEEcIWBvNGr!}^>zw&BXWryY;ZCD!cc+o@X8O6) z_O@`RQ3`dZ?RC1-_Qr5#f;)|WiaU*ehC7XamOG7qCobEK%jR;~-dwgnmo4D3g{o@4Ae!Jf~!Yy9ee87vxhx<*|V2DXV^Z& zwi3zxjHKEk*^Xp8o9%42i`gz_yNc~9w(HogV|y>#d$s%+s@p+B~a^o+1|@`Ljq-?c*{vh(+3e2b&+bg^7O`FIB6+IVuHtAN+jVU3WqU8%XV^Z&w$g=aQ@T*uNVX%{ z&SpEC?P9iz*{)){itReK>)77Q_FlHnuziMYr7PFpmFs6alI?7^v)L|YyO`}NwyW5# zW4n&+y=?Dg`wZJ>*jBo6{oS~JwjhhGuf1LCYy4cIh>!Xkvw&5*Y+aM9%chm z^d^s!*^ODmtYq%Vr)UFH4B$*=H)fIM8A$ufIhdl|m_^J=<{oAPQxtLy%x=sgW+k(h zxrf=n#GgT@zA?KoiR15*s;d}cRh5i@c)`6GwZIApV(&2}-{#cZD$K{;ne zP)@^0vX#-qZpFkRW+k(hxrf=H*%K(If$1#aQp_S|C36q6fhkHU$I0x*EMitNYncs9 zF_CLy7BMTCwah)t2Bw(Abux>XmCQZN2Bvc|*T$@5)-v}n8tS|d7BMTCwah)t z2Bw(8`OI$2B4#DCmbr)7z;sUKK4_dtb`i5-5&IXjhgr$2W$s}%Xk0=$qMB&OX93^0 zY8#vrTpRpk@Ty*6`HuvhX$GJHq#d9}oW}d{@Nx5lx&eob8<>oF&fL&PwNU=X&Q; z&X=7BoX4H#oT-snksTwuNA`&5ipV=7ABj8?`Dx^(NF~ZEDn06% zs9jO-L^VYH8s!lk6dfO(9-R|CI{L2Y$D-ei{wVsVXwR6~nAtH)W1fw<9MdFrSnTN7 z+hQMxeJu9r*jHjdj#c9#;#$XbjQb|eD?T=UP<(NGP5h(rTjD>8KNbIFypnKR!rKWK z5`IbuNGwUbGx2=lABh=BPbIySv_I)W(l1HA$6!+Bl)b^=)spC=?q;5{#m3lPwo7CoMiD|vkrlu`UdoXQVntOU!dWZDF z^wRVN>5J1V)9*}wG<{?G_vv{VV=`uDRAsErcqQY#jGGw?@p;NRe1iB0J}ngZi^VqZ zi;`Ph#BaFa6B`TmkrkhjyW#5G1M~!&fq}wH1mh|_LO4Vm7Blg}UnGhEk&H+xuGqVX zAY3^Ii>Xfo)S}qkR_!KEsc}%pzmu%h{-4!2yOtt2MUpRV$DIxh_CiD1c zvM-Dt1a=P@2L8;RCS%CfJQ_VBM#JMdW<2OSW)ir_IvoriLp4N?nFFRU+cI;<%!g+P zb28_bk68rI(lOQGTF$XHyASq;G1Rvw$2_qnZJ)&55Klu z_OW%a4|@yS~f_W<0YMvm3KFvw%68 z85%;R%Gkb@xrBK?^Ks@j<}1uY%zEZ!rcy*T_%NN!6lNQyw(Z^7?#I-&aU|Pi%(={J z=6dE+MKr?OnV*b(6ZRWLG}=cwT3@su_JyK%!OKPOgExwffwp3zH*=AdY6vW*c@&7EH^<)te&HZ{*aX_%kz7{m!y+r42Q*tdM`>edK2w!)sX5Fg z6IP<0XdX{(93J4>)^XG|CKDb)j#lSXp103))O?0{X#$ON*4Pcm)b{TuV>iLpGWT)* zUBz4Bd55=MtNDWoFTnHhgqOgU&0YgfO`tvgCFfsbYCZ8CL))cooks-OA8_qx?vhf-_o;S zU6Eq7!jlTpxB8mE)5dCpr!A;r&CwL}#7`9~4-e1_KUL8j|4~gopaUxq6{`<_Fa#?Q zRfJ*vq2kkm5HJ!-6;W7)s3ICl#X2M!jKzN{Rxj~jJk}yA)+EVbBGw@))*b0!8>~lE z(H5%_6>FN-U{@#=pDVP-`Y0R3_s&E|*g2qzPZ~PI?g6Tz7jp4e+(A|JL9T*zN;d3% z$W^db$$_1RT>M@&sEPq7fxn6ls$w8YC|JYvfjt-{6ns|E5B4yWP(?9vRWTk}swhKT z6;s3za36%Qh!iq&Ez_z-;frYDpt*5aos9>#wv)~AnvkBCRX^5YFE%*%?5qc9MGZm0DaY7pdY?JrHVkc9~hzLflhS*7^w~fqtwA*v^oTgQHO!C z>Ig7S9R((+W57gp9GIjQgURXyFhwl|Q`JderdkHJQm2Ah>U6M;IumTG-U7B$=YSp5 zxnO5?K1Q_*h%<(|5Oz0E71`<{*xf-@%QcS_RL1P!$W*C9oHQI8N0& zVJ`x4RH}D@mFiNkO1&4XQSSpER_{m7IuOT;x)Sz!5XXzU3Vcjm4bKJ;$BViKb{&Z0 zMSU3dMi9q~`UvdJAdVOHQP@v{I9}8Zu(yIZUer3+PlGsK)Qzy81#!Hnn_)i>;&@S? zguM;K@uF^py&c5yqCO42tUe3AqCOA4s%`^cQ@4Y!t2@Cr)Lr14_^V@h28sGAxL180 zJfOabdfoP!;d12Vs8zs^U}i5O^AYn@bg+ ztM7wn)T7`R>PO&N^*DG={RI3{JqdoJo&v9`r@?D#J@}(~2DSYJVkWC+LDljlXtA7! z-wI-`S}wx2ftah7Z(!R&%vj5}usuM$mszgBZU*AL%yJcWb5IrGmhWLlfS9qCA7Dp; zn6Z|hV8?)%tCkzE<3Y?=%dfB#LCjdoZ?Ka=%vj4Guv0-*q+1kK5gDK=T3RfyTY;Fp zmL{-UgP6mXrm)+Bn8Ow~*zG}8bhLQD?gZk!&(aKbR}gd9(j0bo5bt*uAJ{!WRrIv@ z!tMpCqPN8#b{|j`eJz2o`+=(HZwZ2(2jV;3mJrwjKvfi2!e9>sRWZmC0edir?{Qlq zVGjXSG1L+bdl;yS5tdlkBSE~QS>nN4Es5|f0&!NfB!g=$so)oubokGL*uR!c*k6LG z_{!1>_IVKBp|-RJ6>D2iwYCR6tsTK2YiBUn+7%43W`m*D95Bq<0}QwJ0wb(_P>&PD zp0f4>W374c#DQ2>SO>sP09BD@9SEjd2ZI^bAz(}EFtC+%1lZa-3T$T`1Gcx013OrY z!A{l*U}tM7m~EW|cDI&+Io7Fap19s*C(bO#eL6T^a_n=w@A$-V-Vx{9&bNo}EZ_Tl zH~2p3`@HWy-$TA0eoy-y@%z~Cykm%eng4A6TmA3wf5`u7|K0w3{m(m&`+x2Kz5h*r zYk+4!Nx<}gT>)Bc92ht(aAM%h!0!TY2D-Iyw1{bu(xOX?VJ*hBC?33dIdwSTx_BED#eUn-U!@~_GoTS`Cace|Qs zhFG7q8Q-&~@2=|}%A3S_dTkV6m30K)oyXM;?k|Pn6^2)P+#~9MS0}8(I^)#^uN=`G zE2})Lau#BhvJfkrg;=L7#Oh`tRw@gzvRR0=%0jGa7GkxskXJN!;%5zBcj0w6UQ6-1 z2d{haT87tscrC~4e!N!TwGyvdtV-)d8rB{ivGQ1mb;m-iIu>Hhu@Ebc2dS%AJ^g}j zJ>v@0qWzrY`dNmblP$rH$(A@rS5e}~#tYwLcFY#b9KGa@3yqZHmLRu2!sgp~+5pGfU=9EA1k3 zX3m&XK1cMQIiYx3smPl-V`f@z>G-*mCY8=k8$5GjxyYG2r+nu0?DF#2W#i|TmliIZ zRa%lgd(zzLr8CO&%4W}=Ia~BtFrjo-dD+YvJ?6oQN~mgAEPK|h+?msh%Vy|$&YaTe z?TIp=skiT(@J~PToXHP7iP?}dfYgXBeNv`?}W|vJb zD=(W@I<$D&+)`06vyAdIF*Gl?Y|ez4GiH=dC@(FM4GCA#9y8`ncbPrQN~e|dnK5yu z-fMKiW&UZL^Rc;q9%tG+g0>kuZC>eYv@Z%UG*IQG3$UkV&RS?h2G1{^Whi}+U5yPb zn_WJ)cv@cZgvn(yN(GOzYg|yx^ywHPV>5>4<XYt9>I zW|vg8!ri+wcXzLM-Zb|PxhqlW%z#E+)J^Qz4yb@_zsdEU-*&iP&IXQ}zQ z-DbPvo!Trc+cZVcYMZY@i$+a}tU@h;JvZHKbnZA=%r!fAw$>)M*6zn#Png;4?A$Mw zh`E!{$K7pBTNf0ED<$X>!ZJEd8OABs8au7VO&DgeA-ZHH3X|%c+jF_u2^mVJfS}X# zTqoDUXd-?Wx7J&$_rq*scXRd5f-zM)EbeTrHrs7aWYSj}JGYyi!>QeKI@j22z{9bn zsmA*HO-Loow%VQMW)_7&M6_8vV&h&bvfiP1!hz=KZgZ*G-d*p6g_}P~6NTBk+ni|M z-&~E^&LYd5=C+Sq_%oLDdQ)5L>xbCJ$`!h5thdD2Q3hnh6b{X3fQ*X#y0s09+%L?_ z#LiA5(aLgbV|%?R&TQ^9I>;~qIE@s$W1;2N=bIL|+*%i#W#A{Ut~Gbs$Q897mbZ3y zR+|0RW!loG~hi@ zbu%(|nmKO@ve;UGwYj#U5^AD#s|ALqwsz4cDVB&NOV9*l5eGkuX2{7>67yyWK1EDs zGfNV1LQj@pWM{z7NUKe4tsxi{ih|Md(R^*`OmU6$%FB!0j2nfg_}Ecj)9fr2BQNi?#2rh`?e+Va3~{<~`pyzpR;7#*)@nBP zq;TSNx-FqmWHL8&#S&tQ>ei9yT_$l^^Jq~B)w)Dx5~wflpyGjl;$|D-*3|Ey&cIVf zQQ>O4xnpw1J5qFZ>vrrF3xnZr?@0cKS7jH}>rD3MR+J7Fh9b5boA)gYbFN{K#Psd^ zJFVMyI^puYRQ_5!g)ZL{v8LFyb}_cNdlMz`V)MSUP@;?4g^TkcMdn(oJ6mn+xB9hK z8%@95*t-fiY!kz+pXK1!c?@?G|2juPG`G2WpS(By4Rhw++5v-O73^3 z&Y{j4w;{IrQsd^$R%h;|EPrZiXT6n!v3$SXX>Me>9<9p=I+A8U9!YKOz^Yq2_m`VH zueMO5M+)pTUIUPKNv`|Q59em^AI>;3+z4>&J?iYkwTgI;6<&saw_a=4FGG_@U5yy zT$r`i>sz;OwUMFg$ym5$8c!2x5?TQh#Wfi;H!egJoQu|kMBTX;now+OH3)uL((Mo% z-P&H2Y+pbk@v+AJx7BPXQp|Y)QM_)+mwQLy|YVFxprz0zMt<~5JH+OH{f^*iI?bV%@ ztqj%hi|j82(a7j&B&>?&?$!NVkfP`>k)CR58&&G$nLU)vPc1+!k;tr?M;Nv z6gV}+SXy8q$6EL$d%6%Ra-e6^ACrfL-PVeJcRP#kY;ASwk@1mHS`$J;zSPmUHp8oK zWQR*w|C?)#owbGC&h~ES2=QY0Hyaz#GKp~17V>Il#T}`IUJ||5nV~#bN9;E5MPb=q z*@{w(bz8X7Xy3uEL)f?|brclBQM9=bYuAxocMD?CrxN2cW6tm}E8%=)?9PJV@?}P|g9=vv# z-%4H~pUW_@z8)@3+$K|+^aw>=Vo`XT;jSIcalckHe3A>}-HLUY>F-|HT?K9N4m?il45gY$(p=WYs>Io2iwQtB)VgcG-+LC zi>6E0=8lxOZ3Jk)5oN>=TK}d06&s9zq_#rC24eswxU*p);61U zd?_~(7E@5Xj)29hoy*VF85_AO#$=n_*UtPtAO5bxP_fdA+Z+*4A)Lq^KMZpnMDA zm!-iSS_qo?h#|3E@3^JCX8xnLd`D4wGJ|mqcLbf6<{Ce_we#+|E%fcXzeQjd)>P&s*(~C3p+H`&X>g?>H zBxM~+TAWy#nO~`2v#j}r`I#_XTb`JlovBYQ%}l(wxKNv4Sq{s!`4>o9xkB3X%yd|| zx&vu>5&1Kc}iwb6ab;h^8%oFUXfLEZ4#^Y753#4~s2aPy+fMPdR_p5Tkg}`nS~z zE1$OI)Z_t`sx{Mid6hY{(B+rxl?-QjVQJpLq>3aL>ztJ(P#Fx{muoY#(_wCA<;ucz zxH|vh{KCugVR~lr>I*N-EY)lC*A`x!3G)*xwQFF0X<~l4wo+S|7q-GBbBZ1#Ic$w~ zG#vxf+*e0)%(HzoS#Iv5sh7?2JDRSkI+{9V=HSuvtI<$AnzNi)jz{w%T3Npx&C8v* z$7BjPP0TS_=B+y(c<7~ejDGI&=^h2dRq$~Yk4u}yrdmJR2y5}?ZTwP4bKJRf460`^ zOQm#a#QRFRWaFC$%QYJ;m7Q@)8z2?(kSl^i`i2 zg~ea=M9)q9#KKbj+RW0jAe*br7hWx@pWyRj~lzeVyidv z5K4gMQHsZM*;>{}EV^b`AQra`LR8{mEn8^-#ie46BlFqW>NM~Y>}++mP|$Tul)J0| zZ2g~s=uzAf3Fhbt^C*hK)vaxA&0NzAxm*tuQW$f=X{Ek2b2*AD3#KwlOB0{A1h2X@ z^U~Fsa}zZvV0n3FZgTe1VQyji>g-IgI`qLDPb{q{Fg-KD z?0VxdHAXxqYpXtm?pY}`9w{#h&^qH-q92o{^_f>{D_Q4t5ojKBf(^NP1NNCk6Ukn3 z=9Q_LMI+!BXJ!^*pKCMW>N2EgRXjMm@IshcxC#$MXcy)gWfPY zD+^N#vl-D(OfD>m8%?jML_WM1hzWq@I;>hRz!tKc?j8U}GgzOzdinBx}J3v(O;YK3PvvVG$+A{D~TSpFtxBWTboQ7lMAoROxMl8vi{OcTg2Nk znP&01iTT=Pn4%u3Ud=@TY(tY3roi;f)a-CDpQiK#fFS+qVku^0fgHjlvs`~KUgt~kH7c_?mvY9>t9=BI^tYpu?R7M5lJ z4@OeUX4)!Hps1*al$w*l)RhSkO<(ZYEDDyMRA6Fynps(9on;4R%)=VPtQNFcDhtl? z@EaZx@+t2~#+o*_+S(`SaJIl-whMM{zS-eWmQtcqI&HGtYO-jNqD+D4i%e0|Hi0uC zYz5*xX~yFnw{&;~Zx23c>0LC}rFksKSDPy=oZIGwKWb08ZyO^~%dKQ};W}@tiQFHD z6%0V@P1moeyrpJmcV{!YX!4l+G9jK_NgK1tpEBKQ;C61K|5)0}jM9FASxsyOXa^CW zo=!q>gg~9kHp*NFsf}z$?wpoe+?d#CgQg8Uo$46ty|H17h`ge<+;FGA(Dd^T@qKw` zYr{2sSi%x$ZP-z`m_nK25ecHR?$ID*%N)krSXTj~m#Vlej~4 z;6lbEClEou9pw`ZWWJ&-HBXWKYz_}bl!ZALrh_1MHl%nm%$C4fe?9di`{LRg*Jco| zW42Y|nH#1n%@CfL&xM!oG}+Uv<+-3|WlJ_qxFjUD+AXTE&a;`Gysxo-YPDXU*xcG& zW@4N7&xc1kIRDs2+G%$dcH$llSlif!R(EVo3H9XrQK|npooror$!w>19dC1*H?)cp94KLtVfQ~j-wXgeXb6&WvA)4@h3p0{Z1e?|(Lp^ln5^h*qgX-L= zAXqb0YC{xfz``xw%tLE!LHoqrXGJc3>Q=qpeyxQleuUk`^MT!A;C24LiE|uzs0O)Z zmFS$&LFa`SD-TJ@%W&f&n}ltHbgseiS>NvTSHbN$yR~(9ciT^b)Yw~SNPAcmAL*+t z5gxmOY3t569}1*6jcS#3657jAMq3$JxnhDk(t$VX?BCns!8Bs(>`tZM6QO?L9a z>`r#HMcJvX-NVfTolI)YnvSc+jka(bhw3)^h;7ih#yu!vo6QYcj#4urL{oM%Y(a~b zD<@N%!qyt|uL({zVLA}lwbkg5T++sz;zNS(_5UPVPo5NaCj{nurr&h96>{m z3Ye=amoIu?vqiE~4T;ZM;$-VKUNA;~HRc*=#_EJ^XNUt9_k82ieMv@HCe$L#4rqi| zFQAN|(S{GWy|Ws&A)7WQdZQQ3CycojoT5m?;$~+G*ZuBJvzE_yEvbT30cyjmxb@n? zrma!o5*;MVxd!b~+hjA=^@m!YgNVY*?1JF__WfSzzAe1y+9fktF@+0oC+>>IbD$ik zT4UYn1>=%Ci{E8Ojt+(aHg zTy@(v5W*+fV~^z()tM?g4q+0|PQUnmqsi+i7FBRz`+|*fVf#t5HjJP>!;Z8V`L`E65HyR#kpH{E!JHZtOr&=iCXJM6uPFhNEuF^!N!*@v~=; z6gdjPZ(c~fGvA5?5ct~G&fUmJntTZin|=!*O8krr6{PV%oyTKq`2ZL!eRi}WvYPE~ zvPe-U1q30h3Zq~dRz~X^w-c=+HE}y)qbgt}O^*0c;R2$TnSG-vL_3EHx|_jXkkn)k z_AaZc>E`N=+28ChY2{Y86ImNu$hdm}+t?3_+GwD-bT(=Y$!sTrGfSU!*}|btnC7 z)1(Gv#z5x9WPowjQDGQSG9P8E2u#diR)8~`ueNr!Hg!H-7HlD!Rtqv2I@nNJ?qP9Y z_|2pf(W)_>j))q!WU*zGl-&)my)DWmmUy|v#gpAmR~vbRv8Js=_7_8KA;+g!$@);B z*4BAJ8A3Xp5&g~pDq;-g&bA$D(|kI8fl-T^NbX)FUGA?Auh|hrmO+4J?>;UN~orQB2?#k2(Ci>eiukUKN|0ZXxV5lRq z&rZ{6oh$h|-+V2b2o5jHkQQy%HWLBMgh2Ac7lD2AdVvAlZ0&9yU&V2S+TEp|w6#aJ zoeQ(>bn52zh`K_DEgB|eBOS~wYFB& z3p>7aN3cP189W{`eE10@q(@zz0oy2%VU%J<5#5rnnB>w=DaKvaz>83n^-}Yd zF7ij$n2ZAst(7id)NO}Z&iLJ~pXYsx6SUF(P}B^O3n}nq3OtnpPp7~$De&fLCyyJe^I;MB~wycN@m^!`g)7eL}`nO))Qhq%QR=Q-ONw|emyxz&hk zXY^^l&+Er1UubsnBp2hH-{@*7UJUTFgT8JJ90q98?V_o^+x~d8{Nj&{RmMwUcut$}wvJ;_h~zYA6PoS?g&+mAWE3 zK+|FONmZ=d#bp%^rMcVdIEPsKQyX=t>yp0&3xwCUdzI0FQivxoTp(y>bUr@1d#-NY z+`1P*cJz`L5pAd_ASoVvRCjSa$)e@Sdy74lfj zi_U?V7h}qE^U`nhDz_Lf)KZ|ANn-QL^ zGu4b8LTCLLC3zcFjyvAq&>asM^sH;VWWm-nFW{>(oINY9e>~E~*0s1cn%K;5xE1Rx z>>Mi2As!hHb_3B1E^l*vqp_X|C3Npr2QMsX9B|=c3qqm$7Q0hE^I`5XE1>b`4AI6S zbJ$(N*)URh_qM5TtKbYZ?7Ea3;X#e4;Krv{~8?d*skmc_MSqsSnHQD%?dASL8O5W~~|rcB96U=s>g`!$!I>oRMpc$7xEjbdEH}vpGn$Gvba3MVhpv+h9-I16SoI zT)&_6zwfr>BESZEC>k;A8rF?*7A!h}*wAhQgU=Yns%J4i6A`Ie(lCh}L6Tuy5uYT5 zgyA)p%e0z1doT0(3tPd`G`=& z#6_@zd5-au1C|cY2_oDMwgA$wvIy2sh{rXx*u{v&W5mZIxUsp#R~ZT(K`bon0enyK zNCF0jt(k2BqW!(@Y+sk)H}z#!@hX^c0YG?8I~vE%(rz+~mExKT0HfE}*Yc@&?%Pg_ zx3scpZg;1+XtEhQHiPAQcY3x0>`qQose4r2ITA_5R6mAk$hI{~4l8a~T%7o$@}x{{ zw840;Ff>c9ifjv~-qg*act*xuw3~Q(Z{4r6VPko!kU&&8r^QGd`3$9Eaq1|XtE{*x zX5!KqeTOH-D4c?r#JJRa-U?xDJLMULFjJ?+GSqCI`$U@&Pq!g`Bl#)q6^aqMV{vut zxaHcN3ZyG|gnh$bsfBfY8mKQctj?h%d5IVgAg2v(dqZ`paf2B?P&x-sV}*R7m{E&n z%NP=u-1_cXGe4(o9Uo1#5vNT+kHi~vaqZ-qa(1FE!R5Q^DpvR~Q(H`{?}4~YEe8a* zu=OpJaOv0!6(u6nTt0J>1({Zu!2hwkf*T#H|hZZOU@ z?l!yf90$>x;r+>%?A{BH7x+{tN`4SFN7LQ=dS|Qa(pD-m(aHQIGf2!`t?{_abO?le zntbD1oyacq8JK0G!uA?a6>%>rOG5k`{0!JQGq0avt1#!_5g@EW*P(q&DKO^5ZKMy~ z$E~g`Cb;Ov?k*aYXA$MNjTp68x{heYj?c;KbZNO`Y961Tt^0%B!dq>$JK6S!H-eSW z+!2`0Z7@8Ql>QR|U@m zn@Hx?QgRBbG~o>QDXesHV*LD5alb2FK@=1SeHQy!ibtm=3t7&J5ibQ-NnW|DM4@K9 z>6l?);wH;t?;-9^q<-m8W3p{XXcm&sqJ?ccn|_^%(XG#A_Bc6dv5BV(2Z@Rw-X7J~ zgCD3OGmEGZj_0dFd}RXKFwco;Yi!zM*?rB}MS_@*+N3qUO?hH}XAI5mA%|uz5m?gQ zv0`ZfWBm4l1W;UnN;WMQBgUi|e?}1}R|o}Xbs=-owz(9ubCKCTcYZ>neXelohmUs@ z&w2SSW6fTs-fn{(|5}%D;UT5jce|8i0i_f)XACMeyOtU8oK(5;iuW=tyDPy;6z*nv ziDJS8V}x-%!${A9Nq$-+lVE;(%F<#`9i+QcmYzkFb4Vu_qRNf7fxdnrBov}n*FH)C z7Gicj<33>mN@l-T?v9x#&7j8Mz?xAPdFZJ4bvq^&%p!usu0&aV4=D|2sh{jsvspwr zeiXo2t{6_&p+sbhwt*VGw>3^}vODT&c`lHwnZ?H~Rya6@+jqn#G16iWIR&%QY;oUC zscrvQLb@&=%f`L!dfe{zty=FThShKi@&z8VFZoUb4bNCO!fM-Zg>R0r&FGtO#WXvd zEe~GY5#*d&Q+zFjBN(y&SXonL zWD<=(o8PVkcJB3M$+&mJHLh6GtN=d(paUP;$1cR0GH`ucR9)28%+_h>V5pgk4RhRz zHf4CPY!y9q><~j7iMxp{n!Kj*?#dp9c zTc}c2^&MD<{G)#U;}WfCQS(p;m^Ge53#vkffhpT5#}m2Ti1SsG+OoBL9xaH4Jkgey zX>EbO!#)*5-MH%(6VejZZt`}e753oV1kO6nqtjhm5XE%9j$u0vd73GcLuqayA4)tF zHDft8!|dfti@fRF^A|6c$E+hpZ2WjhHWH^1MY96}g(7Yjkoc8*M5$}ouDH8+_u?^+-Zu;~9yEt`F) z1JL>4vLtzbBfv%XuO&INWG-X_Fhi`b&P_bJPsM`CGXX8d&z-7*ZxweXMf?@Ys@uO4;Yzz=cNQ4Shu;0C|4wF(%|) z#)RUcAg_c!2eH~Nv}=sQB`RCR@%d zXGSj#c0@87;q%1&e2xJ{eqPlBiG~X1BTW1BU>X0RcJS=W=rKoRlbvg4w zVLL1H+}QY!I?(MRRkn=HN=Me!o|H=uyl!o@jBbW`OVQU2cKt9PQ3l^Mu7!b!f z^i(@$gv@t`PK0lxTTzb29C3??;+^F<+^$l8#G|NJh$hrwA# z%DV^5oL;$WtIKc2C(p9)i2<;E%Q5pT72HTsuE>(lA#}sngeqhx-;Y}Y1l)m>`D>DY z2K2b&ptxL*wwV2d1&BIgS7=pqScMkBh}h8Z1xt+T1d5+njznSNA|@py#Vcz>?J-*yGI66f3z5c=R%DvvfUcGOSFh=g)+bVLFn)|<68ho&Fs%P{} ze6LY&lwucoU*dgZfO>mx>$!i1vosk-}|oWg1yQNe>FwkQi=VyC_6{e zOCY4I{?s z;CV-LxmxLrj*3`-ZVzUa+vph|P%8jCy8run{DB^Sq{koY@uxfvf*$>P0PyI+ zNj;d{(Sr}@A(A>6(}NitJ$OWq$Mkqy56yp*zm|sj)1sTl2L~S<-ROaAM-N1tyM0xD zQ%gTVbml339_d1O(w^tS`S6$L_-)Be{;J#v(v8d}zZSm5FIVzKbJ9Dc<3#0`DmTLA zyyz4~Huzsvt6`RGcBuGC$_CFSDK+A^__=XDsX_G}a#nfo5^9F?j}iG8g|3m!MQIw@ zrC62Uhf0t%Na=(-#JPYQ_~l|jn*K&EW5y6SNQw`t%A;7xwoD)sA-sl*guuV>?Y zj#5nkZ&PIt2W4%UNn|9U5vh~h)AIbf}z5ABV|*1(f@@ za>y2qdRyF-e4oJfbs2uSR!_l{{{0L zKSlgLf%(oecnS-{hhni_HP9i=q?Ml}>v7O&ZTSp;-%ktu z&xdX>^p1>-kM&nWWuO##Dg&c?|3QDXr(EVSrbYSQFXDq4s`m8AmGD4d9Xv7^`bPMV zU~eh(D>zc(x9&%WMu(`?GcrJAWTZdz^o;d|&@(X1y8iKjYH!cTh=t2^G`jaIl>rJ; zcZg2j>8mBF`Js}KMY3esd%t11GW}wQ@Y_z{gO$L_2YhGZjTm``208xO^ zj~5{H_v)b_EisyZV!uypIn|!tF+FL@AOn25<>M>%IMxdr`M9bD-SUP z4+QgeRL%nqIRn)&{y^v-Q%B55Uvx;7g*BQs@06ygr(6PW4}=GLfU@_2aOQy?b@R2J z%60Gfd)7^5?|Y;u=QnxVxNwg#@B0Hn#{N(obLBi`8er#bn(ZAK-5>ocJ>f6&EuCuT zPP59l75IirW39>u2-h>#J^R*YwA#yAhRs z;fDrd$*dhCj{Q#qSNXwF-tsC!RL}wtj~PhvECQoB7UTPDe2<+Fwe2@34@FpLxMGQ; z`^}iB5Q(BW(TbY65!=N}I}FQ+)eaV8-gOA%0ij8p{B**}83LlE{WBDkn^A8O&NuzN z|8_s@ANoN$&N)3wdX)7T(qmW;{rq|VNj*;KpMu)kZC#!uuqx=8i=>9K_?*DE1H-AOaf|sD<{hu2y{P`;-xM;Vs z|0UI&an&#)#8sN|#!jE8_Eq-Z(ZAZ*3C(q!_mc)yi~u4YTYSirIF(AkRpm1#U=U09 z7?gz3y@Z&12{HGEg_wK8F1LQCr}C1D`di|%@>2gFh%Ek4kN-=LQ9UYpJfO!1^mtH@ z59)DNkB9X5kRIcDJgmoG(xa-!hxK?~j|n|y^jOs6B|Wa{0c(f;rXIKSxUI(>Jz9GF zB#$4S#_hHkp1^4&M=pnq@x3<8E!qEXsn8GU!QZx#Vc&_+TiO2||A*%4dpMkdVEKP& z7>s?EY59&3=J|dT=(Vj=m9Jl zDbZvE6ne0z1SZ!5%q~Lf!BJf3HjoPXA2RwJIA_Bo^z@Ahips#)iBdmmpfWH%dIk;G zGeRF|(>E)xmxs}29uy1iy(v1CAY=&Dp(^8{$ndbmA!QnSeORr(ZXNk^MG5yP!cNm* zsc&q2SbYqOE%zTEf!EoSLTvSydMY=Rc%w2fSn99AILhPf^H>?zewbH)zxQ=Y3;@dB z8y^1#abpC~OFb&=eSJg)4)%!1U}Ba?e0zLs92JKc(RNu1teq$gAbiTCjINbk(2S2U zJOoa8DD;k=sk{!8k}yU;5G1>2mDhptjYmtPgh9+3)^?f3EBkwtzfsvgPXV&7v$KZP z(brQR9hDXt9Thq*8tN}-QG&Vx{ZIzRf+6Er`%FN!(u)O_ALh$KQ=XgDwk-YVBmYmED6Y%Z^Zz6VQe zxVjR!4pS-*vOnou;-!YMxK)+Xr@+4_s^CK<=r7hKswCjYn0!M5g9jA{uUyw!0||CsAYJD%3i0)xLTvCl>91jb zNz{_aj^Wr56a67n?vxM~1FVJ0rGau~eGGwT36=eionT(qEBlziNI0w{a!-^><-T&c z7mmI#%(7{G;7qxErgtdxRSq7My!>G4bmdNE|CzE@3FSV@swi#t^_(6!Js^p#whTw5 z-cvKD2Z$M}O1&pNW*95=4tq?BAN-*;A{D@qrWeJZaBUqD{0+-znPTb;4i6 z{yOQevcHD>HR!JruTrTO=uQvE_fUL;V@of=yUHIhIq@-Ox^iQrx0g|1-$O)-F^{}N zeoqkWsXSrI=71UaU5h`XtX)$x>mt>II~KlTWIL-T_C2~3hWn-%VDFm}CY*pUO|ti` zf%B}C!s$}~nD{&{U(oh+#jyz2QsQX}z%|B-(&|Wlgm!P`75L}MAfyeNfvmFk>#z`} z03H202N_J9U!lJB`S%Q{AStu=3zZwlUVAfQLG%ywJb1;VIQ9bq1siAYO^#F`2ni^{ z469}G3=;4I3dQo0cYwV2EeU@#3x$$rq zJTGU5+c9N(9W07vE7!e^>#Xx73-_xAqF$!vtA@TasQoi8UH9K|vl0=C-LwBD3M?~K z_TPf4OuANFdK1oz)7k!8h+1#>ty2P7*}e|6if=&}D9*AF57Np1?GKcgammncqECNY z_8Z8w*&aq~VJGZ=n@QtoqWpC-H4e>FG;3HhP|UiyCsldR6~R4U%hU4y+vugrKD2^4 z^-aUV>y;H)j}tgUX4E0~5&SO8_usDUf5Rqv-{dBiUOCza%;)|c>y=iYPl1b?^8K%t zZOZq*O7Nsehawj%`@7{@>EYqZMUOjXN&X@u|00Ic=;&~nVSlx9kp<-tN*5CEXHtKe z8op$t$o@}}!8%kl{X7d?*+kEmOL*C2%o)9}8H!HndGL_y`fo4|qx&7_LdXoco~{le z!bi?Xl1-~S`DDch+RMhKMo>jDkEx*!a@+(c`CF_9ztSpFW=oBSlu(J1^5pa6& z)0O>SQ&W3?Pzo9hMySlh|2j|jk{Tf6OH>(DnemY!rHnJ%k~jj#N;E4?t(17F-)B<4 zzn1s=YwE1lkESb+h5-Y`lQcuarT(&2-ut5j!XHJLel3Ea!XqrDU-wQFh5xNLA8)g= z_s6O79|J7FMHC4lR&{{;I#;UALZr}p#cg{V zvX6whGFkjjY&!SPXsxI<*$ozAlFmOfo|Xf$yF|B99{HNUYrQibSVpf2N-gCe&8|X7 z4^FOC_D}Nf1A#T4q@4aqydjv>6Io>@3wwY69a*v}{2lDiNa|!*Hl+WKmG1xHKq0NS zj&_M1B+_8j{3AJB0zU%Q1zfdsf*j>C$q7o+qV91io9q+l{6in~RA$79H4E~@@O;a$ zzzZ3Hh^LT^tcs7!Sh5Vel`)zy7sj#0;B{ZS0MXvtqjQ7Ui%1l);2cenX6u%hB#dA3 zb<0a9qBcdVAh%Hg5&+)s(=ONJ>B=;;7U)Wu;I?Jb7zYPe9F?~pJ;T8ewTNnhfp{+1R z10wpLjy+TQ2&p)Fu&@p;GS99#neRU!{N`}fo2bt0zcTwO%DH-rh#O9Kvm@?l1lmB$OF{@ z`X=SzQgS0 z4JpPw@Xc&sp#6&EjB3tGH-QDwxOn@mVa6X>@fT#rh`$al{*bf-?U9iEiK++iwUo;b zR7+SIc|9DN#>EFedsaE)%96@f4RICOl6VJ%E}024jE3tSA7(LG#X$wpjSoYAJ#s$v z4x^r`eM|+FK|d#PhaW8ACIa{smV}F9CNb+GnP})?Br%!N)ig@Vz2TEc5T)ExL2F_y zmf~!0Ot~}6F=%V_jv8C%AF@!6aASE@|7Bt*Rv~nFxEFwj8QEzhBt}Q(!83Hd3G8k) z?*H_#B!+ZGcYCm13Q^{w*U5HB|J=*Fc_216H^eAk>;SqZ?PT3 z>wnVAFb(CUG2kybA-u|O0^mjjmWh|J3<~5x0UE7eG#zg-0rI@WA(P0IC>=2|-bZFE z-)93-`EkLIIva)!Wb+?fgrn0U1o>n#@%Jf1q2FhDe3CyF^1bDe(GtjhQ*CJad4ol$ z)z-20guyk52bbc@2=3sLuOTj-^gLV&Dq@qVcg&TDCCWVLMdKzR-UMtbtppSH17HW$ zM^~u)4@iF;)}aqo!7XOfA=OH84T|xyeC)~<%`m;MFuGS5z0PNg2HqMQ4skW06(uQ) zz8GR_8C-ox3T7Jk>B z-?dU_RCh*?n#JF8NZuj^9Ta=Gr?%%*=p~0x?a0>9^LcwttAa3u>yUB>KCa(a-oZ!v zFvIu093Ej8XD@_bU?*p=mk05s<%tWSpJNXEfB(TRz4kwR>yv-&?(cp6T<5$0_&@vR z&wux)9_sw!kG{S4OOOBD(=W{R4?gn3Km4mBcmBcN^44!%`tiU2SN`NT?*F4Ny|Mex z2fzD|4*uz9PCs+%za9Dc|K{BP`CI?)i;ui^a&iBE`@PN!-}_(x??=DzBmeA$|M|~; zZ~AX`zVau3`de@O-f3*lZ*68b{kQ_f zkM{NK{YU3|_TGrMh0+gJo?C40Y_#}PFBk02rNlffyKeM&HQhIQyc%yhKlkLh^ZNhs zYWzvC=Qf+W9X{gyc-61w^7|Wh6ZW~A&pz9DX7!nmU--mRPdCqB{KSJjE4^oy@3yvS zi7)-H+L!Hm%Kz2puU~uU>F@k|<0&{;#-T&;JN&QQ(ANp!8MS#_>)Vv*Ze6!Y9QJU!`yf;}u?<8z{ao0Rk$) zp+izSYPcC5%|@ZSDmnzMc6EnEw?=dwq6%ibttO=v*L@bhQ?kYprSO^KdeFfp!K_~V z_KRw&mhe?4$opjeTg4en zeN@5H79-IpbhLPtG36smb5f;@C@PIu*nKzn8Ruuee?2+$Id*7$XcI_<^U(Jhj^XIQ zSs3_O_-qJ&>CdCuOCg+kjM3^U&N}yuLf@xCcvhDVbkNReDTn(K-1CKSK77$`B%S9{ z!WY7Y@JZfZ4AdJ+m0sNaF+9NE?K1<3!hrH*|}|;5l&4rTYgcB{!dR5+p-*;P6$I8G$+~x z$VAZ&nWUWG9YZ!zCJPVkMj8kur-g7rRN@jO3}vAcw=7lo4W~3;87%beumm8^FA;>( zIt0B+>*6l%m!4VxvY)gxwc*lJecom~x@T7`yVX@z5?XU=W&1cmbm|r{-OAIsi~wvY z7Cy5;DM^xUuFXqGdbu=A+%G=U^|Li{Zc$HiHJ6!*a-oD%N|hvRP&S{WsJSFfTJ-pK)V6->Su@AMn@4K~M-kdwCTk{k z$p_QV2%_RF>6+Q+4OeZ``Jx=nu;g-wx3Cjxj{v9WN*8WKJ=9qw21GxQ3|nMwH9Q%^`;gPBPvRE!2SZ zp5+J&4fsMms2r&unKl9BKR+__HKoRhq5 zl>xTKqjnVfHKP~T>!Ka?eOwEom6R`NCAs-LFCo=P+|<>>z@wt}&;G?BP4-TM_SD}7 zG_poN4xOZ=C_&uea)43PrCq;2V>q_`=cKXoYXZ)9nny_tac<5F4WqIa&?ZYMd^VRp zNA;P@KGF4`XKm&^xlS8_`yd~OmrRpKtKC5u54O_s6bh%hJ4J1hlM>vLdK z94M_R>X07N49Gg2;hn}aQ)n%mDz+W={C2@|g}Q3mJ6u}C?U(0sm_JD?q3@IY@jh{mvH2CiFr!Pf!n?DG^oEGe zEvVv3CrPkQl;dd~VlWKJ#=H%j;m6YqNcKpA`&DphW=W}hwdtB!W7#yEMVO_H=54Ti!V3xa$)pv-SFtqg}V?b zgF>#5w3rJ+>OrYt@2`7el@rcS7+*Or9*%1ccPQZ>v5>TXjz6uEWPeH@Xt2-GLMPNo z5wN1Z4w6JxGQUqsOjg5lQNnzZw`59^C|_XR^F=80aeO$g({58ofXeccUcOIwl?&Z! zM;aTOXGr>6v=-nWmCQ9$csX%#H>db`WxFPe!j;BR`^|a5OC_#E;=IesBG`EIKoE_}fGF}L(dJ6+^H;tjEp7)Bm} zo4hq|vd_9(OW4vZN|z^zpIf)$O2<{P2gWpdxb;x;Irve03q_xTdX?O9y7*-HOr#A_ zifH2r-p}w>{Nub?i9hidYsqOW?7fpnA`PQxlIX)OLa~5IR)9;AG>tArG(E{S$gK+r zDSetnGR6r<@8a^c3WD6cR68P9iAEt>X!mc!sBKMzi##bm5V(B2H>7IIN3Qfu`jHg#(YwLy%Pd#UM@?guR_}sB-&@fa8QigF z*V&aiR|+o?VGhbB7LluP4i_%8dBA5-fB5coNlOw!sKtYlBOhH`IKE(3}% zID(2T%4e!poD9@<()SAMLl)ryq0)`fWTu8s$aZ%A?k3zsYKe4xw8AI>+)4o9?UXHQz~K?uGFKj;47&lFR?QonnOX(^H;|Tnhuk^r7~Y&W#QZ#KJ@N) zY{HLvUNu~a?dSJzBzv@uQ;#+$4|)4l(-E@U+-uJo`y*0}Nh2kRsd~wt0L}-}+^124 zr6(khi_&|$tDRyCls;mEgw4W%vGlw@sW0BxTdagphlSKUZQR9GQrREg4OPSRlzV|L%3fq^$Er z2f#G*C5E?Kbg(2zpCqIk14kFy$0@p8Y|u*x*I)0^%l`YT3Rh#~&}+L;F3;k_&^y!X z>vQ@Y1KU4qHskmBLin?fhU)Wq(SH;Amydz%o}jC%Kg*WMzxnT9cMS9dU0LSJ>0UP` z?0W;q@uTS~cZI)KzT6Xj-M8GW>aX`c&HEafu+DP^O|{GtQu?vZd!A2RELgd(_5X|i zM<)+B*kbYY{_z;=FXY4|bgODyL!j=^j_XC~FI(u5_efB!6>@#mCNE+#b=Ahd6TaGi zmhO6hDc@%~+R`5ZRu7}rC;4vid>Z2p9E34o?cqaz{`o@})vPc~3_eoGlV;h(rbwP> z^sB%ps8fL$;EC zvM2XPX*Xq=bbU@x|8XXVc4lcqru({$cAK$irFt71NTsU$`B?IDj&=F1v@5WKH6YA* z*;m33(dI&ILyAu=Cp;)7tB=LuUjW8)W`VKG#($1;_b$uFEpJagV(;6>(_Q8;Hmla! Izh0037e2x|EC2ui literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Mono.Http.dll b/external/binary-reference-assemblies/v2.0/Mono.Http.dll new file mode 100644 index 0000000000000000000000000000000000000000..613fd731893ad36db167e2216f00b668e72b07a4 GIT binary patch literal 20480 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 Z)P>yyc6az-OFSjdWGlyo<#V@fh@X4=9u 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 n#}*YUC_XKCHg>oC8LTn)35&pZ6bK- literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Mono.Messaging.RabbitMQ.dll b/external/binary-reference-assemblies/v2.0/Mono.Messaging.RabbitMQ.dll new file mode 100644 index 0000000000000000000000000000000000000000..ade3e5a8b0ef7f2695020f4beb27edde7ecb89bc GIT binary patch literal 26112 zcmeHw33yx8mH&BiEX#H*={?y_Ol%@U(hwGdfsllzBwm!n#PTLNAuM%d>BSb&;z)85 zLkH}#v<#&s!%{+NN!ql9vQtV4od9VWX#YSdZE0aBh5lLF(uJ1J6d3-@@0_>jc_9qn z*MEoan^AZ_-E;1__nv$1z2|PvB7FMgR6<0v@Vxsj(LMO)&nm%#!#JY7^Y8W2UFDB8 z-lKFr))*a5=7S@->`*S24#s1dOtugl)PuRvOfZ=Vws%K@>1;x8s;a73U}oJDBI;C1 z=rd1g{Z?tulee)_aT9$UoI!)DeFEP>JmYv+yCA+?hTaH?{`^f3-~pdMs28f`m;Z|2 zCTWP!J?9c_;P7suSJ@C#KjTERr}F+Qbdbp7kn@0E>!6zo`i=tVxn}|pCv`RT1|^>$ z(Wa)Hp325e9mc_CnN4^cpH)PyO}TsyVn!WyBft$hh{y3+C5Ce_5PSpm=MU@VqEh;4 zkm$wJi4*~xPM<>Yvj~c#jF9h-L~VKj%!+S+|uKhvL20Ql zbohBhJ%>k4o+T2e7=7gMHT@m!pbMb?S__%hRF+MeLQmaM3c5eS;@l+4 zhWTHvEa$d)OF4lc%l6xZ$A?G9^G!St;i;X?WJekF9ZE$FC+HkvPEu^Zfd)#zrIp=?DIm>S?XZ{u7cxg{Lr`->Z zmmU@T3lN%AuqMj{za}`Zk~!Ui1)!H!&gN8~n0>))va4INX#i?>Y zFI`*3@^=V+Pw*?gn|&3u$Ir3%_&M#P2)pTze%5)8${G%+oa!G`uH9}4-wTArB(_%L zRP7pTpqiEW@M=t*YErWy>!&ymd`PYAVvJ};6lOS;o&mr!nn z%iBaZ()#fr)LB1%wBRzqcELWuGX*yb7J$9upOo-U!7mB!7kpmu9YLRq^E^y&nc!)H zLxS4`|50$a-~qv>1piIYSHd|g5)28RCO8Ugrb`5`6TD4uzu=Dre=GPOf(^4+{uIGp z!K~m#f?pE6S@3?r9|%4#_*X%HDd(_AuthK`I8-`|8fm<=40uUtCGhf6AFR8lGyr^{ zbPn**(s{tAA+OLcOSxbCy7Vwez7EMos&Fp^p5*4VMh+qOF_1BG*ywIX*vR3t?j?|M zmi2x2d~kl|=DznkgcW+r{V`x!*(zX78FLnuwFARtYk`{tx0bC#_*RMKvKr~WG6i@* z@Nq#y^PiS=LvpI-3cV?5U7iSHD?Dt0YR?8Br)s2n&*{Kc&&SbE&PHrc5S@@F=8k!q zeTqq4O+T->TXj+=`wTA)4`2FR&39Dx+x&T`^p%>2RcjUSQ0Z$mkE`te`SVcepFveh zxP&f72~VoVI-`UhQr@h2M)jI;4=GgpE0yOFUeP?H%&z^N$}ek+JH9Cq;}Gh+GDi_JMNU)rCQLWuBHRN_1a-Jb!zRP zw!o$aYe%$&Hg!(zdD=%zYUkWbYcJFmnG~1)=_2L%r`ostM_O^7J+;@{)CHcKYIkZ@ z+y$PyYCo?XWlCP)*ZxR(`f2aB4Z=W4Fgjx*yX=%LzgYA4u|+(t`n zirZ+pO>rBYY*P>Vn|&WOsR??zwn#mwJm|l{j^p}0qOC9`FQ#AD{zN;)rrxOirMA+d zAo-%U%A{T{cg=ZCYqcrwoY#w#vQcgJ*>O^ylWO+0S$Wd@IYnwh>}kbKcoxoiTeGN_ zm6PV|wbLOW2X*{bX?EQA=Z*x5)bn#k9n@dv?)7c7B`fNj)S-1Z zIO2}4dtE!-mRw!&315+Ft$SRxs0oTxof|mAl9V2KmPuVruho1iU{NnCuhd)___!_k zO3jx80}kr;K+LB8T+{4}+tj+c*EA<}WS~g()IA(X*pfYUj|Fs_+K9Lz2lZHB*ruMV zc}+XpK^+-zQq6%aj<}Bo(hlm7K-NJW78tRqG|JoRpdJh49MqG6f`j^HV4H(_C9uOm z{V8y+O^qSX^BmM;f%6^IlYt2b^~=Bo4(gS_MGopuflu4i<#q1_E;XqM`f6QCwUaue z`g4xBMb%e0sAbhxTa@Rvy7ua8O=>57x30rMJq+p#mL&bWuDkj=lloQ3vvn&}C)GNM zI#vCmLo%XXZ&R}l8Bo7$Q;QE-p?<|dwN9c=RrfmLBI?&{DuP^Yw5f9s8B)JtQ{Mn} zlTG~s)Xg^Koj0W3VpDDNGU}~1H45rBlVT6nV;y;eH9ci!XbKbzFcT)p3-l;weDUy=Ip zJSTPhq&S}cijqA4-Dl=!Ke!&nHq=y6~P{S>IsQ^GNFz7k787hMlj=n=tp z1Q+7yK%tF5my}h4^*nRZ!Z+~X^)>9^w7`2==2gklX_-8>jtceyT>9&FeHC(vO)inT z8}f!E=ZqCN7P1N*Eog8UT_)cM8?i>+*;X$4zO;xD<~&PGjvr zgKy|*gq_;nSH}7?8okH}Pv#uFUQP?loSS70qZFg`Vu>ZDt(=^q%w$ar8KcAxnj7ai z(@5dmX5t%d$78C*98=sAW|Cx06zt#_owhm;+Zu!8A`X|x*iq;jo9~Quh9^tDS5GL8 zU#ry&j-iPWeq37i0qM`&D`wK);2XWg=s8X_dVA3WSe~RPWA*2ddlr2Qrz?Iu-@>`f z5~Tv)m6XQW&6{}qc)o@6#FuC*v40&CoS?6JPWD}ba0}2^zQ(tU*iY}ImE}DMhb26K z@E$s+ydV6F%1`&*A!&EfP34;q{$6>)cYvNMKO6F|mS=!(m*;@NitWCqiPwW$sk@>R zoYN{ec38rns+d6dfr^WPKd!hG_Y>pO4jx7Ch^!W!N!lYZu1hwv-j8xZ^NUe>C_$7R*{miw0@|FaN2$~OpHCD`w~0WwfSHD(P z20DFQ(@1xK+ZZO88U>Mo>yGMAsEb_(sxJV(QGKazxyxU3iJGLw z8kavtD{HP)J6xyMWPBa2Xw9|Y$FTQ{QNHHO2!BFk*cT<~v*0J`rkbyVe}B!b>Q)z* zJ0>_Gc!}Un!CiuT1aB0)LvSDP2Hyd}9|%4n{HFzf1^i;|>%d!Tl@jhzIJw7_nHT;y z51dV360iFbu$pQWFHWEr0_*8SV32x&3n&9Tf<6a4n&!K_I5YnV@I?AtiIw+G!5X?AOv`z)sT3ywrmeNiRj|^SC8Ajh2^t=}dYZxQVW+@KS=-RC;Nc z{s2tTRk%4Bp*2-rD$onS9dw1)Lsu%FQ=8~3?k8%R=qAB$3Vz4^Cvd*!uBvUKN8Bd? zf8ve;pK-^4FStj6zjcoT|19{n`(lJk%02_EEMu8K*B8nji~ zSz1!tu6gMWA)my4Zt3O+Pef1sH z`>P+R#@zvCwo=S$<*+KQ;Hba;$!ela_5TXoT>l(!OZ|($k@{DGJL-Q2G-AKtejVY9 z>i-RRY5m*4YwF(xepSM^2;N;^g5%Ho>pj5#Bb<}Vsu2E#@ShX@@9Q;ilmq&sUgTH8XDSW8y14Iz2QjUFQBc94xtjP4d$U{F4U?FwX6ra za3fNV@S#8#ZucsIO;iOu0rR*Ey+j4Bf>mAALN$`0O2h1>q2GQCzeddAn#0 z@>bA$8W8S4-Y(q2G=j4Z=t6%w9N{p~MP0NI*iDOoJ#zEX3v^K*9R-;P(1kvC46vV$ z1!q0bg?sR3;AzlKp^ZQnolZ-DXV6k`&IGz>0$$Ta*V0FUU!acxucMW~-Kc?!z6RYZ zsX|$)RMKpv4d_+Y0R753pr&*KtCa|_R@nfYtDFHmL>U0qD{Z0#bN$0YH!D?Z8Gnr+C^ByP3HZ+_78F^ z=1lv0+|aSyY}BO+53LAi6Qe2p6l%+6@`XHgX5+DxPT_1O+Z5LG`PdMyj+^>ogM-OJ zxR*L?9^~bozat-x72?CxmeXSe9o&o_FC?>>c0HvJfkQ?LeRV8e$mYgO5}8^VOwF+; zn@y2bpqV(78BOcC7&4d|(>tn<>eP`CCG;Gsk;7{RG1j2SoRXWQiRNONJamHKlsutZ zPcFMHnLu`IhxK|c&r%$2%ce(S8Poz{2qi}21(QEAmP-x|7ijekOMZRc3a#F;I+@Zf zYJJ{G^^6XtlJRx=STwsu&rnM~ucrr7V;#-Qx@;nxjOViX?B>G2`ec4ImWmWc6UprR zL=SAx2WJwAwCnlgPzIH=%HqlltSuBqCUbhS`Q(nttcV^T%_R$Cleu;a4p@e^z zigfq)wS@-4Ep2N%x5r}rbwxYc49T9p?)4q4Lsv`KOz|E9wgPS4U0tEJXm?++ z`1VjF+R`;+U`WQNcu|UHsH5mqZBNzImP+cG0>uq4EIyOpKTE+w z%hzx=U!Y{ZJ((ZL=Jf>S$1?Hm!Lz3oV7uuNcDpDE13ZVEJCm6$dO|$qre<+*#p!_3 zGBMaLeQTe-nM4!;9jW6wnb}ZlET4>{kmNQ!7utr5TXJ|4$?_9sHJT(QPx;Zod_0#N z5vLq+5>peH^FmLoP|$OkJQa%GJeHzNHkwT9#1MhICe!W2MhnBxAQ|UrX)u=8dveLF zxHIMq@$9r_G?}1;o*9b_$8vh2Pmk-+oKU6Qn5fmKZykjbN>FGzD;?XBOpm5d&5q_W zaMHWJ7(y(6;?^MI*w6HhnU40JXcbu_P=nM;NQ zUE|LAjtV>@^NGT(x^4^=aJ5R$fKM=_=62ruQuQXM0-m8aG` zb+jjCmW;tXh9RL=DrL;_dD@BCz?gbY7^Y-&7#%vn9+^j6cYl=3IybQ! zr*wXZHm3^|<4(~N!>g4oxm;|lrGPiq21n6K#;a?@elu2}0va?sT7Xrt;((?xl$R`>S6$LN z8D>5r$fkz8$pXcxC#^pueliDhoi3e|h5HNfuIzS^VjdbUjX5~Ib)-nGjpc_6u|X`! zI6*|uKz(Z=(UB>fbfTp0;8``4*_K4lN?R2P$Ku1ujNTQ)P~gO^*~D0MYy_*NOyPv% zh1C+@lF4pQ>4_m-Vy4h}Lnx6>W|DafF&>vj&okG7x{S+l{I(=sv=8PVg( z&B?ftPjUDmA6Qj9pRHcYjM1W28xKBy^LAu78MhKj43~q(<27eCXLB&k7m^uKH!_w+ z*T~5VOSEWD4kZgbI)@-IikX+QC=TY96#PK4FwEw(#(a?{vOCaKWI@Ojw@)#CGR5(o zu|YUx4%yDe>@YUXoyaCw5?&_@cPXtN(F;Ai{=~Y;?4Nx)TzV#Nnw}H)=_4sDAEgwd zhqQ4AhTYlGagN-dqS;p6^k+s_jV9w;j21ScF^1#A#Rhfw46|?d=k>{rM6H-KbU0Wp z1F`KG>zz8gY-k^x9Y^0WZ)8 zAI*&kuF2uO5eA;=S2>SjiN>ggV@1^^W`?0Ge8*4~dd9IRL-oC*MPrVhJRq6#UIS9% zrVdDE7Q0Mwa0%ZYd`wLqZp(YJ=9IcSM-{i2HEKB7^f5Jk9I@QAaa3eFMh`Qm zj}?a#VGFU|wQyb1guw9R*u<)WTt|a=g ztUQe&gGEGWM_e}+hgg*G!d6_QxyH4|d4DFhEtX7iR8bxkz)=RKK6Ch43xQC21XX|$ z%@u$#(q+lb4%Z}$@!~FwRRQnY^TWovmsip7NK%EK(HshDOJUhfYuYF>Ix>P)3HJP0 z6Y`QUA)51&2>b3NuYy9d>HR$Ep((uQaU>o zJyGPFgAX&Tb>hMew3fF6+||&;tj)CJ8s`d{kT*0xwydpV>C8weZ*WeUYAx8|^9 z&h=+7oy3PHxBJwEo}CC5u#c*2CKW?gN0C}Nra~l3r_oR?gRqYDeX~bRGJ_+5n5tFB z1lGgzSw{=+0N`(UnaV45-E`c-Z?o2|F^5zrlaQp6iM1mE(+b8Ci2)Yi%>sAB1nX#o zWM5^>6FIDn(^yta5#_{YMs_MoavGnV;*8A6#YcBUFdne6iSFpbPC*vpQEV^7aP8Qw znVzgmFK}aX-;}APqlbeS4ZIOE_^o4RjMZ+TRy5CqOx5QC9XM^pywfm9MrE?pORCZ9X z{s^zeWG90~3KmFtEWGUW>}g_2Si#KNv1u}e9UR_EwPmwgk~;N|U;&)KGR_g*p52}i zF0T+Ad{i;Y9@Oe0+;H$M;-n1!WbQMiPnltKDKivC=fvVM&kGsj5LfcHdU`}J7$cf% zWihRdO*A`s12c(=W-T#$a~{na^9D7=WlP8nTpXIl2$K^H_Fi(%!4eW+jyN{6nj5fg zx6Xkv!o;bYr_tQ#Y8vsPQ2i?Ao1MuahrWQOXKA%!G- zWMcYM%OI8qahzRqS&kL7xh5;Fwak5*^JIeS$WC?A2B9sMVbdG>#xl}4CSjgqaI!Y* zP(!Mi!?I!Oxd>-41Di82 z+2VMOBa@k!EXg)78;Z%|DGH_w$8vZkKFd3tGG^aTdnil#qF>jWFL@3rDk)+LDuK}Y#b2nX?ENrpBPt_|=KQ~}?k_~YIJ zFo)RVjsUS3LhBKoqa-pJg;)@8omiU0z$xI3r7Ys{78PrIoc(y0*+FL4Td_+(EJe+h zO5IMxt0yN=y(K$SWN;9&OQFOPD71u5f?bv)&55idUb|XOMIa<`!MIBZ+ zgO^sUat+N`q77=N?0S9-Qo2-x?U0f@dO!~%oJ5K15Icq!XtJ~gAH)W46;gV6c}XtD&)Qqj2? z<+HhC;KykE-VdU46J8(U+RvoB)s%lbd%v&lx6Z741g}+LM*%AjNgL-rEc#w!4WTBy z;Dt*(4C9$B`QOlUuPtiUBfU3?7Y{!qy6rCN7D2nlF@o4F6)-wKBpTjT)G#bP4=2j# zdr9=ZA$Wj3P=ol#I)|zE!=m-oX^fFLS{oPL&~4^X{kQLn@9Wk7DT0>ec?mBK{GDv| zzB*m!)Ts&nB?kRs9~SL)Pt~sI{r)~909q%od;Q3pw&=0O%Nstu$J`s_dTwZTOeJOs&Nh_ZfB&`Ec-dP~M_#qv&mm}1E z@G44!E~UP{1V3g4$^%g~$?|CimC3CPjev$y4vjL5G5iB(SBg|F4gg4PkOG@ak#_u| zvY@M?LLI-PELh@cDD`;ot?)MlwPqx#ujeHFHNgr+9p9z)YH6=J{>6sU3bohkbt6mU z!8v>I2QJ$99(DYy`0I~)grr((vJ`C9DAnZly!7`L6A6Bo|LoT&J?Nxh`Lls2S-YVq7yaujFIsQ5YriK;0II4gx zwQ?^i?(+Dx8qS;%nI9+*&QiQyt)ro|EI6y&>vFk}1mCkrQR>YT4CEIeP81-{y3`Xa zHB`aDMK3p7BMS4PFjn^^);QxVYRGG3uznGMs5mp6kWZ9#>Tvj-tF;9cmHQ!WBlnJ*c*)tb`-R_m`9@s09pGFF9yIE?WyqWxbY{MtSc>ZAqN(&V|zgv^i3wiY?QDz{-%7ZvRT?P zZriZ1A#boby@XgtzZNz+pI=y9CqHVSRm1&}wu~$0HQF!;`_^k=Ho!3)#OWYWxmM;u zzf;lox&Om+m3vqfuA<9Z&UNu)xMOgnE6YlN7!5%1F&fc6+}puaU93x5OLNPBEJtTZ zV{pK+9)Y3FP|mQR1i}c+c`&I_UzyB;vY!=QSEaiKlCw=Cql2(751ENkkAgpK z<&Q!C186opeuR{hMP0QU@bYk1He?vFJ+v@{OKVR?p z_Bm&+uRHPiONi$2qLP-{*)Y{0}amO0lF4jEb z(0~`0d@!#|&5Fm&)YuM5J~HBC1wJS?4lh}E<5->+g^*Jm_Fzj{7QtV!BNZ?CIOQ;M zra%ZscYJt~f&HvDT8mush@U~elCK8_A)n$O$dz=4b=nZlNlAunSr^!$iI9l)UerTgZoA+)jT4>0y9b;%O{3SKYXAN>VLbLn9JVRi|uQyP!SaY4GOQIIiQ1krvb;hMJ^+d=Y^99yL{l`!3(R#HP!h z)i14Wq~x0!E`yijX@vOhCMcFGmdN)ie4M~-$32B}<#dMLtQYqzvlUCv#L}IX_JGUs zK|I{5L8LP@;#TB#4}$9)7d*-+ZH+~~gkYVx?+1~$kpo|i7?&VZ>uX6EWpKN3Z{uE? zq;o(ekjn^od@IFqDfCbZ{Y`R-7(Ik9v$)PYUf#<(%r|_9(;|HF!hV8B2=^V>p`mE6 z8De{_J~P?&oF{t{wykAtwz0uUqZGbaN`k|EhFgZOfbd=;+H2+KFZlUa8FrN}ddT`-X=XG_VobvP zYR5PKW(9l1)$pwBS3BT)H^Z~?X94daum-VaN}jRpnG!MQ)9thVh?TDbop`?E*>z}! zoE{aK<4|wD9zPDR7w~~A;kP|pNNc@F!LzD(bNFe(TBO#FGvo*e3tAx;0^?!0RDGEfyeuW9N{-JkRT~ncLdx dE4(N8pfBAJu4%Y!Czms|h2O7zq3(>I{{-{0#!&zO literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Mono.Messaging.dll b/external/binary-reference-assemblies/v2.0/Mono.Messaging.dll new file mode 100644 index 0000000000000000000000000000000000000000..683fe6e6731d35cfbccfa21ef799592b415811bd GIT binary patch literal 29696 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Mono.WebBrowser.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/Mono.WebBrowser.dll.REMOVED.git-id new file mode 100644 index 0000000000..cf627698e0 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/Mono.WebBrowser.dll.REMOVED.git-id @@ -0,0 +1 @@ +5908f2354983941412b03188e9223e5bb69aeb72 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/Mono.XBuild.Tasks.dll b/external/binary-reference-assemblies/v2.0/Mono.XBuild.Tasks.dll new file mode 100644 index 0000000000000000000000000000000000000000..ea58e747a024db1ce4b8c60478f1ea8e8ce8167b GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/Novell.Directory.Ldap.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/Novell.Directory.Ldap.dll.REMOVED.git-id new file mode 100644 index 0000000000..91f547a1ca --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/Novell.Directory.Ldap.dll.REMOVED.git-id @@ -0,0 +1 @@ +85f2c42bb50f6ec544ef78847bedac7e47e55912 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/Npgsql.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/Npgsql.dll.REMOVED.git-id new file mode 100644 index 0000000000..3b41827f3e --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/Npgsql.dll.REMOVED.git-id @@ -0,0 +1 @@ +b24e83fc55c2db856ee389b0d154679d9274402d \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/PEAPI.dll b/external/binary-reference-assemblies/v2.0/PEAPI.dll new file mode 100644 index 0000000000000000000000000000000000000000..70bc75770bdf30567462008da456d1c5cf56394e GIT binary patch literal 60416 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
    (srf_4{P+)mc zgS8@Kc$&5vHMFC)c02=Y!xOcYcrFM7puLs~pXvo~4Q;_wMYhF|y4ac&p0qi2ScS4i z7i>xv8?g>rhFHmsOiCGppvRC-pvH?K#Q`Zw+k+IBxE$83M12Ny)}nLTK&=232cPXL zJlroiadV9}r=fv!9oUrs#T}cZVW~YXJ@)?CJO-;*!jg7etHtIv*xL@S4!%x>uf7+X zqxe=Gw|+L;%LniG(cdSu{ejtSAI6hkY|`lEaT(+6$ztzko%IpLGiVe4GP7Ft2bj5^ zD_J%uvp0dK)w7NAAHcSQCEJEEt}(17_Bke2=SgDWqa_RbW#;9uvc_Q}yVNM&G0?GQ z#>D1+ymxStSbf_h)<_JaofVHa`>Ou^kM{|^`mMtlS>ALEY)|h`U!BmVJKZ)#;a_yv zr=Kj=9h_-h$@{%u{da<0<|{KTOkmdWS~g|=;VoNGS;Q{9^Ro3PiQV_iw3}mvtL&A1 zlGym*yV=Nd^`x5(e^G96rO!M`diKAT+xdsteNGq!%^3gkl{AP|g@a?611HU@`doRx z9zUl1|FQd=z*9Xi(>C74YndcM|f-9xLE!jc-fqt-k%C_wXsw^c_dyc3oLkW+1-nuv=04T^}@ zg|~4@+U1a|zK9BWs6jyv&F>{e^M`d-pRXAzKIgaMwjBm30T5cR=5NItuxe}T9Jx_% z3h%{zd;s6Wou}Gq5AwFQ%nhk(lQyL+peF5F!FlQeTA=uA9lcOUVHHcr=&Mz%BCM9R za-}}6#e#7S@{e)9Kb&

    nD7P&K}3Mb-TK0oD8q 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 F_`k^4*<=6! literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Configuration.Install.dll b/external/binary-reference-assemblies/v2.0/System.Configuration.Install.dll new file mode 100644 index 0000000000000000000000000000000000000000..34687940a5c362dbf22b9441f4b158e7a0db8d77 GIT binary patch literal 18944 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 l5)=n@sK-=%jydvo`+|DXIpiL<{}1e&iZTEI literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Core.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Core.dll.REMOVED.git-id new file mode 100644 index 0000000000..94f1b99507 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Core.dll.REMOVED.git-id @@ -0,0 +1 @@ +0b05e733bebabb5cfb18d760512137d0c42fe89e \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Data.DataSetExtensions.dll b/external/binary-reference-assemblies/v2.0/System.Data.DataSetExtensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..985bb9ebc69b7c63584e0d1a862c6470f781c1c4 GIT binary patch literal 21504 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 Pp6NaQZv8EWae)5^t2(Yg literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Data.Linq.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Data.Linq.dll.REMOVED.git-id new file mode 100644 index 0000000000..8a23e1a0bb --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Data.Linq.dll.REMOVED.git-id @@ -0,0 +1 @@ +49c192eea0c192d2e782b9cf5887ca423cee0aa7 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Data.OracleClient.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Data.OracleClient.dll.REMOVED.git-id new file mode 100644 index 0000000000..21660ddace --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Data.OracleClient.dll.REMOVED.git-id @@ -0,0 +1 @@ +f7d03d7b5ac6c7a09eabec7041e24472206157a6 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Data.Services.Client.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Data.Services.Client.dll.REMOVED.git-id new file mode 100644 index 0000000000..6e4cde6883 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Data.Services.Client.dll.REMOVED.git-id @@ -0,0 +1 @@ +6b42f3931a6cff0cecd6d15e320678ad4e01349e \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Data.Services.dll b/external/binary-reference-assemblies/v2.0/System.Data.Services.dll new file mode 100644 index 0000000000000000000000000000000000000000..03d93262d8fa2b3713a17c15a90374ecc9cc2957 GIT binary patch literal 20480 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 QvYg31dZzvqNB;=;Z>JSCC;$Ke literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Data.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Data.dll.REMOVED.git-id new file mode 100644 index 0000000000..6dc7b0a9b0 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Data.dll.REMOVED.git-id @@ -0,0 +1 @@ +4850c64dfca079e14274c554439117efaff6047f \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Design.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Design.dll.REMOVED.git-id new file mode 100644 index 0000000000..d544bf383a --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Design.dll.REMOVED.git-id @@ -0,0 +1 @@ +d36feba9dacf4fd825eadce42700f598509ee412 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.DirectoryServices.Protocols.dll b/external/binary-reference-assemblies/v2.0/System.DirectoryServices.Protocols.dll new file mode 100644 index 0000000000000000000000000000000000000000..4420b7e053963addf15939d9f35aba5ac92003aa GIT binary patch literal 54784 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Drawing.Design.dll b/external/binary-reference-assemblies/v2.0/System.Drawing.Design.dll new file mode 100644 index 0000000000000000000000000000000000000000..aae8eaf72f1050abd04121fcfe5a815f8d1fedbf GIT binary patch literal 22528 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 SFQS9e?~U~|_x{ED{=WeoXhX#S literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.IdentityModel.dll b/external/binary-reference-assemblies/v2.0/System.IdentityModel.dll new file mode 100644 index 0000000000000000000000000000000000000000..7218f95cc1771797157181165224f9e82dddcfe8 GIT binary patch literal 81408 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Management.dll b/external/binary-reference-assemblies/v2.0/System.Management.dll new file mode 100644 index 0000000000000000000000000000000000000000..a12c124192ee8666d2f561865fb77e3700b4bce3 GIT binary patch literal 43008 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 I5&sSNeh($ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Messaging.dll b/external/binary-reference-assemblies/v2.0/System.Messaging.dll new file mode 100644 index 0000000000000000000000000000000000000000..8070268a7b00209ec5063e015b6f211809950acb GIT binary patch literal 59904 zcmdpf31C#!`R}=RCLt3b$%GIR$THb8Aqim#AwV!8fQ+&Sa2F=Ykc=cVFf##y+eDNa z#nyedMbT

    b{{>EN=PN1*~h;7B_6H{;RFl9pCT!?!D*UNusvz_4VKP(ER4x&N<&b z`!;tLAA7#A2_fwG`|dj-9>6F4t7rUSh(eu|yE{qT<9Igj0cFv%c`MufVb_LGur1{6 zbhUT`fndbd>~n>>0xo~RHE(H?t25Z@s~kN#u~3hC*?b`uDK>H0tEsDu)DDQGypc-0 z5N|_rP?J6<6d_!oUHByLh*mYfL9zezDb_*{IsLz3Sq4@w` z*ydf`K>w&0Vs2$99Dp-&&VX@_ZL!354tNbz&xL z>hjwokqt8^P1?M9bLHl#mBCQkq$yQZlP4X$cu^AvH;g;Ot=@nNE8y+)8E$AsGdY;~Cl^mD)?@Pd;2Mzl+ zb|G(#bRiz@K{k0i;IS(L2kY`VuOlH8M!u`lA257FA?Z)LG=!4!cA(_)U6b?&`ksjK zPWiwoY7FUN2M^FF16Ry+W>HG1p+9M3D z2@Xx6S1cnp*}*}T%@=O>d0Ty<|HQKYmlRM}nA#Ky*&jj+uvD#oD(`e-Zd+P*4j){T zTJl{JXuS*toE75WS7TR4q$}jB3;4PsA#X>yYgt!whri`WU-!!3dS9Tfxu(Wj-BLY$ za_!V%ZqpHS6@7H3dC8_JD6Z|!7qAI zh%I*TtD4B1rW?vpzqoIrViwzE156ZK3rYJGr+Z-$d2)O)JDwk=@WA& z#*6xiWPkKTvbmP&dnWFI{A;F zO3P72X}KButItSI70uJ>xwcO~BRNT2Kb_*AP(x4gNe%gY$&6LDZAwoq)y#dht8C-N zTeTn7=7@PSDb8bO^3xqgPa0(0!FV&{UdA^VKR+z9K3lPD-SPrsou~^F7SIjNfxzP%RTcvY(%pC{rTKGQ+oDj|65UFTjU9(uhDJ%om z1#dO(XmGa)KSEJ@C$Z&vaTi-|1y_MppT?aJE=Bx8j8e$*cDDS5NKxqdo@UG2b?!}Y zUE%jwGR*m5nn zJf)7fyc7`ySE0;R{>Zw^z}1Nb%HNs$HR;6RN}Nh@zQ)`lWt2)@e**3bWvMcbxnvu0 zD|K!nb4L@0a5dmMmE*zD7;wC8m2D%qOy&aMt`{dLS7WNq|l|DpyaVHBkURCL1nE{q#`Rs9=I#Ox!H0uxGtrQI6T9VY z%TvKsh)u-7@+{VME3;U40qdgR=!t%9zro(4^e79NdqwA#G4~NHNw<>29fIyWa7Qzj z6nBID0&pj))N%w`Qw40j>PT?&!9A;-0d94)ILnIGB7?q zCr*L(XCp=cFJZir@mipvy1U%_}g<9&>K8Gp}skns~nn}b4)1S(>@V~k9()iDn8cE*j2`$mvt8`I}9 zUdVVU<28&oFy6{|H_-5Z--rna`;de1QJ^8;>&S&<-w48|K^yY@jsi$tV%#@^=r@^u z8)(@4$x#CNhm0RHe#*FS1j)YuZCHNemF(n*O^fwhS>V!D`$xd_$E_*2G98Lwo#mhmRWJAsOLFmVB}pYc`34;jB;w2vh17{)xt*^ITU zJ&I``V|b(j%WaI8Gxo83H{%P8?=XJOsEneRlNnPPOBiP{HZU$`T+P_bxPkEu#&a33 zV7!j;4#vkAUtm1I_&K9vG^LouSjIRLXyn`c(H`X6@r)Z8PiH)r@iN9;jCU|T&iD%B zJB(j4CL~cj6BsLjikOu|=^mc67`TdQU(#~WCo{c+=_{F@H45Xc*v0f+Nkl)w^z&@< zCewcbJzX41S|#g%Rx47Hk48NyOFkZ<79_6)u1xj;eaV!1Ao(QVCCQ3>-ok_c{Jbui z@LtB}EWl@p{Hb8TT`O!1y&|+8Bzhm~kfKQbsT1 zCdTs^uVLKH_#)#0#=kSFX%tT;<0QtpjLR5LU<@#BVcfxZCF9MEk1@W?_-Dp%7)Onz zn4OG8jCG7hG5Q&|GhWNMoADXOHyIBye#w}YPO+6S&St!iOMey9UdAwE593vgcQEc} z{Dd)K9L1BxSiv}-aXDiL<7tfNGhWYlFXL|+KVbZhF*So?D*`H_8fdh{MHwN;k7C?6 zg6I>OwmFDy0j-F3#;qCDMt;KhQ^w1I%cDQfpuXsr8JmE&W-P!=b$7)8%AR>PQXj>b&X^B0v}Kv+LA!4R;WW^Oe3Q5kl4}zQXJuZ9 zIOk@P&qril23(PO6|gPy7t-G5*agd$48jeWgeNk6I@3FV-ye3r<0jZ&ok{o-)4Q17 zH-aQ@vgCG_Jk0n6FJ|&-I)o0 zos^PdaGKXiMmX_I`7uQ%x37FnQL@y%SMDoHk=%!{OqJZH<()-iB$regDH>~VoGH+FE3CZ&qBMIZoGID$=WVO75WYrUT7NhI`wwy(lv#&IuOoydudZOskrnl5OY` z7FO9UTuRoGlpLwMeL|w-G|zH%otC;wa+G?W$t9#_Us+^w#o52GaEr5V zC@M6}X1{)a}VW@fPm>+=q(XQrDlm$HI+q?MN?^x@^~8r^(g0o-CRub@N=mwQ$Q_(Ufwj^STZ> zO>U#>hN23o+vd92!hPrJ$gGsQw7iWL&YjnhIZ5i~KxcBkyc>$Dq%N9wvxU1VFPbu0 z>h8=tmbzuoRZ|Coe^16y zou95T;HX~nCMN5sX3a3dab22e;kG)h-2S3jx^5dRUoEOLEVz}VZl1J!FMCJ2$=P%EI!&%1=U~x% zX*oCN&lc|Zs>?GMNS&{0tJCBnIeXF%m%42^`^K5vg*nsH7fRhPa#B)E?$(@d$9bgg zksLL{ubaJ}Fu%b*EJQ-NI2TUM6+aicRkI+#Tu5rS9$AXo|^w9m7$3H+9tBO|HcC zP0ZtXb+$FA~GFD05Ew1A&++)zKmb&L$4Vfl) zz_ldZl&eCPzJr$x)ATl#G*l6q9Sp+mU{>)KULpa@4<=9Q7~9NK5KpOpf}O zW2KJz7n7s@9{|e>q<2sDCjz>R(QfI_h5xZd<}RRTpKRsOv5gm*uO)21otG z2+3_vcpyKyc&%>vmgDDWV+OZ9VPF2$CMVv?@4@;@oA(@4oCPNLIJiSjQdFe-G2GPhzN+~eZ6@XX+} z*^K1SD@IdHt{AQxC>!r?za3*&ubRAN69&{#m4RoDS_cr1* zIqES3Qb#?e$x)9Pl)AqnoXNch-3F<%=NxjHTtQAWWuw&1h0f%TuZpIGq|S#pP3~5N z3rpQ22xoHppo>V|+t8Vuee(45E~(3yoRVU4<Cif}Q+ah&m zPd?-{IR|>FZmBEEJ>)dG2I#g*-D>DeZas7-OWii;OztY^PLaAk=uGZ@=uVZoe&|f@ zb?8o$x@+L4$x+{Wy3}0{oyk#88!|NA3=AH)H$Iux$mGmSL)Kxf0~>d{pSv;n**K6H9>ct)D<93lk-9MQ>lw0 zoXJsN{xhkgzTD)fFF#-Es4q7;>dP;XI_k?!j{5QorH=Y?lcT=;BB`UkTymm%N>B2| zhEB|h;pSU8^z18(r6sr%iZ3<7B`lxPUVMe*0#iCo4wgO1S4!RA3cnp^a-vAhFu8N5 zEJ?pgT3$URTx@c;L3g#(Jqn%4(R|_>siXOX!S#s!Q@V?PE_Lrt*^&MW$$dIyuhZo0 zQ~&hXbBb@W=*};` z*@y*}Rq3}Hx`gWrqbavZ?(V`vPLq4Q@Qn$-lDd})4_LUWtZ2&ZQg;xsm>iXZ$x%6& z+~}eu>37I*E2mywY;qf>USr|1ilQlZO3Nulhnxm?X~K@FyNd79b(bdma_Wte+n%tn z=+@%9Ww%r?0J=pK-|L(rMr^Hc9Heo*Q@n)E5%*&8Z)LcvGhZ)$R)+hw_+asKl8Y-jSp2-S43>UWyie-drv0^ezs?<0 zt}MH`z~C+wo2Gpsb=yUL$)VyGWGvgJ*-8v%t$VN&BE1MxMd~vCBK)t zWhDzrUYA@ebZ=U?1touwTxUs7@&U==l(5*!xnsD=#cx?GYm48uaP`ISShypK-;-Pz zslRXGjw|_-g=;POz``vk`Ow03mi)Jc+fwq0SC1b18)U{+>SfWbHmW(S)>=y32l6VVudr5+Yd!S^b zb=j$A; z2Fptgj#h&=6cy+?Z8d0c+Y?@@zB*HKyc#q(Z8d0c+G^0?4l1-7EY#!F)@lZ)tAlGH$J~a=X%8Z)jQJNI`?G4>H?G7o}f-|ER{Mj$vr;b;Iz?xq8^U8 zn~NmJV|cltOQ12_^yog{TMikcjahE-BWqoK*s7&lq! zXpA#C8snx&9gT4&N8{L3siSes#j&L`blsEU!s*`9TFKo${n*l(lDmI;d+996Jqz7z$-NA& zPUon^b`{JqxP-qI?npmOa-wLj)8r_3>!prz*W_q+(I9m+yD&M*!MRdLIcRbRrUy$K zrS7xo5y?F%5^J`W&NFoIvnScgMPqaqmCm1zUMgK8xj@YurAs9jfu+Iqh^>fonXc;*XVmKdE`Wc)6~-NL&SOh0bjgH`RPy+9Y*%)FirBO74l8H1}%B&8=~}kCoi-YpUGG z>D&d}FP)%s)ECsc4Q_ivw6xxRqORMXu($kh_Zox43Dr`!S8|RS(b8rMx7ytzxqao$ z?pDdYSMGQFB=;d=X_MTiNTFSFNu?q8NjmqqNS)D>yk2tSXG|zGxdL#VQdd5s+Z{Aw z!4q9s8nSRVmPQPYYw{M!QQb8;s;wqR_0#02MoNxroxxEKM%@OtJ)y8-ySrOYVOzqK z8I6SocY$b_u|w*%i^UZ^$%bybXo}&Ev2a?iZ&+%*zT|ipZmaP`@MW*l;GRslxMD~8 z$rfEtvX$HGlw88`Gj^n(VzJ!ojO9*^(VZ5W5 zZE~xzS9zvF$22xUea{UO4DLx~%Zy#_?Yizs<@6c1xX+f{xrk*)OnT?Z6ezu)NsiJp zIZE&RnDh*e(tE&tp-kcQ8GGCpOODdJ+=vr?_9S0n;r2SM-1^ijExKpjR~uZyjmYa? zNbZgqSb0nCLFjf$?rG>u?v)uYyRVhH_h-Cea_q}>h7R02ZYww7-lgj<5TDQZ*nPcW znc%4X&V7UAvTNV5aFc7DWxtfVhS~wQ!D%P9H|jc^*y2?7CY|dM%WFSPF*xlsw@+Hq zncK}qob2_jI`^cwuX1#e$(;l4S5kLO?Ub@RBh|l%B~^3J*&irSND>xV=(G;Y^OgJt1`z?rBT7W6PegaNe?K4NfG?>`8u3 za${z;mziAN%$tk$8M*}OiS`>D=b6DhDJo`eC^Na5nJ1Ugw#1~ns;qO7K;($d$v?{DNB@-z1NsJmzsERo(nalJFrmg9kmWr_2 zTW$V5^!IsEi!1MRf0CYM64N7?CW%d#{Chn7*QRom<%zz|r)SJBAiSONAx2F?sOoZ! z*0ldxfBs*LjoOzg4su?ZwCx{iUw_P`+#dSWhvVx`s`va!2uFvE>jpsLsKWVRtRB>#Awx5lQ0(qh(Hgf$hDw&`uh zD$(q%o@lXYUYT0ML(^L$HmgLl*Lqq)qqSAzX8#+`=cgEd3pDDv zNgMTC>piSBYHTUlYh%#&$+a>)iY>KrCz@^@6KZkxvR3PviN?DWSn|>ky3bn{NX3*`dJXDic6Y0G%i9RSNN01G^g793yBY=VkN@-}rNqH!|JL z*u&V%cmbnB#}g*lQyhYBvi3oe0{Ytt(}8r;^-e)2j(3XLSx-T-DC@bD$MjIXtQS-I zL4V4jwmK>7UdBVt*FdjNeTyXnz@Fq!fM1POl$!B}oKBINEz+H$I6EFVGrI`5IC~<{ zmt6&NFv3c9`L6m)CPDd@JIQ_w9vr}#97Qm0#aPC>WvoPuuQIR)LmbBgu3 zCj+5hd{(A^5B*yy6vx4G!q=_Z>~&K{wW%f^Mog1>I0{3c8u*6m%oa zDd;AeQ_u}Gr=Xi>$iqB}Et*HM(X9lhpxX#eLAMZ`f^Hu;1>HJu3c79J6tpAj6tokI zr)HXN6L^#@`R8RWS1!xHDDxQPYEN>WcmT9lc_9Dt%sfFiz4CZZ->-a-zcX_q-|x!9 z-K}T};SJE16Y68eX!i?B>SFZw>VU=Y5Zg{ zs_-;m2G9@5_VIT@`)SI9Z21`Qh6%Oe{K8v+*Wo<8R?tp-t)LzFT0uMSwOog5#X;86 z?t87EUH4i+r{cAOPP}UcopjfVg+*s))rvJmKLyfRbgiIs=33EPq-O6|t}UV!?9D|9 z*|p-XqGTZLyVnZZZ?6@!&t5BNf1TRJUfkvzQ%v?*#V6f zsc)^I{q$Nci&`#=T0y6}wS0a{_#JHeisN$$lYn$SOGxsUS^hH1>BM!pa{6fU?c3r^ zSjLrP<_>Uv*5VA*mAhQ2FDZij#Egp&|A`sD0WK?<2+6XN$-q{oTbZU)#9CoRY~qUr8`Z4h*EsASIG*ynoQ`RPxZgoD!{&+-TMP1=?Wl}|Bp@(;IJ-mDC!AVR{@_x0wVrS-lH2{2# z?O#)AANDQIhXKY0?%N6PD%_7!d$5q`l#~X}r3UP@=RxvP#qSHRRcUYS6NLIS%AJ{hky9y(C?7@?eWKEsqS&Yu6dUcEDK^@p%4A6%qnq(sAjTTTI~gBje2lT5 zaX;g0jBhax01r7oVf>O&u~R$_Mkny4@;u;s<&%Lu$w{@GgKyfTiM(z;Y2(lSGv$z`GTui9Z5oh@aV$@D2fYT#~34 zPXOnMw)iBxPb_-`-n=001uhewge0+2ybnBD^g8g?3DJOePplR10b9joBa=kCIBZlB z-d^$^aD%vPbP~R!KQ$>yY!UAyC5WgvD>*@&DJ}q>EiMJ_5LW>&7CV8LiyMGfi<^Nv z#qGfB+2$s359nJt>>X_XfOrs+hs7hnJz_8Laq%?pY4I%Z8Sw&eAII>bcm?#U;tk*% z;w|6-aS-^f_%rZN;$z^49OuX4Gti%kuYg~O?|^oN{7g{D&ru3_n4*wZX$n0>hC-fa zDX*s_2$w=W7b*upmn!c8%asp+Rmxw0GdR?2C2wqks8@=C3pwl}mM`Pjj#ef@e!Nlz zT+8xSr5bd*G84E#p(lzcLDA&v=xJN>6dNN>8^#T>{DZY7_8c^=RPb>IuNB)n?#MwGDW^N;zPFxLD&?EY_GK<|#&!r;YO}eJGqwa^m2EU|nk^ML!!`~$+m;2a zx8(un*@}S+Z4-fuY*oNzwrb!?+f3lmw!?tO+vWk++C0Ek+Y(^AtqIs+I~usbb^W6YLX! zqwFqVioFP!W-kL~*e3zA?9+fQdo8fgJ_lH8Zv>Xx7Xqv7i-FVZD}XcXM*(Nsj|bM< zy})_)b-;!8^}t2;4ZvmgF5pW0R^ZY0(}Bm^&jhZu_X1n(KLxhiF9LShF9&Y0UjvNT zuLEwe-v~U#ek(9)zY}<-{XXE?_J@Ew?0bOc+n)elZ2vFd<@V=+SKD6%?zF!Kyx#r? z;7#^-fVbNJ1iZuk5%3=SUx5$UKL|=p%*w+^z z&+Sxi-?dX){*#?*?}zpckbi8awww@0^}jxjwDXu=7)SPt;;4qNWXaL2J)R}4ENN$( z4wjtBlCxQ|gC*z3QG2;K?$km&UECSKTjPELyd#cU**$U8rXGl+R`W2&yoV)^Gd>-+ z1D4OkT>#w2k{9Eswf-rN+SiA1)GvL^seH;Qe!($(10Tx7?v!o0m7>v+SzalQWNczQ z&M_5|7RM6cddFs9*l`K)WXE;DZI1hZ=QwLkSISw*I~n&d_KOxV7AvydDLE+zSn`f&gyjIs2Oyu7 zA`}YcP;L>YI~~gIlv|uGmbjI>#nVnVB+ud21KD^Kip>Mb2hO!D@hcArTdE%tM{1NM z+mv16tCU{E=1T2_d}-=VmiH-p#m3Y=NZQBjVM#x1wvOqCWY?GjEO|#^-;nNuV+J69 zbc|5hH}w|r>==i-JLQWpE|wIiyToB*-ReWIbVKe)t7o}KC7(TzWT&lVNsIbhaq?I{ z?5C#rAwM=P%JN>8^g8_p-bf^3mx#S>DI;K9=`E{+zR)CH*YvhvWn2 zJM8BG%LgEtnQpU>8F5O1!%k^A?39+nPNnH)i5qlNdZWEDVQQg=B_6i%K<-cXv&7F5 zKP2a;N9`}9G^O;iyw~2MJUC`2Bxk1dv80bJ`|Nwg6X|`h|Mj>%tnFuQKO`@Y>t~w* zmJI0h?v(e(i8#*ZxG^IZ7CPeC+c@?%Zg)yThKscY(6$u1S?h*8C!?O_jV$-D+{2+f z(AH$EWo-*<{jBw~)(>rSMwGSNSli3mUe@+Pi(1XvU99b6Z69m^LjGFDPL}tvq>t_UApc^_9+vmByr1R$kUP>2uzY~!11uka zJUdN{V4p{@&m-995xY}Fri4AJ==317wF#1{RXRROF`I%9c z_p-bflGT|zS+Z-yEXP^NeJt-|`#xxoP3s#$ZF~>g^s}~~wf)eB)B0I^fVBgx9e{ju zrbytYNZ_YP;HOBS9>B$NH_P2DcSC+lT0P4>EcdY71NjqaYgz7Rxu4~J$Pc7NS>DU? zUY7Sl{`a()Zcm>)Elg2iJv8YNJgheS<=gr zUPzvE?qo?HBoB`1gX9C}9+vd8q#u%*=>tp;fOe!h61fLUq*m`{+6~&D?qS*k`uuc1 zX!J;+-^lD`c`xYq$MrGY2Rb36Ke0s&WcGvpYvusx#PI{5$BcK3B-$}@cS_ZG_ek!& zLFZ(6nD&6K$?!An2i=^}%XBa3rKx>P_knI7)6aB2=v`w5m>vLqNrqz-`#*|WikoRS z=wD}eKqKEkKRU+Gv>)_q8NF=N3;K&OeN6X(cBJ*QO+V=Dv;me6fEJm`Xs#`zIhD~= zx7|#;K~K!|Fzo?7Khw{&AN13-0gGY6O+0KFs4k;L&QQGIiR zwxzm3Kau8Pxd-%tG(XGzp#PrM%ko~(Nn`txsV4U&?@qaELO;{}pr4vB!1O>e^+E%X zyf?v-!gW4{B#xBbDW6Snv&0QLKFh-Kp#kBxmG!SmI%c2a=0({4DV!?9)y^Bsb>tvbGoWzMMX$`#>Me>1WG+ zmh`ivZw%#C{}`G<4UE|(CgnTQZV|ik-D%{BCyk!P&)Azre)h5)G(7A}BcJ=y$hZD9 zie~^}_vbst5?!B8b#fs6g_PxmjttcBLU#t)yEFJ%AbGFQlR-9X^9ZAiI~n&d9$<78 zu(pJ7C*#_Q9IBk<<=Zf`-O2PGrVlVJDoE>MtY=)yxRY@Y;{irdNtX4KIZnpSXlyN8H z9>xQVqL%F$>lxQFMj3Z9?qNK@C}y%fV?E=6*(4ElEN84|T+6uUFqYR7)-$eUj4~dW zOC{@Cz}f{bq+D9Kb|KNiL%5bP%D9tJ96@pyV?Ehw%WT zSVWfe_CtDK?IlHN#hJy=6dx!qC|Odnt>mVXcS}AiQAVVW@;}RS5{Uw9_MrdZ{FGiT$%g~_RtiZV&N^LA^|Ix3D`S3952Q_LX5*Z zA~W%x%<NG})J;wq6NuE9=PA5OM@CGy4XqCnh%J+*s9skk3+;(S0%!fDqO@sOy- z+a+tTD>X~}2B~bCc_vPRM=Nyl+HU_T@KpQ7!05~?ffvpEIdIp^UBF+>q|@j}X5I#T zfwg~_c^Bw|;y&O^}oDXOm6I zZ1QBrZ1Q#)qt$=!?2jSWo?<=Q2WFH1+ZeUynrQnBlA%v`8OPSgc-QQ&VY6p8`Pt9$ zSfBkBmi!|*@ZRk25W{D)>4~!H>^QA2tiucaP!{CXCPDZJ(=RaI$hi@lGi37y%lA5n z9?8#=$vC-=@~44uHDd|OXD}{fJjkhh#PR1T6vKL!$L0*lC)x(yh3g=LX*Dx-e zQ;1N_9IB0R;~XlrQ|7pV=g*-j zJ~u^_0aY;(eXD{q2W+F@jjUrqR|0Xn6aB1$Q;2b(C!@br(0^uvo{BzK!MVf)(ADUB z6}&|;8*~lcb*$i|A{TTm(p1DuAnsTpO$BEc1)%Fh5$HKU74I}I0bLJNanj}nJr}5o zMtG#)d}AW$`S1wuVg#z_`|16i3xTTez$3iH4XBDE;gNzfkg1>-!y`p30jgp(JW}wh zGc}-(hDW#|2wxO&EKn84!50N5Bz2%qfG?^z5nd=_4N%3INh8pU^cB1dc|PbCq_5x< z<#5nGq_2o|KvlFMecUzzs(2SNy`Sln75&?Bpf>|moX?y9x*Mp9t?&_Vz67e`6!@rO6l?*W2ESBs zIy_QvlG6sd2Og>74ETb(Q9u=EJDs4<0;*y=e8HRlfT}nfzThqrP!;FE7gd}KFK|m5 z>8s*Aq^ydcB27j745*6pk)|Rp0IGO9-|4`MkeY&%q8`wfAT>qc`>&ucLuv}f=(9jy zfz%XnB~ZnP-3$6^po)?ET+lxUs(4HEdB9yrM-|s01r?`E7Xj}^tcth?sA5#V4D@|K z6{GtVpdSFL7~!u1y&I@vq`wCA!$1`y{x3j30#wDL^uB70|JQA3!SbDyAq7&{Kh`n5K*bT@6&lbY(Q?8lZ~v#$;fvg0ByYnLzZA${65m z1(%#e9T4}|lyShrluStKf#@NX383c!(L*ZPpyvV6Ln^tT7XZ;iDtVw60?|V%1)z@r zqK8z9fQyt8NEQQCu|#nLmnst>Sq4!^R#t(21*nQw zm7_qv22{oGm197^4phY(%5k9I1mYed-lC2=tgM0L3n1#7>IEjKEkK9r1173%z>%sS zn53=;Caaym3^fRxpl$@_t6{`Y08~Yx+663AH$yTJh?=8z1FO}OA(;-uSgD>0dIk_R zK|LMxOdv{J?Ezg6M2V~0K+gqYgi_DKJ-!9X^B8p(+MXA07k*Q?(uFsKD)uPd3)KFh zU5U*T>HYnNgybVDwlvVERhCxaN*pX3iQjb?EX%G~hI_rSVMkW<42f@K#qV$rG1e}- zVh7uioIGotNo&J8)Tq01Z&3E7r<}CJw!`?Rh zRF-IH!B6ajVH61kJLUtshY_vBPY1<{7x}{xNY)2}n>&21ZT#axVT*u%Jqv8azsYyB zmY9!zqX)lvk;O1W-Qoo2heE+nBYw3o)_6;ckMk}@>OpPsc61DKd6_TN=?~NI-f7Oq z1hFWMpEUa({r8Bu+BF7|Dk@Ac@IzKHx|JbsAnY9)#v*Tucq3i1_&7H#TCQAr7F%ev zi+R3qOUSQPE%{Jd;}MI4f#Axe^OiP91xe-wTTmwgNDq&&BpC6PPI!qkHYK&-*zkyb7s5Pc-tqgVHC%k+@|KyxKy0b&iXxXxcbVilP zb$^>Ie`$!`3BS5HxEYz!mH2hDU{}Nx@WU3faAN&#ZnxlNp!887o;9 z4Ewjlikf`*IY;WlVuEVLhBmQgg}1rcA6dLy>KlWh4!`M!-ad@b8oP#mUQ&iIWLiNF zw!{zUwV-^un|z^7_=!mjD0+Sw!9w26JZKFoUZYo^L4lZkxTG!71B z&38S3{ws8AsKO4hM;>A9?C1z?7V~_lTPu8<@Vj#YKe#Ctbaiy#2klzgxxVTwH$$<+ z*M^Q{lTUAaVo5OI14JxCt|jDPg%$^uFvZaj3i(mvg~1zfYHb!y`F*WouD2E07s1F( z{g>ttWabD<7ENfK=uh!Ljlr&tRwS$I#lqkQhys!M7*u@tAyD$w($RX2#y>=^rL?Ro z)P_LJ%)@URq7%~?ExyIxE&k4~&L;m>pWc==drKCWq~04CJ(}@ph}WzeG!K#8jL{#h zz;mESsYE?M_u=2lIl@0N=%wjPxKf+HhH~PeimMQp~CguiPyTwu-f>3y+)Gwd?}iOc8+J-IM?X!T6KZhss)PNnCu}^3#U!- zG&k^5tPL@xCm@-J=Ca5~O;;LOx-}Rafgc*h987AFLoGDSG;%{`u{p;LqZ_9VN)KeT zEKL~8X%SKpX~I~=T_IL)dZ$Vg`d@4hk;2;2|u}R;Vf!BQbVt^M*qc+&dsb- ztIm}1`YO^`nHgQAR#--Frg1UTXJa6dQ)DzrG=VTWlZ~{j)0V`ckhhyDZEjF$E^ER9 zv#SuQzXu)C79LLZ`4-gxr=?DYBrx?oYz+qyX1xp8Srr!HB#!58?RXK13TWm*0k zb2H3IcpZjGyXFt|e}+G1Z-d!}-i5bfYSOs@qhx4a&=-bWUo2T#JZ5B}t_`Tg#^TH3 z6GH1sw0L^T4pQp5ZK$|%9OVsbZJtup!$_}b%4()S*o1Lhc3pz%2C{XrH$pvkoA6-S-iB<_ z>#)JNI-i!n7-H~Ls98Lk8YXL4ZBDx2LgnNoXveonx^MegnM+^y91zK5hE7HSiLbJ!!#Vho=f)N(K zX-$JW<%Qva>65HVW&_ZpX~LA#h=S;$VX0nW4i`pG;%}iQs+(|jS;TNa`-yEBV}amr zwKfD@q%HIf10FIAW|=pHYC;2nXDJQoSb_`g+6UDfy_cWA1-%ZoV)TAK7+HWe(Q0hy zG<0AvY3*=)aZ(jh=yW(wZqtf)rMZJiIh8uLbeONMa&{ z5?Rc%qy?d1=hEhr(7v_6!pfjIHEhBY^1Mn`Wb}6}m}%gb6Ht@!_-&X{M;7`zNDxFz z!IK#TML;V|HrDn{hiSobFGBAbxj=-JA`-1cmd^`>Eiud8CSyg$#mIF$#&JWUMY6)z zi9Im0u+0ZVmS8V;P#qas-G>;^G~QAc!|FY)L&Ut35aTG;NFmgs)&8J1cNen%8ypzJ zrcZAG*17l~Gs}c}exL)ngN-k9uG&dkbyi6ewxuz5r|mImwFaFlJP*PeY7DkS7W;6s^_3n!^2rTEE zF>jQ-Hr!(gjyY|&)}vDYWi$cUZ|uTO81@H{PD`^s-b!xa9yR4l&@In34Km>cqrI~ixB}ju?YwsAtGLEx8x7*xpZo;^QtkbF^)?(UrFKQAdhaEo3Hf%!6W~ z47@>$XE2TgcxKFMTH$-UQA=nJjXiGOb6R|s!WJv%8i03snygW-e2)YNVhp5Zkx_#@H zV$U1XdCbA}oiI8;>ZJWyJ-8H8)EJe~t|<%T2?vRVw&!jN5gq26Rx_%r>^>#MIt-HL z)*E)k{muRkY)lW00`G9$-*ij8=5u5%;UHehDuFa{aG~=ELeHwpsTg5L}qv; zqt7=vb7)Btv!zHb4-ryWO^7bTIEgVWEkd?5r);`gmN|%ZBa&k2`QL-U`)C3|6Z%m;+#)z}GbBdI?P( z4)+-wF<2E2u@c%omR{qq6vXzUw_`3=ee3j*my&JNw#kIYa-^Wkv3a1+#~VAa^Ck{& z6tq0S)C?^Fn>933(st!&e&W%lg1oHKXN8z`;b?+3+amgkl@=;E_tw+YdmZ$Z=A6N# z$P4MbwxhTz;5C+Rrk%camh*8_Lx-_4TTF4ptSZ*6ZElnD!Hjv08H~@Qv9B27OY z?~;n(hBcl5W|7DctP;U3g0m~Jn@#lLY#m}&-u9rB%${7IY-slg-QcN7?=rZmr> z(@bN&>ou1vG??=N9*5RSDhqLT^Ph#vB?+VPl}QaNuwWl>MfG@rAR-F*ka9VqQSPN5O=1uX**{0XgU;- zmE?g&kO&=KtKP(jHJ2c0PdbEecZr6?>tB+dg#!sVqWGS`PGCa)*4 zB#8L*Byd-)qZvnmIDE$%sL|lq*r;=sHiLM*WT>yo<_B6iMtmB^OPj+%s+DFPKOAQa zS`)T(GuUg!1Qu7Upw%`;IA^qrG;_OYqt`s}qcrByHX@&1W6H_L?t`tQ7>05s3k3`nX=bQ{s?ZNXEargUNU&0EBDkW1^jW;!tA9jcCC%X(fX(n7FuWjpFPuW6|b zqHd$3XxEOSxsO9B(b&sNL$igVR|#{ea8~O%Xl9O9Gv>`-(6DOJO0kh@a!e<#>Gi$6 zHWV&j1K*5_V`JJk+hgdU za2}*tb7e(a7rrgH1Hs!}$OJK)HjPo?-T1xzzVyw>l)7uDR*P(P7huHgI(F1r(>=^KrS-_Nj*tP-#rzE(C>7#RAvqAj#Ym zf^b9k%AipR@EOMbg9vu$jXL1lthH`^I)lB7X6v>CrAMWR`=LX-G|Q+Zcq38p;6vGs z%|yCC!#4?0+0mfU{Y9`#DX)yuKE}}Nqm-USK{qI9L(#mg8RP>3beWO%U@N|GWNy$= z)e4K1K`rkv_oXWnbkWD?>EMK34iLuPT%x?A!B5*lTttHhoz)5|SE$e-(IaRlK_sIG zG1kz`b5Dgii{U$_`FdJZ*5fV5!3KbPaXvRaON^|iRqb^HZ8X|G;L|a_& zMx&9Ye%X%iV}(VRU$1BS187I_VihN(-}cmQ0{TsHif0%x z^|f?#PV+jn5I@ecX*85uogS`CyhP#z2km-NtSbk}$c{E|*efPTB6mPpY;vTd9dGM3 zG+BL&{oQb-WwBRDL5u|%CM38iNp6@|A9+)bMV3u8=FQzMeS1uA`sAgY84s3e9`ZK~ zXkNm%v6hn7#NUqOWxnUBoZHwr!#qN>l zYW=zu*~aXVklNDAA&N$fNFf{~(uzR;(DOe(1-e z<~LC&=I_%{8uJ6x#L(Z-6%Xt#G-9twTQ&`^p)gt-lCu~+gQ+1Kr?dK(OZc(0wahSD zii&P1aD8KfBwUCbH-$Di(izQFtF2rs279iRA5G>^QFPD3#Oej0Eq1JR!ZPV2v%yQR zDPkReQ^wcIsqzc}cKS4iW#PHqdhC>tb$Nz07pj+bQEjkB+wvR|z=#P`K#arfSiK=1 z%-J2ymSfluFQEqQVHg<|yR$)i9r~(|1{q#zVX&udrlE2piXj0iTlg%_=ojhAWgE&y z-)PgPOx%8PijA7pip@@AWJLwjT8Ea)oO|Zti=weUDOG^MyrpB%7wxM8n110vyhC3; z4CX18!7^;Xac#%9y?C-lqq>|k&{WPi_u(l9Iv!7WKF&UI`sbtDQk)#-CM$3b$h!eD zettUBXRR~RD!5$m=t8Zgnzq7Yp<}axMt54d@FLC=j+ywA>vXZ27p7RXV3rzg>T1SQ zFI|U;8L8kM-D(PJw@wIqZ0|<}RTZ|M>GL2t0$O=^ zP4Y067KPWwEp7cw3Qa~;b+C+M=5;nlz;(&A!M8eETRBC2F3a;%oyNQt=^B$eUUJZ- zer>L&v6e;45L4`dbaaJrYkg=e=G7aIKFu}u+fm+zXxNFdoaMF$u}{ubZCh=b zE}R=TPOP{58!QK?SVm*~lv5u$In%D6(S<4P1Ph%iD!6uE9UVO1#L@;e?a0S+-&_-5 z_%zOdEH$25V^>%UIP{DLlEDWtu}3c8Vvbh8BXT}g!Fo=9UBS8;-b&X}jBhKTS22p6 z+r;oHE)t&SYR9ic8a3APorTyfObi&tQcrt4iy-DWbjYcvIl;$JkGrQszgyrL=DP)2 zky&nWVVI>oNyHI5cLk@-TVv;}mO?=gqZ`pHqR|k{#umG*FqRaSPxCx!@S;HHW!2&- zzAiMU_j1}1GoRHNIeFx-IB?M!^Gaur3;e`-)($hRI1teFve}(Ez%mRtQ#20tg|9x+-k6lS?s@MkTJV`(u9S{n_uo*>5o{iJ{UWU zmZZ$BK2ynSOunBrR7;Z~eD`#y0&SnZh&oh3(-b}dG*wNQHgw?7k5(EH^f3{Ai_wwEIp(=dgiM~ZURAKpUt*N9maC??qr#seLn6ljR8eWfj(cIP6 z7JG+9-X!k^0)pBjhHa{Nuh z-wgcC#$P@D7DDI1-#j&*OhI`jQ;koA=4kw7+v8KCdkCHZmj~qr z{GCFAvu*L&HX_c1rpO-ej9yG|IlB1krZ3ljVY1#-AoEmXZmskWfmNIx< zk{9Sh5D)luc&(EcFH(x&vkR|hiU32=^;;=e4zb~vT08MZZWq8biW;}u?$@rtae2niqY z60cej{VBa>vV9391h?m9!9#FXJpX`w>#u>*1-zrg8ckm$jM?E_-4?4 zq-T1MRAYMyFSzX8ePepn@*wiBbCc~R4;9B7&`4_!wF^9z26#NLnB7$dK4H>pr z@f@hcoI0-OLi_LWxfxzhg(ubct6`rf!(Ym7FXUbk-Tlw_T!~kJ(bEs-yHS+?y8Ql8 z-+wi{?@f3$8@7dz%WYi7q5l+rFE^S{C0-JT%QI-k!{y}vK+V0<^lTZ|UO!&w_8;Qg zPSdw0lxqvx5_L-vw9fw!5AQKOT+B5Or_88(e$>7;^Z+ZsHRC_>c`;tG_aEZ*rJZOa zEhy~}_jtp%>VJJ*{Lx-H`ca>*w)#|w{>2Oby#FcQ?Huf#+57#w z^6y7RnfnHN=tr%iwv3ZzP~8|AY4qNNHqyc^=s(2o>jwKxbEeID%l;4X@s1zzk?QJy zTy6Metj9z9%>R&_y*}2@|C!O}M`uBU%0IRxEkmoqoiDBf;eT6y^&`E(m9hEy{d3Cy z8>7#U`1Y&8zR@V&iagwmF{u(S`lbGgM$Ug%9sQ9t(4ditR({m84(A=MEvxbOubiR( zuy;0>Q0xlctQarUq@?UDJH5WqZYQ93J=)_4k_hm_ba z+T_xYn}*(Jr|{S!qi?Tj@gRyoFe0Ogcd3bq&J*wqS*gc>QBse|vd7~I><)sF1S1IO zg_-oEss7Uyu~pw9p*w^UD`Tsw7|50~NK3cSdgsEAd0LpEv#9aDtiGyds? zF-WOJloY4nrM!4Eu1H6b40o)7_v?xz(pio-*asCsQQqkaiWKVD6A!#2SF9==;-GmY zU4DT`T}M9Z4h*BGY*&?}r08egoA21v#Fz3a`RGvu^U_ z*6J$nRBxC5EU}lgDy>IQW}@0g+P@%Gfj1qCQOI7o%`fnVVzDY`NY2K51&bQ2z{`+D z3WCOHkel2_N8_!^&}nxM@Sw93*^LCmWW@y2E`1}O|V0E<;v4#MyjXOT%E%CS>*mdQ?IX79{%P< zO!V(~mA;;pgZgs4EVMW2{r}df=+)J77>mro*mjKGy5-TV(F{-pEl0FmTw^JObF5xy zv8T31Q$;4mp5EeB>tZ}g)1rtu#if|D<0$6rIK3Yja5b4*bFSf}uGNydR_|1Xo);TEq&zn^@-X)Nm?~|e zp55{+S(?V&gXHWU&DlL#&u&XsM-Ll^Um1$_QI&Qe+AREK*ac<@2%|bjkD&20HToDl zPj#dgji3)_bU(As(FraU?C8`Yhekj%N)aQFcT@`mUcRsOU`F3J_#B!HFoVE9J}Q`0W%`*b52hh2nT7=;?>0z$VbIov6;S&awQN>CB7+ zpOiF35fwkuA@bp^r6Y}Ahsoymg<)elKGxd(|J2ZrIbQJ)7xj9{E}9q6xZ(`Cp(kkO zl$Aj>HZ}TI8h$)s@$%TOG~#CySQvAdPgOIXW|{H$O|L`*F>YsTRhxP3wBHoymm9T# z5Edc2PRrK-sD7v@KcTh#<==Y?RU4;CKlq!E+Bm&@xGyx~5it(Er!~s=xL;dty_c%Z zp9~Rwj{v_TAsl!pdQBL$9i9m-*S~JA&1Q*<`HrO4DJ+krDzz^L@r|oto{^{J|B_iS_ejgNTf$iIa+dSVc)8_fuu=IeH$AkT ze)+Ip{nQHZBdz2<;*NE>^}ac-ff(g(y$(WMQmUJZ-OXJqePkuN@cWziOpSg*8v1Eu zSUFKevU%#0>PSK_4Ag=+l2VJf-%Ubq>p)miq!v*uL_s(L&**nXzocmV)b*!2s2ivL z8v(TrTz5J4ZZG}tQ)={E?f+3JiY-T^t7!lkrSR?qj;G=>nK~gX%=oJhI`UE=!-GW_$Ej*V=Vz78&BCW9Un+n_^sIj-vA$7#%kj zt28l}AMt=;(3~KK7o9P|9-^B{rQ(L%T}gHdT{nu)mPoNx=H>pGG#c=3FTcmuxlbeR zs1Xa%loee0ZYPO~XD#3)dAs^@qs1!=%V!GAo{?0P@Ca zg{w^ktGJ-Xiu=981Jl94Ae#!o)Z7cmwua2}^9SORtghBfOrOwlOU84dF`bbJ%y;`E z(X^|*t%bSRREwqkkxIMk>RN`vt|&}-+#i8?Zb27#wK}LkqQ2^F#sJB?17f{9B*;VW zX6psfUT)Z7&D|hCei9tN28{YO;#}IVakMcRMn(!r88W2&jNP%!SPpyJz3z$x_i$=S znt#M&42(Z4uRpBVb{pF+Z-@1E$lGJRJ*q0@cWUJQBpxLNf@YiEjMwj!S4gj)f#HQk z$+NjJxT5*wibR}MD&yxa`MDST+;y>&&>8DurUkKn#;exd1`Y`YA4zs)gJbI@jeMfR4LSv5M97s=C=~yV=TCNwmU5B2iJX$=0z+$$d7t zkK~9Z!?2r3Xm#_`j42^o#*ITusNH2)%nfZqb=uER!mH&7N>iw*oQR}3s zB5ue!ygX6CT^R}hekWlV$zeYmx}NTy{ft!#GOYN@T4dUFExQ>mzB8c*#z-+xHsXq2 zVqG|$@jET2ulpHs00jg_FkKT8 zUBMAwF7p>wosV0lTntlRwy7_pGuYT`Vr3fX!CsF8A49zXzQIM?NPR33u@l*wfR)V7 z2@Q)ty+9tESG@(t&;QW2lK(LdmsYLvp0ve4MA0nM35MpLSeA%^@=>|UZxJ!x$#4Ll zaJUEwxEei72VD)xX)^n{SwHuSu#Gl{vB=Nz7dD2hq=hz-mA7e>$j@3TPeX*RZzX8f z0ihe^H4?qFl#WmZ)?c$xoz#ctCa|AvufSpqKPPmC$E#*1h)n4GfWV_5C4T6-Og_3sIZ?X(;Dolur%YzEPiJ5T`?bK$$f2|mK zO_8Cv$41iDcT-)o0a$FM8S*Zn`8z@|5yf>FkF={)q*#KjLxgrKa9$`(y_vbvSLiLn{1OFFJP;7T<~V== zZIl3wH5x~e+XdZ%6o6T1BjSKiJCKgc*FlskPmiEl5D4l7%_Q1_`xL4L5PbNsF>N%< z6if;-gjOj>Kb}g(w8j`~#cWcj&vxqX@}?CzA>S%hls~WVNt^yyWuu)Awt;Ue%UVH` z4d29@cJadB+_UCxR=u3zW1B2#y0IqwrQM%t(*mdmGKpWkz4z+#um9r*EvKJb@%%g0 zf4TL}LvK9!jep0EjXs(=_tZyz`l&xZ{rYRaz4E)KU-`t!`skUe$<6=DedpBGKOC=l z^2NmQolUpayHEW!{>C3~)n7jU=B>A~`!mbWUis0v#sh=R&kZ%F-~RQM=>y~I{`A(@ z9{kCQtKZ#nPwJcg=Z01VM=zgk-~PZWXSFf5Na>OVad;Qc>!pJ1(6OP>@d@n_2h)1Z zqn>H3(VM3Nl*6OrV?oh+n+JP`C%G4&#J*f#b>Xv(W>w>%rl6O1OpMP=1-8%tM^VOk z(Sy-#V&TbJc<-jbhSrViH@393-*+EhGiHNuXl&h{-C=S|%e_aZ_>#!LXv@URU_rn7 zdNn$Uo|zWIwLD*t5_0EWzWl~_Zsy(zV^6wGMVy~MvcI>k{r8VMiA{g|{>ql$^g0)| z9z5l}wv2Dynbk59IgDvbXdwGp9wKM0QO*e8a)qL%^7Jl@17)5y#$)i%+;%sv%~@Zb zQ>Mp*ac(0cFT+st(bT47Hg%@n*`K72;3H)Y*JR99@dqz}7TIzhx&bj>{FrvLQcCEu#A{ z{z+VMA>?0ZTp3`Vy0||wf-qI$tLTB!`h}FLjv1&33S2WAWTqQZB!ftCphQyxVb!E@ z8DXx-AbUt{bZOkh=PdPw6o`kSTVqnr15qJE7qwb8TBpiq+v0Mi+~VyJGh0*_=gY$U zvV+%rp0?Z*r2$_*Rvm42el%PEdh0(RDvm7V&Qd&;4gU$-?)=^_-JkNDVXL%Lt?`(I zyXu>%3g`6AWOsvXgW31H6XC zo){S#vZp|lvo(r#DwlsI{hHEnFP0 ze4ppPuOng}4$UxZ(T8L0xV^0Z2f;3k;dgWVXeWnu4&v^>pl+wlcd6pd|42F1meIL* z!;3|iO%eM;b1XcfDMa9O@*kmANxu7$Q<7hjw_4HkyIcAuGD$|e(p9vMO24q{Dk-PT zg^HV~rxE%Tu0L9z7T5GMo2M1Jb%dssBS^E3t0izbyzowyENYRwA|&6PMae@u&WLNo1l58!DGG=}BvEF8&q8%NvW+kpQ87n->^ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Net.dll b/external/binary-reference-assemblies/v2.0/System.Net.dll new file mode 100644 index 0000000000000000000000000000000000000000..f0fe864b6f300814cba6d7e5baac77cfd6339169 GIT binary patch literal 10240 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Runtime.Remoting.dll b/external/binary-reference-assemblies/v2.0/System.Runtime.Remoting.dll new file mode 100644 index 0000000000000000000000000000000000000000..59709066dc17fd2ef29bb9fd3797ae25b38a9d27 GIT binary patch literal 73216 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 HK>z*~K`%_Y literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.ServiceModel.Web.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.ServiceModel.Web.dll.REMOVED.git-id new file mode 100644 index 0000000000..e18caeb973 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.ServiceModel.Web.dll.REMOVED.git-id @@ -0,0 +1 @@ +40da0a3530d9e4d1f9bc0d29dfd9cf3b35c452b6 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.ServiceModel.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.ServiceModel.dll.REMOVED.git-id new file mode 100644 index 0000000000..333a34fd26 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.ServiceModel.dll.REMOVED.git-id @@ -0,0 +1 @@ +8929a0a02c4d892656ace6045d3f9cd4e60d1532 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.ServiceProcess.dll b/external/binary-reference-assemblies/v2.0/System.ServiceProcess.dll new file mode 100644 index 0000000000000000000000000000000000000000..543bb3f75a46254d16de59324bcf89cd62d55d64 GIT binary patch literal 37376 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Web.Abstractions.dll b/external/binary-reference-assemblies/v2.0/System.Web.Abstractions.dll new file mode 100644 index 0000000000000000000000000000000000000000..e24914639eee71ef28eaf281959dc85debf0cbc5 GIT binary patch literal 48640 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 a{{Qy)6QBFkHjSp!y=8aSu38!Y0{kEOUd2oR literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Web.DynamicData.dll b/external/binary-reference-assemblies/v2.0/System.Web.DynamicData.dll new file mode 100644 index 0000000000000000000000000000000000000000..2b3a439222f67604d3bd5d8348d5f157da9e6c23 GIT binary patch literal 54272 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Web.Extensions.Design.dll b/external/binary-reference-assemblies/v2.0/System.Web.Extensions.Design.dll new file mode 100644 index 0000000000000000000000000000000000000000..776664018987f9446cfaa49bacbc8fe74015d085 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Web.Extensions.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Web.Extensions.dll.REMOVED.git-id new file mode 100644 index 0000000000..a956aa1977 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Web.Extensions.dll.REMOVED.git-id @@ -0,0 +1 @@ +ab0b53d73d93ac94483adc27bb38d2157c06df07 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Web.Mvc.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Web.Mvc.dll.REMOVED.git-id new file mode 100644 index 0000000000..7b3461b9c0 --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Web.Mvc.dll.REMOVED.git-id @@ -0,0 +1 @@ +5b5efc13ef7c032da44a1c78afdd788b4cb630b7 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.Web.Routing.dll b/external/binary-reference-assemblies/v2.0/System.Web.Routing.dll new file mode 100644 index 0000000000000000000000000000000000000000..4aa16e7629006990b7e9a69734cf6eaee5c1250c GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v2.0/System.Xml.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.Xml.dll.REMOVED.git-id new file mode 100644 index 0000000000..933b7f3a4d --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.Xml.dll.REMOVED.git-id @@ -0,0 +1 @@ +8762927cc651ef1be84b725fe1faae53ee0a183c \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/System.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/System.dll.REMOVED.git-id new file mode 100644 index 0000000000..130cf4ffea --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/System.dll.REMOVED.git-id @@ -0,0 +1 @@ +b501a8217faa7e35c257e93e84a6f6e2384f0b2c \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/WindowsBase.dll.REMOVED.git-id b/external/binary-reference-assemblies/v2.0/WindowsBase.dll.REMOVED.git-id new file mode 100644 index 0000000000..9bd85663ca --- /dev/null +++ b/external/binary-reference-assemblies/v2.0/WindowsBase.dll.REMOVED.git-id @@ -0,0 +1 @@ +379309c6162ea0d3c014ea0dce82cb7debaabc19 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v2.0/cscompmgd.dll b/external/binary-reference-assemblies/v2.0/cscompmgd.dll new file mode 100644 index 0000000000000000000000000000000000000000..4ef10eed0f69bb378eb759211ea1b7fed6f5e66d GIT binary patch literal 13824 zcmeHO3ve9OmAyTGS-593lCd2m7)K7+U=QDytQXrjr`dQ&zc{GK#78&6!le%<1X5bLTAfvfk1`)TIRJ z@_$cm^Gkb~)J3&QgeVQp3YYt8H{K~cXX9b*Qg{Viy%7@q`AvK9fX_eF3)M=xqSz$480d|Y=(MAcIiTM-7JxXZtEV?8`K3_X zw58|Gtf#}-V6)6}Jd=Lwh}Neq+k%)|hY19@K|R|cB)@fHIFImNd)cn|v2Fnh)6Y^w z_bnq*m^ta!ml6|A;>;e596dY#v*fPN{Kb03s{yy&&K2q9>D9|mSaAYt5vDw_R72E! zA<-}JUIL-!jAI$a5t}7Khq^w}eA>3ocF+x=uS!B@ecl`by=Mt{uy6CW42yG@G`+Gff2f2WcCWa65)J;(Yk1aj*fEarwVQo{Bo4@yiM>y!S@6kVvAxC z+8E0MuZ*$Gt%COnUR-l?O@!{QVgBPa`w;#>I1O`{f2?4;;E>=&f;S4@BlzT;x93D? zzl6U~%cXP(o>9yE3v2(THbM^zJ|Xx_?K7eOpx0^%CB6qqwz+F@_MHhO0c)_gh$n%n z6Y2<|6SNd98m1%A%@m9>YsQUrS?yJC>T*VoD@t69xb>^a6NGA#1;t;3g!i`6ue9D z3BeZy-w})iIL{*mR|~cao-SAvyhiYL!M%bn3cfE`ACw#f+kkZxjQwLg0?R~U?E!Ei zloK?A3c}|LevL8mYgn{@;`(3|c%$GR!P|if-GfwHQZNZ!yx@`GK2`Ck8|b0f+{9$+ zH8n6r(oc5-JswLYd}#Nv0Yql9$JNA$i24 zJR7D_sVQ-brcj@sLh-1i(Bl|<6#5rnfS#6c6eC=K>VZLO28QTpV3<|_6}kf$5Pnej zA>oJVUWwg+$y=eH00Z>Ag#RF6&S$c`LVq1)nVW$MO)pWQpGxe@z##orWLTcP;FGb2 z*f;6~7t-6o*VIK4ZlO{r9zPM`hIlLO3hh%n=~m!YiQVqutD%K)jg)W$P!((pACB;G zf^C9l0k_jwxEXk1_^9}K^xg0>gzrUoJN%i{~_&G0JV`{5JgTj`_l zx_Bq;N6wv86KRNFObw9^@Yh7T;x|Eu0pMkkv*P#Au1GUdeLE7OJLuL(4&gf^M*IPK zC}PGR1v>Gc(61xQ<4dJRT+^?_pOsoXOHI+s;w^N1^s4xqG!Wete}VMq4Z!oF&GC2X z^5{ObM!b(x?T&vSIVcL-tw#AM`W?~m@8gZ&KLq?J{1|X;?1}h7k>UJ*27NA#EsHM# z=dE~)@J|H7w!p*Voq}5hw+mkrGz8BR92dM;@Cw0Qf;S0%2bfCUBjE>tUras=>`lG` z+^4GW$y$uLF^s4xX4=z$3A!5CKo0{K(9^(1dJ&kS4}ptmzM|3+S_520KL#$RuLM+D zMQeg8t)Vx7Yw41ZijnH@uuARp2yi3qjHuK_Y7`>_-2&{RbupDrr&obz(C!+Q&Zbl5 zsFb63fIH~MS{18|Qw~w7MDG9{x@xXUW3*O{(YNTucnr(bmk_>iec)dP>XT{8Nyek#J#-!YM!i+Sj|sj;zgK=A4=Rk!f^C9X!Ak{S z3I1GpNnMm^O$;QA#07~v689w@PVihAMQ(p&zEz>rKopf7f zhh~)!T__oO-KqpSEX%Y=uuI>m=P5I8J9>e-&7#@2xqWl1gB9RV*+E|5w42#-K`%O* zW0=Jr)6u6!cZ@lD(MHr%c4yJit)iBnnV`!k7;a`$Q$R9PE|pBn(R0<9om#%E4-SeZ z{kp{kNti386~`sK#eyNSj>j*JTgJ!^hc=A)^8L0S+Ay{Omhh>5dos19Jd`)GoAmKM z^IW}1t+uTfhVtW`Eo*uzM8&p){f1rE@)@U`Gt2`-4-V)zrQE$$cWl7sD< zqg7J)JW+B6*Rb@gV_M@G-P&nnb$f<@rHw+7k6{nGRi7SP(SLfxjOu#Id8NYvpu!9t zCfnUhFklpO=BPcm!L$l9NI z#{>*$R*`G&_OcByY2FQH%>wr$+B|d)Y)5If9~JBo8ZJ1bS=e!H(QsPOYFXNNwF9`j zF=B-^PHUTaeR3bPMa4esp>3*$d$a=D#6hmQLq>snl}%=eyRc2jQr8Lt@E@*=^!;?_ zX6kG=vMiuk<31Nv%tKd6g`5UEd6-~xbQXtA3Ao9HY}Z*cVpY7n+w!KZQ`R0FMiQHb z$|Hl8&bp9Pvdgd?^4reSqutO(il*%tS(~`T4C>%W_MTvsVI!J#;kptNt=5Q)R4@dn zHdNBldrY^ku*{mm@K;#7l_!#!EV#raS!JV3~!Ds1Dq=w_J3Lg3erz(`UL_xv2A8Flft`pL+EX zeavrru0k4|a$bXeB?}!){6K^@d#=>2IoTa_nq`(tZuQDp>4_bM5(cMU-7e=H_}yS< zQ9lpkC68E`8CI@fSBGnK6w3wAYX=>a=ZA~jq+2uxS))dJp;T>Wad*$5+`h5CY~vc@ zKhLd|Re{8zgh`XHXHn0G(*8oCGUoT0UFIk(Um2~oVfvZ0KB(~fWFW$TTUl91yTX=U zp8lKL*(SH^O1ENH_AKji+ho$VNm?EDwaN8GPY83nF+47OSAKnYq}LsDP+cSE3X26L ze^~%|Y1ucRk95Epk$yzh&SL3N7|B)UDAw6qQdH~bn@%7022g72%5Y`#hE{Z{a$sR8 zVZfEDJU^}5b zth1IOzB@CL>x6~a%m{B)HZ!8l^pU!oPObJE ztj{eCD}-I|0!x*wwDYU!yNOTV!eovL`@^)lg_P9gkEeBF!q+5&Pj2Y2xZm@YYZd_RFlU zF6ywtMLJn*Sk;Op+Mss6QqPkirAtNF4tdFA3+N$)4V1VEvE$fHn{+NhoFnVM66NWT zIT7}20kr~D4t&;c;@)maX(0{Pc96iD5_%b+*!I}gN$EK;>Sv?#5VT$iO;+PML3D0` zzHDv{e2pd^{8MyJ<35UOKb!7;Q@S?)H0*sq-S3)R_YBTPu#|+AN2HCdgGJvP{VtTo zxs8Lr(yW^KJ?7K1Gmt zi|5(sStHPqN8L2_f*Qgf>)cIS4;HO&z(OC^YF4f<&Zi*|daYgZlpJ}dhjV3zs*bPWx79rtDIMG?aB1}F>58=iSt z`-4R9Tc+#HYlTs-XCEXw-u+2BvacR=-f;U=jc1OT2Z?2Go2uuZXZAVZDrj2!Pwh!t z(5p&gSoo52(*AqAIX5elekQ{!TVj@YQ})KmQN9S*_sIv?%mxfFKV z?m09*atfuC#zugmhEkMl;ZOh>1(;fmfQk!tj%o@qF+xhRwXOrKWM{H9 z*pzIDqymasw>1pTHpnZg8m0i$z-KWrHA=z8WUCqgOH~^KO)8|5hKh12c^*RnB_Y!w zVjIImbrY9`IlsnOWL|ROihvr6dT-V*7DZe=)hn@7AW%;U4um*6RD`bvLjeZpP0&xN zoA~BJh4x>>-wE^u=CIS2!$%Tn%4B=#hnw$qZmTdCl zB{n%P9*rfJCXaQ+W66dvY|#J>gUNZKmt*hcHKA4;*p>Q;ioEL+J0d-C^;MG4CiYiGXxP;V+J-EcC&;-#p zxTaiZ(7l<~7F>p-uDF4H_QQd_cfIh=t?94c8Ncg~bKiX9kLSE~&0l>K+?l_$>!#}t zzxRu;?|$L=Up)Ha?&prLUlh2u)>`|)#5XV6`^sqIn#ZG~o0q<^LcQ)c;kSPI#-d05 z?sspzn>(ZHkn11)hntq1IkfCfeOc3o|9Y}>rg`kI-o5aw@5T4taPpCjUr)B_3sQwg zu3y#trRT1%S4dsse{h#>S+#N{z8aB_sDSu!d^&wx!5%hnc9kxbhlr92&7F3D^Erj) z@y%c=$CtHciJds*;I0AR>nYSMQ8*JSn8lQTPL;x`n5E&+3D=@!TxwC1LJO8;m!|qP z%P`A!N)l;hXNPH_4;%tpv7-3%edhU?;(fI_N1?D@JeI%ktAXFuO}tV!@hhaL{#-Bn zEmCkJ;EO)4V_)FV0ZS|4O006e-M7QS-J25or!Sw;zi`#dS3tCW2>YuM8AD1kmf%a! zXaO?_v^uI8xA4t!lEUXpC9H$;7;7wWHX{}9XBlbYsk87Q!xB0bA1n-eLZ@KhIU46m zXH;T%)4@kDr+}A}xFs02+*G_R$s@A@B&zXCk>eSXhYdU*1KBdVz)Qi3xTj+*KZ=jq zxGbDpV`=H;S(N;SMB!?lCyA6R!DnhX=Eo9`kI8(EDZUtG`SrMfT-w(jbUnvU))>4x z=2dm_r6%hD-aM9?S}M4QHOq#KZIi+wQwkqta$PUrk2C9!gJsyrCwaUS^f?YqFo~{l zr4dtioF~PxEy#gtd=Aa$BP!lX^Mbn%&lqw=BOfsvzXvvP^`yDH@xiqXQlP1~Rb66s z$Kd7XFdkm&r?3^);UqjoIWk3M5#rNJ-t6TN?`lrR`nhH%>6ogt!AX!j%9A|`Hqnqa z2mMSSAMv4k%^yOpw&cxmTne`=#j`lKWNr9RFNbfp@YM3js_XU?<*7c4JpK0OV>|aC ziE7wiS!0U28)k~TUU06LKLs%Y)bVL8Z(nng5+lf5=8THfiYU>qk4Da!H15#P2yuts;lz6{0?(%xWsGmWq7YZ%kzmYHTj;wy~6bf zwxugU^E*(ATUH7S9e0b1^Xj|3@31jC&~qF{PP6^|@3p7K;R45M&*!^w+K#(*oQUhX zdkhY-{a>Kex~bxmDMazdHorW1GV}k#|2Hkb-!jX$>JwAzFVi=MN1DNBIsU%`rz7Tc zUVM4K(}SxJ>PHtC1a@Fh%HT$1Gwu-v@$P}^Zx+cPhJN>-yl&xd!fpy5^|=2&)yoHq znknCbF}ocPz7dwrzQLRNI?+*w(Ovnsn3qBrZuuO6yM11|nR{o!@fXqEq5CmuE6|B= zW_ZXMfky63Tg~YkBC{Oz=2QLUxE0}jBH@d|0MhaDIDQqr zc30%iil+$+7U4m;syVMscsS%0NdeZ%AkrK|CSi=!a0hqe5Ecnwd zx>y&t-qn2FmgEVffO0HMD{O5Nd$;4OP6fW?mdP#2diyqGid%@F#dQ7CGI?O=g{F&< ohr5gC$&IJcYRxCNncwFBlRH25TW+JN1GN*^`_ugW7sIUdeE${cO7OHK1U9a}DR_)_r<)W>RtJYe*VlQ55i%NZ5?X_AT_rKP8PA15$^|Snb z-#2*H?EhM8@4fckYd_B3dt&<;S5N^F72^5mBcglp&7XxrKb{Oh>^bIs58Ykz*!X*u zw#UYI_Qle{fmE_L748p4!ihvO6YSQ4sca$`O9We1bOig8Q7u$fRyxs0dgWrGHl=_f z&jwC2bK6Ir@uL(M(V5_E(7Df?hwmVsAv|nd5MQcpH$q}Rf732J;PVINLa}`EpZ#q> zU4=f6bk}lt2hl#Rh~b|hqS3>7{~H`6ay#_gz{?ysl+m_ifcO3b2xL-L!)_q?1X21> zN{c5Wh7Chtv(8y~9G`_mi$bY%3Tk>8b|AnFx&e>lvrsC|!9eg{u2+26HkFF#=^)X~ zXAmjObbLC4M%6obBL!W@kHr0Kd5bzuS)>>x;I`W|GgKFvT{m~;T(+Z#;-Gz#i6&e? z^fbQRwFq})Qn5sDnl<(|>pn7J>1nMkzz2a_s-Uwdp6mv$L;Y;Q_k`0rK&45PwO#ip zB@EtEW)XC`{$}8rkLMgbC19L^hnwX%JRv-%;9))U@gQ7-ryb9rgHQB_v8+SnqKk?z zFLu%Qg#NzR56)6I(*q@Mm$>N5r5wIp=r4snFZ3m$Cyrw2;!$m*T(nif`$v6o zqg~W3baL5=WiEO|=zj`*OXxHY$34Y!rpHBtLSGlo`$8+cEIrQ4wslJQ96#HmRxz!u zVrl77;V7;hy^gr$hZG-`f-@Ci=K83b{4|M!;R7yxeCcmQlC`QL3-;(h@+7EONkcX6@kNyPIND~p8HA@uMJb{j) zt&jzQrUSt?pcz0@sh*|?Y64nEC({Cnw@%_Mq=h0&0W~7rBC<ydb;1NA|6wxDwb zok9uPNkrR$Fve3#(Dw~=o}eEZ=mJ3x8fdGarw#N4K`$EUTY_FT&`p9~H_$DD-Z#)c z3o0$pbH7Vag@qJ&$k9NPVA=g*^~pe|0sUCYw*u&VT22p=GM=bQP$whAJ4fQJV}yFy z3bYRYc1yhNKruRl9v0a>B0GZ~71`q=JByx@R9*&}grWQy(fo^Oo<+YA&GJG{rJG(5 zSqNwy(2F8lEHaILFS0J6Wu(z7g0_feFTEz3UlGlX^tQ;p4>XlF(w_z0E1F5@u}3~8 znkjNAYli+Iu~@+P?LmL3SBSs^FqHZ^d~|e7y6>mcZ7~{ zahk^ooh`IgXqV6-p&4^HGn?JxF~Bc(kAo#^ z5O>Yc*+RDny;A5-q4$9*^pMb(gnl42h{-^q&j~$KXr`nXoC``Of$Em%HajiU?bj{W zOL1ul+povf!`BLDr%*17%k@$rTXVvg=-}wFnuN2qlxrhdIt%nF3G3@bXN+YfH|3rq4usl)autpR52N+oSCF zoa~cHNl>Zx6rb0T%1WQlMDFR{ZePGcjouy$T`c9ZWI)$hvTg1sydht$74JE3wbw?k zO8f$sNSVI$;sk8iq}1JKWW^$zrqZ;pYk zrbgeBzWJui-GX{C(N_0qzGob=9>^9Lnp@rHKxU$C?$1MZk|nzeG81ic-wfHwmh6X+ znP{8)=a4P5WWRyTMBCg4A#1W^??7gvJv4oEop+HT+e67w)!t?UUFTN)`+PR?04+9T zS60{h5BQcENN+I{v0opwWZT>m{M|lYsoFkoBKC>5d~KE&?DxFqTW%rtiPbqdbQp+p zDDqp#UGMk$v=0*qFS-pdczZo3`v)wv-?PM@vJj`a$&pHdceBIJ z>wFfHKE2hHxw%i!nqRi!?e#?bU$xMF&)NPfEyQVF>qw=*d!1QY_(axkA@@Rm$oCCXCO&8) z-CIq>?QntLLK1I>6>lX{*&(?T?J3&e|B~NE=lien-(<=D(f@V-cP+Ht|1JObEOe{? zCja+MRCd3=+IzEwevRH?qnC4JY9M6Gko&EEOS7mpaF73=tW+8U-M+g`1lhxW8+8N< zy!TtO^*JaKc)@SU$_4`a{XaG}%Ps=?iG{8YyzKv}g>D1-nT2)*Uibftg`Nc3Wucb> zfAT+Ip}zqA+(H%QfAK$Pp@~4dEi|`W3H+;tT7mXh=&bVMz(W>F0X=M?OUpfhUs&h{ zpkG?(2j!K4M=bO((4!W5v3zXcF$=v7^tgpeD~=8Pn}uqDp0H4T#nix)7Fq=Kl!ew* z)CGQJp&p>8Ei_m$H}Go9z@GB=Nr zHX2{GqufSyg7p0K8L!OBZ?EUOjE4PqXR%^y{ ze-5>4qt+b6wNz{5r(0$suB8XdkG5>t?|Gy=Xd$+2Vva47%=}=>1%3;OEytTOvBgGg z%keq6n}~D&P5Cq{zx|&7C=XePbDx=$`z$jDp2tfN%j_30g=xpQ%dQ9XfZ3 z4r>;QW|5((c({K2!>CF}3rDXLZg)jSLY3wSU-twK7tl_$c%h7J3M~dl#eOd9JHt-T zVUH>_JnC=vQav^Hx*~c3)P?<1&i!vsxeV!;{$Gu->r=CNc*>vD+6mJ7>;nbH$eCZy zjgS@*>-=r@-zF`4r?mJk&_a3$RG~xlnvb*Ola%)uoD2u)^LV!4oc9`(_SAwqa?gXv% z-eS?`B)rdi7hUE#AgL9A!|yA1(RVz5^ePJLmk9L>tr0q2=v1NgLgxu>650yd;$0>5 zbm4@B#z03^4T2VUJ*efmIO%lbB+7$x)ikINr)nOmpjSbw={?X|@}m<6DF`}|nn0(} zlc3Y+i>im}sHwn14fG~xBVAtT!O8jLA`i|te*xM;7rH!1eN3?jCv>-guB2AChdSw1 z&~;OR{1Vyly;8t;6!riXb(>N-vu3@Ys);8L2vhWsGI=WqWl?jneqW>o1*&M)G5++B0Uq*5Kaec zDns;$&|e9Cp5}wIpVorDN<*M;(YHYVLbrhyC_e#B(?g&a(PN;alvbouE_AH&4mcAO z);vK8RE21kGPWv0qv&PNMM7^B`k>JLLJKgNz3eF{ETt2?k-{{!diNKeN2h^aL}!6A zr=aK}x&)NN6N*OB54;fx4;6JF)()XJf?w?0CEITp|tJ^?-R?RzYk5}{l*9+BWg1%nOdrTiz^Ip&B8r~79sd)o*QcV=2pn~?n z8Xx_}gOC^Z0(>-v0_Z8#xB*g&UNR1M2aZNRIR?FC0?utG(g`>%o(?pFj;EOvLSLz) zIW&ttN3-c9^uH$bn`WS;bRy3EiGE*oLIu%lRWm^UR5c5nIDB>cx3F45a!p>h<5 zb$wgYO<#b&_~;@~75-CzG3#P@kB`0xs=|Ycz}bem(??$dW!++MF2UoYOF>mC$NQn1 zF2nnwk1hvQF*=U|=O5vRKKe4KN|jUw&R5`-KKd%Cij!_HI9CAs=t?{){L~N5Rq$3H zT@9+jXUoC42I=|eT2K`}TnWx~i0z}VfvPx*9|O+Uq3fgTK~?y74LI9z3&uy^09E1V zW5Kxr{_mr2f~xTPaiEjX3slUegQ}P_CLlZ=R7FqVQ}Y?1Dtg3ZgzG_7^bx-O zGYeEjUpWEc*`Qb%A|6iJK~>zWnE|>4F;qGox+-pN%m)1j$W_cJ^FY_5KdHEiCS zF;vVbO`!egZ7SxK#h~Y)*QvA_H;Git`=^2q;ue>R+e0fr&!<(OI|z4da0{ga;qTz4 zi9$Dms`OplKUC;@pelVIRw#5cs7klM3YBg}{wm#roE7>JsEQk!VbJ?10{Q@MeyH?w z>IL0{8zU+`gc}|zJr3(s`Zr2~J^|}gdJ;2>O3zUi^xt8rO3%YamG;tkp!;E?O24BE zL0_V+pa;d*{s{k4=?(alN^ioCRQfOY4t5pbFDktYAHi-0sERr4N`&7BRp|rxg+d>K zs`L>&0;8yMEy4xL*FX!E>p_c@Z&2Y7uLz4UR`CiAV{8TA)lnH5pU+kO7B{@)Grv6< z&BnEps5zNPXVTO$n9gYZ)SgTvJ6E)51jWfM!Q_U?7>wXi;0TZc#QCj~aHi$0Dg@I@yy6 z2{*I^S7Wu!$<#(_N(?UE1S6M)6VbSqB9Sjn^u`j}YAv0OXADj%l}w3ZQ>r&ToR=G! zlXGY>gc)+xR8n6OOT^NBT69=)IqaMi+qHB$+^Y@KcXD&oJ2GLeiec(b?r`-?Hl43+ zGINyIhEoaL&>W`ion^uUDs4Bg2`dGW!BI`pQ)DY%P+>sS2seVG7Q|h`iO& zZsY_rbI>em71LL1(O3!@B~u2YBbiM_G-_>2_V&UHT06t(jXGTtX0^c_fJ9kgSu&l` zL#^Bk+LGaDYobFN2&cku_JM(xWPdp3aBn^F#aklU0Cx#Q;LO%&sqSPtmcd}9w{vSh z`*Jt|dsbvK1KEu2)Q7B}kpyPt8nV1P8-Z^|S*@LuMFly!Q)f8UtBuewBk;{cbWvWm z`D{BvdSi34zaL$(4gJq{GOp}=pUC4n(?Q_|v{YuWHPMqK)*Qi(T&5X&Q#hX0y1HZt zL)-8OC1F@L5Kf?#FxVmWXf~2D_ydEfSZ`m3mTWQgmuy)Qi)$uYlQu&uv)%Dn@byTk9K_TfiEty4J+f*>Jogla0obhY@$J)w)Mg>1ff?vEBq++RTg1 z?^>404CHcF!UebFvO2U#HpPCK6IFLoi~(J%!`Sz$zejC4bFNu zBCL%iqRGwat|iG-f1W<-NTUdx9J2zMZedoDiJi`q(r2Nhj0AW=Y>TBc8|sajH`JVr z$1#qcUEfzJuJF?yVu{3u#SYybRBWD{K16C`R9y~hQ0)0rav7uY3*A^RmxZF%8L=3^yrXLpLsupUy@inikcf6tm}r z0dt;2MQ3DW=Eh8u#>POqeCRmZLf~Ui5G`(mR!7GLs%>)@!FA9>q9f zb2gRYXu8T$4a?GWpR}jUN`$qJEUA}g<8gZ(v0THim=bzd(Y*mqZn%iu2e>tCzM~VN zd)gh3XF0TEN(K{jTE`N=@PyUb1dkQ)2wl?}ol#>H*LpIf&xVW7!Q_>O&vj>cnX@Q` zF_AsWu4yAd+ZjjD#d>xQ&4UXJ=Pb;m|3 zt66#SmXjQ?>Q21HScGyzN#8M+p1e$igUD)=*OqWev`;FT9T2TW$>^X2TBC3s%-1VT zoiz36i`Nk(VgSS%cO$z=V0w;(mS$rP7l^`}V+nbolO-=q2}d!ZOQV=z4KJX`cF$M> z^O6%{MTUaMF!-OVC&g>DVcwOaK=@sl7VbwSm@iW38v1X=2qC@4w#dRF8r8E;$mE8y zt?04pgOW0dQp#A}>Rry5i!tM1O-73})U^?AZAuR&BF1Z=gqzLYzc_)VzC>upJ7O#n zPG?%QxYoJ>SjJk*9J4j!c4NloaECo>OM>RiEx;OR7};-K zW__hc`cjlE*aN&S&VRN z0tebxsVz{S?41PcvU zv82wIa>LW@242y_1>&kTL>M^|S#3o^(iEQEp2L(K20A3-a}H6uHNhPZ%hR|d*P6!I z$9o6TVKBgQ=4o23g(LE=NvF%|3ybE>;gm6uhNICgbAx7eIF`oBMIVueb6HUgFy9hQ zyQha<61b89bin&nBwr_#lfXohQA$VH^-9+ zO?SR_W6s4gV_?t(ok@;lBJ?U=w^*>lA!2)Y?(P`SB2p9!u*8hgoWv?mN^WxW5vtXG z;S{O3xlAGa%Ai-a{T^ZFl@@{NLU<2gfex)Y!OFwj_%X!B%Y&}V{$fOwC|t`{Tzw5D zr7?mW30=W@d(hk6$zToh~E~8_5aHQ$r9%51$HsQwi?(>3g5$qNxkgW zIHf~Voh#5Gvd602A<5B)?UBVfdN_s(=P<#^%Mf98PqQQHUDHH*x3s$<3T3_%am+OK zKJ|@TbRN4c`4z?LZJd>KCA~;c6lC-yBf&v2#_A*Hj#XzYGr}9)YOTlEm9jS3uo)Lg z#bn>xe%mlpY0-MZSVlL+W8rkZ6t?olYrX)c@h)t>fJa7o3AIHX7+d35sA=r2DZCaL zdurJ~$k;yN7s7BnFWPb~i}d1Fw6<`fH=DEL(A?I+ML^+jE@W*p z*kzB02RpDwn=it)9rwX}0dw;V(O`KaFS_)_mj3E46`F~4$9Umtr{15A=o`4! z4)pNTvQRY6moBJ#!*MU&`me9F|DT4Fy^H^J3l2?PZq?;cU8=`b87NXJ10||wTwrKN zfy-Z3;0nyg<1cjihwfx@J5VK_8s99O8`sM{ih6|V==gRVmL~87ad}9iO?cu!12{<4 zz|Vl6K`0Eo#8z#FNP?<_(Z)lC7I z3Z*p=r*L?igdh!UCm#kUgKJDl$Z@HPZJsUGvc**(&zmIiADyK$5~ z7dgyEZnJUtU5`WUSvU}f0nnaDLtkkHuMvOhV4B#XNnUJC0!Q9v9(tmz(F~j7Rv{KZ z3)>h{xG?yvu@bl&;TUo}71BXm(@Nr4n(J`^a-EA*8-co!dk^xS1U8=Jdf^(TKVr_+YZ~d4zy+jJ&4Dg40`7gV&UDkh3(>bY4ogK*vLa_h*kr2;~(4H zjtezMh}GBiqmM+;+9?_FM()+0etREwRKKbNEz6URhUw|EsjI`ojv+}R`qw7S>~SM7RKOp+?R1=gwP;nMjod(p^rqQ2OS}He`mPeydc_a^z0+V z#ydaGM)uVs&Ktg$YjOUVd4$yLO}TddeP*A-u7ZZOe{N4&iC&d7`c(Qe8?O#C8f?$4 z*F&!<|8LAbhq3LB;kNNC9z`8)#+($wg8W^Dsjx2$JH`8@Z6kUj`DW2h&}Mh@Qfa@G1O|iGufM@YGsK zu?c^RO#iT+TBPtDT#>ZPUnyhRRD~wat819o)X-Qzy`^sPyy*?~4L#Evm&}_vy`^Ev zoViVPvu4k0nxktr&Y4p`XKuri=`-sa8mBibnOi@-Y2M7H=?(K5=gyv8U*9}?W+QIy zE4Z@G*L;T;1dNi_L?4c4aXzBBf~w*PoK}pl!0G<=u+ifwVqPuBrb50ZTv)(_F%liZ z*I^PR)QTihTg}PW1{zC)g@G`>1DaGyAnXTUtqk-#HWGrQdV`d+x!?*Gz#NY|SjbLO!eXRU zOsX1~k8KPzy`HP8C%4c@ZXuE@G3*$+vj~O^-KlFVGc=Y-;ZSpiAuA33O7L~fbp~gh z#o1tRHdvfKgVP5Nn~idLR5Rd#5Zf-EKsJz-8t4;RCv=(64WoiZri#ZOELO)se_SBT z|9MokBIxo@Gg(~Mkg5`~QRoz*EkZkm#)UQrZF6z85B)^{+AX{@b?}7#^{oE&JN@eo z(TM8c5~;M?8DNKqTXBnsK`AhFgRXP~^K10*6~#ehc12)|3%}C|3?1-t;br3qz!TU~ z7F0znEKenu+X(XJl&-_cW%cBCaClIBDR7#{Gjvl(8M@fGlVIKq3}N@*xG9qknM|8! z?W9c$np3yQ_lXep1Zq^>XKDmsyRRR3GkRv*=&K*N z?fNO}yQkf%O&j;#GYc~7lha>%^MbSf*}MC?1;^E17HHP0gZ;a%ZfHN_sjH7wXxw3T zQ;$-plJDdOqqqYUPY&?WQ!ssp#-&T6V}nNvTzned}X@`OS&`qMqQ z6BG{(WV_J{(t-JpZgO)F;ZMNuY+1E76&_fgOjy@|aHNI%V2b-k=bpKyreWWuM58w0 zg(QwG5ftdeHcbAw5{Gb#f}mSu;fD)Pcwy1^dHbNv8@0S7)HhOi`!WQpI1VorQ`ja= zf`|0R^nu2)Nu_UvZWd`&47}+)`4X~+!$BK6L+0P;cJlDMHr(fJiO1W+u>?t{*EDmJ zoIaXF!G*c%he8AT-xh!N#6v0kfByeFHK5>^cZ6T((NJ!gWo?Mk5F*i96f6PR9{ZNsXX_vkQ5fOXs(TLLw;%UV1H*MWD$c>MT>@u4#fw_l8_>C-n zd8tV4@m669^~EEhZShEl1B)g(D_z1-(9^^0(es7P&^d&5p;YXv%on(cm#6pDUdY_y!kVpELI6fbaYO0OF*rXpj37Lv(${ zNTz#C9v(z2r@0(o*Jm}+n)*yOgJh}=hY;WnHD!m8d{$4=tt(ls_%Lre71HxDqMFM@ zicGdYy)mLu8#{8KsE(UcOeItbxy_?l^sXZ({ujlp={RML#(IGd_vP*-^$qpQ8ctYp z0#gbp33z=2(d_pkzLBUG-`O3xOd{2vQUIG`}onN@Ga~{n;*Xr@;3B7STB+oaRcQd`{q$(rKk7bZRN5 z-y-lTz#@97lv9>YVfwLvMbtcnd3!+Mj{!?4RK~F#Wn4n4?6R^F`jo&|h3@flYz)v( z{eF%e_A~!i3VcA|3x00JYXbEE$Ic3Ht_>1SNcehzw+Vby;Ik5YQ;Z>u@Y>(w0FF_qhR1z-u?EAWA--~CuuoNtbk4wHa1e1oiTLf#S z4+>{@0o$*&U>af09+$XNfN98g5Lhe9{}k8^(zAkXp*v{|HUC;tZl|XuAL;kePCA_@ zPJCwQ#d;I$qmC2+`FkMM^DUgPDIpYbjMyv4f= z@C)7*fR6x%=qKJ)2*2fBV{v*6}VX73W3dlZ`a-}zEhB9)aOX%BR;NO$>(~Z zvt&YaE5afAqHh!61Cr)@K5p-i1Rj!kYZYgNHph4*Tw2vyQWwz3!S*?rZ*$H1fSwnZk9qRq3i7bRJgmrt)djpJcCpm% z#`?or0mZR}Ftk7_Onm)ZFa)qKE(y;jq2WBaQLYO8~OGo_NJjZtas zzJMFMA{?+%((Kx6!a)~yOE_%RM=O!9+{U)o)&-(=$|T|(Y^3(oK!qJQQhR5(%7uL) zJk^DLEnI73S0G=^h20sR<-)!Yp5wy47M^Ef7tKX@KU8p(4{M;|1rGWPWjpCb%7Nob}8L8{mt+SN$HW% zaX4_Ii5<`$o9>CMw6TNJizBOS?Dgr<$ZEk@Tcb1T0!=nn_D@PMh3%&+W-N`gm~s2*lQULFHrUwb z5O<1=-3M%wjeToIS7fV={b)vCq|?R@1KVL@O6Sk8Fy9+9)(0G{D7Mdqg<@w1-fgFx z8XF2Z*lfg|X~)$g&cRk7?kqcQE#e$(3*yeU&6JvczMGPA|I6W8Xw=ve2T~;YF z0+JR+X@6b7!EQr~+*n;;&`dc-Uyix411{`giU$t4Qa*{el$r0j;^!bU2b(d|g=uHc zbfwg;aA9Ng=**8soP1BttceWSWtPsWiJW6&>t?+W$k^EVdDz!o*qHB6$Y-S-^Oer7 ziDb=um-=STzCDt&u@%6EZLAa6ZX4SLY>$au?Ym_5eUZHuMxUGgKpysJ@UCHDpTf72jh9u!qmL^6}wEHH!V!fn_sm{;d#@+c;2)yWi`HLrey4jup8SK z__{0ZhVloj`m|JdU+^Il8>8iO9PCA{W6l*}EADDv_ndE(f5XoA%kb^NZ`%1%b8Zhl zY+}lv_)k0Kg>&`=988a#8aQC5kach54 zZe#SooL`hbYSo|}ob$`_@7UN&z`ko@m(uT1!}nd-tL0DFm}l;v%Aa&$1<|K$Y|7k7 z^ye;YYV?o`n-%>p8=HkvUUXpv(U)y(IpSV(VN0XGx3TSr`-=-(9sR3~#Sy1zrjJSS zxvQfd8ylIsH(2DtTBBYY`|#Wy(PA6Bac*n0)W*JuGRs_8K{Q}v523ZyE^KOas*OE^ zd^IktAUfT~UPat|7q&E7XJesbc14%i*s;fCqsN=r#Xj~wPqgBE>yCLL;9%^3Iv9^5 z3%l5N#xd&y@3QmpSaC2OD;B1F%#~)!tEvB(OQH^T8L(A$+?~KqvaufkJK4s5ear`= zt8J`g-X+mBHg?Rs4@R49Y~8$;&{_-goiXq1&^i-Sw#SY2huzpR_Lk zzt0u-+4-jiPPbEj0r}o-W8ZRN7t@cC&x#wP!}Bx2GtHD^fcfm6eQ;#U{I z2Q%wCQ2geC^?|c(thjC;FjMkn(K`5GX56K|S$WuEq_pCcmhZGuice%=SJ5eTXNMfD zGY>o4h2@uWwJ%-QRAJ@2+ILyqdIzJ=*7XGKIQn|ssTFav_Wg9Qt|ioKW6#&MhYTBg z16aR>$@(v0VpmgmVN1xuuA*vS?=j=9qFKOpiCji$f9$5IS63vhQfSG-PgV@tDVvbe zjon<4GUL>|d5(!4@U4!V9dNKM3twyFP1~PWOec|^7b2j$pX>P0#t7|)s zo<=?g3)j>Ic3b(#7v39mu&SE9!98}|lA7(|y*74hXdrm5js16EU%Z2PL_sC zn2g@&XZlh=jjV7m=%JP)P~2P{ec0XV)1<~ODc=cuL;?kQ61YXuoD^W*R7xf7qpw$` z{3}Y(sR)O?9tr{$&`dy$Cer7FUPvpC5Zf-Xrvnxpv4rtyyks1qG^eg3mo`3)RoZzd zQzx#=L(GrWqRHunbcyhwV!2F@v{B`v$K7U+*~X|Lw6ORE5VbShvmao!R$@4G?Kh@no#xUh$E zps3QYe=ccMjrU9V=xgM>R*e(OVQxLbZGmuGDBKnaw_d5&XL9RqwUP!?JZ7xBWEIO4 zD^}TRhC2NObdCN5XocT$h26C%*{+WMb7br0P|5J*mLGCV4bzVWv~qn%+VWj# zofR&jH>r%S!P(+UDyP->uEc5Wn^aA4iqY%1fzeu05*Puj3ycZ8OyGWjH_*FEPY%p9 zV|mvCXQd^lf^uu=7Qp*UcL08?^lYJY3uPei5b=)2BNU!81Xw#|H{jeU=LMcX-hF{* zXb1K_pP`*o&IU{i92Iz_K;CVAhIsGvIpST?!;=26q(3a_4-=<9Oq~8Oar(oOp82^t z@VaoTX{{xnLB02u-6=fW3&?yvLSHMpkHcjJ^a%a1?18|m^sBN1phWzS0ap7D2CktK z{Lcbz09=964h0sVv^v1F|Ajy!!iNKmp#KJN%zp@w_gYtI|AyEF+P(fi2AZ@-{coVO z))G%}fp*Ye8r-72=??`PsWMO-2twJ_gv3GE&CAW z71;vqa)BR1Y$II@IHuhbn1>R+8c;RX1uoN`3>+KWue}sl9=uHZZ-f_U*96-E?+$JU z{C@DPAotxqaP_lbPw)mQpW&&28?;w~`vA4jA;21e#|zvnuov(?jeYOCwJ(KI!CSR& z3VaOkZtbbi3xS8ga~<;jCX@-@r?EeOA9&b@T)bXrqT2Ajz!O?a_yX*?@y=T-@yg*j z)c#>WF1eL%2!9l?JbX=%Q(lMgt)W{0p9bY2;(fPA=#SyM5$3(LR{HP2mq1w_`D*YP zjn^++T3z5(DeXD!>F|FBU)Oj~Mbnwi8u-0nF+Ck&?P@J~8sXnYo)3;_tYahEh2;z{ z7x+oQYC2ecd$3icv_<xSk z4>amOkG6zDNWU)-(tjIm4Xw~iD%J;@^w||Hp+^15KzpcFc-x|PRrCb6P+!G1(En6% zHg4efD!W5BXwga@M{}nPgihC4!ZT@09D#GEd^FUgZ?59HQdRSUw+bg?+8tHbhMMS0 zRo8{aw1*LH)DKqO1bA5Bn}FOqpAE&OUv8z!>QpdJwbgfoSi4xx1J&yTQxF~sO+lJ( z0*+Kah7vBR=2q{o?g=*PpONrw0uKQ4sQf{wRmy>6K-r@Iy!x5YLn4`nB)moUOl1ng zEqX-43?HGosfPeho%$kRwI34DPn-G*!e>r>4SX_JPv}=oeIryYy~*kI@H6`TQ;WmT z=`T*50{FYBAy7QiDi97$s|i0sjnig^ub~ywo<)o5rnaNrHPhySzC5xhe4l7qlb)S+ zT=;c;|Fjds#hyo|tqz9(*M+&pHbBf?iYBCz#9M$1#T61x4`>^{*b^&06$ap z3}78jmka1@+?4X+?uj3FhOPw+(sO|26xRHhF=hhR&~m^Stp}V#1Az1CPk_hL?Yf^D zXuyNJVpLV&r{#1H;7Zzr+heQgw}35lOOYRUE>H6Msf`W-Zl)pJ`s$=`v7b((M*+{I zREZxqY+|K;>ZNZ34p3@}AGZ}_WqumMjYB`>DCzgp`BV>{M}@bG!JCi%o!%Gl;jYp$ zz`N)}fS;%RfaMy~t2Cz9XiSf3OrIn0bcr

    **@*_bcn^lLBuP_&M+IK)KiJud1i7 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 S`SpzNd9`&ivEPMJfd2~~v-g(( literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v3.5/Mono.XBuild.Tasks.dll b/external/binary-reference-assemblies/v3.5/Mono.XBuild.Tasks.dll new file mode 100644 index 0000000000000000000000000000000000000000..022097ea55559d84e82e277f14ec0816adab8616 GIT binary patch literal 24064 zcmeHv3wT`Bk!IaiKW^*M@0R6Q#tq0|8)(Zfu)zk&l57N$B};9a@Q8iYx|Z8+b&G!3 z77%EICmAz@#ermT@JzrECYi8267NDF%tA0slEIK<2pbZTkN^n*V!}cmBoOAWx{vOb zj7@fC3E#Kd_N{yBoI2;!sZ&*_&bjxh_x$UqhKQWF-hG$oKHT}&Ch*9hgks-}`+ci@3*dm2fe4G29#m-$)7ne5Z$SA)kL37lsv( z|K+=h8YFZb+Fi%#n^BboG4WR-s-Kwme()HPT0y4*Kf3~t7xe7~;J@KfqfEwX@(oOW zF`^CeoSx1mO&&_fW}5SGRs7nBmdA7X9LS6@+>8WIs3|+7odSEJ-5xL3f3_9I3An-wF5IJv3`eN6mE;n84;+#7KJ}B_V0)OvP z+-^F~&9GJAGJz}IOn;@D+x&)`Tlim+^NRZoP)0mK@=%M1`(5kFc-*vGW%~P7Zs!q! zPY8TQ;PdJm?pk_F^?2PB@+wGA^?JOuG*93Npqq-wM~_mvSMvW+@*nXAogVt0m#CIn zYq?e@pqtj!agX;2{I0+k1ima#spryI{p@--eY@es1`h>%%@M3mN&0t9T(@?rjAbgwWXY*0A4QeYJr~>c$>gG1%4fHb?Grle_!Cw1u71% z+aj=C;Gn>b0xuJ|SKyZg-Y@V8fiDPj)o=^V0#6q>C~%9wT>|$C{2HJ_2LV@?zAx~3 z$@z1Q6Zt1Qx%5;gOSjz_0PJ!$0d8>40NgC4TLoSrG`l2yt-$LA-X!ogp})&{B5GBZ z8Z8(!k2z05=?|O>0sn+rZVI{>HVQmOAj?Xj6I@H_RO)gy01f~KDd}p1Co8y{0B`b~ z8K|Kzc$Nd+dbq_x-TxwYFR$7uf#l5?-*C=JZRcZAXpms~^7NRQJRxSbZsQB=-1dNJA` zZJ2?a)`oH~mkQ;T0#6laaX7K=9=}oR>QD_m7V*<0%V!j(4Rb?M_N%i zr`&IU45mh(Xu91M@GDft4h3vX4TSdj9aUx3SWQ)#vkG%nVQl;Sd(72dw>ikR&%ei9 zfx2W6&RBkrxmLUX*{C=y9M%{rb>|h0Uj%RN;U{jvs zIVn)a=BU4i7dFREbJUSQ$i}|v{=Gk9Vms(J>Nf*X8(WV48g0rhPZ`@muX&FPT4e{6 zZ0&Kusdl|p-X8{c)c>wuAcWZx7D2DX*x1I5^A1cGKDQHwWif^<>^pwlMWo%yb!hJ9H>e#_GfS{HNHI zQ^SV>W$c9TJN~#`wlJKCl(FTgH`gvZ7xl{6)q#EfR=X^LvNCo(%I4W+7on_-rO@Vl zyKF1UY>ci7-x^wAmCh*;QF>gCaVbkL-{O8r#yG8=nTWw|7*RzwSIOx+vZS1wb(5Iqzq zm)(i7HC8?Kf#@fqW$a+|@5&hc6!q3xl<-Ttqw7p;chjNh=cDJD*k|dt(Om%xyPn<# z_EEF!dU7@H3K$!$677!l1s{xFV6{Tg#&1L~v?*IaS&2O!y~r#xWVXS?exW?!e#dWN zKl3(+Ua7zaL#~ij_6y~Cc(*ckd8my2OxYRo+LS+227S-klt=FG9@vW2=FhzUr~Q4= z*J$_t;p*>>h#viqkFO@W8Le>KeGnV8qrrbcc9?0xF1mIOkMAg|3nGZb|zPRV(ya5-j7UQIckH_$T8A}l&+K37&>T= zq$_I~Ifs{qHENcdm2Sf3+Zu(DHehAHlX*7gVyDzSB(N#S?VK*~e1Z21{05+d?hiU3 z&wmZp($&~s9>f*L)sCwR*L;c~FG3%|)sCwR*D*LXIEd>bxY}`b;W`E<3kPw10#`e( zE?igQ1mSkqZ+z{50e?Nv8~*21j}=#F0!3yyQXuLb}fVEaKOHaKD1O|K$D+@;L(ALF~775&NVT>2WtX zJxU-#wH`O%G*4}yljeJ-BfZ2kGteTtmfh3_nik^7tc5t{`;ze4V?y3B^hk`~gXlN` zPtTEfi$s7I3Ma$D$sRgOy(*wlzq%`sq6^h)(aWfMLtrZM{~q)lrR|}s)qDK+&`s(W zQ2I~m-GPVE%YA`o=w-ejjj|m$~9t@O3&LIbMZJ6~N~JKjr;p z;8^7z?;*5yo%@YI0i3A8%jn16SNxaJi{9zM7Kt$nBAH{Ax6#_MN_{QEX|*Q@mndh{ z&JXS(t@d{RPHEv9Y2gNG;Rb2p8mZfYRs6W%>-34*cl@u@O||;~U-TkwQNC0=fc*WE z|4o5U1GW%HtgqAC=<9W=t9u9Y$nm>IGwXJVG&ToMCXVkRdF&VW(CRvcx|JkK_s}JE zIplM+s?mdWJHg?<)_pRVQeLau4H&NfTyR`DqkbQH;W)KLBH31C#-1|cfKM(GJ z%me-&**o^g-mypajuCSCUJ8C4di74QNA{6DvXAVMePoa9BYUv7TOH^j-bZQ_^X)>K zcasU(M&drz1e$UDx2>}B`LUUM(;Uh_7z z#*p`Idxev|#5>Nt#Cy%Xve(>8yw}_-d(FMXd(FMF*Sw8*y}V6&xlQDTv`CEQw$qdt z?>_I49`7LDcius~@6_l;AM4Nm_RS3Jq(A%ahV-shj|uG;e)bDL`=$N;($0QU+PsV1 zFY@0hmU0iqeh77E`)7u}rkv`Z6WT+k`}e_W9%^U}?KJE~IY)A4`xk}2C9?XKGU`7a zl(YTq0#}B*=?v)SPO}+qW_Nzhp*F1{#!#YNZl7O(l4UN-}>(ayjs0C^rqB(Tk7tihQPN&Z%f@bg`Rcz zNzfRzrU#xzt%ks}QuhVG+5T5TPKAA1J!bz|jQYgDRe=|T|6gIGO870M5C{VD9^@_M z`al!XpAQ@p_By^3a0k4OX96uqbLnj9aW?vz6P`_uU~BkWN?mXf;HZCDIOvE6JHt~Q zEbU_*dhp!vY{%~4D!_jT4u+3)oESI{={tiT3-6()gURq}Zcs2bpm{$}{8@Q=c8hFy_{NF*{f za$=-4vLv!BvOKaP^3ljekyPZ?$iGE?9{F9QCORwH6Fo0_WAxVO9nr5wAB#Q}#c3II z(}B}vCv>uo{D`6g(9j@FL5kz3W;0%jAzEM9_&grLEERZe<1dj;NP2_7RO2hi$xAxu zV#-E=+b881wT%27jjw_7n#Ml>eok8WqClgUdnJ9K@g0;J`ODng@{`i$4;tNgMD&Zs zI>4z@n4h*OTsk?uZA!qT;rOuzBlh8mkb|b0Zd;L_i1ZuMX+ifDW1?r|u^K zI$)80p54aL1?hZtsCjzbmUkWT6UXeaZe42bdpo1;| zUkQU$dA&Wksl?eG7Zp; zXAF&0uRNkOl24fe7(sp`H7buPYl0E~_5Pdi?_U4Y{ulkxzy|!w1;zuVz`KD+@QmQ{ z;5or3@$YH;do$P@x*(JcZ4O-=x-#@&=#kJHp+AN$h2XzSeL;nsCEjIWQ-&Wuvxzo- z8&4ehVXyW3(v+{@dC$Z=j~vKW(_x!|Ul>*q!4<{Th&kscI3fD3+?&k%3Fdv4d7p#3 zPG82U@?!M87#uBzRV@Zzi@C|Az1iVnT0fIIvYC7#PlMz6f<8*U*-SRk*V)%zz%$gL zVnLUj&TO(cs%HvXA(hRn$`@WSanW+HlNyFoi(T@i@8)`ygIj6&*!xfJg#3qpbZVB3caiC@{VjSohq|oYN$0x z16|*#6*Rksl_yM2%1!0;WFeayAJlVOQ%TIv#HMoEHZbxY+3Ss=Pb{_hpI9(yxF&OE z@0fD1Fo}msxtkT%r82|WZTa;pvboVo^pKHG$?PawCv~)UoZYp4ZP&nHci$@N)slUK z=do?F5!&|CnaWWL+McJ*RFdr(8oyz_Y5(z#Y&s1oAv+&msbiv3NlLP%u>#U2E#I+8 z%ZxyF$-;IT);DU!bfI4>Y|2x2R|Y;JrwyfbSl3o9m*Qj|MEPVcHO5WSMl{0I+)!68 zm(Aq~Gn}W4HmcKB(>QYa#YIdNx+vxg*-@F`w3aWdgYxK!6ey8pBs9|od$LJ!O?g^s z&MD0A%q{EJFNfV?N>`-x^f1gj&z@o_4`ou}DrUj5s}78+2*EDx*K!c7Y4MZl3=}gN zwBDD2sL4jm`J&_|EtgMZyYfkGOsBK8{H6j+#Z+t;muEmSzyIO}Vwu2wM<~A z#KFm|!DS7lGCGMa^klVR)J^Kf)DGzEwq;UjrC#W)RE;%b!)ThhG+a2EF6#?Mh)F>e zQ-65G!g(>rvgZ=+FVBfeXKm>l)Awe#>Z`C0PtZY>?9RC#nWbVnEoy?1^;FqwA~%k_wOYEUW4+Dg;RDKx zE>r@>OYLwvTUh|6B6cGx(K1P$^3Y-kXOy(0I7}V~Vi!XTF=e_oDhk10ea z4W@N{jQYm(4A-RdM$-vs$^di#lW$H8GI{p7DJ0D@R;ol+A`B=8@>ikP#5io32?h%q z)IF_>>BI#{&a*r*7PS<# z;S%w}GCSS*RnUjNT-WFrbfmI>OQHqCZWGxRa0dmuL*beodRjCsk+u2|D^FzE&dbEc zBv~UFVO_~fmsVEA)L0#JR>klcrS5!(z1nbOme%30ptP(r%*VP^VNmRv z&x(lbV8*hL0ezzx7ufS7D>}2XW{gL(2Eln6PD~%}uk!QUY=_}%>?MU(v9_mEdA&U| z3=yN6DFdtO1k@OPp7OFw=@&_1Nnj`X9{pDORCr6s4$coQ)kv`aEN+Cj5hjQiHH43} z?MmS{4H9H7q%n*$PusFN4kyavSo$6Vsq7s-+LDaH0y}Onz)d1GU)rYPm?2m_GlKX? zgvRkhdBwITTvTANIFy$e$GS8+1|`i&w1#E2V&i0bH*=~H+ZmL0{L8(Ff5?;EDporP z)*hwUVdd7Wyy{zv@ZsYcD}szykS$I0pNag+)n4|ASm3tk!!jB;Z}cE>rlo#m&g`(X zs!>B0lN!#m8VzKzVda*we@$ib>=@gJVex(CVQiJ92@9+Y6{duhfZYOCi0;g=zP)cF zqG?P^Zz@BHTxygmmJp`v;i$;4K-uw?R~9Cu_A#tJ!{Sb|X*9}Q!EE&;eC7(tp^b2s z(s^Fja>-3hkryo(9M2?q1hjNO&u7zHb<0GVx>C)c+v2|s9nE^QXXNsEGv0-aR|pT5+0)D5!U(c4B~NPrMJSHGx|ono8w~%GgE|aXn`>cNXx=ya(X12!{R4~Y|N7p zNFJt|W%nSDSCT@Nbu3wiL@N8SDnPd;IElj$oBLDS5inDhBdF|+)7ZS*yHF0dDse97 zbzY5TSBTr6vzpJ6bNVk(C@08@pucVh_XygG|Ib z8V#CvW4j?)++jt)A^mHW+hSp)Du-#n@q}94d3gJj9k8NH%PcwUl4boczNW%_p+xK~ zFnTf0?mVIcEc}Sp5#7V4P0ce~1vSSVpvK`E5Da>9TZpZ!=FBDa5_q~%5$F4ydO3r$ zV~@BQ?OH=)PS31T!uQcE)DY*SINCc(vk>8g@Vh&|QcGF^H&0Ae2G2`bI-)@pD3`K6 zO1>l{$66s6ft<_d5<*v{36Tl!FBGD8hDSR)Xme;KOa$hZuaK!P({!rkIB1 zA10hB*eg_}P1*KTHW)D$Tl*_?vU;;vt*;YwwMvQ=B3oezr&TABW(ns>r3IXOM@50cR>grLsKI+V~)jyvy8KMF=EW%O@9b z?j+`n0O@c+6E+mQW6oP!G7)kiHN;O5Dnvb+Pa5aplO{YqoKEv2oiDk=o9VaD_uZ7f z?9`8Z?<4pq%I#C#(U8mG!{b1=!-I4So}9UH_bNU{QRJ&}2OCVXP$y>wl~8AmJJg0N z8d!kGi}Ua(kzpK<7w7cisa*zF3{UWJXp1WiY>Y;c%HZjJ4400ld^nXUlXie)6#uwt z46g@hxQ|c~_Yn}s@IVoV!}z#PqdcnTP?E&Gh?GvPvw+M7(OMMa>>7;}K^CKO^BQsr zc$XlH@;v#N=S9LTbKGd5^D%^0421`?n0&1^1yjX_@GSB)^sorMEy9;B^YB!10p4~1 z1E5|)rE9y9x0qJp*(>v+OJB@Q2G1<5K8!}0q60jo?LjO9l`dTJAk)%DKky->Q|R$r zl#b(Fi7ahFid$?2Hw)084w@wp&OBiAfej;{`73>;S8C=^Cy#3*`ig_E6fhPnB2MXj zSS0qr@H_;r7l4yRxK0zE=Yiiv$mOTL8kO$o@OE>Vw?WKn61K!X zrvU3boF4uaq_@A!VXtUj9+ou%9@(YFX#m&|{xQ$JwEDxs^=C(6BT3A5PCVY>t@=M- znn(5OpB}`_@}i?-dHP^x_^3SXt>h^V|Du6E?Zd*|%@esRd%q7#en(kl{>MZPQ_woL z<$~znI95hpy|=^NO-*aNIbHxe(1E}_G*qN`^*oCWN)kH z^RKh|95o7>F#pw-)DNr5nl_dH!2H!wyus(H<@(++<^PS<=P110IgvMB#fKroZCI1y zc;}MWOI|rYC>=e@9%#bK#M?UdtRD{UTrounPRE~8dG`u_@iO6P;6wFoy*M3D;eoDF z6C(xN+g2sC*b7o)Gwhg8o9ALjnnK9L?ly;TU@ipDY2MOqlOb-w6wI|ZoN;VzCYH~| zYqHxVjL2aMdHXdN0rwV!WE}MH?v^(Q9&(@HZEYArXi+7YI( z0uEO5d4LDaPY;s{YUDS>APz6;N#pqI1$cwiJ>BPYgT&!(<`V<-;&7{cKF|uf8aMij zhI){!jiCXbR74IpBGjk|?#O{5fe)}nO0dDF#vI7T%j9^`*%53AHn{MD>M`W3MKxxL zS*(pY6<_e8pdL)|2vm1W328wcoGPIrMjHIMB*&4jgi5>k7A$?riJPwu0}Yn;po_4g zN(w_YGCyNyeul@-5>vdf8nmzjsEeiTQ!xQxs&orRz(*qpAnO+kt{Wle}T>9_9($`!u3Y8v|=~f#}VyRIE z_zuSTFhw;U;jyaBDDm4xg&>_(G*e&GB){WNA8tfa!0>SVQd|d^-_PRaF!U zlPSDnZepMTCn!PE$3XS5#7i$ilN_paqRKfE45!VFsSK8WW$1CJQzjg_tR8aXvm>ue z!moKoA-`WEhqZmZmEdS=qWOtBn6 z4TuTARFz)mQ8YI<162i;eoVGH4b6B9A95K#Fdr(tgZ?PALlNk55z;Q6{bq89tTV~?5Tx$ zK;*vZKD8M{xZ!Vz@zi429#|fmQN5>z&5v!G5!hF-p*c*UCCzmnmm0h%v?Qd3mbg6* z+%9hNxSDYXgl0iT3TON3Jf2YL84Lu&#V4UEgvLo37n=^-X#>{@ zHdxL!)CN4%>4U=n6wPk*xSK<5hH`{D!7^(LYmm4jQ27iKu;}p#YUn)6YC~;x7?f2D z69pV`oq~2pF zC(k2~lbe#6GZTgl@B+grCg6dyeK0J&f~TKF&A1%uEHELWp9RqiCjHMs|IS%ZDu7UD z>1KS{Ma~k@4KNC~0|5BIVEa6L9e`C+q4DURZQuLO>DO*~`I30yrSIPL`1LRS&D6qY zPTF6(<>cK9SN1yHEh`_n+_&kW(qQ(HN+;ZSWQ+T9&_QZ9@P|G;8ryxhJ z7ehwI=>R6*e<`)n$HCX7IBowp(UuP`Fr*p%cm}W%UrKf0ubr)eM7jm*$2U+3IvanW z@bKk5pj(bzcQ?-cs4fpF@k~J;;mLYL9)8vU^{g}Qr{d`b`Hl3j$XJ`81BT8e5yo0G zztPkVeyUJ?rV_&!SL8a8H41$vZLKsY$-By$pDD%}!KC@{S3grBuMw1EUV;M?XUf%r zIiiN`7!A)KYdHnmG0S;Sjv_aWFrNH;dRu-5L(|8Azt~y5(meXN_H)F$)LZ9F=x)LKy;;UDNTLAgd7J0^vQm^q?i(4Os4A~;dGZ!*M%brt= z`$@cys^pQM1&u>v%TI+eG9qv`&!DZ`Z?oOAJi+ReRg-edmGVAsU zXz>i((MtoL$mYzGIjXr3o29wvHO^(2Q@O*H-&X`Me?R1O%)+Yg*57Td&RvgBdpgtU zUc9qN^6XdFtp~mI?o5icRg*J@!PevU>Y~X-|3BydH3{(F*(7||Po?USOT+>zo1D*d zSZV0In~63d^t67PYOqe=$?_mpr?oid7(l99R;l&4^IFv>qz^h@`!k1-E_`dM(lG

    Wyfj!LltvS-V{hB*STS8$YEL3ca9i6Bb> zPwZihb!u`;w+T%v#?8;ATe0%-NhjfZatG@2ITpX3V0aUF3Nh6ld~0i!aSW1yFSb`P z&{)smj{YVD{tmJ9WAXJKE1=o$Vpy?a$3zoWMbKF1l-2Juuq;EU$I>%=Ci}~D1;-Y@ zad^+=@Px*?8HaQ^s^TLq{&Up)ZFmnP!K+1DBr}F_vt&oGuE2NVoAkfzeGF7F$6s#O zm{E?*@L>;HH+m8mREtXk%-x}S+N_+InJa{7<_{vEdV1ET-{ literal 0 HcmV?d00001 diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Activity.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Activity.cs new file mode 100644 index 0000000000..0eb47eb188 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Activity.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Runtime.Diagnostics; + + class Activity : IDisposable + { + protected Guid parentId; + Guid currentId; + bool mustDispose = false; + + protected Activity(Guid activityId, Guid parentId) + { + this.currentId = activityId; + this.parentId = parentId; + this.mustDispose = true; + DiagnosticTraceBase.ActivityId = this.currentId; + } + + internal static Activity CreateActivity(Guid activityId) + { + Activity retval = null; + if (activityId != Guid.Empty) + { + Guid currentActivityId = DiagnosticTraceBase.ActivityId; + if (activityId != currentActivityId) + { + retval = new Activity(activityId, currentActivityId); + } + } + return retval; + } + + public virtual void Dispose() + { + if (this.mustDispose) + { + this.mustDispose = false; + DiagnosticTraceBase.ActivityId = this.parentId; + } + GC.SuppressFinalize(this); + } + + protected Guid Id + { + get { return this.currentId; } + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticStrings.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticStrings.cs new file mode 100644 index 0000000000..d68490ff2b --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticStrings.cs @@ -0,0 +1,46 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + static class DiagnosticStrings + { + internal const string DiagnosticsNamespace = "http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics"; + + internal const string ActivityIdName = "E2ETrace.ActivityID"; + internal const string ActivityId = "ActivityId"; + internal const string AppDomain = "AppDomain"; + internal const string DataTag = "Data"; + internal const string DataItemsTag = "DataItems"; + internal const string DeflateCookieAfterDeflatingTag = "AfterDeflating"; + internal const string DeflateCookieOriginalSizeTag = "OriginalSize"; + internal const string DescriptionTag = "Description"; + internal const string EventLogTag = "EventLog"; + internal const string ExceptionTag = "Exception"; + internal const string ExceptionTypeTag = "ExceptionType"; + internal const string ExceptionStringTag = "ExceptionString"; + internal const string ExtendedDataTag = "ExtendedData"; + internal const string HeaderTag = "Header"; + internal const string InnerExceptionTag = "InnerException"; + internal const string KeyTag = "Key"; + internal const string MessageTag = "Message"; + internal const string NameTag = "Name"; + internal const string NamespaceTag = "xmlns"; + internal const string NativeErrorCodeTag = "NativeErrorCode"; + internal const string ProcessId = "ProcessId"; + internal const string ProcessName = "ProcessName"; + internal const string RoleTag = "Role"; + internal const string SeverityTag = "Severity"; + internal const string SourceTag = "Source"; + internal const string StackTraceTag = "StackTrace"; + internal const string TraceCodeTag = "TraceIdentifier"; + internal const string TraceRecordTag = "TraceRecord"; + internal const string ValueTag = "Value"; + + internal static string[][] HeadersPaths = { + new string[] { DiagnosticStrings.TraceRecordTag, DiagnosticStrings.ExtendedDataTag, "MessageHeaders", "Security" }, + new string[] { DiagnosticStrings.TraceRecordTag, DiagnosticStrings.ExtendedDataTag, "MessageHeaders", "IssuedTokens" } }; + internal static string[] PiiList = new string[] { "BinarySecret", "Entropy", "Password", "Nonce", "Username", "BinarySecurityToken", "NameIdentifier", "SubjectLocality", "AttributeValue" }; + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticTraceSource.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticTraceSource.cs new file mode 100644 index 0000000000..25913b8424 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticTraceSource.cs @@ -0,0 +1,55 @@ +//----------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +namespace System.ServiceModel.Diagnostics +{ + using System.Diagnostics; + + class DiagnosticTraceSource : PiiTraceSource + { + const string PropagateActivityValue = "propagateActivity"; + internal DiagnosticTraceSource(string name, string eventSourceName) + : base(name, eventSourceName) + { + } + + internal DiagnosticTraceSource(string name, string eventSourceName, SourceLevels level) + : base(name, eventSourceName, level) + { + } + + protected override string[] GetSupportedAttributes() + { + string[] baseAttributes = base.GetSupportedAttributes(); + string[] supportedAttributes = new string[baseAttributes.Length + 1]; + for (int i = 0; i < baseAttributes.Length; i++) + { + supportedAttributes[i] = baseAttributes[i]; + } + supportedAttributes[baseAttributes.Length] = DiagnosticTraceSource.PropagateActivityValue; + + return supportedAttributes; + } + + internal bool PropagateActivity + { + get + { + bool retval = false; + string attributeValue = this.Attributes[DiagnosticTraceSource.PropagateActivityValue]; + if (!string.IsNullOrEmpty(attributeValue)) + { + if (!bool.TryParse(attributeValue, out retval)) + { + retval = false; + } + } + return retval; + } + set + { + this.Attributes[DiagnosticTraceSource.PropagateActivityValue] = value.ToString(); + } + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticsTraceCode.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticsTraceCode.cs new file mode 100644 index 0000000000..08709d0e89 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/DiagnosticsTraceCode.cs @@ -0,0 +1,18 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + static class DiagnosticsTraceCode + { + // Diagnostic trace codes + public const int Diagnostics = 0X20000; + public const int AppDomainUnload = DiagnosticsTraceCode.Diagnostics | 0X0001; // + public const int EventLog = DiagnosticsTraceCode.Diagnostics | 0X0002; // + public const int ThrowingException = DiagnosticsTraceCode.Diagnostics | 0X0003; // + public const int TraceHandledException = DiagnosticsTraceCode.Diagnostics | 0X0004; // + public const int UnhandledException = DiagnosticsTraceCode.Diagnostics | 0X0005; // + public const int TraceTruncatedQuotaExceeded = DiagnosticsTraceCode.Diagnostics | 0X000C; // + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EncodingFallbackAwareXmlTextWriter.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EncodingFallbackAwareXmlTextWriter.cs new file mode 100644 index 0000000000..dcb5d10825 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EncodingFallbackAwareXmlTextWriter.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Xml; + using System.Text; + using System.IO; + + class EncodingFallbackAwareXmlTextWriter : XmlTextWriter + { + Encoding encoding; + + internal EncodingFallbackAwareXmlTextWriter(TextWriter writer) + : base(writer) + { + this.encoding = writer.Encoding; + } + + public override void WriteString(string value) + { + if (!string.IsNullOrEmpty(value) && + ContainsInvalidXmlChar(value)) + { + byte[] blob = encoding.GetBytes(value); + value = encoding.GetString(blob); + } + base.WriteString(value); + } + + bool ContainsInvalidXmlChar(string value) + { + if (string.IsNullOrEmpty(value)) + { + return false; + } + + int i = 0; + int len = value.Length; + + while (i < len) + { + if (XmlConvert.IsXmlChar(value[i])) + { + i++; + continue; + } + + if (i + 1 < len && + XmlConvert.IsXmlSurrogatePair(value[i + 1], value[i])) + { + i += 2; + continue; + } + + return true; + } + + return false; + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs new file mode 100644 index 0000000000..11bca18653 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + // + + [Obsolete("This has been replaced by System.Runtime.Diagnostics.EventLogCategory")] + enum EventLogCategory : ushort + { + ServiceAuthorization = 1, // reserved + MessageAuthentication, // reserved + ObjectAccess, // reserved + Tracing, + WebHost, + FailFast, + MessageLogging, + PerformanceCounter, + Wmi, + ComPlus, + StateMachine, + Wsat, + SharingService, + ListenerAdapter + } + +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs new file mode 100644 index 0000000000..3fe96971ff --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs @@ -0,0 +1,100 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + // + + [Obsolete("This has been replaced by System.Runtime.Diagnostics.EventLogEventId")] + enum EventLogEventId : uint + { + // EventIDs from shared Diagnostics and Reliability code + FailedToSetupTracing = 0xC0010064, + FailedToInitializeTraceSource, + FailFast, + FailFastException, + FailedToTraceEvent, + FailedToTraceEventWithException, + InvariantAssertionFailed, + PiiLoggingOn, + PiiLoggingNotAllowed, + + // ServiceModel EventIDs + WebHostUnhandledException = 0xC0020001, + WebHostHttpError, + WebHostFailedToProcessRequest, + WebHostFailedToListen, + FailedToLogMessage, + RemovedBadFilter, + FailedToCreateMessageLoggingTraceSource, + MessageLoggingOn, + MessageLoggingOff, + FailedToLoadPerformanceCounter, + FailedToRemovePerformanceCounter, + WmiGetObjectFailed, + WmiPutInstanceFailed, + WmiDeleteInstanceFailed, + WmiCreateInstanceFailed, + WmiExecQueryFailed, + WmiExecMethodFailed, + WmiRegistrationFailed, + WmiUnregistrationFailed, + WmiAdminTypeMismatch, + WmiPropertyMissing, + ComPlusServiceHostStartingServiceError, + ComPlusDllHostInitializerStartingError, + ComPlusTLBImportError, + ComPlusInvokingMethodFailed, + ComPlusInstanceCreationError, + ComPlusInvokingMethodFailedMismatchedTransactions, + + // TransactionBridge + UnhandledStateMachineExceptionRecordDescription = 0xC0030001, + FatalUnexpectedStateMachineEvent, + ParticipantRecoveryLogEntryCorrupt, + CoordinatorRecoveryLogEntryCorrupt, + CoordinatorRecoveryLogEntryCreationFailure, + ParticipantRecoveryLogEntryCreationFailure, + ProtocolInitializationFailure, + ProtocolStartFailure, + ProtocolRecoveryBeginningFailure, + ProtocolRecoveryCompleteFailure, + TransactionBridgeRecoveryFailure, + ProtocolStopFailure, + NonFatalUnexpectedStateMachineEvent, + PerformanceCounterInitializationFailure, + ProtocolRecoveryComplete, + ProtocolStopped, + ThumbPrintNotFound, + ThumbPrintNotValidated, + SslNoPrivateKey, + SslNoAccessiblePrivateKey, + MissingNecessaryKeyUsage, + MissingNecessaryEnhancedKeyUsage, + + // SMSvcHost + StartErrorPublish = 0xC0040001, + BindingError, + LAFailedToListenForApp, + UnknownListenerAdapterError, + WasDisconnected, + WasConnectionTimedout, + ServiceStartFailed, + MessageQueueDuplicatedSocketLeak, + MessageQueueDuplicatedPipeLeak, + SharingUnhandledException, + + // SecurityAudit + ServiceAuthorizationSuccess = 0x40060001, + ServiceAuthorizationFailure = 0xC0060002, + MessageAuthenticationSuccess = 0x40060003, + MessageAuthenticationFailure = 0xC0060004, + SecurityNegotiationSuccess = 0x40060005, + SecurityNegotiationFailure = 0xC0060006, + TransportAuthenticationSuccess = 0x40060007, + TransportAuthenticationFailure = 0xC0060008, + ImpersonationSuccess = 0x40060009, + ImpersonationFailure = 0xC006000A + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogger.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogger.cs new file mode 100644 index 0000000000..4c98c78fbf --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogger.cs @@ -0,0 +1,60 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Diagnostics; + using System.Security; + using System.Security.Permissions; + using System.Security.Principal; + + // + [Obsolete("This has been replaced by System.Runtime.Diagnostics.EventLogger")] + class EventLogger + { + System.Runtime.Diagnostics.EventLogger innerEventLogger; + + EventLogger() + { + } + + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.EventLog instead")] + internal EventLogger(string eventLogSourceName, object diagnosticTrace) + { + this.innerEventLogger = new System.Runtime.Diagnostics.EventLogger(eventLogSourceName, (System.Runtime.Diagnostics.DiagnosticTraceBase)diagnosticTrace); + } + + [System.Runtime.Fx.Tag.SecurityNote(Critical = "Calling SecurityCritical method/property")] + [SecurityCritical] + internal static EventLogger UnsafeCreateEventLogger(string eventLogSourceName, object diagnosticTrace) + { + EventLogger logger = new EventLogger(); + logger.innerEventLogger = System.Runtime.Diagnostics.EventLogger.UnsafeCreateEventLogger(eventLogSourceName, (System.Runtime.Diagnostics.DiagnosticTraceBase)diagnosticTrace); + return logger; + } + + internal void LogEvent(TraceEventType type, EventLogCategory category, EventLogEventId eventId, bool shouldTrace, params string[] values) + { + this.innerEventLogger.LogEvent(type, (ushort)category, (uint)eventId, shouldTrace, values); + } + + [System.Runtime.Fx.Tag.SecurityNote(Critical = "Calling SecurityCritical method/property")] + [SecurityCritical] + internal void UnsafeLogEvent(TraceEventType type, EventLogCategory category, EventLogEventId eventId, bool shouldTrace, params string[] values) + { + this.innerEventLogger.UnsafeLogEvent(type, (ushort)category, (uint)eventId, + shouldTrace, values); + } + + internal void LogEvent(TraceEventType type, EventLogCategory category, EventLogEventId eventId, params string[] values) + { + this.innerEventLogger.LogEvent(type, (ushort)category, (uint)eventId, values); + } + + internal static string NormalizeEventLogParameter(string param) + { + return System.Runtime.Diagnostics.EventLogger.NormalizeEventLogParameter(param); + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/ExceptionUtility.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/ExceptionUtility.cs new file mode 100644 index 0000000000..61cfc52ac5 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/ExceptionUtility.cs @@ -0,0 +1,273 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System; + using System.Diagnostics; + using System.Runtime; + using System.Runtime.ConstrainedExecution; + using System.Runtime.Diagnostics; + using System.Runtime.InteropServices; + using System.Threading; + using System.Runtime.Serialization; + using System.Reflection; + using System.Runtime.CompilerServices; + using System.Collections; + using System.Xml; + + class ExceptionUtility + { + const string ExceptionStackAsStringKey = "System.ServiceModel.Diagnostics.ExceptionUtility.ExceptionStackAsString"; + + // This field should be only used for debug build. + internal static ExceptionUtility mainInstance; + + LegacyDiagnosticTrace diagnosticTrace; + ExceptionTrace exceptionTrace; + string name; + string eventSourceName; + + [ThreadStatic] + static Guid activityId; + + [ThreadStatic] + static bool useStaticActivityId; + + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")] + internal ExceptionUtility(string name, string eventSourceName, object diagnosticTrace, object exceptionTrace) + { + this.diagnosticTrace = (LegacyDiagnosticTrace)diagnosticTrace; + this.exceptionTrace = (ExceptionTrace)exceptionTrace; + this.name = name; + this.eventSourceName = eventSourceName; + } + + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")] + [MethodImpl(MethodImplOptions.NoInlining)] +#pragma warning disable 56500 + internal void TraceFailFast(string message) + { + System.Runtime.Diagnostics.EventLogger logger = null; + try + { +#pragma warning disable 618 + logger = new System.Runtime.Diagnostics.EventLogger(this.eventSourceName, this.diagnosticTrace); +#pragma warning restore 618 + } + finally + { +#pragma warning disable 618 + TraceFailFast(message, logger); +#pragma warning restore 618 + } + } + + // Fail-- Event Log entry will be generated. + // To force a Watson on a dev machine, do the following: + // 1. Set \HKLM\SOFTWARE\Microsoft\PCHealth\ErrorReporting ForceQueueMode = 0 + // 2. In the command environment, set COMPLUS_DbgJitDebugLaunchSetting=0 + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")] + [MethodImpl(MethodImplOptions.NoInlining)] + internal static void TraceFailFast(string message, System.Runtime.Diagnostics.EventLogger logger) + { + try + { + if (logger != null) + { + string stackTrace = null; + try + { + stackTrace = new StackTrace().ToString(); + } + catch (Exception exception) + { + stackTrace = exception.Message; + } + finally + { + logger.LogEvent(TraceEventType.Critical, + (ushort)EventLogCategory.FailFast, + (uint)EventLogEventId.FailFast, + message, + stackTrace); + } + } + } + catch (Exception e) + { + if (logger != null) + { + logger.LogEvent(TraceEventType.Critical, + (ushort)EventLogCategory.FailFast, + (uint)EventLogEventId.FailFastException, + e.ToString()); + } + throw; + } + } +#pragma warning restore 56500 + + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ExceptionUtility instead")] + internal void TraceFailFastException(Exception exception) + { + TraceFailFast(exception == null ? null : exception.ToString()); + } + + internal Exception ThrowHelper(Exception exception, TraceEventType eventType, TraceRecord extendedData) + { +#pragma warning disable 618 + bool shouldTrace = (this.diagnosticTrace != null && this.diagnosticTrace.ShouldTrace(eventType)); +#pragma warning restore 618 + if (shouldTrace) + { + using (ExceptionUtility.useStaticActivityId ? Activity.CreateActivity(ExceptionUtility.activityId) : null) + { + this.diagnosticTrace.TraceEvent(eventType, DiagnosticsTraceCode.ThrowingException, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "ThrowingException"), TraceSR.GetString(TraceSR.ThrowingException), extendedData, exception, null); + } + + IDictionary data = exception.Data; + if (data != null && !data.IsReadOnly && !data.IsFixedSize) + { + object existingString = data[ExceptionStackAsStringKey]; + string stackString = existingString == null ? "" : existingString as string; + if (stackString != null) + { + string stack = exception.StackTrace; + if (!string.IsNullOrEmpty(stack)) + { + stackString = string.Concat(stackString, stackString.Length == 0 ? "" : Environment.NewLine, "throw", Environment.NewLine, stack, Environment.NewLine, "catch", Environment.NewLine); + data[ExceptionStackAsStringKey] = stackString; + } + } + } + } + + // Trace using ETW as well. + exceptionTrace.TraceEtwException(exception, eventType); + + return exception; + } + + internal Exception ThrowHelper(Exception exception, TraceEventType eventType) + { + return this.ThrowHelper(exception, eventType, null); + } + + internal ArgumentException ThrowHelperArgument(string message) + { + return (ArgumentException)this.ThrowHelperError(new ArgumentException(message)); + } + + internal ArgumentException ThrowHelperArgument(string paramName, string message) + { + return (ArgumentException)this.ThrowHelperError(new ArgumentException(message, paramName)); + } + + internal ArgumentNullException ThrowHelperArgumentNull(string paramName) + { + return (ArgumentNullException)this.ThrowHelperError(new ArgumentNullException(paramName)); + } + + internal ArgumentNullException ThrowHelperArgumentNull(string paramName, string message) + { + return (ArgumentNullException)this.ThrowHelperError(new ArgumentNullException(paramName, message)); + } + + internal ArgumentException ThrowHelperArgumentNullOrEmptyString(string arg) + { + return (ArgumentException)this.ThrowHelperError(new ArgumentException(TraceSR.GetString(TraceSR.StringNullOrEmpty), arg)); + } + + internal Exception ThrowHelperFatal(string message, Exception innerException) + { + return this.ThrowHelperError(new FatalException(message, innerException)); + } + + internal Exception ThrowHelperInternal(bool fatal) + { + return fatal ? Fx.AssertAndThrowFatal("Fatal InternalException should never be thrown.") : Fx.AssertAndThrow("InternalException should never be thrown."); + } + + internal Exception ThrowHelperInvalidOperation(string message) + { + return ThrowHelperError(new InvalidOperationException(message)); + } + + internal Exception ThrowHelperCallback(string message, Exception innerException) + { + return this.ThrowHelperCritical(new CallbackException(message, innerException)); + } + + internal Exception ThrowHelperCallback(Exception innerException) + { + return this.ThrowHelperCallback(TraceSR.GetString(TraceSR.GenericCallbackException), innerException); + } + + internal Exception ThrowHelperCritical(Exception exception) + { + return this.ThrowHelper(exception, TraceEventType.Critical); + } + + internal Exception ThrowHelperError(Exception exception) + { + return this.ThrowHelper(exception, TraceEventType.Error); + } + + internal Exception ThrowHelperWarning(Exception exception) + { + return this.ThrowHelper(exception, TraceEventType.Warning); + } + + internal Exception ThrowHelperXml(XmlReader reader, string message) + { + return this.ThrowHelperXml(reader, message, null); + } + + internal Exception ThrowHelperXml(XmlReader reader, string message, Exception inner) + { + IXmlLineInfo lineInfo = reader as IXmlLineInfo; + return this.ThrowHelperError(new XmlException( + message, + inner, + (null != lineInfo) ? lineInfo.LineNumber : 0, + (null != lineInfo) ? lineInfo.LinePosition : 0)); + } + + internal void DiagnosticTraceHandledException(Exception exception, TraceEventType eventType) + { +#pragma warning disable 618 + bool shouldTrace = (this.diagnosticTrace != null && this.diagnosticTrace.ShouldTrace(eventType)); +#pragma warning restore 618 + if (shouldTrace) + { + using (ExceptionUtility.useStaticActivityId ? Activity.CreateActivity(ExceptionUtility.activityId) : null) + { + this.diagnosticTrace.TraceEvent(eventType, DiagnosticsTraceCode.TraceHandledException, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceHandledException"), TraceSR.GetString(TraceSR.TraceHandledException), null, exception, null); + } + } + } + + // On a single thread, these functions will complete just fine + // and don't need to worry about locking issues because the effected + // variables are ThreadStatic. + internal static void UseActivityId(Guid activityId) + { + ExceptionUtility.activityId = activityId; + ExceptionUtility.useStaticActivityId = true; + } + + internal static void ClearActivityId() + { + ExceptionUtility.useStaticActivityId = false; + ExceptionUtility.activityId = Guid.Empty; + } + + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + internal static bool IsInfrastructureException(Exception exception) + { + return exception != null && (exception is ThreadAbortException || exception is AppDomainUnloadedException); + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/LegacyDiagnosticTrace.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/LegacyDiagnosticTrace.cs new file mode 100644 index 0000000000..86ad22c037 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/LegacyDiagnosticTrace.cs @@ -0,0 +1,308 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Collections.Generic; + using System.ComponentModel; + using System.Configuration; + using System.Diagnostics; + using System.Globalization; + using System.Runtime; + using System.Runtime.Diagnostics; + using System.Security; + using System.Security.Permissions; + using System.Text; + using System.Xml; + using System.Diagnostics.CodeAnalysis; + + class LegacyDiagnosticTrace : DiagnosticTraceBase + { + const int MaxTraceSize = 65535; + bool shouldUseActivity = false; + TraceSourceKind traceSourceType = TraceSourceKind.PiiTraceSource; + const string subType = ""; + const string version = "1"; + const int traceFailureLogThreshold = 1; + const SourceLevels DefaultLevel = SourceLevels.Off; + static object classLockObject = new object(); + + protected override void OnSetLevel(SourceLevels level) + { + if (this.TraceSource != null) + { + if (this.TraceSource.Switch.Level != SourceLevels.Off && + level == SourceLevels.Off) + { + TraceSource temp = this.TraceSource; + this.CreateTraceSource(); + temp.Close(); + } + this.shouldUseActivity = (level & SourceLevels.ActivityTracing) != 0; + } + } + + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.ShouldUseActivity instead")] + internal bool ShouldUseActivity + { + get { return this.shouldUseActivity; } + } + +#pragma warning disable 56500 + [Obsolete("For SMDiagnostics.dll use only. Never 'new' this type up unless you are DiagnosticUtility.")] + [Fx.Tag.SecurityNote(Critical = "Sets eventSourceName.")] + [SecurityCritical] + [SuppressMessage(FxCop.Category.Usage, FxCop.Rule.DoNotCallOverridableMethodsInConstructors, + Justification = "LegacyDiagnosticTrace is an internal class without derived classes")] + internal LegacyDiagnosticTrace(TraceSourceKind sourceType, string traceSourceName, string eventSourceName) + : base(traceSourceName) + { + this.traceSourceType = sourceType; + this.EventSourceName = eventSourceName; + + try + { + this.CreateTraceSource(); + this.AddDomainEventHandlersForCleanup(); + } + catch (ConfigurationErrorsException) + { + throw; + } + catch (Exception e) + { + if (Fx.IsFatal(e)) + { + throw; + } + System.Runtime.Diagnostics.EventLogger logger = new System.Runtime.Diagnostics.EventLogger(this.EventSourceName, null); + logger.LogEvent(TraceEventType.Error, (ushort)System.Runtime.Diagnostics.EventLogCategory.Tracing, (uint)System.Runtime.Diagnostics.EventLogEventId.FailedToSetupTracing, false, + e.ToString()); + } + } +#pragma warning restore 56500 + + [SecuritySafeCritical] + void CreateTraceSource() + { + PiiTraceSource tempSource = null; + if (this.traceSourceType == TraceSourceKind.PiiTraceSource) + { + tempSource = new PiiTraceSource(this.TraceSourceName, this.EventSourceName, LegacyDiagnosticTrace.DefaultLevel); + } + else + { + tempSource = new DiagnosticTraceSource(this.TraceSourceName, this.EventSourceName, LegacyDiagnosticTrace.DefaultLevel); + } + + SetTraceSource(tempSource); + } + +#pragma warning disable 56500 + internal void TraceEvent(TraceEventType type, int code, string msdnTraceCode, string description, TraceRecord trace, Exception exception, object source) + { +#pragma warning disable 618 + Fx.Assert(exception == null || type <= TraceEventType.Information, "Exceptions should be traced at Information or higher"); + Fx.Assert(!string.IsNullOrEmpty(description), "All TraceCodes should have a description"); +#pragma warning restore 618 + TraceXPathNavigator navigator = null; + try + { +#pragma warning disable 618 + if (this.TraceSource != null && this.HaveListeners) +#pragma warning restore 618 + { + try + { + BuildTrace(type, msdnTraceCode, description, trace, exception, source, out navigator); + } + catch (PlainXmlWriter.MaxSizeExceededException) + { + StringTraceRecord codeTraceRecord = new StringTraceRecord("TruncatedTraceId", msdnTraceCode); + this.TraceEvent(type, DiagnosticsTraceCode.TraceTruncatedQuotaExceeded, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "TraceTruncatedQuotaExceeded"), TraceSR.GetString(TraceSR.TraceCodeTraceTruncatedQuotaExceeded), codeTraceRecord, null, null); + } + this.TraceSource.TraceData(type, code, navigator); + if (this.CalledShutdown) + { + this.TraceSource.Flush(); + } + // Must have been a successful trace. + this.LastFailure = DateTime.MinValue; + } + } + catch (Exception e) + { + if (Fx.IsFatal(e)) + { + throw; + } + LogTraceFailure(navigator == null ? string.Empty : navigator.ToString(), e); + } + } +#pragma warning restore 56500 + + internal void TraceEvent(TraceEventType type, int code, string msdnTraceCode, string description, TraceRecord trace, Exception exception, Guid activityId, object source) + { +#pragma warning disable 618 + using ((this.ShouldUseActivity && Guid.Empty != activityId) ? Activity.CreateActivity(activityId) : null) +#pragma warning restore 618 + { + this.TraceEvent(type, code, msdnTraceCode, description, trace, exception, source); + } + } + + // helper for standardized trace code generation + static internal string GenerateMsdnTraceCode(string traceSource, string traceCodeString) + { + return string.Format(CultureInfo.InvariantCulture, + "http://msdn.microsoft.com/{0}/library/{1}.{2}.aspx", + CultureInfo.CurrentCulture.Name, + traceSource, traceCodeString); + } + +#pragma warning disable 56500 + internal void TraceTransfer(Guid newId) + { +#pragma warning disable 618 + if (this.ShouldUseActivity) +#pragma warning restore 618 + { + Guid oldId = LegacyDiagnosticTrace.ActivityId; + if (newId != oldId) + { +#pragma warning disable 618 + if (this.HaveListeners) +#pragma warning restore 618 + { + try + { + this.TraceSource.TraceTransfer(0, null, newId); + } + catch (Exception e) + { + if (Fx.IsFatal(e)) + { + throw; + } + LogTraceFailure(null, e); + } + } + } + } + } + + protected override void OnShutdownTracing() + { + if (null != this.TraceSource) + { +#pragma warning disable 618 + if (this.Level != SourceLevels.Off) + { + if (this.ShouldTrace(TraceEventType.Information)) +#pragma warning restore 618 + { + Dictionary values = new Dictionary(3); + values["AppDomain.FriendlyName"] = AppDomain.CurrentDomain.FriendlyName; + values["ProcessName"] = DiagnosticTraceBase.ProcessName; + values["ProcessId"] = DiagnosticTraceBase.ProcessId.ToString(CultureInfo.CurrentCulture); + this.TraceEvent(TraceEventType.Information, DiagnosticsTraceCode.AppDomainUnload, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "AppDomainUnload"), TraceSR.GetString(TraceSR.TraceCodeAppDomainUnload), + new DictionaryTraceRecord(values), null, null); + } + this.TraceSource.Flush(); + } + } + } + + protected override void OnUnhandledException(Exception exception) + { + TraceEvent(TraceEventType.Critical, DiagnosticsTraceCode.UnhandledException, "UnhandledException", TraceSR.GetString(TraceSR.UnhandledException), null, exception, null); + } + + public bool ShouldLogPii + { + get + { + PiiTraceSource traceSource = this.TraceSource as PiiTraceSource; + if (traceSource != null) + { + return traceSource.ShouldLogPii; + } + + return false; + } + + set + { + PiiTraceSource traceSource = this.TraceSource as PiiTraceSource; + if (traceSource != null) + { + traceSource.ShouldLogPii = value; + } + } + } + + void BuildTrace(TraceEventType type, string msdnTraceCode, string description, TraceRecord trace, + Exception exception, object source, out TraceXPathNavigator navigator) + { + PlainXmlWriter xmlWriter = new PlainXmlWriter(LegacyDiagnosticTrace.MaxTraceSize); + navigator = xmlWriter.Navigator; + + this.BuildTrace(xmlWriter, type, msdnTraceCode, description, trace, exception, source); + + if (!ShouldLogPii) + { + navigator.RemovePii(DiagnosticStrings.HeadersPaths); + } + } + + void BuildTrace(PlainXmlWriter xml, TraceEventType type, string msdnTraceCode, string description, + TraceRecord trace, Exception exception, object source) + { + xml.WriteStartElement(DiagnosticStrings.TraceRecordTag); + xml.WriteAttributeString(DiagnosticStrings.NamespaceTag, LegacyDiagnosticTrace.TraceRecordVersion); + xml.WriteAttributeString(DiagnosticStrings.SeverityTag, DiagnosticTraceBase.LookupSeverity(type)); + + xml.WriteElementString(DiagnosticStrings.TraceCodeTag, msdnTraceCode); + xml.WriteElementString(DiagnosticStrings.DescriptionTag, description); + xml.WriteElementString(DiagnosticStrings.AppDomain, DiagnosticTraceBase.AppDomainFriendlyName); + + if (source != null) + { + xml.WriteElementString(DiagnosticStrings.SourceTag, CreateSourceString(source)); + } + + if (trace != null) + { + xml.WriteStartElement(DiagnosticStrings.ExtendedDataTag); + xml.WriteAttributeString(DiagnosticStrings.NamespaceTag, trace.EventId); + + trace.WriteTo(xml); + + xml.WriteEndElement(); + } + + if (exception != null) + { + xml.WriteStartElement(DiagnosticStrings.ExceptionTag); + AddExceptionToTraceString(xml, exception); + xml.WriteEndElement(); + } + + xml.WriteEndElement(); + } + + public override bool IsEnabled() + { + return true; + } + + public override void TraceEventLogEvent(TraceEventType type, TraceRecord traceRecord) + { + TraceEvent(type, + DiagnosticsTraceCode.EventLog, LegacyDiagnosticTrace.GenerateMsdnTraceCode("System.ServiceModel.Diagnostics", "EventLog"), + TraceSR.GetString(TraceSR.TraceCodeEventLog), + traceRecord, null, null); + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/MachineSettingsSection.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/MachineSettingsSection.cs new file mode 100644 index 0000000000..58ba6b4d26 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/MachineSettingsSection.cs @@ -0,0 +1,55 @@ +//------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------------------------ + +namespace System.ServiceModel.Configuration +{ + using System.Configuration; + + internal class MachineSettingsSection : ConfigurationSection + { + static bool enableLoggingKnownPii; + static bool hasInitialized = false; + static object syncRoot = new object(); + + const string enableLoggingKnownPiiKey = "enableLoggingKnownPii"; + ConfigurationPropertyCollection properties; + + protected override ConfigurationPropertyCollection Properties + { + get + { + if (this.properties == null) + { + ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection(); + properties.Add(new ConfigurationProperty(MachineSettingsSection.enableLoggingKnownPiiKey, typeof(System.Boolean), false, null, null, System.Configuration.ConfigurationPropertyOptions.None)); + this.properties = properties; + } + return this.properties; + } + } + + public static bool EnableLoggingKnownPii + { + get + { + if (!hasInitialized) + { + lock (syncRoot) + { + if (!hasInitialized) + { + MachineSettingsSection machineSettingsSection = (MachineSettingsSection)ConfigurationManager.GetSection("system.serviceModel/machineSettings"); + enableLoggingKnownPii = (bool)machineSettingsSection[MachineSettingsSection.enableLoggingKnownPiiKey]; + hasInitialized = true; + } + } + } + + return enableLoggingKnownPii; + } + } + } +} + + diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs new file mode 100644 index 0000000000..bbcf4395c8 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Runtime; + using System.Runtime.InteropServices; + using System.Runtime.Versioning; + using System.Security; + + static class NativeMethods + { + const string ADVAPI32 = "advapi32.dll"; + + [DllImport(ADVAPI32, CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)] + [ResourceExposure(ResourceScope.Machine)] + [Fx.Tag.SecurityNote(Critical = "Returns security critical type SafeEventLogWriteHandle.")] + [SecurityCritical] + internal static extern SafeEventLogWriteHandle RegisterEventSource(string uncServerName, string sourceName); + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PiiTraceSource.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PiiTraceSource.cs new file mode 100644 index 0000000000..d48db147a0 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PiiTraceSource.cs @@ -0,0 +1,108 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Configuration; + using System.Diagnostics; + using System.Runtime; + using System.Runtime.Diagnostics; + using System.ServiceModel.Configuration; + + class PiiTraceSource : TraceSource + { + string eventSourceName = String.Empty; + internal const string LogPii = "logKnownPii"; + bool shouldLogPii = false; + bool initialized = false; + object localSyncObject = new object(); + + internal PiiTraceSource(string name, string eventSourceName) + : base(name) + { +#pragma warning disable 618 + Fx.Assert(!String.IsNullOrEmpty(eventSourceName), "Event log source name must be valid"); +#pragma warning restore 618 + this.eventSourceName = eventSourceName; + } + + internal PiiTraceSource(string name, string eventSourceName, SourceLevels levels) + : base(name, levels) + { +#pragma warning disable 618 + Fx.Assert(!String.IsNullOrEmpty(eventSourceName), "Event log source name must be valid"); +#pragma warning restore 618 + this.eventSourceName = eventSourceName; + } + + void Initialize() + { + if (!this.initialized) + { + lock (localSyncObject) + { + if (!this.initialized) + { + string attributeValue = this.Attributes[PiiTraceSource.LogPii]; + bool shouldLogPii = false; + if (!string.IsNullOrEmpty(attributeValue)) + { + if (!bool.TryParse(attributeValue, out shouldLogPii)) + { + shouldLogPii = false; + } + } + + if (shouldLogPii) + { +#pragma warning disable 618 + System.Runtime.Diagnostics.EventLogger logger = new System.Runtime.Diagnostics.EventLogger(this.eventSourceName, null); +#pragma warning restore 618 + if (MachineSettingsSection.EnableLoggingKnownPii) + { + logger.LogEvent(TraceEventType.Information, + (ushort)System.Runtime.Diagnostics.EventLogCategory.MessageLogging, + (uint)System.Runtime.Diagnostics.EventLogEventId.PiiLoggingOn, + false); + this.shouldLogPii = true; + } + else + { + logger.LogEvent(TraceEventType.Error, + (ushort)System.Runtime.Diagnostics.EventLogCategory.MessageLogging, + (uint)System.Runtime.Diagnostics.EventLogEventId.PiiLoggingNotAllowed, + false); + } + } + this.initialized = true; + } + } + } + } + + protected override string[] GetSupportedAttributes() + { + return new string[] { PiiTraceSource.LogPii }; + } + + internal bool ShouldLogPii + { + get + { + // ShouldLogPii is called very frequently, don't call Initialize unless we have to. + if (!this.initialized) + { + Initialize(); + } + return this.shouldLogPii; + } + set + { + // If you call this, you know what you're doing + this.initialized = true; + this.shouldLogPii = value; + } + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PlainXmlWriter.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PlainXmlWriter.cs new file mode 100644 index 0000000000..2811856c9d --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/PlainXmlWriter.cs @@ -0,0 +1,220 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Xml; + using System.Runtime; + using System.Diagnostics; + + ///

    + /// Very basic performance-oriented XmlWriter implementation. No validation/encoding is made. + /// Namespaces are not supported + /// Minimal formatting support + /// + internal class PlainXmlWriter : XmlWriter + { + internal class MaxSizeExceededException : Exception + { + } + + TraceXPathNavigator navigator; + bool writingAttribute = false; + string currentAttributeName; + string currentAttributePrefix; + string currentAttributeNs; + string currentAttributeText = string.Empty; + + public PlainXmlWriter() + : this(-1) //no quota + { + } + + public PlainXmlWriter(int maxSize) + { + this.navigator = new TraceXPathNavigator(maxSize); + } + + public TraceXPathNavigator Navigator + { + get + { + return this.navigator; + } + } + + public override void WriteStartDocument() { } + public override void WriteStartDocument(bool standalone) { } + public override void WriteDocType(string name, string pubid, string sysid, string subset) { } + public override void WriteEndDocument() { } + + public override string LookupPrefix(string ns) + { + return this.navigator.LookupPrefix(ns); + } + + public override WriteState WriteState + { + get { return this.navigator.WriteState; } + } + + public override XmlSpace XmlSpace + { + get { return XmlSpace.Default; } + } + + public override string XmlLang + { + get { return string.Empty; } + } + + public override void WriteValue(object value) + { + this.navigator.AddText(value.ToString()); + } + + public override void WriteValue(string value) + { + this.navigator.AddText(value); + } + + public override void WriteBase64(byte[] buffer, int offset, int count) { } + + public override void WriteStartElement(string prefix, string localName, string ns) + { +#pragma warning disable 618 + Fx.Assert(!String.IsNullOrEmpty(localName), ""); +#pragma warning restore 618 + if (String.IsNullOrEmpty(localName)) + { + throw new ArgumentNullException("localName"); + } + + this.navigator.AddElement(prefix, localName, ns); + } + + public override void WriteFullEndElement() + { + WriteEndElement(); + } + + public override void WriteEndElement() + { + this.navigator.CloseElement(); + } + + public override void WriteStartAttribute(string prefix, string localName, string ns) + { +#pragma warning disable 618 + Fx.Assert(!this.writingAttribute, ""); +#pragma warning restore 618 + if (this.writingAttribute) + { + throw new InvalidOperationException(); + } + + this.currentAttributeName = localName; + this.currentAttributePrefix = prefix; + this.currentAttributeNs = ns; + this.currentAttributeText = string.Empty; + this.writingAttribute = true; + } + + public override void WriteEndAttribute() + { +#pragma warning disable 618 + Fx.Assert(this.writingAttribute, ""); +#pragma warning restore 618 + if (!this.writingAttribute) + { + throw new InvalidOperationException(); + } + this.navigator.AddAttribute(this.currentAttributeName, this.currentAttributeText, this.currentAttributeNs, this.currentAttributePrefix); + this.writingAttribute = false; + } + + public override void WriteCData(string text) + { + this.WriteRaw(""); + } + + public override void WriteComment(string text) + { + this.navigator.AddComment(text); + } + + public override void WriteProcessingInstruction(string name, string text) + { + this.navigator.AddProcessingInstruction(name, text); + } + + public override void WriteEntityRef(string name) + { + } + + public override void WriteCharEntity(char ch) + { + } + + public override void WriteSurrogateCharEntity(char lowChar, char highChar) + { + } + + public override void WriteWhitespace(string ws) + { + } + + public override void WriteString(string text) + { + if (this.writingAttribute) + { + currentAttributeText += text; + } + else + { + this.WriteValue(text); + } + } + + public override void WriteChars(Char[] buffer, int index, int count) + { + // Exceptions being thrown as per data found at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmlwriterclasswritecharstopic.asp + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + if (index < 0) + { + throw new ArgumentOutOfRangeException("index"); + } + if (count < 0) + { + throw new ArgumentOutOfRangeException("count"); + } + if ((buffer.Length - index) < count) + { + throw new ArgumentException(TraceSR.GetString(TraceSR.WriteCharsInvalidContent)); + } + this.WriteString(new string(buffer, index, count)); + } + + public override void WriteRaw(String data) + { + this.WriteString(data); + } + + public override void WriteRaw(Char[] buffer, int index, int count) + { + this.WriteChars(buffer, index, count); + } + + public override void Close() + { + } + + public override void Flush() + { + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/SafeEventLogWriteHandle.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/SafeEventLogWriteHandle.cs new file mode 100644 index 0000000000..4ca93463db --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/SafeEventLogWriteHandle.cs @@ -0,0 +1,53 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using Microsoft.Win32.SafeHandles; + using System.Runtime.InteropServices; + using System.Runtime.Versioning; + using System.Globalization; + using System.Diagnostics; + using System.Security; + using System.Runtime; + + [Fx.Tag.SecurityNote(Critical = "Usage of SafeHandleZeroOrMinusOneIsInvalid, which is protected by a LinkDemand and InheritanceDemand")] + [SecurityCritical] + sealed class SafeEventLogWriteHandle : SafeHandleZeroOrMinusOneIsInvalid + { + // Note: RegisterEventSource returns 0 on failure + [Fx.Tag.SecurityNote(Critical = "Usage of SafeHandleZeroOrMinusOneIsInvalid, which is protected by a LinkDemand and InheritanceDemand")] + [SecurityCritical] + SafeEventLogWriteHandle() : base(true) { } + + [ResourceConsumption(ResourceScope.Machine)] + [Fx.Tag.SecurityNote(Critical = "Usage of SafeHandleZeroOrMinusOneIsInvalid, which is protected by a LinkDemand and InheritanceDemand")] + [SecurityCritical] + internal static SafeEventLogWriteHandle RegisterEventSource(string uncServerName, string sourceName) + { + SafeEventLogWriteHandle retval = NativeMethods.RegisterEventSource(uncServerName, sourceName); + int error = Marshal.GetLastWin32Error(); + if (retval.IsInvalid) + { + Debug.Print("SafeEventLogWriteHandle::RegisterEventSource[" + uncServerName + ", " + sourceName + "] Failed. Last Error: " + + error.ToString(CultureInfo.InvariantCulture)); + } + return retval; + } + + [DllImport("advapi32", SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + private static extern bool DeregisterEventSource(IntPtr hEventLog); + +#pragma warning disable 56523 + [Fx.Tag.SecurityNote(Critical = "Usage of SafeHandleZeroOrMinusOneIsInvalid, which is protected by a LinkDemand and InheritanceDemand")] + [SecurityCritical] + override protected bool ReleaseHandle() + { + return DeregisterEventSource(this.handle); + } +#pragma warning restore 56523 + + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs new file mode 100644 index 0000000000..97ccaa01f2 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs @@ -0,0 +1,12 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + enum TraceSourceKind + { + DiagnosticTraceSource, + PiiTraceSource + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceXPathNavigator.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceXPathNavigator.cs new file mode 100644 index 0000000000..9ebdcfe056 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceXPathNavigator.cs @@ -0,0 +1,982 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Collections.Generic; + using System.Diagnostics; + using System.Xml; + using System.Xml.XPath; + using System.Globalization; + using System.Text; + using System.IO; + using System.Runtime; + + // We have to put something here so that when this item appears in the + // debugger, ToString() isn't called. Calling ToString() can cause bad behavior. + [DebuggerDisplay("")] + class TraceXPathNavigator : XPathNavigator + { + const int UnlimitedSize = -1; + ElementNode root = null; + TraceNode current = null; + bool closed = false; + XPathNodeType state = XPathNodeType.Element; + int maxSize; + long currentSize; + + public TraceXPathNavigator(int maxSize) + { + this.maxSize = maxSize; + this.currentSize = 0; + } + + interface IMeasurable + { + int Size { get; } + } + + class TraceNode + { + protected TraceNode(XPathNodeType nodeType, ElementNode parent) + { + this.nodeType = nodeType; + this.parent = parent; + } + + internal XPathNodeType NodeType + { + get { return this.nodeType; } + } + + XPathNodeType nodeType; + internal ElementNode parent; + } + + class CommentNode : TraceNode, IMeasurable + { + internal CommentNode(string text, ElementNode parent) + : base(XPathNodeType.Comment, parent) + { + this.nodeValue = text; + } + + internal string nodeValue; + + public int Size + { + get + { + return this.nodeValue.Length + 8; // + } + } + } + + class ElementNode : TraceNode, IMeasurable + { + int attributeIndex = 0; + int elementIndex = 0; + + internal string name; + internal string prefix; + internal string xmlns; + internal List childNodes = new List(); + internal List attributes = new List(); + internal TextNode text; + internal bool movedToText = false; + + internal ElementNode(string name, string prefix, ElementNode parent, string xmlns) + : base(XPathNodeType.Element, parent) + { + this.name = name; + this.prefix = prefix; + this.xmlns = xmlns; + } + + internal void Add(TraceNode node) + { + this.childNodes.Add(node); + } + + //This method returns all subnodes with the given path of local names. Namespaces are ignored. + //For all path elements but the last one, the first match is taken. For the last path element, all matches are returned. + internal IEnumerable FindSubnodes(string[] headersPath) + { +#pragma warning disable 618 + Fx.Assert(null != headersPath, "Headers path should not be null"); + Fx.Assert(headersPath.Length > 0, "There should be more than one item in the headersPath array."); +#pragma warning restore 618 + + if (null == headersPath) + { + throw new ArgumentNullException("headersPath"); + } + ElementNode node = this; + if (String.CompareOrdinal(node.name, headersPath[0]) != 0) + { + node = null; + } + int i = 0; + while (null != node && ++i < headersPath.Length) + { +#pragma warning disable 618 + Fx.Assert(null != headersPath[i], "None of the elements in headersPath should be null."); +#pragma warning restore 618 + ElementNode subNode = null; + if (null != node.childNodes) + { + foreach (TraceNode child in node.childNodes) + { + if (child.NodeType == XPathNodeType.Element) + { + ElementNode childNode = child as ElementNode; + if (null != childNode && 0 == String.CompareOrdinal(childNode.name, headersPath[i])) + { + if (headersPath.Length == i + 1) + { + yield return childNode; + } + else + { + subNode = childNode; + break; + } + } + } + } + } + + node = subNode; + } + } + + internal TraceNode MoveToNext() + { + TraceNode retval = null; + if ((this.elementIndex + 1) < this.childNodes.Count) + { + ++this.elementIndex; + retval = this.childNodes[this.elementIndex]; + } + return retval; + } + + internal bool MoveToFirstAttribute() + { + this.attributeIndex = 0; + return null != this.attributes && this.attributes.Count > 0; + } + + internal bool MoveToNextAttribute() + { + bool retval = false; + if ((this.attributeIndex + 1) < this.attributes.Count) + { + ++this.attributeIndex; + retval = true; + } + return retval; + } + + internal void Reset() + { + this.attributeIndex = 0; + this.elementIndex = 0; + this.movedToText = false; + if (null != this.childNodes) + { + foreach (TraceNode node in this.childNodes) + { + if (node.NodeType == XPathNodeType.Element) + { + ElementNode child = node as ElementNode; + if (child != null) + { + child.Reset(); + } + } + } + } + } + + internal AttributeNode CurrentAttribute + { + get + { + return this.attributes[this.attributeIndex]; + } + } + + public int Size + { + get + { + int size = 2 * this.name.Length + 6; //upper bound + if (!string.IsNullOrEmpty(this.prefix)) + { + size += this.prefix.Length + 1; + } + if (!string.IsNullOrEmpty(this.xmlns)) + { + size += this.xmlns.Length + 9; // xmlns="xmlns" + } + return size; + } + } + } + + class AttributeNode : IMeasurable + { + internal AttributeNode(string name, string prefix, string value, string xmlns) + { + this.name = name; + this.prefix = prefix; + this.nodeValue = value; + this.xmlns = xmlns; + } + + internal string name; + internal string nodeValue; + internal string prefix; + internal string xmlns; + + public int Size + { + get + { + int size = this.name.Length + this.nodeValue.Length + 5; + + if (!string.IsNullOrEmpty(this.prefix)) + { + size += this.prefix.Length + 1; + } + + if (!string.IsNullOrEmpty(this.xmlns)) + { + size += this.xmlns.Length + 9; //upper bound + } + + return size; + } + } + } + + class ProcessingInstructionNode : TraceNode, IMeasurable + { + internal ProcessingInstructionNode(string name, string text, ElementNode parent) + : + base(XPathNodeType.ProcessingInstruction, parent) + { + this.name = name; + this.text = text; + } + + internal string name; + internal string text; + + public int Size + { + get + { + return this.name.Length + this.text.Length + 12; // + } + } + } + + class TextNode : IMeasurable + { + internal TextNode(string value) + { + this.nodeValue = value; + } + internal string nodeValue; + + public int Size + { + get + { + return this.nodeValue.Length; + } + } + } + + internal void AddElement(string prefix, string name, string xmlns) + { + if (this.closed) + { +#pragma warning disable 618 + Fx.Assert("Cannot add data to a closed document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + else + { + ElementNode node = new ElementNode(name, prefix, this.CurrentElement, xmlns); + if (this.current == null) + { + this.VerifySize(node); + this.root = node; + this.current = this.root; + } + else if (!this.closed) + { + this.VerifySize(node); + this.CurrentElement.Add(node); + this.current = node; + } + } + } + + internal void AddProcessingInstruction(string name, string text) + { + if (this.current == null) + { + return; + } + else + { + ProcessingInstructionNode node = new ProcessingInstructionNode(name, text, this.CurrentElement); + this.VerifySize(node); + this.CurrentElement.Add(node); + } + } + + internal void AddText(string value) + { + if (this.closed) + { +#pragma warning disable 618 + Fx.Assert("Cannot add data to a closed document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + if (this.current == null) + { + return; + } + else + { + if (this.CurrentElement.text == null) + { + TextNode node = new TextNode(value); + this.VerifySize(node); + this.CurrentElement.text = node; + } + else if (!string.IsNullOrEmpty(value)) + { + this.VerifySize(value); + this.CurrentElement.text.nodeValue += value; + } + } + } + + internal void AddAttribute(string name, string value, string xmlns, string prefix) + { + if (this.closed) + { +#pragma warning disable 618 + Fx.Assert("Cannot add data to a closed document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + AttributeNode node = new AttributeNode(name, prefix, value, xmlns); + this.VerifySize(node); + this.CurrentElement.attributes.Add(node); + } + + internal void AddComment(string text) + { + if (this.closed) + { +#pragma warning disable 618 + Fx.Assert("Cannot add data to a closed document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + CommentNode node = new CommentNode(text, this.CurrentElement); + this.VerifySize(node); + this.CurrentElement.Add(node); + } + + internal void CloseElement() + { + if (this.closed) + { +#pragma warning disable 618 + Fx.Assert("The document is already closed."); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + else + { + this.current = this.CurrentElement.parent; + if (this.current == null) + { + this.closed = true; + } + } + } + + public override string BaseURI + { + get { return String.Empty; } + } + + public override XPathNavigator Clone() + { + return this; + } + + public override bool IsEmptyElement + { + get + { + bool retval = true; + if (this.current != null) + { + retval = this.CurrentElement.text != null || this.CurrentElement.childNodes.Count > 0; + } + return retval; + } + } + + public override bool IsSamePosition(XPathNavigator other) + { + return false; + } + + [DebuggerDisplay("")] + public override string LocalName + { + get { return this.Name; } + } + + public override string LookupPrefix(string ns) + { + return this.LookupPrefix(ns, this.CurrentElement); + } + + string LookupPrefix(string ns, ElementNode node) + { + string retval = null; + if (string.Compare(ns, node.xmlns, StringComparison.Ordinal) == 0) + { + retval = node.prefix; + } + else + { + foreach (AttributeNode attributeNode in node.attributes) + { + if (string.Compare("xmlns", attributeNode.prefix, StringComparison.Ordinal) == 0) + { + if (string.Compare(ns, attributeNode.nodeValue, StringComparison.Ordinal) == 0) + { + retval = attributeNode.name; + break; + } + } + } + } + + if (string.IsNullOrEmpty(retval) && node.parent != null) + { + retval = LookupPrefix(ns, node.parent); + } + return retval; + } + + public override bool MoveTo(XPathNavigator other) + { + return false; + } + + public override bool MoveToFirstAttribute() + { + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + bool retval = this.CurrentElement.MoveToFirstAttribute(); + if (retval) + { + this.state = XPathNodeType.Attribute; + } + return retval; + } + + public override bool MoveToFirstChild() + { + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + bool retval = false; + if (null != this.CurrentElement.childNodes && this.CurrentElement.childNodes.Count > 0) + { + this.current = this.CurrentElement.childNodes[0]; + this.state = this.current.NodeType; + retval = true; + } + else if ((null == this.CurrentElement.childNodes || this.CurrentElement.childNodes.Count == 0) && this.CurrentElement.text != null) + { + this.state = XPathNodeType.Text; + this.CurrentElement.movedToText = true; + retval = true; + } + return retval; + } + + public override bool MoveToFirstNamespace(XPathNamespaceScope namespaceScope) + { + return false; + } + + public override bool MoveToId(string id) + { + return false; + } + + public override bool MoveToNext() + { + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + bool retval = false; + if (this.state != XPathNodeType.Text) + { + ElementNode parent = this.current.parent; + if (parent != null) + { + TraceNode temp = parent.MoveToNext(); + if (temp == null && parent.text != null && !parent.movedToText) + { + this.state = XPathNodeType.Text; + parent.movedToText = true; + this.current = parent; + retval = true; + } + else if (temp != null) + { + this.state = temp.NodeType; + retval = true; + this.current = temp; + } + } + } + return retval; + } + + public override bool MoveToNextAttribute() + { + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + bool retval = this.CurrentElement.MoveToNextAttribute(); + if (retval) + { + this.state = XPathNodeType.Attribute; + } + return retval; + } + + public override bool MoveToNextNamespace(XPathNamespaceScope namespaceScope) + { + return false; + } + + public override bool MoveToParent() + { + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + throw new InvalidOperationException(); + } + bool retval = false; + switch (this.state) + { + case XPathNodeType.Comment: + case XPathNodeType.Element: + case XPathNodeType.ProcessingInstruction: + if (this.current.parent != null) + { + this.current = this.current.parent; + this.state = this.current.NodeType; + retval = true; + } + break; + case XPathNodeType.Attribute: + this.state = XPathNodeType.Element; + retval = true; + break; + case XPathNodeType.Text: + this.state = XPathNodeType.Element; + retval = true; + break; + case XPathNodeType.Namespace: + this.state = XPathNodeType.Element; + retval = true; + break; + } + return retval; + } + + public override bool MoveToPrevious() + { + return false; + } + + public override void MoveToRoot() + { + this.current = this.root; + this.state = XPathNodeType.Element; + this.root.Reset(); + } + + [DebuggerDisplay("")] + public override string Name + { + get + { + string retval = String.Empty; + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + } + else + { + switch (this.state) + { + case XPathNodeType.Attribute: + retval = this.CurrentElement.CurrentAttribute.name; + break; + case XPathNodeType.Element: + retval = this.CurrentElement.name; + break; + case XPathNodeType.ProcessingInstruction: + retval = this.CurrentProcessingInstruction.name; + break; + } + } + return retval; + } + } + + public override System.Xml.XmlNameTable NameTable + { + get { return null; } + } + + [DebuggerDisplay("")] + public override string NamespaceURI + { + get + { + string retval = String.Empty; + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + } + else + { + switch (this.state) + { + case XPathNodeType.Element: + retval = this.CurrentElement.xmlns; + break; + case XPathNodeType.Attribute: + retval = this.CurrentElement.CurrentAttribute.xmlns; + break; + case XPathNodeType.Namespace: + retval = null; + break; + } + } + return retval; + } + } + + [DebuggerDisplay("")] + public override XPathNodeType NodeType + { + get { return this.state; } + } + + [DebuggerDisplay("")] + public override string Prefix + { + get + { + string retval = String.Empty; + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + } + else + { + switch (this.state) + { + case XPathNodeType.Element: + retval = this.CurrentElement.prefix; + break; + case XPathNodeType.Attribute: + retval = this.CurrentElement.CurrentAttribute.prefix; + break; + case XPathNodeType.Namespace: + retval = null; + break; + } + } + return retval; + } + } + + CommentNode CurrentComment + { + get { return this.current as CommentNode; } + } + + ElementNode CurrentElement + { + get { return this.current as ElementNode; } + } + + ProcessingInstructionNode CurrentProcessingInstruction + { + get { return this.current as ProcessingInstructionNode; } + } + + [DebuggerDisplay("")] + public override string Value + { + get + { + string retval = String.Empty; + if (this.current == null) + { +#pragma warning disable 618 + Fx.Assert("Operation is invalid on an empty document"); +#pragma warning restore 618 + } + else + { + switch (this.state) + { + case XPathNodeType.Text: + retval = this.CurrentElement.text.nodeValue; + break; + case XPathNodeType.Attribute: + retval = this.CurrentElement.CurrentAttribute.nodeValue; + break; + case XPathNodeType.Comment: + retval = this.CurrentComment.nodeValue; + break; + case XPathNodeType.ProcessingInstruction: + retval = this.CurrentProcessingInstruction.text; + break; + } + } + return retval; + } + } + + internal WriteState WriteState + { + get + { + WriteState retval = WriteState.Error; + if (this.current == null) + { + retval = WriteState.Start; + } + else if (this.closed) + { + retval = WriteState.Closed; + } + else + { + switch (this.state) + { + case XPathNodeType.Attribute: + retval = WriteState.Attribute; + break; + case XPathNodeType.Element: + retval = WriteState.Element; + break; + case XPathNodeType.Text: + retval = WriteState.Content; + break; + case XPathNodeType.Comment: + retval = WriteState.Content; + break; + } + } + return retval; + } + } + + public override string ToString() + { + this.MoveToRoot(); + StringBuilder sb = new StringBuilder(); + EncodingFallbackAwareXmlTextWriter writer = new EncodingFallbackAwareXmlTextWriter(new StringWriter(sb, CultureInfo.CurrentCulture)); + writer.WriteNode(this, false); + return sb.ToString(); + } + + void VerifySize(IMeasurable node) + { + this.VerifySize(node.Size); + } + + void VerifySize(string node) + { + this.VerifySize(node.Length); + } + + void VerifySize(int nodeSize) + { + if (this.maxSize != TraceXPathNavigator.UnlimitedSize) + { + if (this.currentSize + nodeSize > this.maxSize) + { + throw new PlainXmlWriter.MaxSizeExceededException(); + } + } + this.currentSize += nodeSize; + } + + public void RemovePii(string[][] paths) + { +#pragma warning disable 618 + Fx.Assert(null != paths, ""); +#pragma warning restore 618 + if (paths == null) + { + throw new ArgumentNullException("paths"); + } + + foreach (string[] path in paths) + { + RemovePii(path); + } + } + + public void RemovePii(string[] path) + { + RemovePii(path, DiagnosticStrings.PiiList); + } + + public void RemovePii(string[] headersPath, string[] piiList) + { +#pragma warning disable 618 + Fx.Assert(null != this.root, ""); + if (this.root == null) + { + throw new InvalidOperationException(); + } + foreach (ElementNode node in this.root.FindSubnodes(headersPath)) + { + Fx.Assert(null != node, ""); + MaskSubnodes(node, piiList); + } + } +#pragma warning restore 618 + + static void MaskElement(ElementNode element) + { + if (null != element) + { + element.childNodes.Clear(); + element.Add(new CommentNode("Removed", element)); + element.text = null; + element.attributes = null; + } + } + + static void MaskSubnodes(ElementNode element, string[] elementNames) + { + MaskSubnodes(element, elementNames, false); + } + + static void MaskSubnodes(ElementNode element, string[] elementNames, bool processNodeItself) + { +#pragma warning disable 618 + Fx.Assert(null != elementNames, ""); +#pragma warning restore 618 + if (elementNames == null) + { + throw new ArgumentNullException("elementNames"); + } + + if (null != element) + { + bool recurse = true; + if (processNodeItself) + { + foreach (string elementName in elementNames) + { +#pragma warning disable 618 + Fx.Assert(!String.IsNullOrEmpty(elementName), ""); +#pragma warning restore 618 + if (0 == String.CompareOrdinal(elementName, element.name)) + { + MaskElement(element); + recurse = false; + break; + } + } + } + if (recurse) + { + if (null != element.childNodes) + { + foreach (ElementNode subNode in element.childNodes) + { +#pragma warning disable 618 + Fx.Assert(null != subNode, ""); +#pragma warning restore 618 + MaskSubnodes(subNode, elementNames, true); + } + } + } + } + } + } +} diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Utility.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Utility.cs new file mode 100644 index 0000000000..71fd837a35 --- /dev/null +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/Utility.cs @@ -0,0 +1,77 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.ServiceModel.Diagnostics +{ + using System.Runtime; + using System.Runtime.CompilerServices; + using System.Runtime.ConstrainedExecution; + using System.Diagnostics; + using System.Threading; + using System.Runtime.InteropServices; + using System.Security; + using System.Security.Permissions; + using System.Diagnostics.CodeAnalysis; + + class Utility + { + ExceptionUtility exceptionUtility; + + [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.Utility instead")] + internal Utility(ExceptionUtility exceptionUtility) + { + this.exceptionUtility = exceptionUtility; + } + + // Call this when a p/invoke with an 'out SafeHandle' parameter returns an error. This will safely clean up the handle. + [SuppressMessage(FxCop.Category.Security, FxCop.Rule.TransparentMethodsMustNotReferenceCriticalCode)] // we got APTCA approval with no requirement to fix this transparency warning + internal static void CloseInvalidOutSafeHandle(SafeHandle handle) + { + // Workaround for 64-bit CLR bug VSWhidbey 546830 - sometimes invalid SafeHandles come back null. + if (handle != null) + { +#pragma warning disable 618 + Fx.Assert(handle.IsInvalid, "CloseInvalidOutSafeHandle called with a valid handle!"); +#pragma warning restore 618 + + // Calls SuppressFinalize. + handle.SetHandleAsInvalid(); + } + } + + // Copy of the above for CriticalHandles. + [SuppressMessage(FxCop.Category.Security, FxCop.Rule.TransparentMethodsMustNotReferenceCriticalCode)] // we got APTCA approval with no requirement to fix this transparency warning. plus, the callers of this method are not supported in partial trust. + internal static void CloseInvalidOutCriticalHandle(CriticalHandle handle) + { + if (handle != null) + { +#pragma warning disable 618 + Fx.Assert(handle.IsInvalid, "CloseInvalidOutCriticalHandle called with a valid handle!"); +#pragma warning restore 618 + + handle.SetHandleAsInvalid(); + } + } + + internal Guid CreateGuid(string guidString) + { + return Fx.CreateGuid(guidString); + } + + internal bool TryCreateGuid(string guidString, out Guid result) + { + return Fx.TryCreateGuid(guidString, out result); + } + + internal byte[] AllocateByteArray(int size) + { + return Fx.AllocateByteArray(size); + } + + internal char[] AllocateCharArray(int size) + { + return Fx.AllocateCharArray(size); + } + } +} diff --git a/external/referencesource/System.Xml.Linq/System/Xml/Linq/XLinq.cs.REMOVED.git-id b/external/referencesource/System.Xml.Linq/System/Xml/Linq/XLinq.cs.REMOVED.git-id index 645d955afc..24178fbd04 100644 --- a/external/referencesource/System.Xml.Linq/System/Xml/Linq/XLinq.cs.REMOVED.git-id +++ b/external/referencesource/System.Xml.Linq/System/Xml/Linq/XLinq.cs.REMOVED.git-id @@ -1 +1 @@ -3ee2f5565bb7e628ec1aac3722fc4af9fb183d65 \ No newline at end of file +e97b80db7069570f425752085bf7ab1db42cb12d \ No newline at end of file diff --git a/external/referencesource/System/compmod/system/componentmodel/CategoryAttribute.cs b/external/referencesource/System/compmod/system/componentmodel/CategoryAttribute.cs index 96097a83e7..3394efdb52 100644 --- a/external/referencesource/System/compmod/system/componentmodel/CategoryAttribute.cs +++ b/external/referencesource/System/compmod/system/componentmodel/CategoryAttribute.cs @@ -314,8 +314,10 @@ namespace System.ComponentModel { case "Config": return "PropertyCategoryConfig"; } -#endif + return value; +#else return (string)SR.GetObject("PropertyCategory" + value); +#endif #else bool usedFallback; string localizedString = SR.GetString("PropertyCategory" + value, out usedFallback); diff --git a/external/referencesource/System/compmod/system/diagnostics/AssertSection.cs b/external/referencesource/System/compmod/system/diagnostics/AssertSection.cs index a98f6d4e55..8efde6f9ab 100644 --- a/external/referencesource/System/compmod/system/diagnostics/AssertSection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/AssertSection.cs @@ -4,6 +4,7 @@ // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; namespace System.Diagnostics { @@ -41,3 +42,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/DefaultTraceListener.cs b/external/referencesource/System/compmod/system/diagnostics/DefaultTraceListener.cs index 25daba9c59..cd1a421dd9 100644 --- a/external/referencesource/System/compmod/system/diagnostics/DefaultTraceListener.cs +++ b/external/referencesource/System/compmod/system/diagnostics/DefaultTraceListener.cs @@ -111,8 +111,10 @@ namespace System.Diagnostics { [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] private void InitializeSettings() { // don't use the property setters here to avoid infinite recursion. +#if CONFIGURATION_DEP assertUIEnabled = DiagnosticsConfiguration.AssertUIEnabled; logFileName = DiagnosticsConfiguration.LogFileName; +#endif settingsInitialized = true; } diff --git a/external/referencesource/System/compmod/system/diagnostics/DiagnosticsConfiguration.cs b/external/referencesource/System/compmod/system/diagnostics/DiagnosticsConfiguration.cs index 43b34530b2..5b5c81384b 100644 --- a/external/referencesource/System/compmod/system/diagnostics/DiagnosticsConfiguration.cs +++ b/external/referencesource/System/compmod/system/diagnostics/DiagnosticsConfiguration.cs @@ -4,6 +4,7 @@ // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP namespace System.Diagnostics { using System; using System.Reflection; @@ -255,3 +256,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/FilterElement.cs b/external/referencesource/System/compmod/system/diagnostics/FilterElement.cs index 6b01e8a7f3..2e16969383 100644 --- a/external/referencesource/System/compmod/system/diagnostics/FilterElement.cs +++ b/external/referencesource/System/compmod/system/diagnostics/FilterElement.cs @@ -3,6 +3,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; using System; @@ -29,4 +30,4 @@ namespace System.Diagnostics { } } - +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/ListenerElementsCollection.cs b/external/referencesource/System/compmod/system/diagnostics/ListenerElementsCollection.cs index 810c3c2c4b..37dc9b8e1a 100644 --- a/external/referencesource/System/compmod/system/diagnostics/ListenerElementsCollection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/ListenerElementsCollection.cs @@ -3,6 +3,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; using System; using System.Reflection; @@ -372,3 +373,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/PerfCounterSection.cs b/external/referencesource/System/compmod/system/diagnostics/PerfCounterSection.cs index 7a4ae062ba..8d75870edc 100644 --- a/external/referencesource/System/compmod/system/diagnostics/PerfCounterSection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/PerfCounterSection.cs @@ -4,6 +4,7 @@ // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; namespace System.Diagnostics { @@ -31,3 +32,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/SourceElementsCollection.cs b/external/referencesource/System/compmod/system/diagnostics/SourceElementsCollection.cs index a8a606a0ea..834430a775 100644 --- a/external/referencesource/System/compmod/system/diagnostics/SourceElementsCollection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/SourceElementsCollection.cs @@ -3,6 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ + +#if CONFIGURATION_DEP using System.Configuration; using System.Collections; using System.Collections.Specialized; @@ -185,3 +187,4 @@ namespace System.Diagnostics { } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/Switch.cs b/external/referencesource/System/compmod/system/diagnostics/Switch.cs index 471abb488c..f019ee54f5 100644 --- a/external/referencesource/System/compmod/system/diagnostics/Switch.cs +++ b/external/referencesource/System/compmod/system/diagnostics/Switch.cs @@ -6,6 +6,9 @@ /* */ +#if !CONFIGURATION_DEP +using SwitchElementsCollection = System.Object; +#endif namespace System.Diagnostics { using System; @@ -19,7 +22,9 @@ namespace System.Diagnostics { using System.Collections.Specialized; using System.Globalization; using System.Configuration; +#if XML_DEP using System.Xml.Serialization; +#endif using System.Diagnostics.CodeAnalysis; /// @@ -97,7 +102,9 @@ namespace System.Diagnostics { } } +#if XML_DEP [XmlIgnore] +#endif public StringDictionary Attributes { get { Initialize(); @@ -164,6 +171,7 @@ namespace System.Diagnostics { set { Initialize(); switchValueString = value; +#if CONFIGURATION_DEP try { OnValueChanged(); } @@ -176,6 +184,9 @@ namespace System.Diagnostics { catch (OverflowException e) { throw new ConfigurationErrorsException(SR.GetString(SR.BadConfigSwitchValue, DisplayName), e); } +#else + OnValueChanged(); +#endif } } @@ -204,6 +215,7 @@ namespace System.Diagnostics { } } +#if CONFIGURATION_DEP if (switchSettings != null) { SwitchElement mySettings = switchSettings[displayName]; if (mySettings != null) { @@ -231,11 +243,14 @@ namespace System.Diagnostics { OnValueChanged(); } } else { +#endif // We don't use the property here because we don't want to catch exceptions // and rethrow them as ConfigurationException. In this case there's no config. switchValueString = defaultValue; OnValueChanged(); +#if CONFIGURATION_DEP } +#endif initialized = true; initializing = false; @@ -249,11 +264,13 @@ namespace System.Diagnostics { if (switchSettings != null) return true; +#if CONFIGURATION_DEP if (!DiagnosticsConfiguration.CanInitialize()) return false; // This hashtable is case-insensitive. switchSettings = DiagnosticsConfiguration.SwitchSettings; +#endif return true; } diff --git a/external/referencesource/System/compmod/system/diagnostics/SwitchElementsCollection.cs b/external/referencesource/System/compmod/system/diagnostics/SwitchElementsCollection.cs index 414b03e338..cbe85945bb 100644 --- a/external/referencesource/System/compmod/system/diagnostics/SwitchElementsCollection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/SwitchElementsCollection.cs @@ -3,6 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ + +#if CONFIGURATION_DEP using System.Configuration; using System.Collections; using System.Collections.Specialized; @@ -136,3 +138,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/SystemDiagnosticsSection.cs b/external/referencesource/System/compmod/system/diagnostics/SystemDiagnosticsSection.cs index 29c47a8d2e..48e4d775c0 100644 --- a/external/referencesource/System/compmod/system/diagnostics/SystemDiagnosticsSection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/SystemDiagnosticsSection.cs @@ -3,6 +3,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; namespace System.Diagnostics { @@ -79,3 +80,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/Trace.cs b/external/referencesource/System/compmod/system/diagnostics/Trace.cs index 3e09ae8a39..9d9a20aac1 100644 --- a/external/referencesource/System/compmod/system/diagnostics/Trace.cs +++ b/external/referencesource/System/compmod/system/diagnostics/Trace.cs @@ -163,7 +163,9 @@ namespace System.Diagnostics { } public static void Refresh() { +#if CONFIGURATION_DEP DiagnosticsConfiguration.Refresh(); +#endif Switch.RefreshAll(); TraceSource.RefreshAll(); TraceInternal.Refresh(); diff --git a/external/referencesource/System/compmod/system/diagnostics/TraceInternal.cs b/external/referencesource/System/compmod/system/diagnostics/TraceInternal.cs index 12e6571063..6890780312 100644 --- a/external/referencesource/System/compmod/system/diagnostics/TraceInternal.cs +++ b/external/referencesource/System/compmod/system/diagnostics/TraceInternal.cs @@ -34,11 +34,13 @@ namespace System.Diagnostics { if (listeners == null) { // We only need to check that the main section exists. Everything else will get // created for us if it doesn't exist already. +#if CONFIGURATION_DEP SystemDiagnosticsSection configSectionSav = DiagnosticsConfiguration.SystemDiagnosticsSection; if (configSectionSav != null) { listeners = configSectionSav.Trace.Listeners.GetRuntimeObject(); } else { +#endif // If machine.config was deleted the code will get to here // supply at least something to prevent the world from coming to // an abrupt end. @@ -47,7 +49,9 @@ namespace System.Diagnostics { defaultListener.IndentLevel = indentLevel; defaultListener.IndentSize = indentSize; listeners.Add(defaultListener); +#if CONFIGURATION_DEP } +#endif } } } @@ -269,6 +273,7 @@ namespace System.Diagnostics { } private static void InitializeSettings() { +#if CONFIGURATION_DEP // we want to redo this logic exactly once if the last time we entered the config // system was still initializing. (ASURT 111941, VSWhidbey 149552) if (!settingsInitialized || (defaultInitialized && DiagnosticsConfiguration.IsInitialized())) { @@ -289,6 +294,7 @@ namespace System.Diagnostics { } } } +#endif } // This method refreshes all the data from the configuration file, so that updated to the configuration file are mirrored diff --git a/external/referencesource/System/compmod/system/diagnostics/TraceSection.cs b/external/referencesource/System/compmod/system/diagnostics/TraceSection.cs index 3641201e78..722470c434 100644 --- a/external/referencesource/System/compmod/system/diagnostics/TraceSection.cs +++ b/external/referencesource/System/compmod/system/diagnostics/TraceSection.cs @@ -4,6 +4,7 @@ // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; namespace System.Diagnostics { @@ -58,3 +59,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/TraceSource.cs b/external/referencesource/System/compmod/system/diagnostics/TraceSource.cs index a9abcaf3e2..f5fae9ab41 100644 --- a/external/referencesource/System/compmod/system/diagnostics/TraceSource.cs +++ b/external/referencesource/System/compmod/system/diagnostics/TraceSource.cs @@ -74,6 +74,7 @@ namespace System.Diagnostics { if (_initCalled) return; +#if CONFIGURATION_DEP SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { @@ -99,6 +100,7 @@ namespace System.Diagnostics { NoConfigInit(); } else +#endif NoConfigInit(); _initCalled = true; @@ -173,6 +175,7 @@ namespace System.Diagnostics { return; } +#if CONFIGURATION_DEP SourceElementsCollection sources = DiagnosticsConfiguration.Sources; if (sources != null) { @@ -233,6 +236,7 @@ namespace System.Diagnostics { attributes = null; } } +#endif } [Conditional("TRACE")] diff --git a/external/referencesource/System/compmod/system/diagnostics/TypedElement.cs b/external/referencesource/System/compmod/system/diagnostics/TypedElement.cs index 1128db6a9d..6d93c1d1de 100644 --- a/external/referencesource/System/compmod/system/diagnostics/TypedElement.cs +++ b/external/referencesource/System/compmod/system/diagnostics/TypedElement.cs @@ -3,6 +3,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ +#if CONFIGURATION_DEP using System.Configuration; using System; using System.Reflection; @@ -10,7 +11,11 @@ using System.Globalization; namespace System.Diagnostics { internal class TypedElement : ConfigurationElement { +#if BOOTSTRAP_BASIC + protected static readonly ConfigurationProperty _propTypeName = new ConfigurationProperty("type", typeof(string), String.Empty, ConfigurationPropertyOptions.IsRequired); +#else protected static readonly ConfigurationProperty _propTypeName = new ConfigurationProperty("type", typeof(string), String.Empty, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsTypeStringTransformationRequired); +#endif protected static readonly ConfigurationProperty _propInitData = new ConfigurationProperty("initializeData", typeof(string), String.Empty, ConfigurationPropertyOptions.None); protected ConfigurationPropertyCollection _properties; @@ -62,3 +67,4 @@ namespace System.Diagnostics { } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/XmlWriterTraceListener.cs b/external/referencesource/System/compmod/system/diagnostics/XmlWriterTraceListener.cs index 93a2e71024..535d839ea2 100644 --- a/external/referencesource/System/compmod/system/diagnostics/XmlWriterTraceListener.cs +++ b/external/referencesource/System/compmod/system/diagnostics/XmlWriterTraceListener.cs @@ -3,7 +3,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ - +#if XML_DEP using System; using System.Text; using System.Xml; @@ -335,3 +335,4 @@ namespace System.Diagnostics { } } } +#endif diff --git a/external/referencesource/System/compmod/system/diagnostics/traceutils.cs b/external/referencesource/System/compmod/system/diagnostics/traceutils.cs index d7a641a219..ee765e8dc4 100644 --- a/external/referencesource/System/compmod/system/diagnostics/traceutils.cs +++ b/external/referencesource/System/compmod/system/diagnostics/traceutils.cs @@ -19,6 +19,7 @@ namespace System.Diagnostics { [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] internal static object GetRuntimeObject(string className, Type baseType, string initializeData) { Object newObject = null; +#if CONFIGURATION_DEP Type objectType = null; if (className.Length == 0) { @@ -106,20 +107,27 @@ namespace System.Diagnostics { else throw new ConfigurationErrorsException(SR.GetString(SR.Could_not_create_type_instance, className)); } +#endif return newObject; } +#if !MOBILE // Our own tracelisteners that needs extra config validation internal static bool IsOwnedTL(Type type) { return (typeof(EventLogTraceListener) == type || IsOwnedTextWriterTL(type)); } internal static bool IsOwnedTextWriterTL(Type type) { +#if XML_DEP return (typeof(XmlWriterTraceListener) == type) || (typeof(DelimitedListTraceListener) == type) || (typeof(TextWriterTraceListener) == type); +#else + return false; +#endif } +#endif private static object ConvertToBaseTypeOrEnum(string value, Type type) { if (type.IsEnum) @@ -129,6 +137,7 @@ namespace System.Diagnostics { } internal static void VerifyAttributes(IDictionary attributes, String[] supportedAttributes, object parent) { +#if CONFIGURATION_DEP foreach (string key in attributes.Keys) { bool found = false; if (supportedAttributes != null) { @@ -140,6 +149,7 @@ namespace System.Diagnostics { if (!found) throw new ConfigurationErrorsException(SR.GetString(SR.AttributeNotSupported, key, parent.GetType().FullName)); } +#endif } } diff --git a/external/referencesource/System/misc/PrivilegedConfigurationManager.cs b/external/referencesource/System/misc/PrivilegedConfigurationManager.cs index 63e04f244b..ec8920a6ac 100644 --- a/external/referencesource/System/misc/PrivilegedConfigurationManager.cs +++ b/external/referencesource/System/misc/PrivilegedConfigurationManager.cs @@ -3,7 +3,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ - +#if CONFIGURATION_DEP namespace System.Configuration { @@ -25,3 +25,4 @@ namespace System.Configuration { } } } +#endif diff --git a/external/referencesource/System/services/timers/system/timers/Timer.cs b/external/referencesource/System/services/timers/system/timers/Timer.cs index 475a30e90a..122d79c94b 100644 --- a/external/referencesource/System/services/timers/system/timers/Timer.cs +++ b/external/referencesource/System/services/timers/system/timers/Timer.cs @@ -62,12 +62,7 @@ namespace System.Timers { if (interval <= 0) throw new ArgumentException(SR.GetString(SR.InvalidParameter, "interval", interval)); - double roundedInterval = Math.Ceiling(interval); - if (roundedInterval > Int32.MaxValue || roundedInterval <= 0) { - throw new ArgumentException(SR.GetString(SR.InvalidParameter, "interval", interval)); - } - - this.interval = (int) roundedInterval; + this.interval = CalculateRoundedInterval(interval, true); } /// @@ -128,7 +123,7 @@ namespace System.Timers { throw new ObjectDisposedException(GetType().Name); } - int i = (int)Math.Ceiling(interval); + int i = CalculateRoundedInterval(interval); cookie = new Object(); timer = new System.Threading.Timer(callback, cookie, i, autoReset? i:Timeout.Infinite); } @@ -141,9 +136,19 @@ namespace System.Timers { } } + private static int CalculateRoundedInterval(double interval, bool argumentCheck = false) { + double roundedInterval = Math.Ceiling(interval); + if (roundedInterval > Int32.MaxValue || roundedInterval <= 0) { + if (argumentCheck) + throw new ArgumentException(SR.GetString(SR.InvalidParameter, "interval", interval)); + + throw new ArgumentOutOfRangeException(SR.GetString(SR.InvalidParameter, "interval", interval)); + } + return (int)roundedInterval; + } private void UpdateTimer() { - int i = (int)Math.Ceiling(interval); + int i = CalculateRoundedInterval(interval); timer.Change(i, autoReset? i :Timeout.Infinite ); } diff --git a/external/referencesource/mscorlib/system/activator.cs b/external/referencesource/mscorlib/system/activator.cs index 0cc2b39e43..9ce777065f 100644 --- a/external/referencesource/mscorlib/system/activator.cs +++ b/external/referencesource/mscorlib/system/activator.cs @@ -19,7 +19,7 @@ namespace System { using System.Runtime.Remoting; #if FEATURE_REMOTING using System.Runtime.Remoting.Activation; - using Message = System.Runtime.Remoting.Messaging.Message; +// using Message = System.Runtime.Remoting.Messaging.Message; #endif using System.Security; using CultureInfo = System.Globalization.CultureInfo; @@ -74,10 +74,10 @@ namespace System { if ((object)type == null) throw new ArgumentNullException("type"); Contract.EndContractBlock(); - +#if !FULL_AOT_RUNTIME if (type is System.Reflection.Emit.TypeBuilder) throw new NotSupportedException(Environment.GetResourceString("NotSupported_CreateInstanceWithTypeBuilder")); - +#endif // If they didn't specify a lookup, then we will provide the default lookup. if ((bindingAttr & (BindingFlags) LookupMask) == 0) bindingAttr |= Activator.ConstructorDefault; @@ -110,7 +110,7 @@ namespace System { static public Object CreateInstance(Type type, params Object[] args) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && type != null) { FrameworkEventSource.Log.ActivatorCreateInstance(type.GetFullNameForEtw()); @@ -138,7 +138,7 @@ namespace System { static public Object CreateInstance(Type type) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && type != null) { FrameworkEventSource.Log.ActivatorCreateInstance(type.GetFullNameForEtw()); @@ -157,6 +157,10 @@ namespace System { static public ObjectHandle CreateInstance(String assemblyName, String typeName) { +#if MONO + if(assemblyName == null) + assemblyName = Assembly.GetCallingAssembly ().GetName ().Name; +#endif StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return CreateInstance(assemblyName, typeName, @@ -177,6 +181,10 @@ namespace System { Object[] activationAttributes) { +#if MONO + if(assemblyName == null) + assemblyName = Assembly.GetCallingAssembly ().GetName ().Name; +#endif StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return CreateInstance(assemblyName, typeName, @@ -210,7 +218,7 @@ namespace System { static public T CreateInstance() { RuntimeType rt = typeof(T) as RuntimeType; -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && rt != null) { FrameworkEventSource.Log.ActivatorCreateInstanceT(rt.GetFullNameForEtw()); @@ -280,6 +288,10 @@ namespace System { Object[] activationAttributes, Evidence securityInfo) { +#if MONO + if(assemblyName == null) + assemblyName = Assembly.GetCallingAssembly ().GetName ().Name; +#endif StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return CreateInstance(assemblyName, typeName, @@ -304,6 +316,10 @@ namespace System { CultureInfo culture, object[] activationAttributes) { +#if MONO + if(assemblyName == null) + assemblyName = Assembly.GetCallingAssembly ().GetName ().Name; +#endif StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return CreateInstance(assemblyName, typeName, @@ -335,7 +351,6 @@ namespace System { throw new NotSupportedException(Environment.GetResourceString("NotSupported_RequiresCasPolicyImplicit")); } #endif // FEATURE_CAS_POLICY - Type type = null; Assembly assembly = null; if (assemblyString == null) { @@ -611,7 +626,7 @@ namespace System { activationAttributes, null); } -#if FEATURE_COMINTEROP +#if FEATURE_COMINTEROP || MONO_COM #if FEATURE_CLICKONCE [System.Security.SecuritySafeCritical] // auto-generated diff --git a/external/referencesource/mscorlib/system/attribute.cs b/external/referencesource/mscorlib/system/attribute.cs index f7a74323c8..2149c8295c 100644 --- a/external/referencesource/mscorlib/system/attribute.cs +++ b/external/referencesource/mscorlib/system/attribute.cs @@ -20,10 +20,101 @@ namespace System { [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(_Attribute))] [System.Runtime.InteropServices.ComVisible(true)] - public abstract class Attribute : _Attribute + public abstract partial class Attribute : _Attribute { #region Private Statics +#if MONO + static Attribute[] InternalGetCustomAttributes (PropertyInfo element, Type type, bool inherit) + { + return (Attribute []) MonoCustomAttrs.GetCustomAttributes (element, type, inherit); + } + static Attribute[] InternalGetCustomAttributes (EventInfo element, Type type, bool inherit) + { + return (Attribute []) MonoCustomAttrs.GetCustomAttributes (element, type, inherit); + } + + static Attribute[] InternalParamGetCustomAttributes (ParameterInfo parameter, Type attributeType, bool inherit) + { + if (parameter.Member.MemberType != MemberTypes.Method) + return null; + + var method = (MethodInfo) parameter.Member; + var definition = method.GetBaseDefinition (); + + if (method == definition) + return (Attribute []) parameter.GetCustomAttributes (typeof(Attribute), inherit); + + var types = new List (); + var custom_attributes = new List (); + + if (attributeType == null) + attributeType = typeof (Attribute); + + while (true) { + var param = method.GetParametersInternal () [parameter.Position]; + var param_attributes = (Attribute []) param.GetCustomAttributes (attributeType, false); + foreach (var param_attribute in param_attributes) { + var param_type = param_attribute.GetType (); + if (types.Contains (param_type)) + continue; + + types.Add (param_type); + custom_attributes.Add (param_attribute); + } + + var base_method = method.GetBaseMethod (); + if (base_method == method) + break; + + method = base_method; + } + + var attributes = (Attribute []) Array.CreateInstance (attributeType, custom_attributes.Count); + custom_attributes.CopyTo (attributes, 0); + + return attributes; + } + + static bool InternalIsDefined (PropertyInfo element, Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (element, attributeType, inherit); + } + + static bool InternalIsDefined (EventInfo element, Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (element, attributeType, inherit); + } + + static bool InternalParamIsDefined (ParameterInfo parameter, Type attributeType, bool inherit) + { + if (parameter.IsDefined (attributeType, inherit)) + return true; + + if (!inherit) + return false; + + var member = parameter.Member; + if (member.MemberType != MemberTypes.Method) + return false; + + var method = ((MethodInfo) member).GetBaseMethod (); + + while (true) { + var param = method.GetParametersInternal () [parameter.Position]; + if (param.IsDefined (attributeType, false)) + return true; + + var base_method = method.GetBaseMethod (); + if (base_method == method) + break; + + method = base_method; + } + + return false; + } +#else #region PropertyInfo private static Attribute[] InternalGetCustomAttributes(PropertyInfo element, Type type, bool inherit) { @@ -414,7 +505,7 @@ namespace System { return (Attribute[])Array.UnsafeCreateInstance(elementType, elementCount); } #endregion - +#endif #endregion #region Public Statics diff --git a/external/referencesource/mscorlib/system/defaultbinder.cs b/external/referencesource/mscorlib/system/defaultbinder.cs index 3d578ce5f6..af63a7c52b 100644 --- a/external/referencesource/mscorlib/system/defaultbinder.cs +++ b/external/referencesource/mscorlib/system/defaultbinder.cs @@ -19,7 +19,7 @@ namespace System { using CultureInfo = System.Globalization.CultureInfo; //Marked serializable even though it has no state. [Serializable] - internal class DefaultBinder : Binder + internal partial class DefaultBinder : Binder { // This method is passed a set of methods and must choose the best // fit. The methods all have the same number of arguments and the object @@ -1097,7 +1097,7 @@ namespace System { return methWithDeepestHierarchy; } - +#if !MONO // CanConvertPrimitive // This will determine if the source can be converted to the target type [System.Security.SecurityCritical] // auto-generated @@ -1112,7 +1112,7 @@ namespace System { [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] static internal extern bool CanConvertPrimitiveObjectToType(Object source,RuntimeType type); - +#endif // This method will sort the vars array into the mapping order stored // in the paramOrder array. private static void ReorderParams(int[] paramOrder,Object[] vars) diff --git a/external/referencesource/mscorlib/system/enum.cs b/external/referencesource/mscorlib/system/enum.cs index 211d188df8..79395bc6ae 100644 --- a/external/referencesource/mscorlib/system/enum.cs +++ b/external/referencesource/mscorlib/system/enum.cs @@ -66,13 +66,17 @@ namespace System if (getValues || getNames) { +#if MONO + if (!GetEnumValuesAndNames (enumType, out values, out names)) + Array.Sort (values, names, System.Collections.Generic.Comparer.Default); +#else GetEnumValuesAndNames( enumType.GetTypeHandleInternal(), JitHelpers.GetObjectHandleOnStack(ref values), JitHelpers.GetObjectHandleOnStack(ref names), getValues, getNames); - +#endif if (getValues) hashEntry.values = values; @@ -283,12 +287,16 @@ namespace System [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern RuntimeType InternalGetUnderlyingType(RuntimeType enumType); +#if MONO + [MethodImplAttribute(MethodImplOptions.InternalCall)] + private static extern bool GetEnumValuesAndNames (RuntimeType enumType, out ulong[] values, out string[] names); +#else [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)] [System.Security.SuppressUnmanagedCodeSecurity] private static extern void GetEnumValuesAndNames(RuntimeTypeHandle enumType, ObjectHandleOnStack values, ObjectHandleOnStack names, bool getValues, bool getNames); - +#endif [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] @@ -421,7 +429,7 @@ namespace System parseResult.SetFailure(ParseFailureKind.Argument, "Arg_MustContainEnumInfo", null); return false; } -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumTryParseEnum(rtType.GetFullNameForEtw(), value); @@ -525,7 +533,7 @@ namespace System throw new ArgumentNullException("enumType"); Contract.Ensures(Contract.Result() != null); Contract.EndContractBlock(); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumGetUnderlyingType(enumType.GetFullNameForEtw()); @@ -542,7 +550,7 @@ namespace System throw new ArgumentNullException("enumType"); Contract.Ensures(Contract.Result() != null); Contract.EndContractBlock(); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumGetValues(enumType.GetFullNameForEtw()); @@ -569,7 +577,7 @@ namespace System throw new ArgumentNullException("enumType"); Contract.EndContractBlock(); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumGetName(enumType.GetFullNameForEtw()); @@ -586,7 +594,7 @@ namespace System Contract.Ensures(Contract.Result() != null); Contract.EndContractBlock(); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumGetNames(enumType.GetFullNameForEtw()); @@ -668,7 +676,7 @@ namespace System if (enumType == null) throw new ArgumentNullException("enumType"); Contract.EndContractBlock(); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumIsDefined(enumType.GetFullNameForEtw()); @@ -696,7 +704,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginEnumFormat(rtType.GetFullNameForEtw()); @@ -726,7 +734,7 @@ namespace System // all acceptable format string are of length 1 throw new FormatException(Environment.GetResourceString("Format_InvalidEnumFormatSpecification")); } -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndEnumFormat(rtType.GetFullNameForEtw()); @@ -771,10 +779,18 @@ namespace System } #endregion +#if MONO + [MethodImplAttribute (MethodImplOptions.InternalCall)] + extern object get_value (); +#endif + #region Private Methods [System.Security.SecuritySafeCritical] internal unsafe Object GetValue() { +#if MONO + return get_value (); +#else fixed (void* pValue = &JitHelpers.GetPinningHelper(this).m_data) { switch (InternalGetCorElementType()) @@ -812,6 +828,7 @@ namespace System return null; } } +#endif } [System.Security.SecurityCritical] // auto-generated @@ -822,19 +839,31 @@ namespace System [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] +#if MONO + private extern int get_hashcode (); +#else private extern CorElementType InternalGetCorElementType(); - +#endif #endregion #region Object Overrides +#if MONO + public override bool Equals (object obj) + { + return DefaultEquals (this, obj); + } +#else [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] public extern override bool Equals(Object obj); - +#endif [System.Security.SecuritySafeCritical] public override unsafe int GetHashCode() { +#if MONO + return get_hashcode (); +#else // Avoid boxing by inlining GetValue() // return GetValue().GetHashCode(); @@ -875,6 +904,7 @@ namespace System return 0; } } +#endif } public override String ToString() @@ -1138,7 +1168,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1159,7 +1189,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1180,7 +1210,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1201,7 +1231,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1223,7 +1253,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1245,7 +1275,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1266,7 +1296,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); @@ -1288,7 +1318,7 @@ namespace System RuntimeType rtType = enumType as RuntimeType; if (rtType == null) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EnumToObject(enumType.GetFullNameForEtw()); diff --git a/external/referencesource/mscorlib/system/globalization/charunicodeinfo.cs b/external/referencesource/mscorlib/system/globalization/charunicodeinfo.cs index d8efc782de..22a4a01507 100644 --- a/external/referencesource/mscorlib/system/globalization/charunicodeinfo.cs +++ b/external/referencesource/mscorlib/system/globalization/charunicodeinfo.cs @@ -109,6 +109,54 @@ namespace System.Globalization { internal sbyte digit; } + unsafe private static int EndianSwap(int value) + { + if (!BitConverter.IsLittleEndian) { + byte *ptr = (byte *) &value; + int res; + byte *buf = (byte *) &res; + int t = sizeof(int) - 1; + + for (int i = 0; i < sizeof(int); i++) + buf[t-i] = ptr[i]; + + return(res); + } else + return(value); + } + + unsafe private static uint EndianSwap(uint value) + { + if (!BitConverter.IsLittleEndian) { + byte *ptr = (byte *) &value; + uint res; + byte *buf = (byte *) &res; + uint t = sizeof(uint) - 1; + + for (uint i = 0; i < sizeof(uint); i++) + buf[t-i] = ptr[i]; + + return(res); + } else + return(value); + } + + unsafe private static ushort EndianSwap(ushort value) + { + if (!BitConverter.IsLittleEndian) { + byte *ptr = (byte *) &value; + ushort res; + byte *buf = (byte *) &res; + ushort t = sizeof(ushort) - 1; + + for (ushort i = 0; i < sizeof(ushort); i++) + buf[t-i] = ptr[i]; + + return(res); + } else + return(value); + } + //We need to allocate the underlying table that provides us with the information that we //use. We allocate this once in the class initializer and then we don't need to worry @@ -125,11 +173,11 @@ namespace System.Globalization { UnicodeDataHeader* mainHeader = (UnicodeDataHeader*)pDataTable; // Set up the native pointer to different part of the tables. - s_pCategoryLevel1Index = (ushort*) (pDataTable + mainHeader->OffsetToCategoriesIndex); - s_pCategoriesValue = (byte*) (pDataTable + mainHeader->OffsetToCategoriesValue); - s_pNumericLevel1Index = (ushort*) (pDataTable + mainHeader->OffsetToNumbericIndex); - s_pNumericValues = (byte*) (pDataTable + mainHeader->OffsetToNumbericValue); - s_pDigitValues = (DigitValues*) (pDataTable + mainHeader->OffsetToDigitValue); + s_pCategoryLevel1Index = (ushort*) (pDataTable + EndianSwap(mainHeader->OffsetToCategoriesIndex)); + s_pCategoriesValue = (byte*) (pDataTable + EndianSwap(mainHeader->OffsetToCategoriesValue)); + s_pNumericLevel1Index = (ushort*) (pDataTable + EndianSwap(mainHeader->OffsetToNumbericIndex)); + s_pNumericValues = (byte*) (pDataTable + EndianSwap(mainHeader->OffsetToNumbericValue)); + s_pDigitValues = (DigitValues*) (pDataTable + EndianSwap(mainHeader->OffsetToDigitValue)); return true; } @@ -254,11 +302,11 @@ namespace System.Globalization { internal unsafe static double InternalGetNumericValue(int ch) { Contract.Assert(ch >= 0 && ch <= 0x10ffff, "ch is not in valid Unicode range."); // Get the level 2 item from the highest 12 bit (8 - 19) of ch. - ushort index = s_pNumericLevel1Index[ch >> 8]; + ushort index = EndianSwap(s_pNumericLevel1Index[ch >> 8]); // Get the level 2 WORD offset from the 4 - 7 bit of ch. This provides the base offset of the level 3 table. // The offset is referred to an float item in m_pNumericFloatData. // Note that & has the lower precedence than addition, so don't forget the parathesis. - index = s_pNumericLevel1Index[index + ((ch >> 4) & 0x000f)]; + index = EndianSwap(s_pNumericLevel1Index[index + ((ch >> 4) & 0x000f)]); byte* pBytePtr = (byte*)&(s_pNumericLevel1Index[index]); // Get the result from the 0 -3 bit of ch. #if WIN64 @@ -448,12 +496,13 @@ namespace System.Globalization { [System.Security.SecuritySafeCritical] // auto-generated internal unsafe static byte InternalGetCategoryValue(int ch, int offset) { + Contract.Assert(ch >= 0 && ch <= 0x10ffff, "ch is not in valid Unicode range."); // Get the level 2 item from the highest 12 bit (8 - 19) of ch. - ushort index = s_pCategoryLevel1Index[ch >> 8]; + ushort index = EndianSwap(s_pCategoryLevel1Index[ch >> 8]); // Get the level 2 WORD offset from the 4 - 7 bit of ch. This provides the base offset of the level 3 table. // Note that & has the lower precedence than addition, so don't forget the parathesis. - index = s_pCategoryLevel1Index[index + ((ch >> 4) & 0x000f)]; + index = EndianSwap(s_pCategoryLevel1Index[index + ((ch >> 4) & 0x000f)]); byte* pBytePtr = (byte*)&(s_pCategoryLevel1Index[index]); // Get the result from the 0 -3 bit of ch. byte valueIndex = pBytePtr[(ch & 0x000f)]; diff --git a/external/referencesource/mscorlib/system/reflection/RuntimeReflectionExtensions.cs b/external/referencesource/mscorlib/system/reflection/RuntimeReflectionExtensions.cs index 5ca184889c..a960d20d00 100644 --- a/external/referencesource/mscorlib/system/reflection/RuntimeReflectionExtensions.cs +++ b/external/referencesource/mscorlib/system/reflection/RuntimeReflectionExtensions.cs @@ -23,14 +23,14 @@ namespace System.Reflection public static IEnumerable GetRuntimeProperties(this Type type) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeProperties(type.GetFullNameForEtw()); } #endif IEnumerable properties = type.GetProperties(everything); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeProperties(type.GetFullNameForEtw()); @@ -41,14 +41,14 @@ namespace System.Reflection public static IEnumerable GetRuntimeEvents(this Type type) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeEvents(type.GetFullNameForEtw()); } #endif IEnumerable events = type.GetEvents(everything); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeEvents(type.GetFullNameForEtw()); @@ -60,14 +60,14 @@ namespace System.Reflection public static IEnumerable GetRuntimeMethods(this Type type) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeMethods(type.GetFullNameForEtw()); } #endif IEnumerable methods = type.GetMethods(everything); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeMethods(type.GetFullNameForEtw()); @@ -79,14 +79,14 @@ namespace System.Reflection public static IEnumerable GetRuntimeFields(this Type type) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeFields(type.GetFullNameForEtw()); } #endif IEnumerable fields = type.GetFields(everything); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeFields(type.GetFullNameForEtw()); @@ -99,7 +99,7 @@ namespace System.Reflection public static PropertyInfo GetRuntimeProperty(this Type type, string name) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeProperty(type.GetFullNameForEtw(), name != null ? name : ""); @@ -107,7 +107,7 @@ namespace System.Reflection #endif PropertyInfo pi = type.GetProperty(name); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeProperty(type.GetFullNameForEtw(), pi != null ? pi.GetFullNameForEtw() : ""); @@ -119,14 +119,14 @@ namespace System.Reflection public static EventInfo GetRuntimeEvent(this Type type, string name) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeEvent(type.GetFullNameForEtw(), name != null ? name : ""); } #endif EventInfo ei = type.GetEvent(name); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeEvent(type.GetFullNameForEtw(), ei != null ? ei.GetFullNameForEtw() : ""); @@ -138,14 +138,14 @@ namespace System.Reflection public static MethodInfo GetRuntimeMethod(this Type type, string name, Type[] parameters) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeMethod(type.GetFullNameForEtw(), name != null ? name : ""); } #endif MethodInfo mi = type.GetMethod(name, parameters); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeMethod(type.GetFullNameForEtw(), mi != null ? mi.GetFullNameForEtw() : ""); @@ -157,14 +157,14 @@ namespace System.Reflection public static FieldInfo GetRuntimeField(this Type type, string name) { CheckAndThrow(type); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeField(type.GetFullNameForEtw(), name != null ? name : ""); } #endif FieldInfo fi = type.GetField(name); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeField(type.GetFullNameForEtw(), fi != null ? fi.GetFullNameForEtw() : ""); diff --git a/external/referencesource/mscorlib/system/reflection/assemblyattributes.cs b/external/referencesource/mscorlib/system/reflection/assemblyattributes.cs index ea72bf396c..f803e4a9d1 100644 --- a/external/referencesource/mscorlib/system/reflection/assemblyattributes.cs +++ b/external/referencesource/mscorlib/system/reflection/assemblyattributes.cs @@ -388,7 +388,7 @@ namespace System.Reflection { } #endif -#if FEATURE_CORECLR || !FEATURE_PAL +#if FEATURE_CORECLR || !FEATURE_PAL || MONO [AttributeUsage (AttributeTargets.Assembly, Inherited=false)] [System.Runtime.InteropServices.ComVisible(true)] public sealed class AssemblyKeyNameAttribute : Attribute diff --git a/external/referencesource/mscorlib/system/reflection/introspectionextensions.cs b/external/referencesource/mscorlib/system/reflection/introspectionextensions.cs index 066750f705..b8c7c3e24d 100644 --- a/external/referencesource/mscorlib/system/reflection/introspectionextensions.cs +++ b/external/referencesource/mscorlib/system/reflection/introspectionextensions.cs @@ -30,7 +30,7 @@ namespace System.Reflection if(rcType==null){ return null; }else{ -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.IntrospectionExtensionsGetTypeInfo(type.GetFullNameForEtw()); diff --git a/external/referencesource/mscorlib/system/reflection/memberinfo.cs b/external/referencesource/mscorlib/system/reflection/memberinfo.cs index df988a8600..75b57f437c 100644 --- a/external/referencesource/mscorlib/system/reflection/memberinfo.cs +++ b/external/referencesource/mscorlib/system/reflection/memberinfo.cs @@ -62,7 +62,14 @@ namespace System.Reflection throw new NotImplementedException(); } +#if MONO + public virtual extern int MetadataToken { + [System.Runtime.CompilerServices.MethodImplAttribute (System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] + get; + } +#else public virtual int MetadataToken { get { throw new InvalidOperationException(); } } +#endif public virtual Module Module { diff --git a/external/referencesource/mscorlib/system/reflection/methodbase.cs b/external/referencesource/mscorlib/system/reflection/methodbase.cs index cba403ac50..3673c55072 100644 --- a/external/referencesource/mscorlib/system/reflection/methodbase.cs +++ b/external/referencesource/mscorlib/system/reflection/methodbase.cs @@ -57,7 +57,7 @@ namespace System.Reflection [PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")] #pragma warning restore 618 [System.Runtime.InteropServices.ComVisible(true)] - public abstract class MethodBase : MemberInfo, _MethodBase + public abstract partial class MethodBase : MemberInfo, _MethodBase { #region Static Members public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle) @@ -65,18 +65,24 @@ namespace System.Reflection if (handle.IsNullHandle()) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidHandle")); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetMethodFromHandle(); } #endif +#if MONO + MethodBase m = GetMethodFromHandleInternalType (handle.Value, IntPtr.Zero); + if (m == null) + throw new ArgumentException ("The handle is invalid."); +#else MethodBase m = RuntimeType.GetMethodBase(handle.GetMethodInfo()); +#endif Type declaringType = m.DeclaringType; -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && declaringType != null) { FrameworkEventSource.Log.EndGetMethodFromHandle(declaringType.GetFullNameForEtw(), m.GetFullNameForEtw()); @@ -97,16 +103,22 @@ namespace System.Reflection if (handle.IsNullHandle()) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidHandle")); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetMethodFromHandle(); } #endif +#if MONO + MethodBase m = GetMethodFromHandleInternalType (handle.Value, declaringType.Value); + if (m == null) + throw new ArgumentException ("The handle is invalid."); +#else MethodBase m = RuntimeType.GetMethodBase(declaringType.GetRuntimeType(), handle.GetMethodInfo()); +#endif -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && declaringType != null && m != null) { FrameworkEventSource.Log.EndGetMethodFromHandle(declaringType.GetRuntimeType().GetFullNameForEtw(), m.GetFullNameForEtw()); @@ -116,6 +128,10 @@ namespace System.Reflection return m; } +#if MONO + [MethodImplAttribute (MethodImplOptions.InternalCall)] + public extern static MethodBase GetCurrentMethod (); +#else [System.Security.DynamicSecurityMethod] // Specify DynamicSecurityMethod attribute to prevent inlining of the caller. [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public static MethodBase GetCurrentMethod() @@ -123,6 +139,7 @@ namespace System.Reflection StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return RuntimeMethodInfo.InternalGetCurrentMethod(ref stackMark); } +#endif #endregion #region Constructor @@ -382,7 +399,7 @@ namespace System.Reflection return parameterTypes; } - +#if !MONO [System.Security.SecuritySafeCritical] internal Object[] CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) @@ -409,6 +426,7 @@ namespace System.Reflection return copyOfParameters; } +#endif #endregion void _MethodBase.GetTypeInfoCount(out uint pcTInfo) diff --git a/external/referencesource/mscorlib/system/reflection/typeattributes.cs b/external/referencesource/mscorlib/system/reflection/typeattributes.cs index d498a106d1..10412e6f2c 100644 --- a/external/referencesource/mscorlib/system/reflection/typeattributes.cs +++ b/external/referencesource/mscorlib/system/reflection/typeattributes.cs @@ -44,7 +44,7 @@ namespace System.Reflection { // Implementation attributes. Import = 0x00001000, // Class / interface is imported Serializable = 0x00002000, // The class is Serializable. -#if FEATURE_COMINTEROP +#if FEATURE_COMINTEROP || MONO_COM [ComVisible(false)] WindowsRuntime = 0x00004000, // Type is a Windows Runtime type. #endif // FEATURE_COMINTEROP diff --git a/external/referencesource/mscorlib/system/reflection/typeinfo.cs b/external/referencesource/mscorlib/system/reflection/typeinfo.cs index f19a10df4c..ea69908464 100644 --- a/external/referencesource/mscorlib/system/reflection/typeinfo.cs +++ b/external/referencesource/mscorlib/system/reflection/typeinfo.cs @@ -85,14 +85,14 @@ namespace System.Reflection public virtual EventInfo GetDeclaredEvent(String name) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeEvent(GetFullNameForEtw(), name != null ? name : ""); } #endif EventInfo ei = GetEvent(name, Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeEvent(GetFullNameForEtw(), ei != null ? ei.GetFullNameForEtw() : ""); @@ -102,14 +102,14 @@ namespace System.Reflection } public virtual FieldInfo GetDeclaredField(String name) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeField(GetFullNameForEtw(), name != null ? name : ""); } #endif FieldInfo fi = GetField(name, Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeField(GetFullNameForEtw(), fi != null ? fi.GetFullNameForEtw() : ""); @@ -119,14 +119,14 @@ namespace System.Reflection } public virtual MethodInfo GetDeclaredMethod(String name) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeMethod(GetFullNameForEtw(), name != null ? name : ""); } #endif MethodInfo mi = GetMethod(name, Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeMethod(GetFullNameForEtw(), mi != null ? mi.GetFullNameForEtw() : ""); @@ -137,7 +137,7 @@ namespace System.Reflection public virtual IEnumerable GetDeclaredMethods(String name) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeMethods(GetFullNameForEtw()); @@ -150,7 +150,7 @@ namespace System.Reflection yield return method; } -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeMethods(GetFullNameForEtw()); @@ -168,14 +168,14 @@ namespace System.Reflection } public virtual PropertyInfo GetDeclaredProperty(String name) { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeProperty(GetFullNameForEtw(), name != null ? name : ""); } #endif PropertyInfo pi = GetProperty(name, Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeProperty(GetFullNameForEtw(), pi != null ? pi.GetFullNameForEtw() : ""); @@ -194,14 +194,14 @@ namespace System.Reflection { get { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeConstructors(GetFullNameForEtw()); } #endif IEnumerable constructors = GetConstructors(Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeConstructors(GetFullNameForEtw()); @@ -215,14 +215,14 @@ namespace System.Reflection { get { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeEvents(GetFullNameForEtw()); } #endif IEnumerable events = GetEvents(Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeEvents(GetFullNameForEtw()); @@ -236,14 +236,14 @@ namespace System.Reflection { get { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeFields(GetFullNameForEtw()); } #endif IEnumerable fields = GetFields(Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeFields(GetFullNameForEtw()); @@ -257,14 +257,14 @@ namespace System.Reflection { get { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeMembers(GetFullNameForEtw()); } #endif IEnumerable members = GetMembers(Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeMembers(GetFullNameForEtw()); @@ -278,14 +278,14 @@ namespace System.Reflection { get { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeMethods(GetFullNameForEtw()); } #endif IEnumerable methods = GetMethods(Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeMethods(GetFullNameForEtw()); @@ -308,14 +308,14 @@ namespace System.Reflection { get { -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.BeginGetRuntimeProperties(GetFullNameForEtw()); } #endif IEnumerable properties = GetProperties(Type.DeclaredOnlyLookup); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage)) { FrameworkEventSource.Log.EndGetRuntimeProperties(GetFullNameForEtw()); diff --git a/external/referencesource/mscorlib/system/resources/manifestbasedresourcegroveler.cs b/external/referencesource/mscorlib/system/resources/manifestbasedresourcegroveler.cs index 0b469000cc..9453aa60f8 100644 --- a/external/referencesource/mscorlib/system/resources/manifestbasedresourcegroveler.cs +++ b/external/referencesource/mscorlib/system/resources/manifestbasedresourcegroveler.cs @@ -255,9 +255,14 @@ namespace System.Resources { Contract.Assert(a != null, "assembly != null"); string cultureName = null; short fallback = 0; + +#if MONO + if (GetNeutralResourcesLanguageAttribute(a, ref cultureName, ref fallback)) { +#else if (GetNeutralResourcesLanguageAttribute(((RuntimeAssembly)a).GetNativeHandle(), JitHelpers.GetStringHandleOnStack(ref cultureName), out fallback)) { +#endif if ((UltimateResourceFallbackLocation)fallback < UltimateResourceFallbackLocation.MainAssembly || (UltimateResourceFallbackLocation)fallback > UltimateResourceFallbackLocation.Satellite) { throw new ArgumentException(Environment.GetResourceString("Arg_InvalidNeutralResourcesLanguage_FallbackLoc", fallback)); } @@ -718,11 +723,24 @@ namespace System.Resources { throw new MissingManifestResourceException(Environment.GetResourceString("MissingManifestResource_NoNeutralAsm", resName, _mediator.MainAssembly.GetSimpleName())); } +#if MONO + static bool GetNeutralResourcesLanguageAttribute (Assembly assembly, ref string cultureName, ref short fallbackLocation) + { + var ca = assembly.GetCustomAttribute (); + if (ca == null) + return false; + + cultureName = ca.CultureName; + fallbackLocation = (short) ca.Location; + return true; + } +#else [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)] [System.Security.SecurityCritical] // Our security team doesn't yet allow safe-critical P/Invoke methods. [ResourceExposure(ResourceScope.None)] [System.Security.SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool GetNeutralResourcesLanguageAttribute(RuntimeAssembly assemblyHandle, StringHandleOnStack cultureName, out short fallbackLocation); +#endif } } diff --git a/external/referencesource/mscorlib/system/resources/resourcemanager.cs b/external/referencesource/mscorlib/system/resources/resourcemanager.cs index 6173b5ba13..758f36b734 100644 --- a/external/referencesource/mscorlib/system/resources/resourcemanager.cs +++ b/external/referencesource/mscorlib/system/resources/resourcemanager.cs @@ -516,9 +516,10 @@ namespace System.Resources { _neutralResourcesCulture = ManifestBasedResourceGroveler.GetNeutralResourcesLanguage(MainAssembly, ref _fallbackLoc); -#if !FEATURE_CORECLR && !MONO // PAL doesn't support eventing, and we don't compile event providers for coreclr +#if !FEATURE_CORECLR // PAL doesn't support eventing, and we don't compile event providers for coreclr if (_bUsingModernResourceManagement == false) { +#if !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled()) { CultureInfo culture = CultureInfo.InvariantCulture; String defaultResName = GetResourceFileName(culture); @@ -533,7 +534,7 @@ namespace System.Resources { FrameworkEventSource.Log.ResourceManagerNeutralResourcesNotFound(BaseNameField, MainAssembly, outputResName); } } - +#endif #pragma warning disable 618 ResourceSets = new Hashtable(); // for backward compatibility #pragma warning restore 618 diff --git a/external/referencesource/mscorlib/system/resources/resourcewriter.cs b/external/referencesource/mscorlib/system/resources/resourcewriter.cs index 56b84ac25a..76be430183 100644 --- a/external/referencesource/mscorlib/system/resources/resourcewriter.cs +++ b/external/referencesource/mscorlib/system/resources/resourcewriter.cs @@ -94,7 +94,7 @@ namespace System.Resources { private const int AverageValueSize = 40; private Dictionary _resourceList; - private Stream _output; + internal Stream _output; private Dictionary _caseInsensitiveDups; private Dictionary _preserializedData; private const int _DefaultBufferSize = 4096; diff --git a/external/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id b/external/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id index c0f93dfd60..ef4c63d776 100644 --- a/external/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id +++ b/external/referencesource/mscorlib/system/rttype.cs.REMOVED.git-id @@ -1 +1 @@ -80740fd95865cd9fb6a9642e3b5690f0d62be948 \ No newline at end of file +f132cbc0e367fdac450e2d7468a29528524afb99 \ No newline at end of file diff --git a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatterwriter.cs b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatterwriter.cs index 2ad05e8d83..28ef1f0810 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatterwriter.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryformatterwriter.cs @@ -407,7 +407,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { int numArrayItems = Math.Min(chunkSize/typeLength, array.Length-arrayOffset); int bufferUsed = numArrayItems*typeLength; Buffer.InternalBlockCopy(array, arrayOffset*typeLength, byteBuffer, 0, bufferUsed); -#if BIGENDIAN +if (!BitConverter.IsLittleEndian) { // we know that we are writing a primitive type, so just do a simple swap for (int i = 0; i < bufferUsed; i += typeLength) { @@ -418,7 +418,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { byteBuffer[i + typeLength-1 - j] = tmp; } } -#endif +} WriteBytes(byteBuffer, 0, bufferUsed); arrayOffset += numArrayItems; } diff --git a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs index 0b5710be1c..7ab66c338e 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectreader.cs @@ -158,12 +158,12 @@ namespace System.Runtime.Serialization.Formatters.Binary { bIsCrossAppDomain = isCrossAppDomain; #endif bSimpleAssembly = (formatterEnums.FEassemblyFormat == FormatterAssemblyStyle.Simple); - +#if !MONO if (fCheck) { CodeAccessPermission.Demand(PermissionType.SecuritySerialization); } - +#endif this.handler = handler; Contract.Assert(!bFullDeserialization, "we just set bFullDeserialization to false"); @@ -244,12 +244,12 @@ namespace System.Runtime.Serialization.Formatters.Binary { bIsCrossAppDomain = isCrossAppDomain; #endif bSimpleAssembly = (formatterEnums.FEassemblyFormat == FormatterAssemblyStyle.Simple); - +#if !MONO if (fCheck) { CodeAccessPermission.Demand(PermissionType.SecuritySerialization); } - +#endif this.handler = handler; @@ -1504,9 +1504,10 @@ namespace System.Runtime.Serialization.Formatters.Binary { if ( !FormatterServices.UnsafeTypeForwardersIsEnabled() && sourceAssembly != destAssembly ) { // we have a type forward to attribute ! - +#if !DISABLE_CAS_USE // we can try to see if the dest assembly has less permissionSet if (!destAssembly.PermissionSet.IsSubsetOf(sourceAssembly.PermissionSet)) +#endif { // let us try to see if typeforwardedfrom is there @@ -1521,17 +1522,20 @@ namespace System.Runtime.Serialization.Formatters.Binary { typeFowardedFromAssembly = Assembly.Load(typeInfo.AssemblyString); } catch { } - +#if !DISABLE_CAS_USE if (typeFowardedFromAssembly != sourceAssembly) { // throw security exception throw new SecurityException() { Demanded = sourceAssembly.PermissionSet }; } +#endif } else { +#if !DISABLE_CAS_USE // throw security exception throw new SecurityException() { Demanded = sourceAssembly.PermissionSet }; +#endif } } } diff --git a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectwriter.cs b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectwriter.cs index 12699da145..bce52fc45d 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectwriter.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryobjectwriter.cs @@ -85,12 +85,12 @@ namespace System.Runtime.Serialization.Formatters.Binary Contract.EndContractBlock(); SerTrace.Log(this, "Serialize Entry 2 ", graph, ((headers == null) ? " no headers " : "headers ")); - +#if !MONO if (fCheck) { CodeAccessPermission.Demand(PermissionType.SecuritySerialization); } - +#endif this.serWriter = serWriter; this.headers = inHeaders; diff --git a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryparser.cs b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryparser.cs index 04241bfaa6..cab446c645 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryparser.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/formatters/binary/binaryparser.cs @@ -1031,7 +1031,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { int numArrayItems = Math.Min(chunkSize/typeLength, array.Length-arrayOffset); int bufferUsed = numArrayItems*typeLength; ReadBytes(byteBuffer, 0, bufferUsed); -#if BIGENDIAN +if (!BitConverter.IsLittleEndian) { // we know that we are reading a primitive type, so just do a simple swap for (int i = 0; i < bufferUsed; i += typeLength) { @@ -1042,7 +1042,7 @@ namespace System.Runtime.Serialization.Formatters.Binary { byteBuffer[i + typeLength - 1 - j] = tmp; } } -#endif +} Buffer.InternalBlockCopy(byteBuffer, 0, array, arrayOffset*typeLength, bufferUsed); arrayOffset += numArrayItems; } diff --git a/external/referencesource/mscorlib/system/runtime/serialization/formatterservices.cs b/external/referencesource/mscorlib/system/runtime/serialization/formatterservices.cs index cf2cdac776..f4521515a0 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/formatterservices.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/formatterservices.cs @@ -294,6 +294,17 @@ namespace System.Runtime.Serialization { } } +#if MONO + private static Object nativeGetUninitializedObject(RuntimeType type) + { + return System.Runtime.Remoting.Activation.ActivationServices.AllocateUninitializedClassInstance (type); + } + + private static Object nativeGetSafeUninitializedObject(RuntimeType type) + { + return System.Runtime.Remoting.Activation.ActivationServices.AllocateUninitializedClassInstance (type); + } +#else [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] @@ -303,11 +314,19 @@ namespace System.Runtime.Serialization { [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern Object nativeGetUninitializedObject(RuntimeType type); +#endif #if FEATURE_SERIALIZATION +#if MONO + static bool GetEnableUnsafeTypeForwarders () + { + return false; + } +#else [System.Security.SecurityCritical] [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern bool GetEnableUnsafeTypeForwarders(); +#endif [SecuritySafeCritical] internal static bool UnsafeTypeForwardersIsEnabled() diff --git a/external/referencesource/mscorlib/system/runtime/serialization/objectclonehelper.cs b/external/referencesource/mscorlib/system/runtime/serialization/objectclonehelper.cs index 2ab12c782e..fa47f3bff4 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/objectclonehelper.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/objectclonehelper.cs @@ -53,6 +53,7 @@ namespace System.Runtime.Serialization } else if (RemotingServices.IsTransparentProxy(serObj) || serObj is MarshalByRefObject) { +#if !MONO // We can only try to smuggle objref's for actual CLR objects // or for RemotingProxy's. if (!RemotingServices.IsTransparentProxy(serObj) || @@ -78,7 +79,7 @@ namespace System.Runtime.Serialization retObj = objRef; } } - +#endif if (retObj == null) { // Deal with the non-smugglable remoting objects diff --git a/external/referencesource/mscorlib/system/runtime/serialization/objectmanager.cs b/external/referencesource/mscorlib/system/runtime/serialization/objectmanager.cs index d27cdb8710..8d53544a06 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/objectmanager.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/objectmanager.cs @@ -53,7 +53,9 @@ namespace System.Runtime.Serialization { [System.Security.SecurityCritical] // auto-generated internal ObjectManager(ISurrogateSelector selector, StreamingContext context, bool checkSecurity, bool isCrossAppDomain) { if (checkSecurity) { +#if !MONO CodeAccessPermission.Demand(PermissionType.SecuritySerialization); +#endif } m_objects = new ObjectHolder[DefaultInitialSize]; m_selector = selector; diff --git a/external/referencesource/mscorlib/system/runtime/serialization/serializationinfo.cs b/external/referencesource/mscorlib/system/runtime/serialization/serializationinfo.cs index 0a530d39e9..75965dfa42 100644 --- a/external/referencesource/mscorlib/system/runtime/serialization/serializationinfo.cs +++ b/external/referencesource/mscorlib/system/runtime/serialization/serializationinfo.cs @@ -184,7 +184,9 @@ namespace System.Runtime.Serialization { if (!IsAssemblyNameAssignmentSafe(originalAssemblyName, newAssemblyName)) { +#if !MONO CodeAccessPermission.Demand(PermissionType.SecuritySerialization); +#endif } } diff --git a/external/referencesource/mscorlib/system/text/stringbuilder.cs b/external/referencesource/mscorlib/system/text/stringbuilder.cs index 4c7b67c310..a87a9a9cb3 100644 --- a/external/referencesource/mscorlib/system/text/stringbuilder.cs +++ b/external/referencesource/mscorlib/system/text/stringbuilder.cs @@ -16,6 +16,7 @@ namespace System.Text { using System.Text; using System.Runtime; using System.Runtime.Serialization; + using System.Runtime.InteropServices; using System; using System.Runtime.CompilerServices; using System.Runtime.Versioning; @@ -43,6 +44,7 @@ namespace System.Text { // [System.Runtime.InteropServices.ComVisible(true)] [Serializable] + [StructLayout (LayoutKind.Sequential)] public sealed class StringBuilder : ISerializable { // A StringBuilder is internally represented as a linked list of blocks each of which holds // a chunk of the string. It turns out string as a whole can also be represented as just a chunk, diff --git a/external/referencesource/mscorlib/system/text/unicodeencoding.cs b/external/referencesource/mscorlib/system/text/unicodeencoding.cs index f6830ec5a3..a5124cf0eb 100644 --- a/external/referencesource/mscorlib/system/text/unicodeencoding.cs +++ b/external/referencesource/mscorlib/system/text/unicodeencoding.cs @@ -29,6 +29,9 @@ namespace System.Text // Unicode version 2.0 character size in bytes public const int CharSize = 2; + // endianness-based bit pattern mask. + static readonly ulong highLowPatternMask = ((ulong) 0xd800d800d800d800 | (BitConverter.IsLittleEndian ? (ulong) 0x0400000004000000 : (ulong) 0x0000040000000400)); + public UnicodeEncoding() : this(false, true) @@ -533,11 +536,7 @@ namespace System.Text // If they happen to be high/low/high/low, we may as well continue. Check the next // bit to see if its set (low) or not (high) in the right pattern -#if BIGENDIAN - if (((0xfc00fc00fc00fc00 & *longChars) ^ 0xd800dc00d800dc00) != 0) -#else - if (((0xfc00fc00fc00fc00 & *longChars) ^ 0xdc00d800dc00d800) != 0) -#endif + if (((0xfc00fc00fc00fc00 & *longChars) ^ highLowPatternMask) != 0) { // Either there weren't 4 surrogates, or the 0x0400 bit was set when a high // was hoped for or the 0x0400 bit wasn't set where a low was hoped for. @@ -823,11 +822,7 @@ namespace System.Text // If they happen to be high/low/high/low, we may as well continue. Check the next // bit to see if its set (low) or not (high) in the right pattern -#if BIGENDIAN - if (((0xfc00fc00fc00fc00 & *longChars) ^ 0xd800dc00d800dc00) != 0) -#else - if (((0xfc00fc00fc00fc00 & *longChars) ^ 0xdc00d800dc00d800) != 0) -#endif + if (((0xfc00fc00fc00fc00 & *longChars) ^ highLowPatternMask) != 0) { // Either there weren't 4 surrogates, or the 0x0400 bit was set when a high // was hoped for or the 0x0400 bit wasn't set where a low was hoped for. @@ -1228,11 +1223,7 @@ namespace System.Text // If they happen to be high/low/high/low, we may as well continue. Check the next // bit to see if its set (low) or not (high) in the right pattern -#if BIGENDIAN - if (((0xfc00fc00fc00fc00 & *longBytes) ^ 0xd800dc00d800dc00) != 0) -#else - if (((0xfc00fc00fc00fc00 & *longBytes) ^ 0xdc00d800dc00d800) != 0) -#endif + if (((0xfc00fc00fc00fc00 & *longBytes) ^ highLowPatternMask) != 0) { // Either there weren't 4 surrogates, or the 0x0400 bit was set when a high // was hoped for or the 0x0400 bit wasn't set where a low was hoped for. @@ -1560,11 +1551,7 @@ namespace System.Text // If they happen to be high/low/high/low, we may as well continue. Check the next // bit to see if its set (low) or not (high) in the right pattern -#if BIGENDIAN - if (((0xfc00fc00fc00fc00 & *longBytes) ^ 0xd800dc00d800dc00) != 0) -#else - if (((0xfc00fc00fc00fc00 & *longBytes) ^ 0xdc00d800dc00d800) != 0) -#endif + if (((0xfc00fc00fc00fc00 & *longBytes) ^ highLowPatternMask) != 0) { // Either there weren't 4 surrogates, or the 0x0400 bit was set when a high // was hoped for or the 0x0400 bit wasn't set where a low was hoped for. diff --git a/external/referencesource/mscorlib/system/threading/threadpool.cs b/external/referencesource/mscorlib/system/threading/threadpool.cs index f299f9be5f..e9d047441c 100644 --- a/external/referencesource/mscorlib/system/threading/threadpool.cs +++ b/external/referencesource/mscorlib/system/threading/threadpool.cs @@ -62,122 +62,6 @@ namespace System.Threading [CLSCompliant(false)] [System.Runtime.InteropServices.ComVisible(true)] unsafe public delegate void IOCompletionCallback(uint errorCode, uint numBytes, NativeOverlapped* pOVERLAP); - - - [System.Runtime.InteropServices.ComVisible(true)] -#if FEATURE_REMOTING - public sealed class RegisteredWaitHandle : MarshalByRefObject -#else // FEATURE_REMOTING - public sealed class RegisteredWaitHandle -#endif // FEATURE_REMOTING - { - // Microsoft ThreadPool - private Microsoft.RegisteredWaitHandleSafe internalRegisteredWait; - - // Mono ThreadPool - private WaitHandle _waitObject; - private WaitOrTimerCallback _callback; - private object _state; - private WaitHandle _finalEvent; - private ManualResetEvent _cancelEvent; - private TimeSpan _timeout; - private int _callsInProcess; - private bool _executeOnlyOnce; - private bool _unregistered; - - internal RegisteredWaitHandle() - { - Contract.Assert (Microsoft.ThreadPool.UseMicrosoftThreadPool); - internalRegisteredWait = new Microsoft.RegisteredWaitHandleSafe(); - } - - internal RegisteredWaitHandle (WaitHandle waitObject, WaitOrTimerCallback callback, object state, TimeSpan timeout, bool executeOnlyOnce) - { - Contract.Assert (!Microsoft.ThreadPool.UseMicrosoftThreadPool); - _waitObject = waitObject; - _callback = callback; - _state = state; - _timeout = timeout; - _executeOnlyOnce = executeOnlyOnce; - _finalEvent = null; - _cancelEvent = new ManualResetEvent (false); - _callsInProcess = 0; - _unregistered = false; - } - - internal void SetHandle(IntPtr handle) - { - Contract.Assert (Microsoft.ThreadPool.UseMicrosoftThreadPool); - internalRegisteredWait.SetHandle(handle); - } - - [System.Security.SecurityCritical] // auto-generated - internal void SetWaitObject(WaitHandle waitObject) - { - Contract.Assert (Microsoft.ThreadPool.UseMicrosoftThreadPool); - internalRegisteredWait.SetWaitObject(waitObject); - } - - internal void Wait (object state) - { - Contract.Assert (!Microsoft.ThreadPool.UseMicrosoftThreadPool); - - try { - WaitHandle[] waits = new WaitHandle[] {_waitObject, _cancelEvent}; - do { - int signal = WaitHandle.WaitAny (waits, _timeout, false); - if (!_unregistered) { - lock (this) { _callsInProcess++; } - ThreadPool.QueueUserWorkItem (new WaitCallback (DoCallBack), (signal == WaitHandle.WaitTimeout)); - } - } while (!_unregistered && !_executeOnlyOnce); - } catch { - } - - lock (this) { - _unregistered = true; - if (_callsInProcess == 0 && _finalEvent != null) - NativeEventCalls.SetEvent_internal (_finalEvent.Handle); - } - } - - private void DoCallBack (object timedOut) - { - Contract.Assert (!Microsoft.ThreadPool.UseMicrosoftThreadPool); - - if (_callback != null) { - try { - _callback (_state, (bool)timedOut); - } catch { - } - } - - lock (this) { - _callsInProcess--; - if (_unregistered && _callsInProcess == 0 && _finalEvent != null) - NativeEventCalls.SetEvent_internal (_finalEvent.Handle); - } - } - - [System.Security.SecuritySafeCritical] // auto-generated - [System.Runtime.InteropServices.ComVisible(true)] - // This is the only public method on this class - public bool Unregister(WaitHandle waitObject) - { - if (Microsoft.ThreadPool.UseMicrosoftThreadPool) { - return internalRegisteredWait.Unregister(waitObject); - } else { - lock (this) { - if (_unregistered) - return false; - _finalEvent = waitObject; - _unregistered = true; - _cancelEvent.Set(); - return true; - } - } - } - } } namespace System.Threading.Microsoft @@ -1089,6 +973,7 @@ namespace System.Threading.Microsoft } } +#if !MONO internal sealed class RegisteredWaitHandleSafe : CriticalFinalizerObject { private static IntPtr InvalidHandle @@ -1267,6 +1152,42 @@ namespace System.Threading.Microsoft private static extern bool UnregisterWaitNative(IntPtr handle, SafeHandle waitObject); } + [System.Runtime.InteropServices.ComVisible(true)] +#if FEATURE_REMOTING + public sealed class RegisteredWaitHandle : MarshalByRefObject { +#else // FEATURE_REMOTING + public sealed class RegisteredWaitHandle { +#endif // FEATURE_REMOTING + private RegisteredWaitHandleSafe internalRegisteredWait; + + internal RegisteredWaitHandle() + { + internalRegisteredWait = new RegisteredWaitHandleSafe(); + } + + internal void SetHandle(IntPtr handle) + { + internalRegisteredWait.SetHandle(handle); + } + + [System.Security.SecurityCritical] // auto-generated + internal void SetWaitObject(WaitHandle waitObject) + { + internalRegisteredWait.SetWaitObject(waitObject); + } + + [System.Security.SecuritySafeCritical] // auto-generated + [System.Runtime.InteropServices.ComVisible(true)] + // This is the only public method on this class + public bool Unregister( + WaitHandle waitObject // object to be notified when all callbacks to delegates have completed + ) + { + return internalRegisteredWait.Unregister(waitObject); + } + } +#endif // !MONO + // // This type is necessary because VS 2010's debugger looks for a method named _ThreadPoolWaitCallbacck.PerformWaitCallback // on the stack to determine if a thread is a ThreadPool thread or not. We have a better way to do this for .NET 4.5, but @@ -1540,6 +1461,7 @@ namespace System.Threading.Microsoft bool compressStack ) { +#if !MONO #if FEATURE_REMOTING if (RemotingServices.IsTransparentProxy(waitObject)) throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_WaitOnTransparentProxy")); @@ -1569,6 +1491,19 @@ namespace System.Threading.Microsoft throw new ArgumentNullException("WaitOrTimerCallback"); } return registeredWaitHandle; +#else + if (waitObject == null) + throw new ArgumentNullException ("waitObject"); + if (callBack == null) + throw new ArgumentNullException ("callBack"); + if (millisecondsTimeOutInterval != Timeout.UnsignedInfinite && millisecondsTimeOutInterval > Int32.MaxValue) + throw new NotSupportedException ("Timeout is too big. Maximum is Int32.MaxValue"); + + RegisteredWaitHandle waiter = new RegisteredWaitHandle (waitObject, callBack, state, new TimeSpan (0, 0, 0, 0, (int) millisecondsTimeOutInterval), executeOnlyOnce); + QueueUserWorkItem (new WaitCallback (waiter.Wait), null); + + return waiter; +#endif } @@ -1586,7 +1521,7 @@ namespace System.Threading.Microsoft throw new ArgumentOutOfRangeException("millisecondsTimeOutInterval", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1")); Contract.EndContractBlock(); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; - return RegisterWaitForSingleObject(waitObject,callBack,state,(UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,true); + return RegisterWaitForSingleObject(waitObject,callBack,state,millisecondsTimeOutInterval == Timeout.Infinite ? Timeout.UnsignedInfinite : (UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,true); } [System.Security.SecurityCritical] // auto-generated_required @@ -1603,7 +1538,7 @@ namespace System.Threading.Microsoft throw new ArgumentOutOfRangeException("millisecondsTimeOutInterval", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1")); Contract.EndContractBlock(); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; - return RegisterWaitForSingleObject(waitObject,callBack,state,(UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,false); + return RegisterWaitForSingleObject(waitObject,callBack,state,millisecondsTimeOutInterval == Timeout.Infinite ? Timeout.UnsignedInfinite : (UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,false); } [System.Security.SecuritySafeCritical] // auto-generated @@ -1620,7 +1555,7 @@ namespace System.Threading.Microsoft throw new ArgumentOutOfRangeException("millisecondsTimeOutInterval", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1")); Contract.EndContractBlock(); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; - return RegisterWaitForSingleObject(waitObject,callBack,state,(UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,true); + return RegisterWaitForSingleObject(waitObject,callBack,state,millisecondsTimeOutInterval == Timeout.Infinite ? Timeout.UnsignedInfinite : (UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,true); } [System.Security.SecurityCritical] // auto-generated_required @@ -1637,7 +1572,7 @@ namespace System.Threading.Microsoft throw new ArgumentOutOfRangeException("millisecondsTimeOutInterval", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegOrNegative1")); Contract.EndContractBlock(); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; - return RegisterWaitForSingleObject(waitObject,callBack,state,(UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,false); + return RegisterWaitForSingleObject(waitObject,callBack,state,millisecondsTimeOutInterval == Timeout.Infinite ? Timeout.UnsignedInfinite : (UInt32)millisecondsTimeOutInterval,executeOnlyOnce,ref stackMark,false); } [System.Security.SecuritySafeCritical] // auto-generated diff --git a/external/referencesource/mscorlib/system/type.cs b/external/referencesource/mscorlib/system/type.cs index 38d9d6abff..10a135f1ba 100644 --- a/external/referencesource/mscorlib/system/type.cs +++ b/external/referencesource/mscorlib/system/type.cs @@ -39,7 +39,7 @@ namespace System { #if CONTRACTS_FULL [ContractClass(typeof(TypeContracts))] #endif - public abstract class Type : MemberInfo, _Type, IReflect + public abstract partial class Type : MemberInfo, _Type, IReflect { // // System.Type is appdomain agile type. Appdomain agile types cannot have precise static constructors. Make @@ -94,7 +94,7 @@ namespace System { { return base.GetType(); } - +#if !MONO [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public static Type GetType(String typeName, bool throwOnError, bool ignoreCase) { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; @@ -106,7 +106,7 @@ namespace System { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; Type t = RuntimeType.GetType(typeName, throwOnError, false, false, ref stackMark); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && t != null) { FrameworkEventSource.Log.TypeGetType(t.GetFullNameForEtw()); @@ -120,7 +120,7 @@ namespace System { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; Type t = RuntimeType.GetType(typeName, false, false, false, ref stackMark); -#if !FEATURE_CORECLR +#if !FEATURE_CORECLR && !MONO if (FrameworkEventSource.IsInitialized && FrameworkEventSource.Log.IsEnabled(EventLevel.Informational, FrameworkEventSource.Keywords.DynamicTypeUsage) && t != null) { FrameworkEventSource.Log.TypeGetType(t.GetFullNameForEtw()); @@ -129,7 +129,7 @@ namespace System { return t; } - +#endif #if !FEATURE_CORECLR [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public static Type GetType( @@ -164,21 +164,21 @@ namespace System { return TypeNameParser.GetType(typeName, assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark); } #endif //!FEATURE_CORECLR - +#if !MONO [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable public static Type ReflectionOnlyGetType(String typeName, bool throwIfNotFound, bool ignoreCase) { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return RuntimeType.GetType(typeName, throwIfNotFound, ignoreCase, true /*reflectionOnly*/, ref stackMark); } - +#endif public virtual Type MakePointerType() { throw new NotSupportedException(); } public virtual StructLayoutAttribute StructLayoutAttribute { get { throw new NotSupportedException(); } } public virtual Type MakeByRefType() { throw new NotSupportedException(); } public virtual Type MakeArrayType() { throw new NotSupportedException(); } public virtual Type MakeArrayType(int rank) { throw new NotSupportedException(); } -#if FEATURE_COMINTEROP +#if FEATURE_COMINTEROP || MONO_COM //////////////////////////////////////////////////////////////////////////////// // This will return a class based upon the progID. This is provided for // COM classic support. Program ID's are not used in COM+ because they @@ -341,11 +341,18 @@ namespace System { return InvokeMember(name,invokeAttr,binder,target,args,null,null,null); } - +#if MONO + // Workaround for JIT bug with bad VTable lookup + // + // MemberInfo mi = typeof (System.DBNull); + // System.Console.WriteLine (mi.Module); + // + public override abstract Module Module { get; } +#else // Module Property associated with a class. // _Type.Module public new abstract Module Module { get; } - +#endif // Assembly Property associated with a class. public abstract Assembly Assembly { [Pure] @@ -377,7 +384,7 @@ namespace System { return new RuntimeTypeHandle((RuntimeType)o.GetType()); } - +#if !MONO // Given a class handle, this will return the class for that handle. [System.Security.SecurityCritical] [ResourceExposure(ResourceScope.None)] @@ -389,7 +396,7 @@ namespace System { [ResourceExposure(ResourceScope.None)] [MethodImpl(MethodImplOptions.InternalCall)] public static extern Type GetTypeFromHandle(RuntimeTypeHandle handle); - +#endif // Return the fully qualified name. The name does contain the namespace. public abstract String FullName { @@ -1008,10 +1015,13 @@ namespace System { [Pure] get { +#if !MONO + // .NET has unmanaged version of exactly same managed + // code bellow RuntimeType rt = this as RuntimeType; if (rt != null) return RuntimeTypeHandle.IsVisible(rt); - +#endif if (IsGenericParameter) return true; @@ -1284,7 +1294,7 @@ namespace System { get {return IsCOMObjectImpl();} } -#if FEATURE_COMINTEROP +#if FEATURE_COMINTEROP || MONO_COM internal bool IsWindowsRuntimeObject { [Pure] get { return IsWindowsRuntimeObjectImpl(); } @@ -1351,7 +1361,7 @@ namespace System { // Protected routine to determine if this class represents a COM object abstract protected bool IsCOMObjectImpl(); -#if FEATURE_COMINTEROP +#if FEATURE_COMINTEROP || MONO_COM // Protected routine to determine if this class represents a Windows Runtime object virtual internal bool IsWindowsRuntimeObjectImpl() { throw new NotImplementedException(); @@ -1854,6 +1864,17 @@ namespace System { return (Object.ReferenceEquals(this.UnderlyingSystemType, o.UnderlyingSystemType)); } +#if MONO + public static bool operator == (Type left, Type right) + { + return object.ReferenceEquals (left, right); + } + + public static bool operator != (Type left, Type right) + { + return !object.ReferenceEquals (left, right); + } +#else #if !FEATURE_CORECLR [System.Security.SecuritySafeCritical] [Pure] @@ -1867,6 +1888,7 @@ namespace System { [MethodImplAttribute(MethodImplOptions.InternalCall)] public static extern bool operator !=(Type left, Type right); #endif // !FEATURE_CORECLR +#endif #if !FEATURE_CORECLR [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] diff --git a/external/referencesource/mscorlib/system/typedreference.cs b/external/referencesource/mscorlib/system/typedreference.cs index a20f71a387..e8191ede61 100644 --- a/external/referencesource/mscorlib/system/typedreference.cs +++ b/external/referencesource/mscorlib/system/typedreference.cs @@ -20,6 +20,9 @@ namespace System { [System.Runtime.InteropServices.ComVisible(true)] public struct TypedReference { +#if MONO + RuntimeTypeHandle type; +#endif private IntPtr Value; private IntPtr Type; @@ -61,6 +64,9 @@ namespace System { targetType = fieldType; } +#if MONO + return MakeTypedReferenceInternal (target, flds); +#else TypedReference result = new TypedReference (); // reference to TypedReference is banned, so have to pass result as pointer @@ -69,14 +75,18 @@ namespace System { InternalMakeTypedReference(&result, target, fields, targetType); } return result; +#endif } [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.None)] [MethodImplAttribute(MethodImplOptions.InternalCall)] +#if MONO + extern static TypedReference MakeTypedReferenceInternal (object target, FieldInfo[] fields); +#else // reference to TypedReference is banned, so have to pass result as pointer private unsafe static extern void InternalMakeTypedReference(void* result, Object target, IntPtr[] flds, RuntimeType lastFieldType); - +#endif public override int GetHashCode() { if (Type == IntPtr.Zero) @@ -124,7 +134,11 @@ namespace System { [CLSCompliant(false)] public unsafe static void SetTypedReference(TypedReference target, Object value) { +#if MONO + throw new NotImplementedException ("SetTypedReference"); +#else InternalSetTypedReference(&target, value); +#endif } [System.Security.SecurityCritical] // auto-generated diff --git a/libgc/aclocal.m4 b/libgc/aclocal.m4 index 7e11aa8638..da7bbe754a 100644 --- a/libgc/aclocal.m4 +++ b/libgc/aclocal.m4 @@ -593,7 +593,8 @@ to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi -fi]) +fi +]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further diff --git a/libgc/config.guess b/libgc/config.guess index b79252d6b1..1f5c50c0d1 100755 --- a/libgc/config.guess +++ b/libgc/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2014 Free Software Foundation, Inc. -timestamp='2013-06-10' +timestamp='2014-03-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,7 +149,7 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -826,7 +826,7 @@ EOF *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -969,10 +969,10 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -1260,16 +1260,26 @@ EOF if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; @@ -1361,154 +1371,6 @@ EOF exit ;; esac -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - cat >&2 <." version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -265,6 +265,7 @@ case $basic_machine in | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -282,8 +283,10 @@ case $basic_machine in | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -295,11 +298,11 @@ case $basic_machine in | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ @@ -324,7 +327,7 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -381,6 +384,7 @@ case $basic_machine in | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -400,8 +404,10 @@ case $basic_machine in | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -413,6 +419,7 @@ case $basic_machine in | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ @@ -822,6 +829,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -1367,14 +1378,14 @@ case $os in | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1592,9 +1603,6 @@ case $basic_machine in mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;; diff --git a/libgc/configure.REMOVED.git-id b/libgc/configure.REMOVED.git-id index 3a004f6aeb..0e440265b3 100644 --- a/libgc/configure.REMOVED.git-id +++ b/libgc/configure.REMOVED.git-id @@ -1 +1 @@ -2f526024d2da61894c7ed648a1207722cbb90688 \ No newline at end of file +822f530520cc4202fc04a4668b77b1de1215fdff \ No newline at end of file diff --git a/libgc/ltmain.sh.REMOVED.git-id b/libgc/ltmain.sh.REMOVED.git-id index a456f5251e..f6476aa89a 100644 --- a/libgc/ltmain.sh.REMOVED.git-id +++ b/libgc/ltmain.sh.REMOVED.git-id @@ -1 +1 @@ -a356acafa4548959e97355d1e8044b7201661754 \ No newline at end of file +bffda54187af4d101157c43c6c6d26dd735e51d3 \ No newline at end of file diff --git a/ltmain.sh.REMOVED.git-id b/ltmain.sh.REMOVED.git-id index a456f5251e..f6476aa89a 100644 --- a/ltmain.sh.REMOVED.git-id +++ b/ltmain.sh.REMOVED.git-id @@ -1 +1 @@ -a356acafa4548959e97355d1e8044b7201661754 \ No newline at end of file +bffda54187af4d101157c43c6c6d26dd735e51d3 \ No newline at end of file diff --git a/mcs/Makefile b/mcs/Makefile index cbcfdcc3e0..b94a7c82d6 100644 --- a/mcs/Makefile +++ b/mcs/Makefile @@ -12,7 +12,7 @@ monotouch_runtime_SUBDIRS := build class xammac_SUBDIRS := build class mobile_SUBDIRS := build class mobile_static_SUBDIRS := build class -net_4_0_SUBDIRS := build class +binary_reference_assemblies_SUBDIRS := build class net_4_5_SUBDIRS := build mcs class nunit24 ilasm tools tests errors docs xbuild_12_SUBDIRS := build class tools/xbuild xbuild_14_SUBDIRS := build class tools/xbuild @@ -30,7 +30,7 @@ dir-check: # fun specialty targets -PROFILES = net_4_5 net_4_0 xbuild_12 xbuild_14 +PROFILES = net_4_5 binary_reference_assemblies xbuild_12 xbuild_14 .PHONY: all-profiles $(STD_TARGETS:=-profiles) all-profiles $(STD_TARGETS:=-profiles): %-profiles: profiles-do--% @@ -51,7 +51,7 @@ profiles-do--run-test: _boot_ = all clean install $(_boot_:%=profile-do--xbuild_14--%): profile-do--xbuild_14--%: profile-do--net_4_5--% $(_boot_:%=profile-do--xbuild_12--%): profile-do--xbuild_12--%: profile-do--net_4_5--% -$(_boot_:%=profile-do--net_4_0--%): profile-do--net_4_0--%: profile-do--build--% +$(_boot_:%=profile-do--binary_reference_assemblies--%): profile-do--binary_reference_assemblies--%: profile-do--build--% $(_boot_:%=profile-do--net_4_5--%): profile-do--net_4_5--%: profile-do--build--% $(_boot_:%=profile-do--monodroid--%): profile-do--monodroid--%: profile-do--build--% $(_boot_:%=profile-do--monotouch--%): profile-do--monotouch--%: profile-do--build--% diff --git a/mcs/build/Makefile b/mcs/build/Makefile index 8ca1e7c7fa..e6d2d0a68a 100644 --- a/mcs/build/Makefile +++ b/mcs/build/Makefile @@ -18,7 +18,7 @@ PLATFORMS = darwin linux win32 PROFILES = \ basic \ build \ - net_4_0 \ + binary_reference_assemblies \ net_4_5 \ xbuild_12 \ xbuild_14 diff --git a/mcs/build/common/Consts.cs b/mcs/build/common/Consts.cs index d2aecf4c57..c63ff16cc1 100644 --- a/mcs/build/common/Consts.cs +++ b/mcs/build/common/Consts.cs @@ -34,7 +34,7 @@ static class Consts // Use these assembly version constants to make code more maintainable. // - public const string MonoVersion = "4.0.0.0"; + public const string MonoVersion = "4.0.1.0"; public const string MonoCompany = "Mono development team"; public const string MonoProduct = "Mono Common Language Infrastructure"; public const string MonoCopyright = "(c) Various Mono authors"; diff --git a/mcs/build/profiles/binary_reference_assemblies.make b/mcs/build/profiles/binary_reference_assemblies.make new file mode 100644 index 0000000000..d50e674b98 --- /dev/null +++ b/mcs/build/profiles/binary_reference_assemblies.make @@ -0,0 +1,7 @@ +# -*- makefile -*- + +profile-check: + @: + +NO_BUILD = yes +NO_TEST = yes diff --git a/mcs/build/profiles/net_4_0.make b/mcs/build/profiles/net_4_0.make deleted file mode 100644 index 83e22c4dcb..0000000000 --- a/mcs/build/profiles/net_4_0.make +++ /dev/null @@ -1,12 +0,0 @@ -# -*- makefile -*- - -profile-check: - @: - -FRAMEWORK_VERSION = 4.0 -XBUILD_VERSION = 4.0 - -LIBRARY_INSTALL_DIR = $(mono_libdir)/mono/$(FRAMEWORK_VERSION) - -NO_BUILD = yes -NO_TEST = yes diff --git a/mcs/class/Makefile b/mcs/class/Makefile index 8200c5d5e5..2eb6c03954 100644 --- a/mcs/class/Makefile +++ b/mcs/class/Makefile @@ -217,7 +217,7 @@ monotouch_runtime_SUBDIRS := $(monotouch_runtime_dirs) mobile_static_SUBDIRS := $(mobile_static_dirs) mobile_SUBDIRS := $(mobile_dynamic_dirs) xammac_SUBDIRS := $(xammac_dirs) -net_4_0_SUBDIRS := reference-assemblies +binary_reference_assemblies_SUBDIRS := reference-assemblies net_4_5_SUBDIRS := $(net_4_5_dirs) $(xbuild_4_0_dirs) aot-compiler xbuild_12_SUBDIRS := $(xbuild_4_0_dirs) xbuild_14_SUBDIRS := $(xbuild_4_0_dirs) diff --git a/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs b/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs index d8a60be17a..a114aa0ffe 100644 --- a/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs +++ b/mcs/class/System.Net.Http/System.Net.Http.Headers/HttpHeaders.cs @@ -350,10 +350,17 @@ namespace System.Net.Http.Headers sb.Append (entry.Key); sb.Append (": "); + string separator = ","; + HeaderInfo headerInfo; + if (known_headers.TryGetValue (entry.Key, out headerInfo) && headerInfo.AllowsMany) + separator = headerInfo.Separator; + bool first = true; foreach (var v in entry.Value) { - if (!first) - sb.Append (", "); + if (!first) { + sb.Append (separator); + sb.Append (" "); + } sb.Append (v); first = false; diff --git a/mcs/class/System.Net.Http/Test/System.Net.Http.Headers/HttpHeadersTest.cs b/mcs/class/System.Net.Http/Test/System.Net.Http.Headers/HttpHeadersTest.cs index cae4a65c82..9839d46734 100644 --- a/mcs/class/System.Net.Http/Test/System.Net.Http.Headers/HttpHeadersTest.cs +++ b/mcs/class/System.Net.Http/Test/System.Net.Http.Headers/HttpHeadersTest.cs @@ -147,5 +147,13 @@ namespace MonoTests.System.Net.Http.Headers Assert.AreEqual ("aa: v, v\r\nx: v\r\n", headers.ToString ()); } + + [Test] + public void ToString_DifferentSeparator () + { + headers.Add ("User-Agent", "MyApp/1.0.0.0 (iOS; 7.1.2; fr_FR) (Apple; iPhone3,1)"); + + Assert.AreEqual ("User-Agent: MyApp/1.0.0.0 (iOS; 7.1.2; fr_FR) (Apple; iPhone3,1)\r\n", headers.ToString ()); + } } } diff --git a/mcs/class/corlib/System.Runtime.InteropServices/DefaultDllImportSearchPathsAttribute.cs b/mcs/class/corlib/System.Runtime.InteropServices/DefaultDllImportSearchPathsAttribute.cs new file mode 100644 index 0000000000..863a1f0fed --- /dev/null +++ b/mcs/class/corlib/System.Runtime.InteropServices/DefaultDllImportSearchPathsAttribute.cs @@ -0,0 +1,42 @@ +// +// DefaultDllImportSearchPathsAttribute.cs +// +// Authors: +// Marek Safar +// +// Copyright (C) 2015 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. +// + +namespace System.Runtime.InteropServices +{ + [AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Method, AllowMultiple = false)] + [System.Runtime.InteropServices.ComVisible (false)] + public sealed class DefaultDllImportSearchPathsAttribute : Attribute + { + public DefaultDllImportSearchPathsAttribute(DllImportSearchPath paths) + { + Paths = paths; + } + + public DllImportSearchPath Paths { get; private set; } + } +} \ No newline at end of file diff --git a/mcs/class/corlib/System.Runtime.InteropServices/DllImportSearchPath.cs b/mcs/class/corlib/System.Runtime.InteropServices/DllImportSearchPath.cs new file mode 100644 index 0000000000..9bfa505ceb --- /dev/null +++ b/mcs/class/corlib/System.Runtime.InteropServices/DllImportSearchPath.cs @@ -0,0 +1,42 @@ +// +// DllImportSearchPath.cs +// +// Authors: +// Marek Safar +// +// Copyright (C) 2015 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. +// + +namespace System.Runtime.InteropServices +{ + [Flags] + public enum DllImportSearchPath + { + UseDllDirectoryForDependencies = 0x100, + ApplicationDirectory = 0x200, + UserDirectories = 0x400, + System32 = 0x800, + SafeDirectories = 0x1000, + AssemblyDirectory = 0x2, + LegacyBehavior = 0x0 + } +} \ No newline at end of file diff --git a/mcs/class/corlib/System/TimeZoneInfo.cs b/mcs/class/corlib/System/TimeZoneInfo.cs index 5562b8bf49..e6765bcb71 100644 --- a/mcs/class/corlib/System/TimeZoneInfo.cs +++ b/mcs/class/corlib/System/TimeZoneInfo.cs @@ -229,6 +229,18 @@ namespace System } #endif + private static bool TryAddTicks (DateTime date, long ticks, out DateTime result, DateTimeKind kind = DateTimeKind.Unspecified) + { + var resultTicks = date.Ticks + ticks; + if (resultTicks < DateTime.MinValue.Ticks || resultTicks > DateTime.MaxValue.Ticks) { + result = default (DateTime); + return false; + } + + result = new DateTime (resultTicks, kind); + return true; + } + public static void ClearCachedData () { local = null; @@ -276,17 +288,13 @@ namespace System { if (destinationTimeZone == null) throw new ArgumentNullException("destinationTimeZone"); - + var utcDateTime = dateTimeOffset.UtcDateTime; - AdjustmentRule rule = destinationTimeZone.GetApplicableRule (utcDateTime); - - if (rule != null && destinationTimeZone.IsDaylightSavingTime(utcDateTime)) { - var offset = destinationTimeZone.BaseUtcOffset + rule.DaylightDelta; - return new DateTimeOffset(DateTime.SpecifyKind(utcDateTime, DateTimeKind.Unspecified) + offset, offset); - } - else { - return new DateTimeOffset(DateTime.SpecifyKind(utcDateTime, DateTimeKind.Unspecified) + destinationTimeZone.BaseUtcOffset, destinationTimeZone.BaseUtcOffset); - } + + bool isDst; + var utcOffset = destinationTimeZone.GetUtcOffset(utcDateTime, out isDst); + + return new DateTimeOffset(DateTime.SpecifyKind(utcDateTime, DateTimeKind.Unspecified) + utcOffset, utcOffset); } public static DateTime ConvertTimeBySystemTimeZoneId (DateTime dateTime, string destinationTimeZoneId) @@ -311,19 +319,16 @@ namespace System if (this == TimeZoneInfo.Utc) return DateTime.SpecifyKind (dateTime, DateTimeKind.Utc); - - //FIXME: do not rely on DateTime implementation ! - if (this == TimeZoneInfo.Local) - { - return dateTime.ToLocalTime (); - } + var utcOffset = GetUtcOffset (dateTime); - AdjustmentRule rule = GetApplicableRule (dateTime); - if (rule != null && IsDaylightSavingTime (DateTime.SpecifyKind (dateTime, DateTimeKind.Utc))) - return DateTime.SpecifyKind (dateTime + BaseUtcOffset + rule.DaylightDelta , DateTimeKind.Unspecified); - else - return DateTime.SpecifyKind (dateTime + BaseUtcOffset, DateTimeKind.Unspecified); + var kind = (this == TimeZoneInfo.Local)? DateTimeKind.Local : DateTimeKind.Unspecified; + + DateTime result; + if (!TryAddTicks (dateTime, utcOffset.Ticks, out result, kind)) + return DateTime.SpecifyKind (DateTime.MaxValue, kind); + + return result; } public static DateTime ConvertTimeFromUtc (DateTime dateTime, TimeZoneInfo destinationTimeZone) @@ -371,22 +376,14 @@ namespace System if (dateTime.Kind == DateTimeKind.Utc) return dateTime; - if (sourceTimeZone.IsAmbiguousTime (dateTime) || !sourceTimeZone.IsDaylightSavingTime (dateTime)) { - var ticks = dateTime.Ticks - sourceTimeZone.BaseUtcOffset.Ticks; - if (ticks < DateTime.MinValue.Ticks) - ticks = DateTime.MinValue.Ticks; - else if (ticks > DateTime.MaxValue.Ticks) - ticks = DateTime.MaxValue.Ticks; + bool isDst; + var utcOffset = sourceTimeZone.GetUtcOffset (dateTime, out isDst); - return new DateTime (ticks, DateTimeKind.Utc); - } - - AdjustmentRule rule = sourceTimeZone.GetApplicableRule (dateTime); - if (rule != null) - return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset - rule.DaylightDelta, DateTimeKind.Utc); - else - return DateTime.SpecifyKind (dateTime - sourceTimeZone.BaseUtcOffset, DateTimeKind.Utc); - + DateTime utcDateTime; + if (!TryAddTicks (dateTime, -utcOffset.Ticks, out utcDateTime, DateTimeKind.Utc)) + return DateTime.SpecifyKind (DateTime.MinValue, DateTimeKind.Utc); + + return utcDateTime; } static internal TimeSpan GetDateTimeNowUtcOffsetFromUtc(DateTime time, out Boolean isAmbiguousLocalDst) @@ -722,23 +719,22 @@ namespace System tz = TimeZoneInfo.Local; bool isTzDst; - var tzOffset = GetUtcOffset (dateTime, tz, out isTzDst); + var tzOffset = GetUtcOffsetHelper (dateTime, tz, out isTzDst); if (tz == this) { isDST = isTzDst; return tzOffset; } - var utcTicks = dateTime.Ticks - tzOffset.Ticks; - if (utcTicks < 0 || utcTicks > DateTime.MaxValue.Ticks) + DateTime utcDateTime; + if (!TryAddTicks (dateTime, -tzOffset.Ticks, out utcDateTime, DateTimeKind.Utc)) return BaseUtcOffset; - var utcDateTime = new DateTime (utcTicks, DateTimeKind.Utc); - - return GetUtcOffset (utcDateTime, this, out isDST); + return GetUtcOffsetHelper (utcDateTime, this, out isDST); } - private static TimeSpan GetUtcOffset (DateTime dateTime, TimeZoneInfo tz, out bool isDST) + // This is an helper method used by the method above, do not use this on its own. + private static TimeSpan GetUtcOffsetHelper (DateTime dateTime, TimeZoneInfo tz, out bool isDST) { if (dateTime.Kind == DateTimeKind.Local && tz != TimeZoneInfo.Local) throw new Exception (); @@ -762,20 +758,16 @@ namespace System return tz.BaseUtcOffset; } - var stdTicks = dateTime.Ticks - tz.BaseUtcOffset.Ticks; - if (stdTicks < 0 || stdTicks > DateTime.MaxValue.Ticks) + DateTime stdUtcDateTime; + if (!TryAddTicks (dateTime, -tz.BaseUtcOffset.Ticks, out stdUtcDateTime, DateTimeKind.Utc)) return tz.BaseUtcOffset; - var stdUtcDateTime = new DateTime (stdTicks, DateTimeKind.Utc); var tzRule = tz.GetApplicableRule (stdUtcDateTime); DateTime dstUtcDateTime = DateTime.MinValue; if (tzRule != null) { - var dstTicks = stdUtcDateTime.Ticks - tzRule.DaylightDelta.Ticks; - if (dstTicks < 0 || dstTicks > DateTime.MaxValue.Ticks) + if (!TryAddTicks (stdUtcDateTime, -tzRule.DaylightDelta.Ticks, out dstUtcDateTime, DateTimeKind.Utc)) return tz.BaseUtcOffset; - - dstUtcDateTime = new DateTime (dstTicks, DateTimeKind.Utc); } if (tzRule != null && tz.IsInDST (tzRule, stdUtcDateTime) && tz.IsInDST (tzRule, dstUtcDateTime)) { @@ -889,6 +881,23 @@ namespace System throw new NotImplementedException (); } + public bool IsInvalidTime (DateTime dateTime) + { + if (dateTime.Kind == DateTimeKind.Utc) + return false; + if (dateTime.Kind == DateTimeKind.Local && this != Local) + return false; + + AdjustmentRule rule = GetApplicableRule (dateTime); + if (rule != null) { + DateTime tpoint = TransitionPoint (rule.DaylightTransitionStart, dateTime.Year); + if (dateTime >= tpoint && dateTime < tpoint + rule.DaylightDelta) + return true; + } + + return false; + } + void IDeserializationCallback.OnDeserialization (object sender) { try { @@ -1019,10 +1028,13 @@ namespace System //Applicable rules are in standard time DateTime date = dateTime; - if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Local) - date = date.ToUniversalTime () + BaseUtcOffset; - else if (dateTime.Kind == DateTimeKind.Utc && this != TimeZoneInfo.Utc) - date = date + BaseUtcOffset; + if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Local) { + if (!TryAddTicks (date.ToUniversalTime (), BaseUtcOffset.Ticks, out date)) + return null; + } else if (dateTime.Kind == DateTimeKind.Utc && this != TimeZoneInfo.Utc) { + if (!TryAddTicks (date, BaseUtcOffset.Ticks, out date)) + return null; + } // get the date component of the datetime date = date.Date; @@ -1051,19 +1063,13 @@ namespace System DateTime date = dateTime; if (dateTime.Kind == DateTimeKind.Local && this != TimeZoneInfo.Local) { - var ticks = date.ToUniversalTime ().Ticks + BaseUtcOffset.Ticks; - if (ticks < DateTime.MinValue.Ticks || ticks > DateTime.MaxValue.Ticks) + if (!TryAddTicks (date.ToUniversalTime (), BaseUtcOffset.Ticks, out date, DateTimeKind.Utc)) return false; - - date = new DateTime (ticks, DateTimeKind.Utc); } if (dateTime.Kind != DateTimeKind.Utc) { - var ticks = date.Ticks - BaseUtcOffset.Ticks; - if (ticks < DateTime.MinValue.Ticks || ticks > DateTime.MaxValue.Ticks) + if (!TryAddTicks (date, -BaseUtcOffset.Ticks, out date, DateTimeKind.Utc)) return false; - - date = new DateTime (ticks, DateTimeKind.Utc); } for (var i = transitions.Count - 1; i >= 0; i--) { @@ -1199,6 +1205,14 @@ namespace System if (dst_end.Date == new DateTime (dst_end.Year, 1, 1) && dst_end.Year > dst_start.Year) dst_end -= new TimeSpan (24, 0, 0); + /* + * AdjustmentRule specifies a DST period that starts and ends within a year. + * When we have a DST period longer than a year, the generated AdjustmentRule may not be usable. + * Thus we fallback to the transitions. + */ + if (dst_start.AddYears (1) < dst_end) + storeTransition = true; + DateTime dateStart, dateEnd; if (dst_start.Month < 7) dateStart = new DateTime (dst_start.Year, 1, 1); @@ -1298,333 +1312,32 @@ namespace System } #region reference sources - // Shortcut for TimeZoneInfo.Local.GetUtcOffset - internal static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) - { - bool dst; - return Local.GetUtcOffset (dateTime, out dst); - } + // Shortcut for TimeZoneInfo.Local.GetUtcOffset + internal static TimeSpan GetLocalUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) + { + bool dst; + return Local.GetUtcOffset (dateTime, out dst); + } - internal TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) - { - bool dst; - return GetUtcOffset (dateTime, out dst); - } + internal TimeSpan GetUtcOffset(DateTime dateTime, TimeZoneInfoOptions flags) + { + bool dst; + return GetUtcOffset (dateTime, out dst); + } - // used by GetUtcOffsetFromUtc (DateTime.Now, DateTime.ToLocalTime) for max/min whole-day range checks - private static DateTime s_maxDateOnly = new DateTime(9999, 12, 31); - private static DateTime s_minDateOnly = new DateTime(1, 1, 2); + static internal TimeSpan GetUtcOffsetFromUtc (DateTime time, TimeZoneInfo zone, out Boolean isDaylightSavings, out Boolean isAmbiguousLocalDst) + { + isDaylightSavings = false; + isAmbiguousLocalDst = false; + TimeSpan baseOffset = zone.BaseUtcOffset; - static internal TimeSpan GetUtcOffsetFromUtc (DateTime time, TimeZoneInfo zone, out Boolean isDaylightSavings, out Boolean isAmbiguousLocalDst) - { - isDaylightSavings = false; - isAmbiguousLocalDst = false; - TimeSpan baseOffset = zone.BaseUtcOffset; - Int32 year; - AdjustmentRule rule; + if (zone.IsAmbiguousTime (time)) { + isAmbiguousLocalDst = true; + return baseOffset; + } - if (time > s_maxDateOnly) { - rule = zone.GetAdjustmentRuleForTime(DateTime.MaxValue); - year = 9999; - } - else if (time < s_minDateOnly) { - rule = zone.GetAdjustmentRuleForTime(DateTime.MinValue); - year = 1; - } - else { - DateTime targetTime = time + baseOffset; - year = time.Year; - rule = zone.GetAdjustmentRuleForTime(targetTime); - } - - if (rule != null) { - isDaylightSavings = GetIsDaylightSavingsFromUtc(time, year, zone.baseUtcOffset, rule, out isAmbiguousLocalDst); - baseOffset += (isDaylightSavings ? rule.DaylightDelta : TimeSpan.Zero /* */); - } - - return baseOffset; - } - - // assumes dateTime is in the current time zone's time - private AdjustmentRule GetAdjustmentRuleForTime(DateTime dateTime) { - if (adjustmentRules == null || adjustmentRules.Length == 0) { - return null; - } - -#if WINXP_AND_WIN2K3_SUPPORT - // On pre-Vista versions of Windows if you run "cmd /c date" or "cmd /c time" to update the system time - // the operating system doesn't pick up the correct time zone adjustment rule (it stays on the currently loaded rule). - // We need to use the OS API data in this scenario instead of the loaded adjustment rules from the registry for - // consistency. Otherwise DateTime.Now might not match the time displayed in the system tray. - if (!Environment.IsWindowsVistaOrAbove && s_cachedData.GetCorrespondingKind(this) == DateTimeKind.Local) { - return s_cachedData.GetOneYearLocalFromLocal(dateTime.Year).rule; - } -#endif - // Only check the whole-date portion of the dateTime - - // This is because the AdjustmentRule DateStart & DateEnd are stored as - // Date-only values {4/2/2006 - 10/28/2006} but actually represent the - // time span {4/2/2006@00:00:00.00000 - 10/28/2006@23:59:59.99999} - DateTime date = dateTime.Date; - - for (int i = 0; i < adjustmentRules.Length; i++) { - if (adjustmentRules[i].DateStart <= date && adjustmentRules[i].DateEnd >= date) { - return adjustmentRules[i]; - } - } - - return null; - } - - // - // GetIsDaylightSavingsFromUtc - - // - // Helper function that checks if a given dateTime is in Daylight Saving Time (DST) - // This function assumes the dateTime is in UTC and AdjustmentRule is in a different time zone - // - static private Boolean GetIsDaylightSavingsFromUtc(DateTime time, Int32 Year, TimeSpan utc, AdjustmentRule rule, out Boolean isAmbiguousLocalDst) { - isAmbiguousLocalDst = false; - - if (rule == null) { - return false; - } - - // Get the daylight changes for the year of the specified time. - TimeSpan offset = utc; /* */ - DaylightTime daylightTime = GetDaylightTime(Year, rule); - - // The start and end times represent the range of universal times that are in DST for that year. - // Within that there is an ambiguous hour, usually right at the end, but at the beginning in - // the unusual case of a negative daylight savings delta. - DateTime startTime = daylightTime.Start - offset; - DateTime endTime = daylightTime.End - offset - rule.DaylightDelta; /* */ - DateTime ambiguousStart; - DateTime ambiguousEnd; - if (daylightTime.Delta.Ticks > 0) { - ambiguousStart = endTime - daylightTime.Delta; - ambiguousEnd = endTime; - } else { - ambiguousStart = startTime; - ambiguousEnd = startTime - daylightTime.Delta; - } - - Boolean isDst = CheckIsDst(startTime, time, endTime); - - // See if the resulting local time becomes ambiguous. This must be captured here or the - // DateTime will not be able to round-trip back to UTC accurately. - if (isDst) { - isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd); - - if (!isAmbiguousLocalDst && ambiguousStart.Year != ambiguousEnd.Year) { - // there exists an extreme corner case where the start or end period is on a year boundary and - // because of this the comparison above might have been performed for a year-early or a year-later - // than it should have been. - DateTime ambiguousStartModified; - DateTime ambiguousEndModified; - try { - ambiguousStartModified = ambiguousStart.AddYears(1); - ambiguousEndModified = ambiguousEnd.AddYears(1); - isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd); - } - catch (ArgumentOutOfRangeException) {} - - if (!isAmbiguousLocalDst) { - try { - ambiguousStartModified = ambiguousStart.AddYears(-1); - ambiguousEndModified = ambiguousEnd.AddYears(-1); - isAmbiguousLocalDst = (time >= ambiguousStart && time < ambiguousEnd); - } - catch (ArgumentOutOfRangeException) {} - } - - } - } - - return isDst; - } - - - static private Boolean CheckIsDst(DateTime startTime, DateTime time, DateTime endTime) { - Boolean isDst; - - int startTimeYear = startTime.Year; - int endTimeYear = endTime.Year; - - if (startTimeYear != endTimeYear) { - endTime = endTime.AddYears(startTimeYear - endTimeYear); - } - - int timeYear = time.Year; - - if (startTimeYear != timeYear) { - time = time.AddYears(startTimeYear - timeYear); - } - - if (startTime > endTime) { - // In southern hemisphere, the daylight saving time starts later in the year, and ends in the beginning of next year. - // Note, the summer in the southern hemisphere begins late in the year. - isDst = (time < endTime || time >= startTime); - } - else { - // In northern hemisphere, the daylight saving time starts in the middle of the year. - isDst = (time >= startTime && time < endTime); - } - return isDst; - } - - // - // GetDaylightTime - - // - // Helper function that returns a DaylightTime from a year and AdjustmentRule - // - static private DaylightTime GetDaylightTime(Int32 year, AdjustmentRule rule) { - TimeSpan delta = rule.DaylightDelta; - DateTime startTime = TransitionTimeToDateTime(year, rule.DaylightTransitionStart); - DateTime endTime = TransitionTimeToDateTime(year, rule.DaylightTransitionEnd); - return new DaylightTime(startTime, endTime, delta); - } - - // - // TransitionTimeToDateTime - - // - // Helper function that converts a year and TransitionTime into a DateTime - // - static private DateTime TransitionTimeToDateTime(Int32 year, TransitionTime transitionTime) { - DateTime value; - DateTime timeOfDay = transitionTime.TimeOfDay; - - if (transitionTime.IsFixedDateRule) { - // create a DateTime from the passed in year and the properties on the transitionTime - - // if the day is out of range for the month then use the last day of the month - Int32 day = DateTime.DaysInMonth(year, transitionTime.Month); - - value = new DateTime(year, transitionTime.Month, (day < transitionTime.Day) ? day : transitionTime.Day, - timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond); - } - else { - if (transitionTime.Week <= 4) { - // - // Get the (transitionTime.Week)th Sunday. - // - value = new DateTime(year, transitionTime.Month, 1, - timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond); - - int dayOfWeek = (int)value.DayOfWeek; - int delta = (int)transitionTime.DayOfWeek - dayOfWeek; - if (delta < 0) { - delta += 7; - } - delta += 7 * (transitionTime.Week - 1); - - if (delta > 0) { - value = value.AddDays(delta); - } - } - else { - // - // If TransitionWeek is greater than 4, we will get the last week. - // - Int32 daysInMonth = DateTime.DaysInMonth(year, transitionTime.Month); - value = new DateTime(year, transitionTime.Month, daysInMonth, - timeOfDay.Hour, timeOfDay.Minute, timeOfDay.Second, timeOfDay.Millisecond); - - // This is the day of week for the last day of the month. - int dayOfWeek = (int)value.DayOfWeek; - int delta = dayOfWeek - (int)transitionTime.DayOfWeek; - if (delta < 0) { - delta += 7; - } - - if (delta > 0) { - value = value.AddDays(-delta); - } - } - } - return value; - } - - // - // IsInvalidTime - - // - // returns true when dateTime falls into a "hole in time". - // - public Boolean IsInvalidTime(DateTime dateTime) { - Boolean isInvalid = false; - - if ( (dateTime.Kind == DateTimeKind.Unspecified) - || (dateTime.Kind == DateTimeKind.Local && this == Local) ) { - - // only check Unspecified and (Local when this TimeZoneInfo instance is Local) - AdjustmentRule rule = GetAdjustmentRuleForTime(dateTime); - - - if (rule != null) { - DaylightTime daylightTime = GetDaylightTime(dateTime.Year, rule); - isInvalid = GetIsInvalidTime(dateTime, rule, daylightTime); - } - else { - isInvalid = false; - } - } - - return isInvalid; - } - - // - // GetIsInvalidTime - - // - // Helper function that checks if a given DateTime is in an invalid time ("time hole") - // A "time hole" occurs at a DST transition point when time jumps forward; - // For example, in Pacific Standard Time on Sunday, April 2, 2006 time jumps from - // 1:59:59.9999999 to 3AM. The time range 2AM to 2:59:59.9999999AM is the "time hole". - // A "time hole" is not limited to only occurring at the start of DST, and may occur at - // the end of DST as well. - // - static private Boolean GetIsInvalidTime(DateTime time, AdjustmentRule rule, DaylightTime daylightTime) { - Boolean isInvalid = false; - if (rule == null || rule.DaylightDelta == TimeSpan.Zero) { - return isInvalid; - } - - DateTime startInvalidTime; - DateTime endInvalidTime; - - // if at DST start we transition forward in time then there is an ambiguous time range at the DST end - if (rule.DaylightDelta < TimeSpan.Zero) { - startInvalidTime = daylightTime.End; - endInvalidTime = daylightTime.End - rule.DaylightDelta; /* */ - } - else { - startInvalidTime = daylightTime.Start; - endInvalidTime = daylightTime.Start + rule.DaylightDelta; /* */ - } - - isInvalid = (time >= startInvalidTime && time < endInvalidTime); - - if (!isInvalid && startInvalidTime.Year != endInvalidTime.Year) { - // there exists an extreme corner case where the start or end period is on a year boundary and - // because of this the comparison above might have been performed for a year-early or a year-later - // than it should have been. - DateTime startModifiedInvalidTime; - DateTime endModifiedInvalidTime; - try { - startModifiedInvalidTime = startInvalidTime.AddYears(1); - endModifiedInvalidTime = endInvalidTime.AddYears(1); - isInvalid = (time >= startModifiedInvalidTime && time < endModifiedInvalidTime); - } - catch (ArgumentOutOfRangeException) {} - - if (!isInvalid) { - try { - startModifiedInvalidTime = startInvalidTime.AddYears(-1); - endModifiedInvalidTime = endInvalidTime.AddYears(-1); - isInvalid = (time >= startModifiedInvalidTime && time < endModifiedInvalidTime); - } - catch (ArgumentOutOfRangeException) {} - } - } - return isInvalid; - } + return zone.GetUtcOffset (time, out isDaylightSavings); + } #endregion } diff --git a/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs b/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs index ebb0433c2a..a0389f27a0 100644 --- a/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs +++ b/mcs/class/corlib/Test/System.Threading/ManualResetEventSlimTests.cs @@ -54,7 +54,7 @@ namespace MonoTests.System.Threading public void Constructor_Defaults () { Assert.IsFalse (mre.IsSet, "#1"); - Assert.AreEqual (10, mre.SpinCount, "#2"); + Assert.AreEqual (Environment.ProcessorCount == 1 ? 1 : 10, mre.SpinCount, "#2"); } [Test] diff --git a/mcs/class/corlib/corlib.dll.sources b/mcs/class/corlib/corlib.dll.sources index 4b26ebaca5..768856c724 100644 --- a/mcs/class/corlib/corlib.dll.sources +++ b/mcs/class/corlib/corlib.dll.sources @@ -607,6 +607,8 @@ System.Runtime.InteropServices/CONNECTDATA.cs System.Runtime.InteropServices/CriticalHandle.cs System.Runtime.InteropServices/CurrencyWrapper.cs System.Runtime.InteropServices/DefaultCharSetAttribute.cs +System.Runtime.InteropServices/DllImportSearchPath.cs +System.Runtime.InteropServices/DefaultDllImportSearchPathsAttribute.cs System.Runtime.InteropServices/DESCKIND.cs System.Runtime.InteropServices/DispatchWrapper.cs System.Runtime.InteropServices/DISPPARAMS.cs diff --git a/mcs/class/lib/monolite/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite/Mono.Security.dll.REMOVED.git-id index 4708fe1b1c..a3f00f1655 100644 --- a/mcs/class/lib/monolite/Mono.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/Mono.Security.dll.REMOVED.git-id @@ -1 +1 @@ -49f816213be165022e8677532601a760171cde7a \ No newline at end of file +4816a33a1117da3f621fc172ae972cb88e983fe0 \ No newline at end of file diff --git a/mcs/class/lib/monolite/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite/System.Configuration.dll.REMOVED.git-id index 91102f291c..5396256772 100644 --- a/mcs/class/lib/monolite/System.Configuration.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/System.Configuration.dll.REMOVED.git-id @@ -1 +1 @@ -b0b5eee6071ded2ebd95521972c0df2c88e50deb \ No newline at end of file +d56b0642b5e7cef07830b8435781e7decd5a3c88 \ No newline at end of file diff --git a/mcs/class/lib/monolite/System.Core.dll.REMOVED.git-id b/mcs/class/lib/monolite/System.Core.dll.REMOVED.git-id index 430713b091..fc042dabff 100644 --- a/mcs/class/lib/monolite/System.Core.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/System.Core.dll.REMOVED.git-id @@ -1 +1 @@ -f5fb66b0084a9b19caf40eb6af8006e3ad5d086f \ No newline at end of file +f812e116ea4476a6400787d291a6c33982351043 \ No newline at end of file diff --git a/mcs/class/lib/monolite/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite/System.Security.dll.REMOVED.git-id index 0ddfdb854c..d606f24ae0 100644 --- a/mcs/class/lib/monolite/System.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/System.Security.dll.REMOVED.git-id @@ -1 +1 @@ -6914d5a4219e0c744f39061819064a11992c8c0d \ No newline at end of file +d5baf4466182688805ba46006f24dee0f2a58a7f \ No newline at end of file diff --git a/mcs/class/lib/monolite/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite/System.Xml.dll.REMOVED.git-id index f074943050..d2ed6bd250 100644 --- a/mcs/class/lib/monolite/System.Xml.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/System.Xml.dll.REMOVED.git-id @@ -1 +1 @@ -5904d2521471bbf55b59d880c2c2db4f8541eaf2 \ No newline at end of file +e634a26a89825c34d9fa548f211a6b2e1968da66 \ No newline at end of file diff --git a/mcs/class/lib/monolite/System.dll.REMOVED.git-id b/mcs/class/lib/monolite/System.dll.REMOVED.git-id index 732b8b8c78..7e5ec7cc2b 100644 --- a/mcs/class/lib/monolite/System.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/System.dll.REMOVED.git-id @@ -1 +1 @@ -918c2fe1f59932f25345576015dcb4587da4e712 \ No newline at end of file +45516bac994827703522453286f3a1c1b8d75b1b \ No newline at end of file diff --git a/mcs/class/lib/monolite/basic.exe.REMOVED.git-id b/mcs/class/lib/monolite/basic.exe.REMOVED.git-id index 375d900c8c..61a5ac93a6 100644 --- a/mcs/class/lib/monolite/basic.exe.REMOVED.git-id +++ b/mcs/class/lib/monolite/basic.exe.REMOVED.git-id @@ -1 +1 @@ -324b4f1564f360d9036eb9db709bd652ed7456e5 \ No newline at end of file +340def76e208dadff3d94c971334b503dee1dc4c \ No newline at end of file diff --git a/mcs/class/lib/monolite/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite/mscorlib.dll.REMOVED.git-id index a5a7456594..2aedee9539 100644 --- a/mcs/class/lib/monolite/mscorlib.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite/mscorlib.dll.REMOVED.git-id @@ -1 +1 @@ -0aebaa98e4bce0d7503d0ec21e5b1ce28078cd70 \ No newline at end of file +976d3a548faca8313dcbe8037ca0a8aa1d22b8da \ No newline at end of file diff --git a/mcs/class/reference-assemblies/Makefile b/mcs/class/reference-assemblies/Makefile index a14f96f208..e4b660ba5d 100644 --- a/mcs/class/reference-assemblies/Makefile +++ b/mcs/class/reference-assemblies/Makefile @@ -4,10 +4,16 @@ include ../../build/rules.make all-local: -install-local: - $(MKINSTALLDIRS) $(DESTDIR)$(LIBRARY_INSTALL_DIR) - $(INSTALL_LIB) ../../../external/binary-reference-assemblies/v4.0/* $(DESTDIR)$(LIBRARY_INSTALL_DIR) +PROFILE_DIR=$(DESTDIR)$(mono_libdir)/mono/ -DISTFILES = $(wildcard ../../../external/binary-reference-assemblies/v4.0/*) Makefile +install-local: + $(MKINSTALLDIRS) $(PROFILE_DIR)/2.0 + $(MKINSTALLDIRS) $(PROFILE_DIR)/3.5 + $(MKINSTALLDIRS) $(PROFILE_DIR)/4.0 + $(INSTALL_LIB) ../../../external/binary-reference-assemblies/v2.0/* $(PROFILE_DIR)/2.0 + $(INSTALL_LIB) ../../../external/binary-reference-assemblies/v3.5/* $(PROFILE_DIR)/3.5 + $(INSTALL_LIB) ../../../external/binary-reference-assemblies/v4.0/* $(PROFILE_DIR)/4.0 + +DISTFILES = $(wildcard ../../../external/binary-reference-assemblies/v4.0/*) $(wildcard ../../../external/binary-reference-assemblies/v3.5/*) $(wildcard ../../../external/binary-reference-assemblies/v2.0/*) Makefile dist-local: dist-default diff --git a/mcs/mcs/anonymous.cs b/mcs/mcs/anonymous.cs index 1063fb1b07..12bf992bbc 100644 --- a/mcs/mcs/anonymous.cs +++ b/mcs/mcs/anonymous.cs @@ -1920,17 +1920,16 @@ namespace Mono.CSharp { var delegate_method = method.Spec; if (storey != null && storey.MemberName.IsGeneric) { - TypeSpec t = storey.Instance.Type; - // // Mutate anonymous method instance type if we are in nested // hoisted generic anonymous method storey // if (ec.IsAnonymousStoreyMutateRequired) { - t = storey.Mutator.Mutate (t); + ec.Emit (OpCodes.Ldftn, delegate_method); + } else { + TypeSpec t = storey.Instance.Type; + ec.Emit (OpCodes.Ldftn, TypeBuilder.GetMethod (t.GetMetaInfo (), (MethodInfo) delegate_method.GetMetaInfo ())); } - - ec.Emit (OpCodes.Ldftn, TypeBuilder.GetMethod (t.GetMetaInfo (), (MethodInfo) delegate_method.GetMetaInfo ())); } else { if (delegate_method.IsGeneric) { TypeParameterSpec[] tparams; diff --git a/mcs/mcs/expression.cs.REMOVED.git-id b/mcs/mcs/expression.cs.REMOVED.git-id index 4841c3fc3c..a0156f36fe 100644 --- a/mcs/mcs/expression.cs.REMOVED.git-id +++ b/mcs/mcs/expression.cs.REMOVED.git-id @@ -1 +1 @@ -85c8f16902b8b89793cc1e76dfe930df4ce09f01 \ No newline at end of file +f4df8c9c44375d7f0307ed0c4fffedf1ce231ca6 \ No newline at end of file diff --git a/mcs/tests/test-anon-177.cs b/mcs/tests/test-anon-177.cs new file mode 100644 index 0000000000..cb31425b53 --- /dev/null +++ b/mcs/tests/test-anon-177.cs @@ -0,0 +1,25 @@ +using System; +using System.Linq; +using System.Collections.Generic; + +class X +{ + public static void Execute(TArg args) + { + Action a = () => { + List s = new List () { + "test" + }; + + object res = null; + var res2 = s.Select(acrl => acrl.Select(acr => res)).ToArray (); + }; + + a (); + } + + public static void Main () + { + Execute (null); + } +} \ No newline at end of file diff --git a/mcs/tests/test-null-operator-011.cs b/mcs/tests/test-null-operator-011.cs new file mode 100644 index 0000000000..9c116a48e6 --- /dev/null +++ b/mcs/tests/test-null-operator-011.cs @@ -0,0 +1,12 @@ +static class Crash +{ + static string GetFoo () + { + return null; + } + + static void Main () + { + (GetFoo ()?.ToLower ()).ToUpper (); + } +} diff --git a/mcs/tools/cil-strip/cilstrip.cs b/mcs/tools/cil-strip/cilstrip.cs index 4b56f2e16a..ec80b178ca 100644 --- a/mcs/tools/cil-strip/cilstrip.cs +++ b/mcs/tools/cil-strip/cilstrip.cs @@ -8,7 +8,6 @@ // using System; -using System.IO; using System.Reflection; using Mono.Cecil; @@ -17,7 +16,7 @@ namespace Mono.CilStripper { class Program { - static void Main (string [] args) + static int Main (string [] args) { Header (); @@ -35,11 +34,13 @@ namespace Mono.CilStripper { Console.WriteLine ("Assembly {0} stripped out into {1}", file, output); else Console.WriteLine ("Assembly {0} stripped", file); + return 0; } catch (TargetInvocationException tie) { Console.WriteLine ("Error: {0}", tie.InnerException); } catch (Exception e) { Console.WriteLine ("Error: {0}", e); } + return 1; } static void StripAssembly (AssemblyDefinition assembly, string output) diff --git a/mcs/tools/linker/Mono.Linker.Steps/SweepStep.cs b/mcs/tools/linker/Mono.Linker.Steps/SweepStep.cs index 9bd2bad934..d7be23ac9e 100644 --- a/mcs/tools/linker/Mono.Linker.Steps/SweepStep.cs +++ b/mcs/tools/linker/Mono.Linker.Steps/SweepStep.cs @@ -144,6 +144,16 @@ namespace Mono.Linker.Steps { scope = assembly.MainModule.Import (td).Scope; hash.Add (tr, scope); } + if (assembly.MainModule.HasExportedTypes) { + foreach (var et in assembly.MainModule.ExportedTypes) { + var td = et.Resolve (); + IMetadataScope scope = et.Scope; + if ((td != null) && Annotations.IsMarked (td)) { + scope = assembly.MainModule.Import (td).Scope; + hash.Add (td, scope); + } + } + } // Resolve everything first before updating scopes. // If we set the scope to null, then calling Resolve() on any of its diff --git a/mcs/tools/xbuild/Makefile b/mcs/tools/xbuild/Makefile index 05c24763cd..949f3e5966 100644 --- a/mcs/tools/xbuild/Makefile +++ b/mcs/tools/xbuild/Makefile @@ -41,8 +41,12 @@ install-bin-data: install-frameworks: $(MKINSTALLDIRS) $(DESTDIR)$(NETFRAMEWORK_DIR)/v$(FRAMEWORK_VERSION)/RedistList $(INSTALL_DATA) frameworks/net_$(FRAMEWORK_VERSION).xml $(DESTDIR)$(NETFRAMEWORK_DIR)/v$(FRAMEWORK_VERSION)/RedistList/FrameworkList.xml + $(MKINSTALLDIRS) $(DESTDIR)$(NETFRAMEWORK_DIR)/v2.0/RedistList + $(INSTALL_DATA) frameworks/net_2.0.xml $(DESTDIR)$(NETFRAMEWORK_DIR)/v2.0/RedistList/FrameworkList.xml $(MKINSTALLDIRS) $(DESTDIR)$(NETFRAMEWORK_DIR)/v3.0/RedistList $(INSTALL_DATA) frameworks/net_3.0.xml $(DESTDIR)$(NETFRAMEWORK_DIR)/v3.0/RedistList/FrameworkList.xml + $(MKINSTALLDIRS) $(DESTDIR)$(NETFRAMEWORK_DIR)/v3.5/RedistList + $(INSTALL_DATA) frameworks/net_3.5.xml $(DESTDIR)$(NETFRAMEWORK_DIR)/v3.5/RedistList/FrameworkList.xml $(MKINSTALLDIRS) $(DESTDIR)$(NETFRAMEWORK_DIR)/v4.0/RedistList $(INSTALL_DATA) frameworks/net_4.0.xml $(DESTDIR)$(NETFRAMEWORK_DIR)/v4.0/RedistList/FrameworkList.xml $(MKINSTALLDIRS) $(DESTDIR)$(NETFRAMEWORK_DIR)/v4.0/Profile/Client/RedistList diff --git a/mono-core.spec b/mono-core.spec index 8c5add9ec4..47bae23566 100644 --- a/mono-core.spec +++ b/mono-core.spec @@ -15,7 +15,7 @@ License: LGPL v2.1 only Group: Development/Languages/Mono Summary: A .NET Runtime Environment Url: http://www.mono-project.com -Version: 4.0.0 +Version: 4.0.1 Release: 0 Source0: mono-%{version}.tar.bz2 BuildRequires: bison diff --git a/mono/metadata/image.c b/mono/metadata/image.c index 33c389cb4b..d62b7036d8 100644 --- a/mono/metadata/image.c +++ b/mono/metadata/image.c @@ -1618,6 +1618,9 @@ mono_image_close_except_pools (MonoImage *image) } free_hash (image->native_wrapper_cache); + free_hash (image->native_wrapper_aot_cache); + free_hash (image->native_wrapper_check_cache); + free_hash (image->native_wrapper_aot_check_cache); free_hash (image->native_func_wrapper_cache); free_hash (image->managed_wrapper_cache); free_hash (image->delegate_begin_invoke_cache); diff --git a/mono/metadata/marshal.c.REMOVED.git-id b/mono/metadata/marshal.c.REMOVED.git-id index 783d935031..db4a0d3cab 100644 --- a/mono/metadata/marshal.c.REMOVED.git-id +++ b/mono/metadata/marshal.c.REMOVED.git-id @@ -1 +1 @@ -eb5e507434af26801525bafdcd2e5775a3ce090b \ No newline at end of file +0b3265de9b69f018f6bbdbc74247de6151f934c1 \ No newline at end of file diff --git a/mono/metadata/metadata-internals.h b/mono/metadata/metadata-internals.h index 14eb80cd79..936afbd367 100644 --- a/mono/metadata/metadata-internals.h +++ b/mono/metadata/metadata-internals.h @@ -275,6 +275,8 @@ struct _MonoImage { GHashTable *managed_wrapper_cache; GHashTable *native_wrapper_cache; GHashTable *native_wrapper_aot_cache; + GHashTable *native_wrapper_check_cache; + GHashTable *native_wrapper_aot_check_cache; GHashTable *native_func_wrapper_aot_cache; GHashTable *remoting_invoke_cache; GHashTable *synchronized_cache; diff --git a/mono/mini/version.h b/mono/mini/version.h index bba0eafab1..c456f776d2 100644 --- a/mono/mini/version.h +++ b/mono/mini/version.h @@ -1 +1 @@ -#define FULL_VERSION "(detached/21d849b" +#define FULL_VERSION "mono-4.0.0-branch/7975f50" diff --git a/mono/utils/mono-codeman.c b/mono/utils/mono-codeman.c index 5c2a83b118..f027e0f447 100644 --- a/mono/utils/mono-codeman.c +++ b/mono/utils/mono-codeman.c @@ -529,15 +529,21 @@ new_codechunk (CodeChunk *last, int dynamic, int size) } } #ifdef BIND_ROOM - bsize = chunk_size / BIND_ROOM; + if (dynamic) + /* Reserve more space since there are no other chunks we might use if this one gets full */ + bsize = (chunk_size * 2) / BIND_ROOM; + else + bsize = chunk_size / BIND_ROOM; if (bsize < MIN_BSIZE) bsize = MIN_BSIZE; bsize += MIN_ALIGN -1; bsize &= ~ (MIN_ALIGN - 1); if (chunk_size - size < bsize) { chunk_size = size + bsize; - chunk_size += pagesize - 1; - chunk_size &= ~ (pagesize - 1); + if (!dynamic) { + chunk_size += pagesize - 1; + chunk_size &= ~ (pagesize - 1); + } } #endif diff --git a/po/mcs/de.gmo b/po/mcs/de.gmo index d8d7104d5914c7fe69ed460a71b03b05b79b8a94..98663c89517e8c0e78d0d1b1c7fc68578daed9a9 100644 GIT binary patch delta 21 ccmbQIHBW296D|%TGX+C)D-(;&Z@7%O08ohrvH$=8 delta 21 ccmbQIHBW296D|$|a|HtnD-)B=Z@7%O08nBEtpET3 diff --git a/po/mcs/de.po.REMOVED.git-id b/po/mcs/de.po.REMOVED.git-id index 7da3e8d9fb..1c496055d1 100644 --- a/po/mcs/de.po.REMOVED.git-id +++ b/po/mcs/de.po.REMOVED.git-id @@ -1 +1 @@ -818881af8e6ffe35d0c07be71c0ccfedf24ee1e9 \ No newline at end of file +1177d93cba3ffbf1fa3293bf5d3f7326ef8dc78f \ No newline at end of file diff --git a/po/mcs/es.gmo b/po/mcs/es.gmo index 10c8fe56df0f4fc365c253c553336c18a0d720a5..d4df693eaf448f9940c2fce493d163a0ddf5da1a 100644 GIT binary patch delta 21 ccmX?Ef3kjqt|Et#nS!CYm5Ie>Q^hHA09XkI=l}o! delta 21 ccmX?Ef3kjqt|Etlxq^X(m5Iq_Q^hHA09WD$;{X5v diff --git a/po/mcs/es.po.REMOVED.git-id b/po/mcs/es.po.REMOVED.git-id index 902256e336..2337f3f73f 100644 --- a/po/mcs/es.po.REMOVED.git-id +++ b/po/mcs/es.po.REMOVED.git-id @@ -1 +1 @@ -384c007d0111057a7dcd007740fe4b8316c68cd6 \ No newline at end of file +2a545eef43afb0b31f38d049740abc3d8d71073b \ No newline at end of file diff --git a/po/mcs/ja.gmo b/po/mcs/ja.gmo index 3d0fd3b37fec32d7beaa11472478b309ad1c983c..f08543cde051727748171dcc4c86c26d349199b7 100644 GIT binary patch delta 23 ecmeyri1Gg-#trQ197bjehUQi#7MuCi3$y@d?*~Kx delta 23 ecmeyri1Gg-#trQ190ukJ1{PK(CY$-y3$y@d$Ok_F diff --git a/po/mcs/ja.po.REMOVED.git-id b/po/mcs/ja.po.REMOVED.git-id index 6ec2577bb0..3f03c33c8f 100644 --- a/po/mcs/ja.po.REMOVED.git-id +++ b/po/mcs/ja.po.REMOVED.git-id @@ -1 +1 @@ -f0bdaf799add4b43e026647f57f63373334e6f77 \ No newline at end of file +a7ca76240aea3ebb6ea24e02beacd3ae518727af \ No newline at end of file diff --git a/po/mcs/mcs.pot b/po/mcs/mcs.pot index 0af3530060..3093a84917 100644 --- a/po/mcs/mcs.pot +++ b/po/mcs/mcs.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: mono 4.0.0\n" +"Project-Id-Version: mono 4.0.1\n" "Report-Msgid-Bugs-To: http://www.mono-project.com/Bugs\n" -"POT-Creation-Date: 2015-04-07 08:44+0100\n" +"POT-Creation-Date: 2015-04-26 17:48+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -91,7 +91,7 @@ msgstr "" msgid "An expression tree cannot contain an anonymous method expression" msgstr "" -#: mcs/mcs/anonymous.cs:2024 +#: mcs/mcs/anonymous.cs:2023 #, csharp-format msgid "" "`{0}': An anonymous type cannot have multiple properties with the same name" @@ -608,7 +608,7 @@ msgstr "" msgid "The operation overflows at compile time in checked mode" msgstr "" -#: mcs/mcs/cfold.cs:329 mcs/mcs/expression.cs:4928 +#: mcs/mcs/cfold.cs:329 mcs/mcs/expression.cs:4933 #, csharp-format msgid "Operator `{0}' is ambiguous on operands of type `{1}' and `{2}'" msgstr "" @@ -1348,8 +1348,8 @@ msgstr "" msgid "Internal compiler error: {0}" msgstr "" -#: mcs/mcs/ecore.cs:581 mcs/mcs/expression.cs:1826 mcs/mcs/expression.cs:7871 -#: mcs/mcs/expression.cs:7879 +#: mcs/mcs/ecore.cs:581 mcs/mcs/expression.cs:1831 mcs/mcs/expression.cs:7876 +#: mcs/mcs/expression.cs:7884 msgid "A constant value is expected" msgstr "" @@ -1811,316 +1811,316 @@ msgstr "" msgid "Detection Parsing Error" msgstr "" -#: mcs/mcs/expression.cs:609 +#: mcs/mcs/expression.cs:614 #, csharp-format msgid "Operator `{0}' is ambiguous on an operand of type `{1}'" msgstr "" -#: mcs/mcs/expression.cs:715 +#: mcs/mcs/expression.cs:720 msgid "Cannot take the address of the given expression" msgstr "" -#: mcs/mcs/expression.cs:738 +#: mcs/mcs/expression.cs:743 msgid "" "You can only take the address of unfixed expression inside of a fixed " "statement initializer" msgstr "" -#: mcs/mcs/expression.cs:982 +#: mcs/mcs/expression.cs:987 msgid "The * or -> operator must be applied to a pointer" msgstr "" -#: mcs/mcs/expression.cs:1205 +#: mcs/mcs/expression.cs:1210 msgid "" "The operand of an increment or decrement operator must be a variable, " "property or indexer" msgstr "" -#: mcs/mcs/expression.cs:1448 +#: mcs/mcs/expression.cs:1453 #, csharp-format msgid "The second operand of `is' or `as' operator cannot be static type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:1454 +#: mcs/mcs/expression.cs:1459 #, csharp-format msgid "The `{0}' operator cannot be applied to an operand of pointer type" msgstr "" -#: mcs/mcs/expression.cs:1460 +#: mcs/mcs/expression.cs:1465 #, csharp-format msgid "" "The `{0}' operator cannot be applied to a lambda expression, anonymous " "method, or method group" msgstr "" -#: mcs/mcs/expression.cs:2214 +#: mcs/mcs/expression.cs:2219 #, csharp-format msgid "`{0}' is not a valid pattern member" msgstr "" -#: mcs/mcs/expression.cs:2221 +#: mcs/mcs/expression.cs:2226 #, csharp-format msgid "Property `{0}.get' accessor is required" msgstr "" -#: mcs/mcs/expression.cs:2354 +#: mcs/mcs/expression.cs:2359 #, csharp-format msgid "" "The `as' operator cannot be used with a non-reference type parameter `{0}'. " "Consider adding `class' or a reference type constraint" msgstr "" -#: mcs/mcs/expression.cs:2358 +#: mcs/mcs/expression.cs:2363 #, csharp-format msgid "The `as' operator cannot be used with a non-nullable value type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:2392 +#: mcs/mcs/expression.cs:2397 #, csharp-format msgid "Cannot convert type `{0}' to `{1}' via a built-in conversion" msgstr "" -#: mcs/mcs/expression.cs:2433 +#: mcs/mcs/expression.cs:2438 #, csharp-format msgid "Cannot convert to static type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:2536 +#: mcs/mcs/expression.cs:2541 msgid "An expression tree cannot contain a declaration expression" msgstr "" -#: mcs/mcs/expression.cs:2633 +#: mcs/mcs/expression.cs:2638 msgid "" "The `default value' operator cannot be applied to an operand of a static type" msgstr "" -#: mcs/mcs/expression.cs:3315 +#: mcs/mcs/expression.cs:3320 #, csharp-format msgid "Operator `{0}' cannot be applied to operands of type `{1}' and `{2}'" msgstr "" -#: mcs/mcs/expression.cs:4121 +#: mcs/mcs/expression.cs:4126 msgid "To cast a negative value, you must enclose the value in parentheses" msgstr "" -#: mcs/mcs/expression.cs:4214 +#: mcs/mcs/expression.cs:4219 #, csharp-format msgid "" "Expression must be implicitly convertible to Boolean or its type `{0}' must " "define operator `{1}'" msgstr "" -#: mcs/mcs/expression.cs:5820 +#: mcs/mcs/expression.cs:5825 #, csharp-format msgid "" "A user-defined operator `{0}' must have each parameter type and return type " "of the same type in order to be applicable as a short circuit operator" msgstr "" -#: mcs/mcs/expression.cs:5830 +#: mcs/mcs/expression.cs:5835 #, csharp-format msgid "" "The type `{0}' must have operator `true' and operator `false' defined when " "`{1}' is used as a short circuit operator" msgstr "" -#: mcs/mcs/expression.cs:6205 +#: mcs/mcs/expression.cs:6210 #, csharp-format msgid "" "Type of conditional expression cannot be determined as `{0}' and `{1}' " "convert implicitly to each other" msgstr "" -#: mcs/mcs/expression.cs:6218 +#: mcs/mcs/expression.cs:6223 #, csharp-format msgid "" "Type of conditional expression cannot be determined because there is no " "implicit conversion between `{0}' and `{1}'" msgstr "" -#: mcs/mcs/expression.cs:6565 +#: mcs/mcs/expression.cs:6570 #, csharp-format msgid "Use of unassigned local variable `{0}'" msgstr "" -#: mcs/mcs/expression.cs:6588 +#: mcs/mcs/expression.cs:6593 #, csharp-format msgid "" "Cannot use fixed local `{0}' inside an anonymous method, lambda expression " "or query expression" msgstr "" -#: mcs/mcs/expression.cs:6606 +#: mcs/mcs/expression.cs:6611 #, csharp-format msgid "Cannot use uninitialized variable `{0}'" msgstr "" -#: mcs/mcs/expression.cs:6778 +#: mcs/mcs/expression.cs:6783 #, csharp-format msgid "" "Parameter `{0}' cannot be used inside `{1}' when using `ref' or `out' " "modifier" msgstr "" -#: mcs/mcs/expression.cs:6848 +#: mcs/mcs/expression.cs:6853 #, csharp-format msgid "Use of unassigned out parameter `{0}'" msgstr "" -#: mcs/mcs/expression.cs:7052 +#: mcs/mcs/expression.cs:7057 #, csharp-format msgid "Cannot invoke a non-delegate type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:7063 +#: mcs/mcs/expression.cs:7068 #, csharp-format msgid "The member `{0}' cannot be used as method or delegate" msgstr "" -#: mcs/mcs/expression.cs:7085 +#: mcs/mcs/expression.cs:7090 msgid "" "Do not directly call your base class Finalize method. It is called " "automatically from your destructor" msgstr "" -#: mcs/mcs/expression.cs:7087 +#: mcs/mcs/expression.cs:7092 msgid "" "Destructors and object.Finalize cannot be called directly. Consider calling " "IDisposable.Dispose if available" msgstr "" -#: mcs/mcs/expression.cs:7116 +#: mcs/mcs/expression.cs:7121 #, csharp-format msgid "" "The base call to method `{0}' cannot be dynamically dispatched. Consider " "casting the dynamic arguments or eliminating the base access" msgstr "" -#: mcs/mcs/expression.cs:7209 +#: mcs/mcs/expression.cs:7214 #, csharp-format msgid "`{0}': cannot explicitly call operator or accessor" msgstr "" -#: mcs/mcs/expression.cs:7399 +#: mcs/mcs/expression.cs:7404 #, csharp-format msgid "Unsafe type `{0}' cannot be used in an object creation expression" msgstr "" -#: mcs/mcs/expression.cs:7422 +#: mcs/mcs/expression.cs:7427 #, csharp-format msgid "" "Cannot create an instance of the variable type `{0}' because it does not " "have the new() constraint" msgstr "" -#: mcs/mcs/expression.cs:7428 +#: mcs/mcs/expression.cs:7433 #, csharp-format msgid "" "`{0}': cannot provide arguments when creating an instance of a variable type" msgstr "" -#: mcs/mcs/expression.cs:7437 +#: mcs/mcs/expression.cs:7442 #, csharp-format msgid "Cannot create an instance of the static class `{0}'" msgstr "" -#: mcs/mcs/expression.cs:7449 +#: mcs/mcs/expression.cs:7454 #, csharp-format msgid "Cannot create an instance of the abstract class or interface `{0}'" msgstr "" -#: mcs/mcs/expression.cs:7722 +#: mcs/mcs/expression.cs:7727 msgid "" "An implicitly typed local variable declarator cannot use an array initializer" msgstr "" -#: mcs/mcs/expression.cs:7885 mcs/mcs/expression.cs:7910 +#: mcs/mcs/expression.cs:7890 mcs/mcs/expression.cs:7915 #, csharp-format msgid "An array initializer of length `{0}' was expected" msgstr "" -#: mcs/mcs/expression.cs:7901 +#: mcs/mcs/expression.cs:7906 msgid "" "Array initializers can only be used in a variable or field initializer. Try " "using a new expression instead" msgstr "" -#: mcs/mcs/expression.cs:7918 +#: mcs/mcs/expression.cs:7923 msgid "A nested array initializer was expected" msgstr "" -#: mcs/mcs/expression.cs:7965 +#: mcs/mcs/expression.cs:7970 msgid "An expression tree cannot contain a multidimensional array initializer" msgstr "" -#: mcs/mcs/expression.cs:8001 +#: mcs/mcs/expression.cs:8006 msgid "Cannot create an array with a negative size" msgstr "" -#: mcs/mcs/expression.cs:8093 +#: mcs/mcs/expression.cs:8098 msgid "" "Can only use array initializer expressions to assign to array types. Try " "using a new expression instead" msgstr "" -#: mcs/mcs/expression.cs:8517 +#: mcs/mcs/expression.cs:8522 msgid "" "The type of an implicitly typed array cannot be inferred from the " "initializer. Try specifying array type explicitly" msgstr "" -#: mcs/mcs/expression.cs:8672 +#: mcs/mcs/expression.cs:8677 msgid "" "The `this' object cannot be used before all of its fields are assigned to" msgstr "" -#: mcs/mcs/expression.cs:8678 +#: mcs/mcs/expression.cs:8683 msgid "" "Keyword `this' is not valid in a static property, static method, or static " "field initializer" msgstr "" -#: mcs/mcs/expression.cs:8681 +#: mcs/mcs/expression.cs:8686 msgid "" "Anonymous methods inside structs cannot access instance members of `this'. " "Consider copying `this' to a local variable outside the anonymous method and " "using the local instead" msgstr "" -#: mcs/mcs/expression.cs:8684 +#: mcs/mcs/expression.cs:8689 msgid "Keyword `this' is not available in the current context" msgstr "" -#: mcs/mcs/expression.cs:8760 +#: mcs/mcs/expression.cs:8765 msgid "Cannot take the address of `this' because it is read-only" msgstr "" -#: mcs/mcs/expression.cs:8762 +#: mcs/mcs/expression.cs:8767 msgid "Cannot pass `this' as a ref or out argument because it is read-only" msgstr "" -#: mcs/mcs/expression.cs:8764 +#: mcs/mcs/expression.cs:8769 msgid "Cannot assign to `this' because it is read-only" msgstr "" -#: mcs/mcs/expression.cs:8832 +#: mcs/mcs/expression.cs:8837 msgid "The __arglist construct is valid only within a variable argument method" msgstr "" -#: mcs/mcs/expression.cs:8893 +#: mcs/mcs/expression.cs:8898 msgid "An expression tree cannot contain a method with variable arguments" msgstr "" -#: mcs/mcs/expression.cs:9167 +#: mcs/mcs/expression.cs:9172 msgid "The typeof operator cannot be used on the dynamic type" msgstr "" -#: mcs/mcs/expression.cs:9208 +#: mcs/mcs/expression.cs:9213 #, csharp-format msgid "`{0}': an attribute argument cannot use type parameters" msgstr "" -#: mcs/mcs/expression.cs:9423 +#: mcs/mcs/expression.cs:9428 #, csharp-format msgid "" "`{0}' does not have a predefined size, therefore sizeof can only be used in " @@ -2128,154 +2128,154 @@ msgid "" "SizeOf)" msgstr "" -#: mcs/mcs/expression.cs:9488 +#: mcs/mcs/expression.cs:9493 #, csharp-format msgid "Alias `{0}' not found" msgstr "" -#: mcs/mcs/expression.cs:9529 +#: mcs/mcs/expression.cs:9534 msgid "" "The namespace alias qualifier `::' cannot be used to invoke a method. " "Consider using `.' instead" msgstr "" -#: mcs/mcs/expression.cs:9619 +#: mcs/mcs/expression.cs:9624 msgid "Cannot perform member binding on `null' value" msgstr "" -#: mcs/mcs/expression.cs:9777 +#: mcs/mcs/expression.cs:9782 #, csharp-format msgid "" "`{0}': cannot reference a type through an expression. Consider using `{1}' " "instead" msgstr "" -#: mcs/mcs/expression.cs:9856 +#: mcs/mcs/expression.cs:9861 #, csharp-format msgid "A nested type cannot be specified through a type parameter `{0}'" msgstr "" -#: mcs/mcs/expression.cs:9864 +#: mcs/mcs/expression.cs:9869 #, csharp-format msgid "" "Alias `{0}' cannot be used with `::' since it denotes a type. Consider " "replacing `::' with `.'" msgstr "" -#: mcs/mcs/expression.cs:9933 +#: mcs/mcs/expression.cs:9938 #, csharp-format msgid "The nested type `{0}' does not exist in the type `{1}'" msgstr "" -#: mcs/mcs/expression.cs:9957 +#: mcs/mcs/expression.cs:9962 #, csharp-format msgid "" "Type `{0}' does not contain a definition for `{1}' and no extension method " "`{1}' of type `{0}' could be found. Are you missing {2}?" msgstr "" -#: mcs/mcs/expression.cs:10236 +#: mcs/mcs/expression.cs:10241 #, csharp-format msgid "Cannot apply indexing with [] to an expression of type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:10381 +#: mcs/mcs/expression.cs:10386 #, csharp-format msgid "Wrong number of indexes `{0}' inside [], expected `{1}'" msgstr "" -#: mcs/mcs/expression.cs:10809 +#: mcs/mcs/expression.cs:10814 msgid "" "The indexer base access cannot be dynamically dispatched. Consider casting " "the dynamic arguments or eliminating the base access" msgstr "" -#: mcs/mcs/expression.cs:10899 +#: mcs/mcs/expression.cs:10904 msgid "An expression tree may not contain a base access" msgstr "" -#: mcs/mcs/expression.cs:10917 +#: mcs/mcs/expression.cs:10922 msgid "Keyword `base' is not available in a static method" msgstr "" -#: mcs/mcs/expression.cs:10919 +#: mcs/mcs/expression.cs:10924 msgid "Keyword `base' is not available in the current context" msgstr "" -#: mcs/mcs/expression.cs:10957 +#: mcs/mcs/expression.cs:10962 msgid "" "A property, indexer or dynamic member access may not be passed as `ref' or " "`out' parameter" msgstr "" -#: mcs/mcs/expression.cs:11302 +#: mcs/mcs/expression.cs:11307 #, csharp-format msgid "Array elements cannot be of type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:11305 +#: mcs/mcs/expression.cs:11310 #, csharp-format msgid "Array elements cannot be of static type `{0}'" msgstr "" -#: mcs/mcs/expression.cs:11481 +#: mcs/mcs/expression.cs:11486 msgid "Cannot use a negative size with stackalloc" msgstr "" -#: mcs/mcs/expression.cs:11485 +#: mcs/mcs/expression.cs:11490 msgid "Cannot use stackalloc in finally or catch" msgstr "" -#: mcs/mcs/expression.cs:11640 +#: mcs/mcs/expression.cs:11645 #, csharp-format msgid "" "Member `{0}' cannot be initialized. An object initializer may only be used " "for fields, or properties" msgstr "" -#: mcs/mcs/expression.cs:11648 +#: mcs/mcs/expression.cs:11653 #, csharp-format msgid "" "Static field or property `{0}' cannot be assigned in an object initializer" msgstr "" -#: mcs/mcs/expression.cs:11752 +#: mcs/mcs/expression.cs:11757 msgid "Expression tree cannot contain a dictionary initializer" msgstr "" -#: mcs/mcs/expression.cs:11877 +#: mcs/mcs/expression.cs:11882 #, csharp-format msgid "" "A field or property `{0}' cannot be initialized with a collection object " "initializer because type `{1}' does not implement `{2}' interface" msgstr "" -#: mcs/mcs/expression.cs:11888 +#: mcs/mcs/expression.cs:11893 #, csharp-format msgid "Inconsistent `{0}' member declaration" msgstr "" -#: mcs/mcs/expression.cs:11896 +#: mcs/mcs/expression.cs:11901 #, csharp-format msgid "" "An object initializer includes more than one member `{0}' initialization" msgstr "" -#: mcs/mcs/expression.cs:11914 +#: mcs/mcs/expression.cs:11919 #, csharp-format msgid "Cannot initialize object of type `{0}' with a collection initializer" msgstr "" -#: mcs/mcs/expression.cs:12059 +#: mcs/mcs/expression.cs:12064 msgid "" "Object and collection initializers cannot be used to instantiate a delegate" msgstr "" -#: mcs/mcs/expression.cs:12247 +#: mcs/mcs/expression.cs:12252 msgid "Anonymous types cannot be used in this expression" msgstr "" -#: mcs/mcs/expression.cs:12341 +#: mcs/mcs/expression.cs:12346 #, csharp-format msgid "An anonymous type property `{0}' cannot be initialized with `{1}'" msgstr "" diff --git a/po/mcs/pt_BR.gmo b/po/mcs/pt_BR.gmo index b8db73b5debdbaeb75e0bef5d656943004d76885..d1b7f600286f41c41b932d8412d8bcadf50e7bfc 100644 GIT binary patch delta 23 fcmdnCmu1^tmJN%iaTu8?7@Av|SZrQBjk^N?bOs3h delta 23 fcmdnCmu1^tmJN%iaTu5@7+6@Dm~37>jk^N?bKeN~ diff --git a/po/mcs/pt_BR.po.REMOVED.git-id b/po/mcs/pt_BR.po.REMOVED.git-id index 2c8ec492ec..f41dedf1dc 100644 --- a/po/mcs/pt_BR.po.REMOVED.git-id +++ b/po/mcs/pt_BR.po.REMOVED.git-id @@ -1 +1 @@ -ea06e267d7dc2b8531053c0dac0658f5334a8970 \ No newline at end of file +92245423ae71d2dca945ca1e614c2ee04a053695 \ No newline at end of file diff --git a/runtime/Makefile.am b/runtime/Makefile.am index aea6c5faa3..3f6fe489fa 100644 --- a/runtime/Makefile.am +++ b/runtime/Makefile.am @@ -34,7 +34,7 @@ else build_profiles = if INSTALL_4_5 -build_profiles += net_4_0 net_4_5 xbuild_12 xbuild_14 +build_profiles += binary_reference_assemblies net_4_5 xbuild_12 xbuild_14 al_profile = net_4_5 endif @@ -110,11 +110,11 @@ endif # Compile all assemblies with the verifier turned on. Code must be valid but not verifiable. # TODO it would be nice to split assemblies without unsafe code to use the verifier with verifiable mode. -# Skip net 4.0 assemblies because they contain metadata only +# Skip binary_reference_assemblies because they contain metadata only mcs-compileall: mono-wrapper etc/mono/config save_MONO_PATH=$$MONO_PATH; mcs_topdir=`cd $(mcs_topdir) && $(cur_dir_cmd)`; ok=:; \ for profile in $(test_profiles); do \ - if [ "net_4_0" = "$$profile" ]; then \ + if [ "binary_reference_assemblies" = "$$profile" ]; then \ continue; \ fi; \ if [ "xbuild_12" = "$$profile" ]; then \ diff --git a/runtime/Makefile.in b/runtime/Makefile.in index acec253fb9..0bb55d038d 100644 --- a/runtime/Makefile.in +++ b/runtime/Makefile.in @@ -80,7 +80,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @INSTALL_4_5_TRUE@am__append_1 = etc/mono/4.0/machine.config etc/mono/4.0/web.config etc/mono/4.5/web.config etc/mono/4.5/machine.config etc/mono/4.0/Browsers/Compat.browser etc/mono/4.5/Browsers/Compat.browser -@INSTALL_4_5_TRUE@@ONLY_MONOTOUCH_FALSE@@ONLY_XAMMAC_FALSE@am__append_2 = net_4_0 net_4_5 xbuild_12 xbuild_14 +@INSTALL_4_5_TRUE@@ONLY_MONOTOUCH_FALSE@@ONLY_XAMMAC_FALSE@am__append_2 = binary_reference_assemblies net_4_5 xbuild_12 xbuild_14 @INSTALL_MONODROID_TRUE@@ONLY_MONOTOUCH_FALSE@@ONLY_XAMMAC_FALSE@am__append_3 = monodroid @INSTALL_MONOTOUCH_TRUE@@ONLY_MONOTOUCH_FALSE@@ONLY_XAMMAC_FALSE@am__append_4 = monotouch monotouch_runtime @INSTALL_XAMMAC_TRUE@@ONLY_MONOTOUCH_FALSE@@ONLY_XAMMAC_FALSE@am__append_5 = xammac @@ -583,11 +583,11 @@ mcs-do-run-test-profiles: test-support-files # Compile all assemblies with the verifier turned on. Code must be valid but not verifiable. # TODO it would be nice to split assemblies without unsafe code to use the verifier with verifiable mode. -# Skip net 4.0 assemblies because they contain metadata only +# Skip binary_reference_assemblies because they contain metadata only mcs-compileall: mono-wrapper etc/mono/config save_MONO_PATH=$$MONO_PATH; mcs_topdir=`cd $(mcs_topdir) && $(cur_dir_cmd)`; ok=:; \ for profile in $(test_profiles); do \ - if [ "net_4_0" = "$$profile" ]; then \ + if [ "binary_reference_assemblies" = "$$profile" ]; then \ continue; \ fi; \ if [ "xbuild_12" = "$$profile" ]; then \ diff --git a/scripts/mono-find-provides.in b/scripts/mono-find-provides.in index c9210060c2..155690d75a 100644 --- a/scripts/mono-find-provides.in +++ b/scripts/mono-find-provides.in @@ -33,7 +33,7 @@ fi # set LD_LIBRARY_PATH to ensure that libmono is found export LD_LIBRARY_PATH=$libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} # and set MONO_PATH to ensure that mscorlib.dll can be found -export MONO_PATH=$prefix/lib/mono/2.0 +export MONO_PATH=$prefix/lib/mono/4.5 for i in "${monolist[@]}"; do ($bindir/monodis --assembly $i | awk ' diff --git a/scripts/mono-find-requires.in b/scripts/mono-find-requires.in index f0ad60bb8a..d7b6a325bc 100644 --- a/scripts/mono-find-requires.in +++ b/scripts/mono-find-requires.in @@ -50,7 +50,7 @@ esac # set LD_LIBRARY_PATH to ensure that libmono is found export LD_LIBRARY_PATH=$libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} # and set MONO_PATH to ensure that mscorlib.dll can be found -export MONO_PATH=$prefix/lib/mono/2.0 +export MONO_PATH=$prefix/lib/mono/4.5 REQUIRES=$( for i in "${monolist[@]}"; do