diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/.editorconfig b/src/textOnlyPackages/src/polyfill/7.9.1/.editorconfig
new file mode 100644
index 000000000..8c1f7ee22
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/.editorconfig
@@ -0,0 +1,2 @@
+# exclude code from dotnet format https://github.com/dotnet/sdk/issues/38906
+root = true
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/Polyfill.7.9.1.csproj b/src/textOnlyPackages/src/polyfill/7.9.1/Polyfill.7.9.1.csproj
new file mode 100644
index 000000000..8e38473ad
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/Polyfill.7.9.1.csproj
@@ -0,0 +1,8 @@
+
+
+
+ netstandard2.0
+ Polyfill
+
+
+
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/build/Polyfill.targets b/src/textOnlyPackages/src/polyfill/7.9.1/build/Polyfill.targets
new file mode 100644
index 000000000..e95bce2f7
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/build/Polyfill.targets
@@ -0,0 +1,125 @@
+
+
+ $(PrepareForBuildDependsOn);PreparePolyfill
+ $(TargetFramework.ToLower())
+ $(TargetFrameworks.ToLower())
+
+
+ $(DefineConstants);LangVersion13
+ $(DefineConstants);LangVersion13
+ $(DefineConstants);LangVersion13
+ $(DefineConstants);LangVersion13
+ $(DefineConstants);LangVersion13
+
+
+ $(DefineConstants);AllowUnsafeBlocks
+
+
+ $(DefineConstants);PolyPublic
+
+
+ $(DefineConstants);NETCOREAPP2X
+
+
+ $(DefineConstants);NETCOREAPP3X
+
+
+ $(DefineConstants);NET46X
+
+
+ $(DefineConstants);NET47X
+
+
+ $(DefineConstants);NET48X
+
+
+ $(DefineConstants);NETCOREAPPX
+
+
+ false
+ true
+
+ false
+ true
+
+
+
+
+
+
+
+ $(DefineConstants);FeatureValueTuple
+
+ @(ResolvedCompileFileDefinitions->WithMetadataValue('NuGetPackageId', 'System.Memory')->Metadata('NuGetPackageVersion'))
+
+ $(DefineConstants);FeatureMemory
+
+ $(DefineConstants);FeatureValueTask
+
+ $(DefineConstants);FeatureHttp
+
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureMemory;FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureValueTuple
+ $(DefineConstants);FeatureValueTuple
+ $(DefineConstants);FeatureValueTuple
+ $(DefineConstants);FeatureValueTuple;FeatureValueTask
+ $(DefineConstants);FeatureValueTuple
+
+
+
+
+
+
+
+
+
+ false
+
+
+
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CallerArgumentExpressionAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CallerArgumentExpressionAttribute.cs
new file mode 100644
index 000000000..8c09018be
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CallerArgumentExpressionAttribute.cs
@@ -0,0 +1,40 @@
+//
+#pragma warning disable
+
+#if NETFRAMEWORK || NETSTANDARD || NETCOREAPP2X
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+///
+/// Indicates that a parameter captures the expression passed for another parameter as a string.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Parameter)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.callerargumentexpressionattribute
+#if PolyPublic
+public
+#endif
+sealed class CallerArgumentExpressionAttribute :
+ Attribute
+{
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The name of the parameter whose expression should be captured as a string.
+ ///
+ public CallerArgumentExpressionAttribute(string parameterName) =>
+ ParameterName = parameterName;
+
+ ///
+ /// Gets the name of the parameter whose expression should be captured as a string.
+ ///
+ public string ParameterName { get; }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CollectionBuilderAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CollectionBuilderAttribute.cs
new file mode 100644
index 000000000..eb5b439c6
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CollectionBuilderAttribute.cs
@@ -0,0 +1,42 @@
+//
+#pragma warning disable
+
+#if !NET8_0_OR_GREATER && FeatureMemory
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.collectionbuilderattribute
+#if PolyPublic
+public
+#endif
+sealed class CollectionBuilderAttribute : Attribute
+{
+ /// Initialize the attribute to refer to the method on the type.
+ /// The type of the builder to use to construct the collection.
+ /// The name of the method on the builder to use to construct the collection.
+ ///
+ /// must refer to a static method that accepts a single parameter of
+ /// type and returns an instance of the collection being built containing
+ /// a copy of the data from that span. In future releases of .NET, additional patterns may be supported.
+ ///
+ public CollectionBuilderAttribute(Type builderType, string methodName)
+ {
+ BuilderType = builderType;
+ MethodName = methodName;
+ }
+
+ /// Gets the type of the builder to use to construct the collection.
+ public Type BuilderType { get; }
+
+ /// Gets the name of the method on the builder to use to construct the collection.
+ /// This should match the metadata name of the target method. For example, this might be ".ctor" if targeting the type's constructor.
+ public string MethodName { get; }
+}
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CompilerFeatureRequiredAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CompilerFeatureRequiredAttribute.cs
new file mode 100644
index 000000000..7050a89e1
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/CompilerFeatureRequiredAttribute.cs
@@ -0,0 +1,56 @@
+//
+#pragma warning disable
+
+#if !NET7_0_OR_GREATER
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+///
+/// Indicates that compiler support for a particular feature is required for the location where this attribute is applied.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: AttributeTargets.All,
+ AllowMultiple = true,
+ Inherited = false)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.compilerfeaturerequiredattribute
+#if PolyPublic
+public
+#endif
+sealed class CompilerFeatureRequiredAttribute :
+ Attribute
+{
+ ///
+ /// Initialize a new instance of
+ ///
+ /// The name of the required compiler feature.
+ public CompilerFeatureRequiredAttribute(string featureName) =>
+ FeatureName = featureName;
+
+ ///
+ /// The name of the compiler feature.
+ ///
+ public string FeatureName { get; }
+
+ ///
+ /// If true, the compiler can choose to allow access to the location where this attribute is applied if it does not understand .
+ ///
+ public bool IsOptional { get; init; }
+
+ ///
+ /// The used for the ref structs C# feature.
+ ///
+ public const string RefStructs = nameof(RefStructs);
+
+ ///
+ /// The used for the required members C# feature.
+ ///
+ public const string RequiredMembers = nameof(RequiredMembers);
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ConstantExpectedAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ConstantExpectedAttribute.cs
new file mode 100644
index 000000000..bd84870bb
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ConstantExpectedAttribute.cs
@@ -0,0 +1,35 @@
+//
+#pragma warning disable
+
+#if !NET7_0_OR_GREATER
+
+#nullable enable
+namespace System.Diagnostics.CodeAnalysis;
+
+using Diagnostics;
+
+///
+/// Indicates that the specified method parameter expects a constant.
+///
+///
+/// This can be used to inform tooling that a constant should be used as an argument for the annotated parameter.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.constantexpectedattribute
+#if PolyPublic
+public
+#endif
+sealed class ConstantExpectedAttribute : Attribute
+{
+ ///
+ /// Indicates the minimum bound of the expected constant, inclusive.
+ ///
+ public object? Min { get; set; }
+ ///
+ /// Indicates the maximum bound of the expected constant, inclusive.
+ ///
+ public object? Max { get; set; }
+}
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DateTimeOffsetPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DateTimeOffsetPolyfill.cs
new file mode 100644
index 000000000..cd6245aa2
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DateTimeOffsetPolyfill.cs
@@ -0,0 +1,88 @@
+//
+#pragma warning disable
+
+#nullable enable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class DateTimeOffsetPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tryparse#system-datetimeoffset-tryparse(system-string-system-iformatprovider-system-datetimeoffset@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out DateTimeOffset result) =>
+#if NET7_0_OR_GREATER
+ DateTimeOffset.TryParse(target, provider, out result);
+#else
+ DateTimeOffset.TryParse(target, provider, DateTimeStyles.None, out result);
+#endif
+
+#if FeatureMemory
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tryparse#system-datetimeoffset-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-datetimeoffset@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out DateTimeOffset result) =>
+#if NET8_0_OR_GREATER
+ DateTimeOffset.TryParse(target, provider, out result);
+#else
+ DateTimeOffset.TryParse(target.ToString(), provider, DateTimeStyles.None, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tryparse#system-datetimeoffset-tryparse(system-readonlyspan((system-char))-system-datetimeoffset@)
+ public static bool TryParse(ReadOnlySpan target, out DateTimeOffset result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ DateTimeOffset.TryParse(target, out result);
+#else
+ DateTimeOffset.TryParse(target.ToString(), null, DateTimeStyles.None, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tryparse#system-datetimeoffset-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-globalization-datetimestyles-system-datetimeoffset@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, DateTimeStyles styles, out DateTimeOffset result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ DateTimeOffset.TryParse(target, provider, styles, out result);
+#else
+ DateTimeOffset.TryParse(target.ToString(), provider, styles, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tryparseexact#system-datetimeoffset-tryparseexact(system-readonlyspan((system-char))-system-readonlyspan((system-char))-system-iformatprovider-system-globalization-datetimestyles-system-datetimeoffset@)
+ public static bool TryParseExact(ReadOnlySpan target, string format, IFormatProvider? provider, DateTimeStyles styles, out DateTimeOffset result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ DateTimeOffset.TryParseExact(target, format, provider, styles, out result);
+#else
+ DateTimeOffset.TryParseExact(target.ToString(), format, provider, styles, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tryparseexact#system-datetimeoffset-tryparseexact(system-readonlyspan((system-char))-system-readonlyspan((system-char))-system-iformatprovider-system-globalization-datetimestyles-system-datetimeoffset@)
+ public static bool TryParseExact(ReadOnlySpan target, ReadOnlySpan format, IFormatProvider? provider, DateTimeStyles styles, out DateTimeOffset result) =>
+#if NETFRAMEWORK || NETSTANDARD2_0 || NETCOREAPP2_0
+ DateTimeOffset.TryParseExact(target.ToString(), format.ToString(), provider, styles, out result);
+#else
+ DateTimeOffset.TryParseExact(target, format, provider, styles, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DateTimePolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DateTimePolyfill.cs
new file mode 100644
index 000000000..11a6c6105
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DateTimePolyfill.cs
@@ -0,0 +1,87 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class DateTimePolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tryparse#system-datetime-tryparse(system-string-system-iformatprovider-system-datetime@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out DateTime result) =>
+#if NET7_0_OR_GREATER
+ DateTime.TryParse(target, provider, out result);
+#else
+ DateTime.TryParse(target, provider, DateTimeStyles.None, out result);
+#endif
+
+#if FeatureMemory
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tryparse#system-datetime-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-datetime@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out DateTime result) =>
+#if NET8_0_OR_GREATER
+ DateTime.TryParse(target, provider, out result);
+#else
+ DateTime.TryParse(target.ToString(), provider, DateTimeStyles.None, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tryparse#system-datetime-tryparse(system-readonlyspan((system-char))-system-datetime@)
+ public static bool TryParse(ReadOnlySpan target, out DateTime result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ DateTime.TryParse(target, out result);
+#else
+ DateTime.TryParse(target.ToString(), null, DateTimeStyles.None, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tryparse#system-datetime-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-globalization-datetimestyles-system-datetime@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, DateTimeStyles styles, out DateTime result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ DateTime.TryParse(target, provider, styles, out result);
+#else
+ DateTime.TryParse(target.ToString(), provider, styles, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tryparseexact#system-datetime-tryparseexact(system-readonlyspan((system-char))-system-readonlyspan((system-char))-system-iformatprovider-system-globalization-datetimestyles-system-datetime@)
+ public static bool TryParseExact(ReadOnlySpan target, string format, IFormatProvider? provider, DateTimeStyles style, out DateTime result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ DateTime.TryParseExact(target, format, provider, style, out result);
+#else
+ DateTime.TryParseExact(target.ToString(), format, provider, style, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tryparseexact#system-datetime-tryparseexact(system-readonlyspan((system-char))-system-readonlyspan((system-char))-system-iformatprovider-system-globalization-datetimestyles-system-datetime@)
+ public static bool TryParseExact(ReadOnlySpan target, ReadOnlySpan format, IFormatProvider? provider, DateTimeStyles styles, out DateTime result) =>
+#if NETFRAMEWORK || NETSTANDARD2_0 || NETCOREAPP2_0
+ DateTime.TryParseExact(target.ToString(), format.ToString(), provider, styles, out result);
+#else
+ DateTime.TryParseExact(target, format, provider, styles, out result);
+#endif
+
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DebuggerDisableUserUnhandledExceptionsAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DebuggerDisableUserUnhandledExceptionsAttribute.cs
new file mode 100644
index 000000000..ce6502d95
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DebuggerDisableUserUnhandledExceptionsAttribute.cs
@@ -0,0 +1,23 @@
+//
+#pragma warning disable
+
+#if !NET9_0_OR_GREATER
+
+namespace System.Diagnostics;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// If a .NET Debugger is attached that supports the API, the debugger won't break on user-unhandled exceptions when the exception is caught by a method with this attribute, unless is called.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(System.AttributeTargets.Method)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.debuggerdisableuserunhandledexceptionsattribute
+#if PolyPublic
+public
+#endif
+sealed class DebuggerDisableUserUnhandledExceptionsAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DelegatePolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DelegatePolyfill.cs
new file mode 100644
index 000000000..5a75f81f5
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DelegatePolyfill.cs
@@ -0,0 +1,65 @@
+//
+
+
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.ComponentModel;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static partial class DelegatePolyfill
+{
+ ///
+ /// Gets an enumerator for the invocation targets of this delegate.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.delegate.enumerateinvocationlist
+#if NET9_0_OR_GREATER
+ public static Delegate.InvocationListEnumerator EnumerateInvocationList(TDelegate? target) where TDelegate : Delegate =>
+ Delegate.EnumerateInvocationList(target);
+#else
+ public static InvocationListEnumerator EnumerateInvocationList(TDelegate? target) where TDelegate : Delegate =>
+ new InvocationListEnumerator(target);
+
+ ///
+ /// Provides an enumerator for the invocation list of a delegate.
+ ///
+ /// Delegate type being enumerated.
+ public struct InvocationListEnumerator
+ where TDelegate : Delegate
+ {
+ Delegate[] delegates;
+ int index = -1;
+
+ internal InvocationListEnumerator(Delegate target) =>
+ delegates = target.GetInvocationList();
+
+ public TDelegate Current { get; private set; }
+
+ public bool MoveNext()
+ {
+ int index = this.index + 1;
+ if (index == delegates.Length)
+ {
+ return false;
+ }
+
+ Current = (TDelegate) delegates[index];
+ this.index = index;
+ return true;
+ }
+
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public InvocationListEnumerator GetEnumerator() => this;
+ }
+#endif
+
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DisableRuntimeMarshallingAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DisableRuntimeMarshallingAttribute.cs
new file mode 100644
index 000000000..2d86ec2fe
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/DisableRuntimeMarshallingAttribute.cs
@@ -0,0 +1,38 @@
+//
+#pragma warning disable
+
+#if !NET7_0_OR_GREATER
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+///
+/// Disables the built-in runtime managed/unmanaged marshalling subsystem for
+/// P/Invokes, Delegate types, and unmanaged function pointer invocations.
+///
+///
+/// The built-in marshalling subsystem has some behaviors that cannot be changed due to
+/// backward-compatibility requirements. This attribute allows disabling the built-in
+/// subsystem and instead uses the following rules for P/Invokes, Delegates,
+/// and unmanaged function pointer invocations:
+///
+/// - All value types that do not contain reference type fields recursively (unmanaged in C#) are blittable
+/// - Value types that recursively have any fields that have [StructLayout(LayoutKind.Auto)] are disallowed from interop.
+/// - All reference types are disallowed from usage in interop scenarios.
+/// - SetLastError support in P/Invokes is disabled.
+/// - varargs support is disabled.
+/// - LCIDConversionAttribute support is disabled.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Assembly)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.disableruntimemarshallingattribute
+#if PolyPublic
+public
+#endif
+sealed class DisableRuntimeMarshallingAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/EnumPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/EnumPolyfill.cs
new file mode 100644
index 000000000..4eb293eeb
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/EnumPolyfill.cs
@@ -0,0 +1,137 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Runtime.CompilerServices;
+using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class EnumPolyfill
+{
+ ///
+ /// Retrieves an array of the values of the constants in a specified enumeration type.
+ ///
+ /// An array that contains the values of the constants in TEnum.
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.getvalues
+ public static TEnum[] GetValues()
+ where TEnum : struct, Enum
+ {
+#if NETCOREAPPX || NETFRAMEWORK || NETSTANDARD
+ var values = Enum.GetValues(typeof(TEnum));
+ var result = new TEnum[values.Length];
+ Array.Copy(values, result, values.Length);
+ return result;
+#else
+ return Enum.GetValues();
+#endif
+ }
+
+ /// Returns a telling whether a given integral value exists in a specified enumeration.
+ /// The type of the enumeration.
+ /// The value in .
+ /// if a given integral value exists in a specified enumeration; , otherwise.
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.isdefined#system-enum-isdefined-1(-0)
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool IsDefined (TEnum value)
+ where TEnum : struct, Enum =>
+#if NET5_0_OR_GREATER
+ Enum.IsDefined(value);
+#else
+ Enum.IsDefined(typeof(TEnum), value);
+#endif
+
+ ///
+ /// Retrieves an array of the names of the constants in a specified enumeration type.
+ ///
+ /// A string array of the names of the constants in TEnum.
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.getnames
+ public static string[] GetNames()
+ where TEnum : struct, Enum =>
+#if NETCOREAPPX || NETFRAMEWORK || NETSTANDARD
+ Enum.GetNames(typeof(TEnum));
+#else
+ Enum.GetNames();
+#endif
+
+ ///
+ /// Converts the string representation of the name or numeric value of one or more enumerated constants specified by TEnum to an equivalent enumerated object.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.parse#system-enum-parse-1(system-string-system-boolean)
+ public static TEnum Parse(string value)
+ where TEnum : struct, Enum =>
+#if NETFRAMEWORK || NETSTANDARD
+ (TEnum)Enum.Parse(typeof(TEnum), value);
+#else
+ Enum.Parse(value);
+#endif
+
+ ///
+ /// Converts the string representation of the name or numeric value of one or more enumerated constants specified by TEnum to an equivalent enumerated object.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.parse#system-enum-parse-1(system-string-system-boolean)
+ public static TEnum Parse(string value, bool ignoreCase)
+ where TEnum : struct, Enum =>
+#if NETFRAMEWORK || NETSTANDARD
+ (TEnum)Enum.Parse(typeof(TEnum), value, ignoreCase);
+#else
+ Enum.Parse(value, ignoreCase);
+#endif
+
+#if FeatureMemory
+
+ ///
+ /// Converts the span of characters representation of the name or numeric value of one or more enumerated constants specified by TEnum to an equivalent enumerated object.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.parse#system-enum-parse-1(system-readonlyspan((system-char)))
+ public static TEnum Parse(ReadOnlySpan value)
+ where TEnum : struct, Enum =>
+#if NET6_0_OR_GREATER
+ Enum.Parse(value);
+#else
+ (TEnum)Enum.Parse(typeof(TEnum), value.ToString());
+#endif
+
+ ///
+ /// Converts the span of characters representation of the name or numeric value of one or more enumerated constants specified by TEnum to an equivalent enumerated object.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.parse#system-enum-parse-1(system-readonlyspan((system-char))-system-boolean)
+ public static TEnum Parse(ReadOnlySpan value, bool ignoreCase)
+ where TEnum : struct, Enum =>
+#if NET6_0_OR_GREATER
+ Enum.Parse(value, ignoreCase);
+#else
+ (TEnum)Enum.Parse(typeof(TEnum), value.ToString(), ignoreCase);
+#endif
+
+ ///
+ /// Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.tryparse#system-enum-tryparse-1(system-readonlyspan((system-char))-0@)
+ public static bool TryParse(ReadOnlySpan value, out TEnum result)
+ where TEnum : struct, Enum =>
+#if NET6_0_OR_GREATER
+ Enum.TryParse(value, out result);
+#else
+ Enum.TryParse(value.ToString(), out result);
+#endif
+
+ ///
+ /// Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object. A parameter specifies whether the operation is case-sensitive. The return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.enum.tryparse#system-enum-tryparse-1(system-readonlyspan((system-char))-system-boolean-0@)
+ public static bool TryParse(ReadOnlySpan value, bool ignoreCase, out TEnum result)
+ where TEnum : struct, Enum =>
+#if NET6_0_OR_GREATER
+ Enum.TryParse(value, ignoreCase, out result);
+#else
+ Enum.TryParse(value.ToString(), ignoreCase, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ExperimentalAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ExperimentalAttribute.cs
new file mode 100644
index 000000000..2156b7147
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ExperimentalAttribute.cs
@@ -0,0 +1,69 @@
+//
+#pragma warning disable
+
+#nullable enable
+
+#if !NET8_0_OR_GREATER
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Diagnostics;
+
+///
+/// Indicates that a parameter captures the expression passed for another parameter as a string.
+///
+///
+/// Indicates that an API is experimental and it may change in the future.
+///
+///
+/// This attribute allows call sites to be flagged with a diagnostic that indicates that an experimental
+/// feature is used. Authors can use this attribute to ship preview features in their assemblies.
+///
+[AttributeUsage(AttributeTargets.Assembly |
+ AttributeTargets.Module |
+ AttributeTargets.Class |
+ AttributeTargets.Struct |
+ AttributeTargets.Enum |
+ AttributeTargets.Constructor |
+ AttributeTargets.Method |
+ AttributeTargets.Property |
+ AttributeTargets.Field |
+ AttributeTargets.Event |
+ AttributeTargets.Interface |
+ AttributeTargets.Delegate, Inherited = false)]
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.experimentalattribute
+#if PolyPublic
+public
+#endif
+sealed class ExperimentalAttribute : Attribute
+{
+ ///
+ /// Initializes a new instance of the class, specifying the ID that the compiler will use
+ /// when reporting a use of the API the attribute applies to.
+ ///
+ /// The ID that the compiler will use when reporting a use of the API the attribute applies to.
+ public ExperimentalAttribute(string diagnosticId) =>
+ DiagnosticId = diagnosticId;
+
+ ///
+ /// Gets the ID that the compiler will use when reporting a use of the API the attribute applies to.
+ ///
+ /// The unique diagnostic ID.
+ ///
+ /// The diagnostic ID is shown in build output for warnings and errors.
+ /// This property represents the unique ID that can be used to suppress the warnings or errors, if needed.
+ ///
+ public string DiagnosticId { get; }
+
+ ///
+ /// Gets or sets the URL for corresponding documentation.
+ /// The API accepts a format string instead of an actual URL, creating a generic URL that includes the diagnostic ID.
+ ///
+ /// The format string that represents a URL to corresponding documentation.
+ /// An example format string is https://contoso.com/obsoletion-warnings/{0}.
+ public string? UrlFormat { get; set; }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/FeatureGuardAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/FeatureGuardAttribute.cs
new file mode 100644
index 000000000..e8195084b
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/FeatureGuardAttribute.cs
@@ -0,0 +1,47 @@
+//
+#pragma warning disable
+
+#if !NET9_0_OR_GREATER
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+
+///
+/// Indicates that the specified public static boolean get-only property
+/// guards access to the specified feature.
+///
+///
+/// Analyzers can use this to prevent warnings on calls to code that is
+/// annotated as requiring that feature, when the callsite is guarded by a
+/// call to the property.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.featureguardattribute
+#if PolyPublic
+public
+#endif
+sealed class FeatureGuardAttribute : Attribute
+{
+ ///
+ /// Initializes a new instance of the class
+ /// with the specified feature type.
+ ///
+ ///
+ /// The type that represents the feature guarded by the property.
+ ///
+ public FeatureGuardAttribute(Type featureType) =>
+ FeatureType = featureType;
+
+ ///
+ /// The type that represents the feature guarded by the property.
+ ///
+ public Type FeatureType { get; }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/FeatureSwitchDefinitionAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/FeatureSwitchDefinitionAttribute.cs
new file mode 100644
index 000000000..d58bae61e
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/FeatureSwitchDefinitionAttribute.cs
@@ -0,0 +1,41 @@
+//
+#pragma warning disable
+
+#if !NET9_0_OR_GREATER
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// [AttributeUsage(AttributeTargets.Property, Inherited = false)]
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Property, Inherited = false)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.featureswitchdefinitionattribute
+#if PolyPublic
+public
+#endif
+sealed class FeatureSwitchDefinitionAttribute : Attribute
+{
+ ///
+ /// Initializes a new instance of the class
+ /// with the specified feature switch name.
+ ///
+ ///
+ /// The name of the feature switch that provides the value for the specified property.
+ ///
+ public FeatureSwitchDefinitionAttribute(string switchName)
+ {
+ SwitchName = switchName;
+ }
+
+ ///
+ /// The name of the feature switch that provides the value for the specified property.
+ ///
+ public string SwitchName { get; }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard.cs
new file mode 100644
index 000000000..c2e15bd6b
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard.cs
@@ -0,0 +1,39 @@
+//
+
+namespace Polyfills;
+
+using System.Runtime.CompilerServices;
+
+#pragma warning disable
+
+using System;
+using System.IO;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[StackTraceHidden]
+#if PolyPublic
+public
+#endif
+static partial class Guard
+{
+ public static void FileExists(string path, [CallerArgumentExpression("path")] string argumentName = "")
+ {
+ NotNullOrEmpty(path, argumentName);
+ if (!File.Exists(path))
+ {
+ throw new ArgumentException($"File not found. Path: {path}", argumentName);
+ }
+ }
+
+ public static void DirectoryExists(string path, [CallerArgumentExpression("path")] string argumentName = "")
+ {
+ NotNullOrEmpty(path, argumentName);
+ if (!Directory.Exists(path))
+ {
+ throw new ArgumentException($"Directory not found. Path: {path}", argumentName);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotEmpty.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotEmpty.cs
new file mode 100644
index 000000000..167b6e514
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotEmpty.cs
@@ -0,0 +1,144 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System.Runtime.CompilerServices;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+
+#if PolyPublic
+public
+#endif
+
+static partial class Guard
+{
+ public static void NotEmpty(string? value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value is null)
+ {
+ return;
+ }
+
+#if NET7_0_OR_GREATER
+ ArgumentException.ThrowIfNullOrEmpty(value, argumentName);
+#else
+
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+#endif
+ }
+
+#if FeatureMemory
+
+ public static void NotEmpty(ReadOnlySpan value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+
+ public static void NotEmpty(Span value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+
+ public static void NotEmpty(Memory? value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value is null)
+ {
+ return;
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+
+ public static void NotEmpty(Memory value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+
+ public static void NotEmpty(ReadOnlyMemory? value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value is null)
+ {
+ return;
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+
+ public static void NotEmpty(ReadOnlyMemory value, [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+
+#endif
+
+ public static void NotEmpty(
+ [NotNull] T? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ where T : IEnumerable
+ {
+ if (value is null)
+ {
+ return;
+ }
+
+ if (value is ICollection {Count: 0})
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ if (value is ICollection {Count: 0})
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ if (value is IReadOnlyCollection {Count: 0})
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ if (value is T[] {Length: 0})
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ var enumerator = value.GetEnumerator();
+ try
+ {
+ if (!enumerator.MoveNext())
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+ }
+ finally
+ {
+ if (enumerator is IDisposable disposable)
+ {
+ disposable.Dispose();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNull.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNull.cs
new file mode 100644
index 000000000..2f380c3a6
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNull.cs
@@ -0,0 +1,39 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Runtime.CompilerServices;
+using System.Diagnostics.CodeAnalysis;
+
+#if PolyPublic
+public
+#endif
+static partial class Guard
+{
+ public static T NotNull(
+ [NotNull] T? argument,
+ [CallerArgumentExpression("argument")] string? name = null)
+ where T : class
+ {
+ if (argument is null)
+ {
+ throw new ArgumentNullException(name);
+ }
+
+ return argument;
+ }
+
+ public static string NotNull(
+ [NotNull] string? argument,
+ [CallerArgumentExpression("argument")] string? name = null)
+ {
+ if (argument is null)
+ {
+ throw new ArgumentNullException(name);
+ }
+
+ return argument;
+ }
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNullOrEmpty.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNullOrEmpty.cs
new file mode 100644
index 000000000..c50f2b1f3
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNullOrEmpty.cs
@@ -0,0 +1,106 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System.Runtime.CompilerServices;
+using System;
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+
+#if PolyPublic
+public
+#endif
+
+static partial class Guard
+{
+ public static string NotNullOrEmpty(
+ [NotNull] string? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+#if NET7_0_OR_GREATER
+ ArgumentException.ThrowIfNullOrEmpty(value, argumentName);
+ return value;
+#else
+ if (value is null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ return value;
+#endif
+ }
+
+ public static T NotNullOrEmpty(
+ [NotNull] T? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ where T : IEnumerable
+ {
+ if (value is null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ NotEmpty(value);
+
+ return value;
+ }
+
+
+#if FeatureMemory
+ public static Memory NotNullOrEmpty(
+ [NotNull] Memory? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value.Value.Span)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return value.Value;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+
+ public static ReadOnlyMemory NotNullOrEmpty(
+ [NotNull] ReadOnlyMemory? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value.Value.Span)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return value.Value;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNullOrWhiteSpace.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNullOrWhiteSpace.cs
new file mode 100644
index 000000000..fc934f6bd
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotNullOrWhiteSpace.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System.Runtime.CompilerServices;
+using System;
+using System.Diagnostics.CodeAnalysis;
+
+#if PolyPublic
+public
+#endif
+
+static partial class Guard
+{
+ public static string NotNullOrWhiteSpace(
+ [NotNull] string? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+#if NET8_0_OR_GREATER
+ ArgumentException.ThrowIfNullOrWhiteSpace(value, argumentName);
+ return value;
+#else
+ if (value == null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return value;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+#endif
+ }
+
+#if FeatureMemory
+ public static Memory NotNullOrWhiteSpace(
+ [NotNull] Memory? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value.Value.Span)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return value.Value;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+
+ public static ReadOnlyMemory NotNullOrWhiteSpace(
+ [NotNull] ReadOnlyMemory? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException(argumentName);
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value.Value.Span)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return value.Value;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotWhiteSpace.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotWhiteSpace.cs
new file mode 100644
index 000000000..40068526c
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Guard/Guard_NotWhiteSpace.cs
@@ -0,0 +1,135 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System.Runtime.CompilerServices;
+using System;
+
+#if PolyPublic
+public
+#endif
+
+static partial class Guard
+{
+ public static void NotWhiteSpace(
+ string? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ return;
+ }
+#if NET8_0_OR_GREATER
+ ArgumentException.ThrowIfNullOrWhiteSpace(value, argumentName);
+#else
+
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+#endif
+ }
+#if FeatureMemory
+
+ public static void NotWhiteSpace(
+ ReadOnlySpan value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+
+ public static void NotWhiteSpace(
+ Memory? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ return;
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value.Value.Span)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+
+ public static void NotWhiteSpace(
+ ReadOnlyMemory? value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value == null)
+ {
+ return;
+ }
+
+ if (value.Value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value.Value.Span)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+
+ public static void NotWhiteSpace(
+ Span value,
+ [CallerArgumentExpression("value")] string argumentName = "")
+ {
+ if (value.Length == 0)
+ {
+ throw new ArgumentException("Argument cannot be empty.", argumentName);
+ }
+
+ foreach (var ch in value)
+ {
+ if (!char.IsWhiteSpace(ch))
+ {
+ return;
+ }
+ }
+
+ throw new ArgumentException("Argument cannot be whitespace.", argumentName);
+ }
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/GuidPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/GuidPolyfill.cs
new file mode 100644
index 000000000..37aa5d4c9
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/GuidPolyfill.cs
@@ -0,0 +1,132 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Security.Cryptography;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class GuidPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.guid.tryparse#system-guid-tryparse(system-string-system-iformatprovider-system-guid@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out Guid result) =>
+#if NET7_0_OR_GREATER
+ Guid.TryParse(target, provider, out result);
+#else
+ Guid.TryParse(target, out result);
+#endif
+
+ /// Creates a new according to RFC 9562, following the Version 7 format.
+ /// A new according to RFC 9562, following the Version 7 format.
+ ///
+ /// This uses to determine the Unix Epoch timestamp source.
+ /// This seeds the rand_a and rand_b sub-fields with random data.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.guid.createversion7#system-guid-createversion7
+ public static Guid CreateVersion7() => CreateVersion7(DateTimeOffset.UtcNow);
+
+ /// Creates a new according to RFC 9562, following the Version 7 format.
+ /// The date time offset used to determine the Unix Epoch timestamp.
+ /// A new according to RFC 9562, following the Version 7 format.
+ /// represents an offset prior to .
+ ///
+ /// This seeds the rand_a and rand_b sub-fields with random data.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.guid.createversion7#system-guid-createversion7(system-datetimeoffset)
+ public static Guid CreateVersion7(DateTimeOffset timestamp)
+ {
+#if NET9_0_OR_GREATER
+ return Guid.CreateVersion7(timestamp);
+#else
+ var unixMilliseconds = timestamp.ToUnixTimeMilliseconds();
+
+ var timeBytes = BitConverter.GetBytes(unixMilliseconds);
+
+ if (BitConverter.IsLittleEndian)
+ {
+ Array.Reverse(timeBytes);
+ }
+
+#if NET8_0_OR_GREATER
+
+ var uuidBytes = new byte[16];
+ timeBytes[2..8].CopyTo(uuidBytes, 0);
+
+ var randomBytes = uuidBytes.AsSpan().Slice(6);
+
+ RandomNumberGenerator.Fill(randomBytes);
+
+ uuidBytes[6] &= 0x0F;
+ uuidBytes[6] += 0x70;
+
+ return new(uuidBytes, true);
+
+#else
+
+ var randomBytes = new byte[10];
+
+ using (var numberGenerator = RandomNumberGenerator.Create())
+ {
+ numberGenerator.GetBytes(randomBytes);
+ }
+
+ var uuidBytes = new byte[16];
+ Array.Copy(timeBytes, 2, uuidBytes, 0, 6);
+ Array.Copy(randomBytes, 0, uuidBytes, 6, 10);
+
+ uuidBytes[6] = (byte)((uuidBytes[6] & 0x0F) | 0x70);
+
+ uuidBytes[8] = (byte)((uuidBytes[8] & 0x3F) | 0x80);
+
+ return new(uuidBytes);
+#endif
+#endif
+ }
+
+#if FeatureMemory
+
+ ///
+ /// Converts span of characters representing the GUID to the equivalent Guid structure, provided that the string is in the specified format.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.guid.tryparseexact#system-guid-tryparseexact(system-readonlyspan((system-char))-system-readonlyspan((system-char))-system-guid@)
+ public static bool TryParseExact(ReadOnlySpan target, ReadOnlySpan format, out Guid result) =>
+#if NETFRAMEWORK || NETCOREAPP2_0 || NETSTANDARD2_0
+ Guid.TryParseExact(target.ToString(), format.ToString(), out result);
+#else
+ Guid.TryParseExact(target, format, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.guid.tryparse#system-guid-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-guid@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out Guid result) =>
+#if NET7_0_OR_GREATER
+ Guid.TryParse(target, provider, out result);
+#else
+ Guid.TryParse(target.ToString(), out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.guid.tryparse#system-guid-tryparse(system-readonlyspan((system-char))-system-guid@)
+ public static bool TryParse(ReadOnlySpan target, out Guid result) =>
+#if NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
+ Guid.TryParse(target, out result);
+#else
+ Guid.TryParse(target.ToString(), out result);
+#endif
+
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IndexRange/Index.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IndexRange/Index.cs
new file mode 100644
index 000000000..184759668
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IndexRange/Index.cs
@@ -0,0 +1,154 @@
+//
+#pragma warning disable
+
+#if (NET46X && FeatureValueTuple) || NET47X || NET48X || NETSTANDARD2_0 || NETCOREAPP2X
+
+namespace System;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Runtime.CompilerServices;
+
+/// Represent a type can be used to index a collection either from the start or the end.
+///
+/// Index is used by the C# compiler to support the new index syntax
+///
+/// int[] someArray = new int[5] { 1, 2, 3, 4, 5 } ;
+/// int lastElement = someArray[^1]; // lastElement = 5
+///
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+readonly struct Index : IEquatable
+{
+ readonly int _value;
+
+ /// Construct an Index using a value and indicating if the index is from the start or from the end.
+ /// The index value. it has to be zero or positive number.
+ /// Indicating if the index is from the start or from the end.
+ ///
+ /// If the Index constructed from the end, index value 1 means pointing at the last element and index value 0 means pointing at beyond last element.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public Index(int value, bool fromEnd = false)
+ {
+ if (value < 0)
+ {
+ throw new ArgumentOutOfRangeException(nameof(value));
+ }
+
+ if (fromEnd)
+ {
+ _value = ~value;
+ }
+ else
+ {
+ _value = value;
+ }
+ }
+
+ // The following private constructors mainly created for perf reason to avoid the checks
+ Index(int value) =>
+ _value = value;
+
+ /// Create an Index pointing at first element.
+ public static Index Start => new(0);
+
+ /// Create an Index pointing at beyond last element.
+ public static Index End => new(~0);
+
+ /// Create an Index from the start at the position indicated by the value.
+ /// The index value from the start.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Index FromStart(int value)
+ {
+ if (value < 0)
+ {
+ throw new IndexOutOfRangeException(nameof(value));
+ }
+
+ return new(value);
+ }
+
+ /// Create an Index from the end at the position indicated by the value.
+ /// The index value from the end.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Index FromEnd(int value)
+ {
+ if (value < 0)
+ {
+ throw new IndexOutOfRangeException(nameof(value));
+ }
+
+ return new(~value);
+ }
+
+ /// Returns the index value.
+ public int Value
+ {
+ get
+ {
+ if (_value < 0)
+ {
+ return ~_value;
+ }
+
+ return _value;
+ }
+ }
+
+ /// Indicates whether the index is from the start or the end.
+ public bool IsFromEnd => _value < 0;
+
+ /// Calculate the offset from the start using the giving collection length.
+ /// The length of the collection that the Index will be used with. length has to be a positive value
+ ///
+ /// For performance reason, we don't validate the input length parameter and the returned offset value against negative values.
+ /// we don't validate either the returned offset is greater than the input length.
+ /// It is expected Index will be used with collections which always have non negative length/count. If the returned offset is negative and
+ /// then used to index a collection will get out of range exception which will be same affect as the validation.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public int GetOffset(int length)
+ {
+ var offset = _value;
+ if (IsFromEnd)
+ {
+ offset += length + 1;
+ }
+
+ return offset;
+ }
+
+ /// Indicates whether the current Index object is equal to another object of the same type.
+ /// An object to compare with this object
+ public override bool Equals(object value) => value is Index index && _value == index._value;
+
+ /// Indicates whether the current Index object is equal to another Index object.
+ /// An object to compare with this object
+ public bool Equals(Index other) => _value == other._value;
+
+ /// Returns the hash code for this instance.
+ public override int GetHashCode() => _value;
+
+ /// Converts integer number to an Index.
+ public static implicit operator Index(int value) => FromStart(value);
+
+ /// Converts the value of the current Index object to its equivalent string representation.
+ public override string ToString()
+ {
+ if (IsFromEnd)
+ {
+ return ToStringFromEnd();
+ }
+
+ return ((uint)Value).ToString();
+ }
+
+ string ToStringFromEnd() =>
+ '^' + Value.ToString();
+}
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IndexRange/Range.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IndexRange/Range.cs
new file mode 100644
index 000000000..4c853ca0f
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IndexRange/Range.cs
@@ -0,0 +1,81 @@
+//
+#pragma warning disable
+
+#if (NET46X && FeatureValueTuple) || NET47X || NET48X || NETSTANDARD2_0 || NETCOREAPP2X
+
+namespace System;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Runtime.CompilerServices;
+
+/// Represent a range has start and end indexes.
+///
+/// Range is used by the C# compiler to support the range syntax.
+///
+/// int[] someArray = new int[5] { 1, 2, 3, 4, 5 };
+/// int[] subArray1 = someArray[0..2]; // { 1, 2 }
+/// int[] subArray2 = someArray[1..^0]; // { 2, 3, 4, 5 }
+///
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+record Range(Index Start, Index End)
+{
+ /// Converts the value of the current Range object to its equivalent string representation.
+ public override string ToString() =>
+ $"{Start}..{End}";
+
+ /// Create a Range object starting from start index to the end of the collection.
+ public static Range StartAt(Index start) => new(start, Index.End);
+
+ /// Create a Range object starting from first element in the collection to the end Index.
+ public static Range EndAt(Index end) => new(Index.Start, end);
+
+ /// Create a Range object starting from first element to the end.
+ public static Range All => new(Index.Start, Index.End);
+
+ /// Calculate the start offset and length of range object using a collection length.
+ /// The length of the collection that the range will be used with. length has to be a positive value.
+ ///
+ /// For performance reason, we don't validate the input length parameter against negative values.
+ /// It is expected Range will be used with collections which always have non negative length/count.
+ /// We validate the range is inside the length scope though.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public (int Offset, int Length) GetOffsetAndLength(int length)
+ {
+ int start;
+ var startIndex = Start;
+ if (startIndex.IsFromEnd)
+ {
+ start = length - startIndex.Value;
+ }
+ else
+ {
+ start = startIndex.Value;
+ }
+
+ int end;
+ var endIndex = End;
+ if (endIndex.IsFromEnd)
+ {
+ end = length - endIndex.Value;
+ }
+ else
+ {
+ end = endIndex.Value;
+ }
+
+ if ((uint)end > (uint)length || (uint)start > (uint)end)
+ {
+ throw new ArgumentOutOfRangeException(nameof(length));
+ }
+
+ return (start, end - start);
+ }
+}
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IsExternalInit.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IsExternalInit.cs
new file mode 100644
index 000000000..10bc30604
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/IsExternalInit.cs
@@ -0,0 +1,22 @@
+//
+#pragma warning disable
+
+#if !NET5_0_OR_GREATER
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// Reserved to be used by the compiler for tracking metadata. This class should not be used by developers in source code.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.isexternalinit
+#if PolyPublic
+public
+#endif
+static class IsExternalInit;
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/KeyValuePair.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/KeyValuePair.cs
new file mode 100644
index 000000000..6d704f6a4
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/KeyValuePair.cs
@@ -0,0 +1,34 @@
+//
+#pragma warning disable
+
+#if (NETFRAMEWORK || NETSTANDARD2_0)
+
+#nullable enable
+
+namespace System.Collections.Generic;
+
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+// Provides the Create factory method for KeyValuePair.
+// https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.keyvaluepair
+#if PolyPublic
+public
+#endif
+static class KeyValuePair
+{
+ ///
+ /// Creates a new key/value pair instance using provided values.
+ ///
+ /// The key of the new to be created.
+ /// The value of the new to be created.
+ /// The type of the key.
+ /// The type of the value.
+ /// A key/value pair containing the provided arguments as values.
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.keyvaluepair.create
+ public static KeyValuePair Create(TKey key, TValue value) =>
+ new KeyValuePair(key, value);
+}
+#endif
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Lock.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Lock.cs
new file mode 100644
index 000000000..64bfcd991
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Lock.cs
@@ -0,0 +1,182 @@
+//
+#pragma warning disable
+
+#nullable enable
+
+#if !NET9_0_OR_GREATER
+
+namespace System.Threading;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+///
+/// Provides a way to get mutual exclusion in regions of code between different threads. A lock may be held by one thread at
+/// a time.
+///
+///
+/// Threads that cannot immediately enter the lock may wait for the lock to be exited or until a specified timeout. A thread
+/// that holds a lock may enter the lock repeatedly without exiting it, such as recursively, in which case the thread should
+/// eventually exit the lock the same number of times to fully exit the lock and allow other threads to enter the lock.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.threading.lock
+#if PolyPublic
+public
+#endif
+class Lock
+{
+#if NETCOREAPP || NETFRAMEWORK || NETSTANDARD
+ public bool IsHeldByCurrentThread => Monitor.IsEntered(this);
+#endif
+
+ ///
+ /// Enters the lock. Once the method returns, the calling thread would be the only thread that holds the lock.
+ ///
+ ///
+ /// If the lock cannot be entered immediately, the calling thread waits for the lock to be exited. If the lock is
+ /// already held by the calling thread, the lock is entered again. The calling thread should exit the lock as many times
+ /// as it had entered the lock to fully exit the lock and allow other threads to enter the lock.
+ ///
+ ///
+ /// The lock has reached the limit of recursive enters. The limit is implementation-defined, but is expected to be high
+ /// enough that it would typically not be reached when the lock is used properly.
+ ///
+ public void Enter() => Monitor.Enter(this);
+
+ ///
+ /// Tries to enter the lock without waiting. If the lock is entered, the calling thread would be the only thread that
+ /// holds the lock.
+ ///
+ ///
+ /// true if the lock was entered, false otherwise.
+ ///
+ ///
+ /// If the lock cannot be entered immediately, the method returns false. If the lock is already held by the
+ /// calling thread, the lock is entered again. The calling thread should exit the lock as many times as it had entered
+ /// the lock to fully exit the lock and allow other threads to enter the lock.
+ ///
+ ///
+ /// The lock has reached the limit of recursive enters. The limit is implementation-defined, but is expected to be high
+ /// enough that it would typically not be reached when the lock is used properly.
+ ///
+ public bool TryEnter() => Monitor.TryEnter(this);
+
+ ///
+ /// Tries to enter the lock, waiting for roughly the specified duration. If the lock is entered, the calling thread
+ /// would be the only thread that holds the lock.
+ ///
+ ///
+ /// The rough duration for which the method will wait if the lock is not available. The timeout is converted to a number
+ /// of milliseconds by casting of the timeout to an integer value. A value
+ /// representing 0 milliseconds specifies that the method should not wait, and a value representing
+ /// or -1 milliseconds specifies that the method should wait indefinitely
+ /// until the lock is entered.
+ ///
+ ///
+ /// true if the lock was entered, false otherwise.
+ ///
+ ///
+ /// If the lock cannot be entered immediately, the calling thread waits for roughly the specified duration for the lock
+ /// to be exited. If the lock is already held by the calling thread, the lock is entered again. The calling thread
+ /// should exit the lock as many times as it had entered the lock to fully exit the lock and allow other threads to
+ /// enter the lock.
+ ///
+ ///
+ /// , after its conversion to an integer millisecond value, represents a value that is less
+ /// than -1 milliseconds or greater than milliseconds.
+ ///
+ ///
+ /// The lock has reached the limit of recursive enters. The limit is implementation-defined, but is expected to be high
+ /// enough that it would typically not be reached when the lock is used properly.
+ ///
+ public bool TryEnter(TimeSpan timeout) =>
+ Monitor.TryEnter(this, timeout);
+
+ ///
+ /// Tries to enter the lock, waiting for roughly the specified duration. If the lock is entered, the calling thread
+ /// would be the only thread that holds the lock.
+ ///
+ ///
+ /// The rough duration in milliseconds for which the method will wait if the lock is not available. A value of
+ /// 0 specifies that the method should not wait, and a value of or
+ /// -1 specifies that the method should wait indefinitely until the lock is entered.
+ ///
+ ///
+ /// true if the lock was entered, false otherwise.
+ ///
+ ///
+ /// If the lock cannot be entered immediately, the calling thread waits for roughly the specified duration for the lock
+ /// to be exited. If the lock is already held by the calling thread, the lock is entered again. The calling thread
+ /// should exit the lock as many times as it had entered the lock to fully exit the lock and allow other threads to
+ /// enter the lock.
+ ///
+ ///
+ /// is less than -1.
+ ///
+ ///
+ /// The lock has reached the limit of recursive enters. The limit is implementation-defined, but is expected to be high
+ /// enough that it would typically not be reached when the lock is used properly.
+ ///
+ public bool TryEnter(int millisecondsTimeout) =>
+ TryEnter(TimeSpan.FromMilliseconds(millisecondsTimeout));
+
+ ///
+ /// Exits the lock.
+ ///
+ ///
+ /// If the calling thread holds the lock multiple times, such as recursively, the lock is exited only once. The
+ /// calling thread should ensure that each enter is matched with an exit.
+ ///
+ ///
+ /// The calling thread does not hold the lock.
+ ///
+ public void Exit() => Monitor.Exit(this);
+
+ ///
+ /// Enters the lock and returns a that may be disposed to exit the lock. Once the method returns,
+ /// the calling thread would be the only thread that holds the lock. This method is intended to be used along with a
+ /// language construct that would automatically dispose the , such as with the C# using
+ /// statement.
+ ///
+ ///
+ /// A that may be disposed to exit the lock.
+ ///
+ ///
+ /// If the lock cannot be entered immediately, the calling thread waits for the lock to be exited. If the lock is
+ /// already held by the calling thread, the lock is entered again. The calling thread should exit the lock, such as by
+ /// disposing the returned , as many times as it had entered the lock to fully exit the lock and
+ /// allow other threads to enter the lock.
+ ///
+ ///
+ /// The lock has reached the limit of recursive enters. The limit is implementation-defined, but is expected to be high
+ /// enough that it would typically not be reached when the lock is used properly.
+ ///
+ public Scope EnterScope()
+ {
+ Enter();
+ return new Scope(this);
+ }
+
+ ///
+ /// A disposable structure that is returned by , which when disposed, exits the lock.
+ ///
+ public readonly ref struct Scope(Lock owner)
+ {
+ ///
+ /// Exits the lock.
+ ///
+ ///
+ /// If the calling thread holds the lock multiple times, such as recursively, the lock is exited only once. The
+ /// calling thread should ensure that each enter is matched with an exit.
+ ///
+ ///
+ /// The calling thread does not hold the lock.
+ ///
+ public void Dispose() => owner.Exit();
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ModuleInitializerAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ModuleInitializerAttribute.cs
new file mode 100644
index 000000000..eb6d30a64
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ModuleInitializerAttribute.cs
@@ -0,0 +1,42 @@
+//
+#pragma warning disable
+
+#if !NET5_0_OR_GREATER
+
+namespace System.Runtime.CompilerServices;
+
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+
+///
+/// Used to indicate to the compiler that a method should be called
+/// in its containing module's initializer.
+///
+///
+/// When one or more valid methods
+/// with this attribute are found in a compilation, the compiler will
+/// emit a module initializer which calls each of the attributed methods.
+///
+/// Certain requirements are imposed on any method targeted with this attribute:
+/// - The method must be `static`.
+/// - The method must be an ordinary member method, as opposed to a property accessor, constructor, local function, etc.
+/// - The method must be parameterless.
+/// - The method must return `void`.
+/// - The method must not be generic or be contained in a generic type.
+/// - The method's effective accessibility must be `internal` or `public`.
+///
+/// The specification for module initializers in the .NET runtime can be found here:
+/// https://github.com/dotnet/runtime/blob/master/docs/design/specs/Ecma-335-Augments.md#module-initializer
+///
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.moduleinitializerattribute
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: AttributeTargets.Method,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class ModuleInitializerAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfo.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfo.cs
new file mode 100644
index 000000000..997770a41
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfo.cs
@@ -0,0 +1,81 @@
+//
+#pragma warning disable
+
+#if !NET6_0_OR_GREATER
+
+#nullable enable
+
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace System.Reflection;
+
+using Diagnostics.CodeAnalysis;
+using Diagnostics;
+
+///
+/// A class that represents nullability info
+///
+[DebuggerNonUserCode]
+[ExcludeFromCodeCoverage]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.reflection.nullabilityinfo
+#if PolyPublic
+public
+#endif
+sealed class NullabilityInfo
+{
+ internal NullabilityInfo(Type type, NullabilityState readState, NullabilityState writeState, NullabilityInfo? elementType, NullabilityInfo[] typeArguments)
+ {
+ Type = type;
+ ReadState = readState;
+ WriteState = writeState;
+ ElementType = elementType;
+ GenericTypeArguments = typeArguments;
+ }
+
+ ///
+ /// The of the member or generic parameter
+ /// to which this NullabilityInfo belongs
+ ///
+ public Type Type { get; }
+ ///
+ /// The nullability read state of the member
+ ///
+ public NullabilityState ReadState { get; internal set; }
+ ///
+ /// The nullability write state of the member
+ ///
+ public NullabilityState WriteState { get; internal set; }
+ ///
+ /// If the member type is an array, gives the of the elements of the array, null otherwise
+ ///
+ public NullabilityInfo? ElementType { get; }
+ ///
+ /// If the member type is a generic type, gives the array of for each type parameter
+ ///
+ public NullabilityInfo[] GenericTypeArguments { get; }
+}
+
+///
+/// An enum that represents nullability state
+///
+#if PolyPublic
+public
+#endif
+enum NullabilityState
+{
+ ///
+ /// Nullability context not enabled (oblivious)
+ ///
+ Unknown,
+ ///
+ /// Non nullable value or reference type
+ ///
+ NotNull,
+ ///
+ /// Nullable value or reference type
+ ///
+ Nullable
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfoContext.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfoContext.cs
new file mode 100644
index 000000000..6c4829fb2
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfoContext.cs
@@ -0,0 +1,669 @@
+//
+#pragma warning disable
+
+#if !NET6_0_OR_GREATER
+
+#nullable enable
+
+namespace System.Reflection;
+
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Collections.Generic;
+using Collections.ObjectModel;
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// Provides APIs for populating nullability information/context from reflection members:
+/// , , and .
+///
+[DebuggerNonUserCode]
+[ExcludeFromCodeCoverage]
+#if PolyPublic
+public
+#endif
+sealed class NullabilityInfoContext
+{
+ const string CompilerServicesNameSpace = "System.Runtime.CompilerServices";
+ Dictionary _publicOnlyModules = new();
+ Dictionary _context = new();
+
+ internal static bool IsSupported { get; } =
+ AppContext.TryGetSwitch("System.Reflection.NullabilityInfoContext.IsSupported", out bool isSupported) ? isSupported : true;
+
+ [Flags]
+ enum NotAnnotatedStatus
+ {
+ // no restriction, all members annotated
+ None = 0x0,
+
+ // private members not annotated
+ Private = 0x1,
+
+ // internal members not annotated
+ Internal = 0x2
+ }
+
+ NullabilityState? GetNullableContext(MemberInfo? memberInfo)
+ {
+ while (memberInfo != null)
+ {
+ if (_context.TryGetValue(memberInfo, out NullabilityState state))
+ {
+ return state;
+ }
+
+ foreach (CustomAttributeData attribute in memberInfo.GetCustomAttributesData())
+ {
+ if (attribute.AttributeType.Name == "NullableContextAttribute" &&
+ attribute.AttributeType.Namespace == CompilerServicesNameSpace &&
+ attribute.ConstructorArguments.Count == 1)
+ {
+ state = TranslateByte(attribute.ConstructorArguments[0].Value);
+ _context.Add(memberInfo, state);
+ return state;
+ }
+ }
+
+ memberInfo = memberInfo.DeclaringType;
+ }
+
+ return null;
+ }
+
+ ///
+ /// Populates for the given .
+ /// If the nullablePublicOnly feature is set for an assembly, like it does in .NET SDK, the private and/or internal member's
+ /// nullability attributes are omitted, in this case the API will return NullabilityState.Unknown state.
+ ///
+ /// The parameter which nullability info gets populated
+ /// If the parameterInfo parameter is null
+ ///
+ public NullabilityInfo Create(ParameterInfo parameterInfo)
+ {
+ EnsureIsSupported();
+
+ IList attributes = parameterInfo.GetCustomAttributesData();
+ NullableAttributeStateParser parser = parameterInfo.Member is MethodBase method && IsPrivateOrInternalMethodAndAnnotationDisabled(method)
+ ? NullableAttributeStateParser.Unknown
+ : CreateParser(attributes);
+ NullabilityInfo nullability = GetNullabilityInfo(parameterInfo.Member, parameterInfo.ParameterType, parser);
+
+ if (nullability.ReadState != NullabilityState.Unknown)
+ {
+ CheckParameterMetadataType(parameterInfo, nullability);
+ }
+
+ CheckNullabilityAttributes(nullability, attributes);
+ return nullability;
+ }
+
+ void CheckParameterMetadataType(ParameterInfo parameter, NullabilityInfo nullability)
+ {
+ ParameterInfo? metaParameter;
+ MemberInfo metaMember;
+
+ switch (parameter.Member)
+ {
+ case ConstructorInfo ctor:
+ var metaCtor = (ConstructorInfo)GetMemberMetadataDefinition(ctor);
+ metaMember = metaCtor;
+ metaParameter = GetMetaParameter(metaCtor, parameter);
+ break;
+
+ case MethodInfo method:
+ MethodInfo metaMethod = GetMethodMetadataDefinition(method);
+ metaMember = metaMethod;
+ metaParameter = string.IsNullOrEmpty(parameter.Name) ? metaMethod.ReturnParameter : GetMetaParameter(metaMethod, parameter);
+ break;
+
+ default:
+ return;
+ }
+
+ if (metaParameter != null)
+ {
+ CheckGenericParameters(nullability, metaMember, metaParameter.ParameterType, parameter.Member.ReflectedType);
+ }
+ }
+
+ static ParameterInfo? GetMetaParameter(MethodBase metaMethod, ParameterInfo parameter)
+ {
+ var parameters = metaMethod.GetParameters();
+ for (int i = 0; i < parameters.Length; i++)
+ {
+ if (parameter.Position == i &&
+ parameter.Name == parameters[i].Name)
+ {
+ return parameters[i];
+ }
+ }
+
+ return null;
+ }
+
+ static MethodInfo GetMethodMetadataDefinition(MethodInfo method)
+ {
+ if (method.IsGenericMethod && !method.IsGenericMethodDefinition)
+ {
+ method = method.GetGenericMethodDefinition();
+ }
+
+ return (MethodInfo)GetMemberMetadataDefinition(method);
+ }
+
+ static void CheckNullabilityAttributes(NullabilityInfo nullability, IList attributes)
+ {
+ var codeAnalysisReadState = NullabilityState.Unknown;
+ var codeAnalysisWriteState = NullabilityState.Unknown;
+
+ foreach (CustomAttributeData attribute in attributes)
+ {
+ if (attribute.AttributeType.Namespace == "System.Diagnostics.CodeAnalysis")
+ {
+ if (attribute.AttributeType.Name == "NotNullAttribute")
+ {
+ codeAnalysisReadState = NullabilityState.NotNull;
+ }
+ else if ((attribute.AttributeType.Name == "MaybeNullAttribute" ||
+ attribute.AttributeType.Name == "MaybeNullWhenAttribute") &&
+ codeAnalysisReadState == NullabilityState.Unknown &&
+ !IsValueTypeOrValueTypeByRef(nullability.Type))
+ {
+ codeAnalysisReadState = NullabilityState.Nullable;
+ }
+ else if (attribute.AttributeType.Name == "DisallowNullAttribute")
+ {
+ codeAnalysisWriteState = NullabilityState.NotNull;
+ }
+ else if (attribute.AttributeType.Name == "AllowNullAttribute" &&
+ codeAnalysisWriteState == NullabilityState.Unknown &&
+ !IsValueTypeOrValueTypeByRef(nullability.Type))
+ {
+ codeAnalysisWriteState = NullabilityState.Nullable;
+ }
+ }
+ }
+
+ if (codeAnalysisReadState != NullabilityState.Unknown)
+ {
+ nullability.ReadState = codeAnalysisReadState;
+ }
+ if (codeAnalysisWriteState != NullabilityState.Unknown)
+ {
+ nullability.WriteState = codeAnalysisWriteState;
+ }
+ }
+
+ ///
+ /// Populates for the given .
+ /// If the nullablePublicOnly feature is set for an assembly, like it does in .NET SDK, the private and/or internal member's
+ /// nullability attributes are omitted, in this case the API will return NullabilityState.Unknown state.
+ ///
+ /// The parameter which nullability info gets populated
+ /// If the propertyInfo parameter is null
+ ///
+ public NullabilityInfo Create(PropertyInfo propertyInfo)
+ {
+ EnsureIsSupported();
+
+ MethodInfo? getter = propertyInfo.GetGetMethod(true);
+ MethodInfo? setter = propertyInfo.GetSetMethod(true);
+ bool annotationsDisabled = (getter == null || IsPrivateOrInternalMethodAndAnnotationDisabled(getter))
+ && (setter == null || IsPrivateOrInternalMethodAndAnnotationDisabled(setter));
+ NullableAttributeStateParser parser = annotationsDisabled ? NullableAttributeStateParser.Unknown : CreateParser(propertyInfo.GetCustomAttributesData());
+ NullabilityInfo nullability = GetNullabilityInfo(propertyInfo, propertyInfo.PropertyType, parser);
+
+ if (getter != null)
+ {
+ CheckNullabilityAttributes(nullability, getter.ReturnParameter.GetCustomAttributesData());
+ }
+ else
+ {
+ nullability.ReadState = NullabilityState.Unknown;
+ }
+
+ if (setter != null)
+ {
+ var parameters = setter.GetParameters();
+
+ CheckNullabilityAttributes(nullability, parameters[parameters.Length-1].GetCustomAttributesData());
+ }
+ else
+ {
+ nullability.WriteState = NullabilityState.Unknown;
+ }
+
+ return nullability;
+ }
+
+ bool IsPrivateOrInternalMethodAndAnnotationDisabled(MethodBase method) =>
+ (method.IsPrivate || method.IsFamilyAndAssembly || method.IsAssembly) &&
+ IsPublicOnly(method.IsPrivate, method.IsFamilyAndAssembly, method.IsAssembly, method.Module);
+
+ ///
+ /// Populates for the given .
+ /// If the nullablePublicOnly feature is set for an assembly, like it does in .NET SDK, the private and/or internal member's
+ /// nullability attributes are omitted, in this case the API will return NullabilityState.Unknown state.
+ ///
+ /// The parameter which nullability info gets populated
+ /// If the eventInfo parameter is null
+ ///
+ public NullabilityInfo Create(EventInfo eventInfo)
+ {
+ EnsureIsSupported();
+
+ return GetNullabilityInfo(eventInfo, eventInfo.EventHandlerType!, CreateParser(eventInfo.GetCustomAttributesData()));
+ }
+
+ ///
+ /// Populates for the given
+ /// If the nullablePublicOnly feature is set for an assembly, like it does in .NET SDK, the private and/or internal member's
+ /// nullability attributes are omitted, in this case the API will return NullabilityState.Unknown state.
+ ///
+ /// The parameter which nullability info gets populated
+ /// If the fieldInfo parameter is null
+ ///
+ public NullabilityInfo Create(FieldInfo fieldInfo)
+ {
+ EnsureIsSupported();
+
+ IList attributes = fieldInfo.GetCustomAttributesData();
+ NullableAttributeStateParser parser = IsPrivateOrInternalFieldAndAnnotationDisabled(fieldInfo) ? NullableAttributeStateParser.Unknown : CreateParser(attributes);
+ NullabilityInfo nullability = GetNullabilityInfo(fieldInfo, fieldInfo.FieldType, parser);
+ CheckNullabilityAttributes(nullability, attributes);
+ return nullability;
+ }
+
+ static void EnsureIsSupported()
+ {
+ if (!IsSupported)
+ {
+ throw new InvalidOperationException("NullabilityInfoContext is not supported");
+ }
+ }
+
+ bool IsPrivateOrInternalFieldAndAnnotationDisabled(FieldInfo fieldInfo) =>
+ (fieldInfo.IsPrivate || fieldInfo.IsFamilyAndAssembly || fieldInfo.IsAssembly) &&
+ IsPublicOnly(fieldInfo.IsPrivate, fieldInfo.IsFamilyAndAssembly, fieldInfo.IsAssembly, fieldInfo.Module);
+
+ bool IsPublicOnly(bool isPrivate, bool isFamilyAndAssembly, bool isAssembly, Module module)
+ {
+ if (!_publicOnlyModules.TryGetValue(module, out NotAnnotatedStatus value))
+ {
+ value = PopulateAnnotationInfo(module.GetCustomAttributesData());
+ _publicOnlyModules.Add(module, value);
+ }
+
+ if (value == NotAnnotatedStatus.None)
+ {
+ return false;
+ }
+
+ if ((isPrivate || isFamilyAndAssembly) && value.HasFlag(NotAnnotatedStatus.Private) ||
+ isAssembly && value.HasFlag(NotAnnotatedStatus.Internal))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ static NotAnnotatedStatus PopulateAnnotationInfo(IList customAttributes)
+ {
+ foreach (CustomAttributeData attribute in customAttributes)
+ {
+ if (attribute.AttributeType.Name == "NullablePublicOnlyAttribute" &&
+ attribute.AttributeType.Namespace == CompilerServicesNameSpace &&
+ attribute.ConstructorArguments.Count == 1)
+ {
+ if (attribute.ConstructorArguments[0].Value is bool boolValue && boolValue)
+ {
+ return NotAnnotatedStatus.Internal | NotAnnotatedStatus.Private;
+ }
+ else
+ {
+ return NotAnnotatedStatus.Private;
+ }
+ }
+ }
+
+ return NotAnnotatedStatus.None;
+ }
+
+ NullabilityInfo GetNullabilityInfo(MemberInfo memberInfo, Type type, NullableAttributeStateParser parser)
+ {
+ int index = 0;
+ NullabilityInfo nullability = GetNullabilityInfo(memberInfo, type, parser, ref index);
+
+ if (nullability.ReadState != NullabilityState.Unknown)
+ {
+ TryLoadGenericMetaTypeNullability(memberInfo, nullability);
+ }
+
+ return nullability;
+ }
+
+ NullabilityInfo GetNullabilityInfo(MemberInfo memberInfo, Type type, NullableAttributeStateParser parser, ref int index)
+ {
+ NullabilityState state = NullabilityState.Unknown;
+ NullabilityInfo? elementState = null;
+ NullabilityInfo[] genericArgumentsState = Array.Empty();
+ Type underlyingType = type;
+
+ if (underlyingType.IsByRef || underlyingType.IsPointer)
+ {
+ underlyingType = underlyingType.GetElementType()!;
+ }
+
+ if (underlyingType.IsValueType)
+ {
+ if (Nullable.GetUnderlyingType(underlyingType) is { } nullableUnderlyingType)
+ {
+ underlyingType = nullableUnderlyingType;
+ state = NullabilityState.Nullable;
+ }
+ else
+ {
+ state = NullabilityState.NotNull;
+ }
+
+ if (underlyingType.IsGenericType)
+ {
+ ++index;
+ }
+ }
+ else
+ {
+ if (!parser.ParseNullableState(index++, ref state)
+ && GetNullableContext(memberInfo) is { } contextState)
+ {
+ state = contextState;
+ }
+
+ if (underlyingType.IsArray)
+ {
+ elementState = GetNullabilityInfo(memberInfo, underlyingType.GetElementType()!, parser, ref index);
+ }
+ }
+
+ if (underlyingType.IsGenericType)
+ {
+ Type[] genericArguments = underlyingType.GetGenericArguments();
+ genericArgumentsState = new NullabilityInfo[genericArguments.Length];
+
+ for (int i = 0; i < genericArguments.Length; i++)
+ {
+ genericArgumentsState[i] = GetNullabilityInfo(memberInfo, genericArguments[i], parser, ref index);
+ }
+ }
+
+ return new NullabilityInfo(type, state, state, elementState, genericArgumentsState);
+ }
+
+ static NullableAttributeStateParser CreateParser(IList customAttributes)
+ {
+ foreach (CustomAttributeData attribute in customAttributes)
+ {
+ if (attribute.AttributeType.Name == "NullableAttribute" &&
+ attribute.AttributeType.Namespace == CompilerServicesNameSpace &&
+ attribute.ConstructorArguments.Count == 1)
+ {
+ return new NullableAttributeStateParser(attribute.ConstructorArguments[0].Value);
+ }
+ }
+
+ return new NullableAttributeStateParser(null);
+ }
+
+ void TryLoadGenericMetaTypeNullability(MemberInfo memberInfo, NullabilityInfo nullability)
+ {
+ MemberInfo? metaMember = GetMemberMetadataDefinition(memberInfo);
+ Type? metaType = null;
+ if (metaMember is FieldInfo field)
+ {
+ metaType = field.FieldType;
+ }
+ else if (metaMember is PropertyInfo property)
+ {
+ metaType = GetPropertyMetaType(property);
+ }
+
+ if (metaType != null)
+ {
+ CheckGenericParameters(nullability, metaMember!, metaType, memberInfo.ReflectedType);
+ }
+ }
+
+ static MemberInfo GetMemberMetadataDefinition(MemberInfo member)
+ {
+ Type? type = member.DeclaringType;
+ if ((type != null) &&
+ type.IsGenericType &&
+ !type.IsGenericTypeDefinition)
+ {
+ return type.GetGenericTypeDefinition().GetMemberWithSameMetadataDefinitionAs(member);
+ }
+
+ return member;
+ }
+
+ static Type GetPropertyMetaType(PropertyInfo property)
+ {
+ if (property.GetGetMethod(true) is MethodInfo method)
+ {
+ return method.ReturnType;
+ }
+
+ return property.GetSetMethod(true)!.GetParameters()[0].ParameterType;
+ }
+
+ void CheckGenericParameters(NullabilityInfo nullability, MemberInfo metaMember, Type metaType, Type? reflectedType)
+ {
+ if (metaType.IsGenericParameter)
+ {
+ if (nullability.ReadState == NullabilityState.NotNull)
+ {
+ TryUpdateGenericParameterNullability(nullability, metaType, reflectedType);
+ }
+ }
+ else if (metaType.ContainsGenericParameters)
+ {
+ if (nullability.GenericTypeArguments.Length > 0)
+ {
+ Type[] genericArguments = metaType.GetGenericArguments();
+
+ for (int i = 0; i < genericArguments.Length; i++)
+ {
+ CheckGenericParameters(nullability.GenericTypeArguments[i], metaMember, genericArguments[i], reflectedType);
+ }
+ }
+ else if (nullability.ElementType is { } elementNullability && metaType.IsArray)
+ {
+ CheckGenericParameters(elementNullability, metaMember, metaType.GetElementType()!, reflectedType);
+ }
+ // We could also follow this branch for metaType.IsPointer, but since pointers must be unmanaged this
+ // will be a no-op regardless
+ else if (metaType.IsByRef)
+ {
+ CheckGenericParameters(nullability, metaMember, metaType.GetElementType()!, reflectedType);
+ }
+ }
+ }
+
+ bool TryUpdateGenericParameterNullability(NullabilityInfo nullability, Type genericParameter, Type? reflectedType)
+ {
+ Debug.Assert(genericParameter.IsGenericParameter);
+
+ if (reflectedType is not null
+ && !genericParameter.IsGenericMethodParameter()
+ && TryUpdateGenericTypeParameterNullabilityFromReflectedType(nullability, genericParameter, reflectedType, reflectedType))
+ {
+ return true;
+ }
+
+ if (IsValueTypeOrValueTypeByRef(nullability.Type))
+ {
+ return true;
+ }
+
+ var state = NullabilityState.Unknown;
+ if (CreateParser(genericParameter.GetCustomAttributesData()).ParseNullableState(0, ref state))
+ {
+ nullability.ReadState = state;
+ nullability.WriteState = state;
+ return true;
+ }
+
+ if (GetNullableContext(genericParameter) is { } contextState)
+ {
+ nullability.ReadState = contextState;
+ nullability.WriteState = contextState;
+ return true;
+ }
+
+ return false;
+ }
+
+ bool TryUpdateGenericTypeParameterNullabilityFromReflectedType(NullabilityInfo nullability, Type genericParameter, Type context, Type reflectedType)
+ {
+ Debug.Assert(genericParameter.IsGenericParameter && !genericParameter.IsGenericMethodParameter());
+
+ Type contextTypeDefinition = context.IsGenericType && !context.IsGenericTypeDefinition ? context.GetGenericTypeDefinition() : context;
+ if (genericParameter.DeclaringType == contextTypeDefinition)
+ {
+ return false;
+ }
+
+ Type? baseType = contextTypeDefinition.BaseType;
+ if (baseType is null)
+ {
+ return false;
+ }
+
+ if (!baseType.IsGenericType
+ || (baseType.IsGenericTypeDefinition ? baseType : baseType.GetGenericTypeDefinition()) != genericParameter.DeclaringType)
+ {
+ return TryUpdateGenericTypeParameterNullabilityFromReflectedType(nullability, genericParameter, baseType, reflectedType);
+ }
+
+ Type[] genericArguments = baseType.GetGenericArguments();
+ Type genericArgument = genericArguments[genericParameter.GenericParameterPosition];
+ if (genericArgument.IsGenericParameter)
+ {
+ return TryUpdateGenericParameterNullability(nullability, genericArgument, reflectedType);
+ }
+
+ NullableAttributeStateParser parser = CreateParser(contextTypeDefinition.GetCustomAttributesData());
+ int nullabilityStateIndex = 1; // start at 1 since index 0 is the type itself
+ for (int i = 0; i < genericParameter.GenericParameterPosition; i++)
+ {
+ nullabilityStateIndex += CountNullabilityStates(genericArguments[i]);
+ }
+ return TryPopulateNullabilityInfo(nullability, parser, ref nullabilityStateIndex);
+
+ static int CountNullabilityStates(Type type)
+ {
+ Type underlyingType = Nullable.GetUnderlyingType(type) ?? type;
+ if (underlyingType.IsGenericType)
+ {
+ int count = 1;
+ foreach (Type genericArgument in underlyingType.GetGenericArguments())
+ {
+ count += CountNullabilityStates(genericArgument);
+ }
+ return count;
+ }
+
+ if (underlyingType.HasElementType)
+ {
+ return (underlyingType.IsArray ? 1 : 0) + CountNullabilityStates(underlyingType.GetElementType()!);
+ }
+
+ return type.IsValueType ? 0 : 1;
+ }
+ }
+
+ static bool TryPopulateNullabilityInfo(NullabilityInfo nullability, NullableAttributeStateParser parser, ref int index)
+ {
+ bool isValueType = IsValueTypeOrValueTypeByRef(nullability.Type);
+ if (!isValueType)
+ {
+ var state = NullabilityState.Unknown;
+ if (!parser.ParseNullableState(index, ref state))
+ {
+ return false;
+ }
+
+ nullability.ReadState = state;
+ nullability.WriteState = state;
+ }
+
+ if (!isValueType || (Nullable.GetUnderlyingType(nullability.Type) ?? nullability.Type).IsGenericType)
+ {
+ index++;
+ }
+
+ if (nullability.GenericTypeArguments.Length > 0)
+ {
+ foreach (NullabilityInfo genericTypeArgumentNullability in nullability.GenericTypeArguments)
+ {
+ TryPopulateNullabilityInfo(genericTypeArgumentNullability, parser, ref index);
+ }
+ }
+ else if (nullability.ElementType is { } elementTypeNullability)
+ {
+ TryPopulateNullabilityInfo(elementTypeNullability, parser, ref index);
+ }
+
+ return true;
+ }
+
+ static NullabilityState TranslateByte(object? value) =>
+ value is byte b ? TranslateByte(b) : NullabilityState.Unknown;
+
+ static NullabilityState TranslateByte(byte b) =>
+ b switch
+ {
+ 1 => NullabilityState.NotNull,
+ 2 => NullabilityState.Nullable,
+ _ => NullabilityState.Unknown
+ };
+
+ static bool IsValueTypeOrValueTypeByRef(Type type) =>
+ type.IsValueType || ((type.IsByRef || type.IsPointer) && type.GetElementType()!.IsValueType);
+
+ readonly struct NullableAttributeStateParser
+ {
+ static readonly object UnknownByte = (byte)0;
+
+ readonly object? _nullableAttributeArgument;
+
+ public NullableAttributeStateParser(object? nullableAttributeArgument)
+ {
+ this._nullableAttributeArgument = nullableAttributeArgument;
+ }
+
+ public static NullableAttributeStateParser Unknown => new(UnknownByte);
+
+ public bool ParseNullableState(int index, ref NullabilityState state)
+ {
+ switch (this._nullableAttributeArgument)
+ {
+ case byte b:
+ state = TranslateByte(b);
+ return true;
+ case ReadOnlyCollection args
+ when index < args.Count && args[index].Value is byte elementB:
+ state = TranslateByte(elementB);
+ return true;
+ default:
+ return false;
+ }
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfoExtensions.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfoExtensions.cs
new file mode 100644
index 000000000..ec0cc0c70
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullability/NullabilityInfoExtensions.cs
@@ -0,0 +1,154 @@
+//
+#pragma warning disable
+
+#nullable enable
+
+namespace Polyfills;
+using System;
+using System.Collections.Concurrent;
+using System.Reflection;
+
+///
+/// Static and thread safe wrapper around NullabilityInfoContext.
+///
+#if PolyPublic
+public
+#endif
+static partial class Polyfill
+{
+ static ConcurrentDictionary parameters = [];
+ static ConcurrentDictionary properties = [];
+ static ConcurrentDictionary events = [];
+ static ConcurrentDictionary fields = [];
+
+ public static NullabilityInfo GetNullabilityInfo(this MemberInfo info)
+ {
+ if (info is PropertyInfo propertyInfo)
+ {
+ return propertyInfo.GetNullabilityInfo();
+ }
+
+ if (info is EventInfo eventInfo)
+ {
+ return eventInfo.GetNullabilityInfo();
+ }
+
+ if (info is FieldInfo fieldInfo)
+ {
+ return fieldInfo.GetNullabilityInfo();
+ }
+
+ throw new ArgumentException($"Unsupported type:{info.GetType().FullName}");
+ }
+
+ public static NullabilityState GetNullability(this MemberInfo info) =>
+ GetReadOrWriteState(info.GetNullabilityInfo());
+
+ public static bool IsNullable(this MemberInfo info)
+ {
+ var nullability = info.GetNullabilityInfo();
+ return IsNullable(info.Name, nullability);
+ }
+
+ public static NullabilityInfo GetNullabilityInfo(this FieldInfo info) =>
+ fields.GetOrAdd(
+ info,
+ static inner =>
+ {
+ var context = new NullabilityInfoContext();
+ return context.Create(inner);
+ });
+
+ public static NullabilityState GetNullability(this FieldInfo info) =>
+ GetReadOrWriteState(info.GetNullabilityInfo());
+
+ public static bool IsNullable(this FieldInfo info)
+ {
+ var nullability = info.GetNullabilityInfo();
+ return IsNullable(info.Name, nullability);
+ }
+
+ public static NullabilityInfo GetNullabilityInfo(this EventInfo info) =>
+ events.GetOrAdd(
+ info,
+ static inner =>
+ {
+ var context = new NullabilityInfoContext();
+ return context.Create(inner);
+ });
+
+ public static NullabilityState GetNullability(this EventInfo info) =>
+ GetReadOrWriteState(info.GetNullabilityInfo());
+
+ public static bool IsNullable(this EventInfo info)
+ {
+ var nullability = info.GetNullabilityInfo();
+ return IsNullable(info.Name, nullability);
+ }
+
+ public static NullabilityInfo GetNullabilityInfo(this PropertyInfo info) =>
+ properties.GetOrAdd(
+ info,
+ static inner =>
+ {
+ var context = new NullabilityInfoContext();
+ return context.Create(inner);
+ });
+
+ public static NullabilityState GetNullability(this PropertyInfo info) =>
+ GetReadOrWriteState(info.GetNullabilityInfo());
+
+ public static bool IsNullable(this PropertyInfo info)
+ {
+ var nullability = info.GetNullabilityInfo();
+ return IsNullable(info.Name, nullability);
+ }
+
+ public static NullabilityInfo GetNullabilityInfo(this ParameterInfo info) =>
+ parameters.GetOrAdd(
+ info,
+ static inner =>
+ {
+ var context = new NullabilityInfoContext();
+ return context.Create(inner);
+ });
+
+ public static NullabilityState GetNullability(this ParameterInfo info) =>
+ GetReadOrWriteState(info.GetNullabilityInfo());
+
+ public static bool IsNullable(this ParameterInfo info)
+ {
+ var nullability = info.GetNullabilityInfo();
+ return IsNullable(info.Name!, nullability);
+ }
+
+ static NullabilityState GetReadOrWriteState(NullabilityInfo info)
+ {
+ if (info.ReadState == NullabilityState.Unknown)
+ {
+ return info.WriteState;
+ }
+
+ return info.ReadState;
+ }
+
+ static NullabilityState GetKnownState(string name, NullabilityInfo info)
+ {
+ var read = info.ReadState;
+ if (read != NullabilityState.Unknown)
+ {
+ return read;
+ }
+
+ var write = info.WriteState;
+ if (write != NullabilityState.Unknown)
+ {
+ return write;
+ }
+
+ throw new($"The nullability of '{info.Type.FullName}.{name}' is unknown. Assembly: {info.Type.Assembly.FullName}.");
+ }
+
+ static bool IsNullable(string name, NullabilityInfo info) =>
+ GetKnownState(name, info) == NullabilityState.Nullable;
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/AllowNullAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/AllowNullAttribute.cs
new file mode 100644
index 000000000..1a63d72c7
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/AllowNullAttribute.cs
@@ -0,0 +1,25 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Specifies that is allowed as an input even if the
+/// corresponding type disallows it.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Field |
+ Targets.Parameter |
+ Targets.Property)]
+#if PolyPublic
+public
+#endif
+sealed class AllowNullAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DisallowNullAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DisallowNullAttribute.cs
new file mode 100644
index 000000000..83f8817e7
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DisallowNullAttribute.cs
@@ -0,0 +1,25 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Specifies that is disallowed as an input even if the
+/// corresponding type allows it.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Field |
+ Targets.Parameter |
+ Targets.Property)]
+#if PolyPublic
+public
+#endif
+sealed class DisallowNullAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DoesNotReturnAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DoesNotReturnAttribute.cs
new file mode 100644
index 000000000..ba8c66d0f
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DoesNotReturnAttribute.cs
@@ -0,0 +1,21 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+///
+/// Specifies that a method that will never return under any circumstance.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: AttributeTargets.Method,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class DoesNotReturnAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DoesNotReturnIfAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DoesNotReturnIfAttribute.cs
new file mode 100644
index 000000000..b00a1ff0d
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/DoesNotReturnIfAttribute.cs
@@ -0,0 +1,41 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+///
+/// Specifies that the method will not return if the associated
+/// parameter is passed the specified value.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Parameter)]
+#if PolyPublic
+public
+#endif
+sealed class DoesNotReturnIfAttribute :
+ Attribute
+{
+ ///
+ /// Gets the condition parameter value.
+ /// Code after the method is considered unreachable by diagnostics if the argument
+ /// to the associated parameter matches this value.
+ ///
+ public bool ParameterValue { get; }
+
+ ///
+ /// Initializes a new instance of the
+ /// class with the specified parameter value.
+ ///
+ ///
+ /// The condition parameter value.
+ /// Code after the method is considered unreachable by diagnostics if the argument
+ /// to the associated parameter matches this value.
+ ///
+ public DoesNotReturnIfAttribute(bool parameterValue) =>
+ ParameterValue = parameterValue;
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MaybeNullAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MaybeNullAttribute.cs
new file mode 100644
index 000000000..a8032c075
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MaybeNullAttribute.cs
@@ -0,0 +1,26 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Specifies that an output may be even if the
+/// corresponding type disallows it.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Field |
+ Targets.Parameter |
+ Targets.Property |
+ Targets.ReturnValue)]
+#if PolyPublic
+public
+#endif
+sealed class MaybeNullAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MaybeNullWhenAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MaybeNullWhenAttribute.cs
new file mode 100644
index 000000000..39fb70562
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MaybeNullWhenAttribute.cs
@@ -0,0 +1,38 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+///
+/// Specifies that when a method returns ,
+/// the parameter may be even if the corresponding type disallows it.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Parameter)]
+#if PolyPublic
+public
+#endif
+sealed class MaybeNullWhenAttribute :
+ Attribute
+{
+ ///
+ /// Gets the return value condition.
+ /// If the method returns this value, the associated parameter may be .
+ ///
+ public bool ReturnValue { get; }
+
+ ///
+ /// Initializes the attribute with the specified return value condition.
+ ///
+ ///
+ /// The return value condition.
+ /// If the method returns this value, the associated parameter may be .
+ ///
+ public MaybeNullWhenAttribute(bool returnValue) =>
+ ReturnValue = returnValue;
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MemberNotNullAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MemberNotNullAttribute.cs
new file mode 100644
index 000000000..efd492606
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MemberNotNullAttribute.cs
@@ -0,0 +1,51 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD || NETFRAMEWORK || NETCOREAPPX
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Specifies that the method or property will ensure that the listed field and property members have
+/// not- values.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Method |
+ Targets.Property,
+ Inherited = false,
+ AllowMultiple = true)]
+#if PolyPublic
+public
+#endif
+sealed class MemberNotNullAttribute :
+ Attribute
+{
+ ///
+ /// Gets field or property member names.
+ ///
+ public string[] Members { get; }
+
+ ///
+ /// Initializes the attribute with a field or property member.
+ ///
+ ///
+ /// The field or property member that is promised to be not-null.
+ ///
+ public MemberNotNullAttribute(string member) =>
+ Members = [member];
+
+ ///
+ /// Initializes the attribute with the list of field and property members.
+ ///
+ ///
+ /// The list of field and property members that are promised to be not-null.
+ ///
+ public MemberNotNullAttribute(params string[] members) =>
+ Members = members;
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MemberNotNullWhenAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MemberNotNullWhenAttribute.cs
new file mode 100644
index 000000000..bf9ad2704
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/MemberNotNullWhenAttribute.cs
@@ -0,0 +1,71 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD || NETFRAMEWORK || NETCOREAPPX
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Specifies that the method or property will ensure that the listed field and property members have
+/// non- values when returning with the specified return value condition.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Method |
+ Targets.Property,
+ Inherited = false,
+ AllowMultiple = true)]
+#if PolyPublic
+public
+#endif
+sealed class MemberNotNullWhenAttribute :
+ Attribute
+{
+ ///
+ /// Gets the return value condition.
+ ///
+ public bool ReturnValue { get; }
+
+ ///
+ /// Gets field or property member names.
+ ///
+ public string[] Members { get; }
+
+ ///
+ /// Initializes the attribute with the specified return value condition and a field or property member.
+ ///
+ ///
+ /// The return value condition. If the method returns this value,
+ /// the associated parameter will not be .
+ ///
+ ///
+ /// The field or property member that is promised to be not-.
+ ///
+ public MemberNotNullWhenAttribute(bool returnValue, string member)
+ {
+ ReturnValue = returnValue;
+ Members = [member];
+ }
+
+ ///
+ /// Initializes the attribute with the specified return value condition and list
+ /// of field and property members.
+ ///
+ ///
+ /// The return value condition. If the method returns this value,
+ /// the associated parameter will not be .
+ ///
+ ///
+ /// The list of field and property members that are promised to be not-null.
+ ///
+ public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
+ {
+ ReturnValue = returnValue;
+ Members = members;
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullAttribute.cs
new file mode 100644
index 000000000..8b20fae69
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullAttribute.cs
@@ -0,0 +1,26 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Specifies that an output is not even if the
+/// corresponding type allows it.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Field |
+ Targets.Parameter |
+ Targets.Property |
+ Targets.ReturnValue)]
+#if PolyPublic
+public
+#endif
+sealed class NotNullAttribute :
+ Attribute;
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullIfNotNullAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullIfNotNullAttribute.cs
new file mode 100644
index 000000000..50afab438
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullIfNotNullAttribute.cs
@@ -0,0 +1,41 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Parameter |
+ Targets.Property |
+ Targets.ReturnValue,
+ AllowMultiple = true)]
+#if PolyPublic
+public
+#endif
+sealed class NotNullIfNotNullAttribute :
+ Attribute
+{
+ ///
+ /// Gets the associated parameter name.
+ /// The output will be non- if the argument to the
+ /// parameter specified is non-.
+ ///
+ public string ParameterName { get; }
+
+ ///
+ /// Initializes the attribute with the associated parameter name.
+ ///
+ ///
+ /// The associated parameter name.
+ /// The output will be non- if the argument to the
+ /// parameter specified is non-.
+ ///
+ public NotNullIfNotNullAttribute(string parameterName) =>
+ ParameterName = parameterName;
+}
+#endif
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullWhenAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullWhenAttribute.cs
new file mode 100644
index 000000000..be043ad96
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Nullable/NotNullWhenAttribute.cs
@@ -0,0 +1,38 @@
+//
+#pragma warning disable
+
+#if NETSTANDARD2_0 || NETFRAMEWORK || NETCOREAPP2X
+
+namespace System.Diagnostics.CodeAnalysis;
+
+///
+/// Specifies that when a method returns ,
+/// the parameter will not be even if the corresponding type allows it.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Parameter)]
+#if PolyPublic
+public
+#endif
+sealed class NotNullWhenAttribute :
+ Attribute
+{
+ ///
+ /// Gets the return value condition.
+ /// If the method returns this value, the associated parameter will not be .
+ ///
+ public bool ReturnValue { get; }
+
+ ///
+ /// Initializes the attribute with the specified return value condition.
+ ///
+ ///
+ /// The return value condition.
+ /// If the method returns this value, the associated parameter will not be .
+ ///
+ public NotNullWhenAttribute(bool returnValue) =>
+ ReturnValue = returnValue;
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/BytePolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/BytePolyfill.cs
new file mode 100644
index 000000000..59231d53c
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/BytePolyfill.cs
@@ -0,0 +1,98 @@
+//
+#pragma warning disable
+
+#nullable enable
+
+namespace Polyfills;
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class BytePolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-string-system-iformatprovider-system-byte@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out byte result) =>
+#if NET7_0_OR_GREATER
+ byte.TryParse(target, provider, out result);
+#else
+ byte.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-byte@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out byte result) =>
+#if NET8_0_OR_GREATER
+ byte.TryParse(target, provider, out result);
+#else
+ byte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its byte equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-char))-system-byte@)
+ public static bool TryParse(ReadOnlySpan target, out byte result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ byte.TryParse(target.ToString(), out result);
+#else
+ byte.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-byte@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out byte result) =>
+#if NET7_0_OR_GREATER
+ byte.TryParse(target, provider, out result);
+#else
+ byte.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-byte@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out byte result) =>
+#if NET8_0_OR_GREATER
+ byte.TryParse(target, style, provider, out result);
+#else
+ byte.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its byte equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-byte@)
+ public static bool TryParse(ReadOnlySpan target, out byte result) =>
+#if NET8_0_OR_GREATER
+ byte.TryParse(target, out result);
+#else
+ byte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its byte equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.byte.tryparse#system-byte-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-byte@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out byte result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ byte.TryParse(target.ToString(), style, provider, out result);
+#else
+ byte.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/DoublePolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/DoublePolyfill.cs
new file mode 100644
index 000000000..2c594df31
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/DoublePolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class DoublePolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-string-system-iformatprovider-system-double@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out double result) =>
+#if NET7_0_OR_GREATER
+ double.TryParse(target, provider, out result);
+#else
+ double.TryParse(target, NumberStyles.Float, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-double@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out double result) =>
+#if NET8_0_OR_GREATER
+ double.TryParse(target, provider, out result);
+#else
+ double.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Float, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its double-precision floating-point number equivalent. A return value indicates whether the conversion succeeded or failed.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-readonlyspan((system-char))-system-double@)
+ public static bool TryParse(ReadOnlySpan target, out double result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ double.TryParse(target.ToString(), out result);
+#else
+ double.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-double@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out double result) =>
+#if NET7_0_OR_GREATER
+ double.TryParse(target, provider, out result);
+#else
+ double.TryParse(target.ToString(), NumberStyles.Float, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-double@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out double result) =>
+#if NET8_0_OR_GREATER
+ double.TryParse(target, style, provider, out result);
+#else
+ double.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its double-precision floating-point number equivalent..
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-readonlyspan((system-byte))-system-double@)
+ public static bool TryParse(ReadOnlySpan target, out double result) =>
+#if NET8_0_OR_GREATER
+ double.TryParse(target, out result);
+#else
+ double.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Float, null, out result);
+#endif
+
+ ///
+ /// Converts the string representation of a number in a specified style and culture-specific format to its double-precision floating-point number equivalent. A return value indicates whether the conversion succeeded or failed.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.double.tryparse#system-double-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-double@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out double result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ double.TryParse(target.ToString(), style, provider, out result);
+#else
+ double.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/IntPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/IntPolyfill.cs
new file mode 100644
index 000000000..60dd304e6
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/IntPolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class IntPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-string-system-iformatprovider-system-int32@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out int result) =>
+#if NET7_0_OR_GREATER
+ int.TryParse(target, provider, out result);
+#else
+ int.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-int32@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out int result) =>
+#if NET8_0_OR_GREATER
+ int.TryParse(target, provider, out result);
+#else
+ int.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its 32-bit signed integer equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-readonlyspan((system-char))-system-int32@)
+ public static bool TryParse(ReadOnlySpan target, out int result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ int.TryParse(target.ToString(), out result);
+#else
+ int.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-int32@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out int result) =>
+#if NET7_0_OR_GREATER
+ int.TryParse(target, provider, out result);
+#else
+ int.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-int32@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out int result) =>
+#if NET8_0_OR_GREATER
+ int.TryParse(target, style, provider, out result);
+#else
+ int.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its 32-bit signed integer equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-int32@)
+ public static bool TryParse(ReadOnlySpan target, out int result) =>
+#if NET8_0_OR_GREATER
+ int.TryParse(target, out result);
+#else
+ int.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its 32-bit signed integer equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse#system-int32-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-int32@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out int result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ int.TryParse(target.ToString(), style, provider, out result);
+#else
+ int.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/LongPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/LongPolyfill.cs
new file mode 100644
index 000000000..848c4baee
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/LongPolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class LongPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-string-system-iformatprovider-system-int64@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out long result) =>
+#if NET7_0_OR_GREATER
+ long.TryParse(target, provider, out result);
+#else
+ long.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-int64@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out long result) =>
+#if NET8_0_OR_GREATER
+ long.TryParse(target, provider, out result);
+#else
+ long.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its 32-bit signed integer equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-readonlyspan((system-char))-system-int64@)
+ public static bool TryParse(ReadOnlySpan target, out long result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ long.TryParse(target.ToString(), out result);
+#else
+ long.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-int64@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out long result) =>
+#if NET7_0_OR_GREATER
+ long.TryParse(target, provider, out result);
+#else
+ long.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-int64@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out long result) =>
+#if NET8_0_OR_GREATER
+ long.TryParse(target, style, provider, out result);
+#else
+ long.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its 64-bit signed integer equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-int64@)
+ public static bool TryParse(ReadOnlySpan target, out long result) =>
+#if NET8_0_OR_GREATER
+ long.TryParse(target, out result);
+#else
+ long.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its 64-bit signed integer equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int64.tryparse#system-int64-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-int64@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out long result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ long.TryParse(target.ToString(), style, provider, out result);
+#else
+ long.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/SBytePolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/SBytePolyfill.cs
new file mode 100644
index 000000000..a1d0f334e
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/SBytePolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class SBytePolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-string-system-iformatprovider-system-sbyte@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out sbyte result) =>
+#if NET7_0_OR_GREATER
+ sbyte.TryParse(target, provider, out result);
+#else
+ sbyte.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-sbyte@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out sbyte result) =>
+#if NET8_0_OR_GREATER
+ sbyte.TryParse(target, provider, out result);
+#else
+ sbyte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its sbyte equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-readonlyspan((system-char))-system-sbyte@)
+ public static bool TryParse(ReadOnlySpan target, out sbyte result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ sbyte.TryParse(target.ToString(), out result);
+#else
+ sbyte.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-sbyte@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out sbyte result) =>
+#if NET7_0_OR_GREATER
+ sbyte.TryParse(target, provider, out result);
+#else
+ sbyte.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-sbyte@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out sbyte result) =>
+#if NET8_0_OR_GREATER
+ sbyte.TryParse(target, style, provider, out result);
+#else
+ sbyte.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its sbyte equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-sbyte@)
+ public static bool TryParse(ReadOnlySpan target, out sbyte result) =>
+#if NET8_0_OR_GREATER
+ sbyte.TryParse(target, out result);
+#else
+ sbyte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its sbyte equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.sbyte.tryparse#system-sbyte-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-sbyte@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out sbyte result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ sbyte.TryParse(target.ToString(), style, provider, out result);
+#else
+ sbyte.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/ShortPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/ShortPolyfill.cs
new file mode 100644
index 000000000..c085479cf
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/ShortPolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class ShortPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-string-system-iformatprovider-system-int16@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out short result) =>
+#if NET7_0_OR_GREATER
+ short.TryParse(target, provider, out result);
+#else
+ short.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-int16@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out short result) =>
+#if NET8_0_OR_GREATER
+ short.TryParse(target, provider, out result);
+#else
+ short.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its short equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-readonlyspan((system-char))-system-int16@)
+ public static bool TryParse(ReadOnlySpan target, out short result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ short.TryParse(target.ToString(), out result);
+#else
+ short.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-int16@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out short result) =>
+#if NET7_0_OR_GREATER
+ short.TryParse(target, provider, out result);
+#else
+ short.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-int16@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out short result) =>
+#if NET8_0_OR_GREATER
+ short.TryParse(target, style, provider, out result);
+#else
+ short.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its short equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-int16@)
+ public static bool TryParse(ReadOnlySpan target, out short result) =>
+#if NET8_0_OR_GREATER
+ short.TryParse(target, out result);
+#else
+ short.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its short equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.int16.tryparse#system-int16-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-int16@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out short result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ short.TryParse(target.ToString(), style, provider, out result);
+#else
+ short.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/UIntPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/UIntPolyfill.cs
new file mode 100644
index 000000000..93e80a984
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/UIntPolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class UIntPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-string-system-iformatprovider-system-uint32@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out uint result) =>
+#if NET7_0_OR_GREATER
+ uint.TryParse(target, provider, out result);
+#else
+ uint.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-uint32@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out uint result) =>
+#if NET8_0_OR_GREATER
+ uint.TryParse(target, provider, out result);
+#else
+ uint.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its uint equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-readonlyspan((system-char))-system-uint32@)
+ public static bool TryParse(ReadOnlySpan target, out uint result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ uint.TryParse(target.ToString(), out result);
+#else
+ uint.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-uint32@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out uint result) =>
+#if NET7_0_OR_GREATER
+ uint.TryParse(target, provider, out result);
+#else
+ uint.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-uint32@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out uint result) =>
+#if NET8_0_OR_GREATER
+ uint.TryParse(target, style, provider, out result);
+#else
+ uint.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its uint equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-uint32@)
+ public static bool TryParse(ReadOnlySpan target, out uint result) =>
+#if NET8_0_OR_GREATER
+ uint.TryParse(target, out result);
+#else
+ uint.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its uint equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint32.tryparse#system-uint32-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-uint32@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out uint result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ uint.TryParse(target.ToString(), style, provider, out result);
+#else
+ uint.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/ULongPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/ULongPolyfill.cs
new file mode 100644
index 000000000..2b8ebe9d5
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/ULongPolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class ULongPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-string-system-iformatprovider-system-uint64@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out ulong result) =>
+#if NET7_0_OR_GREATER
+ ulong.TryParse(target, provider, out result);
+#else
+ ulong.TryParse(target, NumberStyles.Integer, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-uint64@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out ulong result) =>
+#if NET8_0_OR_GREATER
+ ulong.TryParse(target, provider, out result);
+#else
+ ulong.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its ulong equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-readonlyspan((system-char))-system-uint64@)
+ public static bool TryParse(ReadOnlySpan target, out ulong result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ ulong.TryParse(target.ToString(), out result);
+#else
+ ulong.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-uint64@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out ulong result) =>
+#if NET7_0_OR_GREATER
+ ulong.TryParse(target, provider, out result);
+#else
+ ulong.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-uint64@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out ulong result) =>
+#if NET8_0_OR_GREATER
+ ulong.TryParse(target, style, provider, out result);
+#else
+ ulong.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its ulong equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-uint64@)
+ public static bool TryParse(ReadOnlySpan target, out ulong result) =>
+#if NET8_0_OR_GREATER
+ ulong.TryParse(target, out result);
+#else
+ ulong.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its ulong equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint64.tryparse#system-uint64-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-uint64@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out ulong result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ ulong.TryParse(target.ToString(), style, provider, out result);
+#else
+ ulong.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/UShortPolyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/UShortPolyfill.cs
new file mode 100644
index 000000000..313f1758a
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Numbers/UShortPolyfill.cs
@@ -0,0 +1,97 @@
+//
+#pragma warning disable
+
+namespace Polyfills;
+
+using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Text;
+
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static class UShortPolyfill
+{
+ ///
+ /// Tries to parse a string into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-string-system-iformatprovider-system-uint16@)
+ public static bool TryParse(string? target, IFormatProvider? provider, out ushort result) =>
+#if !NET7_0_OR_GREATER
+ ushort.TryParse(target, NumberStyles.Integer, provider, out result);
+#else
+ ushort.TryParse(target, provider, out result);
+#endif
+
+#if FeatureMemory
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-readonlyspan((system-byte))-system-iformatprovider-system-uint16@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out ushort result) =>
+#if NET8_0_OR_GREATER
+ ushort.TryParse(target, provider, out result);
+#else
+ ushort.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its ushort equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-readonlyspan((system-char))-system-uint16@)
+ public static bool TryParse(ReadOnlySpan target, out ushort result) =>
+#if NETCOREAPP2_0 || NETFRAMEWORK || NETSTANDARD2_0
+ ushort.TryParse(target.ToString(), out result);
+#else
+ ushort.TryParse(target, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-readonlyspan((system-char))-system-iformatprovider-system-uint16@)
+ public static bool TryParse(ReadOnlySpan target, IFormatProvider? provider, out ushort result) =>
+#if NET7_0_OR_GREATER
+ ushort.TryParse(target, provider, out result);
+#else
+ ushort.TryParse(target.ToString(), NumberStyles.Integer, provider, out result);
+#endif
+
+ ///
+ /// Tries to parse a span of UTF-8 characters into a value.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-readonlyspan((system-byte))-system-globalization-numberstyles-system-iformatprovider-system-uint16@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out ushort result) =>
+#if NET8_0_OR_GREATER
+ ushort.TryParse(target, style, provider, out result);
+#else
+ ushort.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
+#endif
+
+ ///
+ /// Tries to convert a UTF-8 character span containing the string representation of a number to its ushort equivalent.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-uint16@)
+ public static bool TryParse(ReadOnlySpan target, out ushort result) =>
+#if NET8_0_OR_GREATER
+ ushort.TryParse(target, out result);
+#else
+ ushort.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
+#endif
+
+ ///
+ /// Converts the span representation of a number in a specified style and culture-specific format to its ushort equivalent. A return value indicates whether the conversion succeeded.
+ ///
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.uint16.tryparse#system-uint16-tryparse(system-readonlyspan((system-char))-system-globalization-numberstyles-system-iformatprovider-system-uint16@)
+ public static bool TryParse(ReadOnlySpan target, NumberStyles style, IFormatProvider? provider, out ushort result) =>
+#if NETCOREAPP2_0 || NETSTANDARD2_0 || NETFRAMEWORK
+ ushort.TryParse(target.ToString(), style, provider, out result);
+#else
+ ushort.TryParse(target, style, provider, out result);
+#endif
+#endif
+}
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/OverloadResolutionPriorityAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/OverloadResolutionPriorityAttribute.cs
new file mode 100644
index 000000000..dbc2dfa4a
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/OverloadResolutionPriorityAttribute.cs
@@ -0,0 +1,42 @@
+//
+#pragma warning disable
+
+#if !NET9_0_OR_GREATER
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+using Link = ComponentModel.DescriptionAttribute;
+
+///
+/// Specifies the priority of a member in overload resolution. When unspecified, the default priority is 0.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ AttributeTargets.Method |
+ AttributeTargets.Constructor |
+ AttributeTargets.Property,
+ Inherited = false)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.overloadresolutionpriorityattribute
+#if PolyPublic
+public
+#endif
+sealed class OverloadResolutionPriorityAttribute :
+ Attribute
+{
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The priority of the attributed member. Higher numbers are prioritized,
+ /// lower numbers are deprioritized. 0 is the default if no attribute is present.
+ public OverloadResolutionPriorityAttribute(int priority) =>
+ Priority = priority;
+
+ ///
+ /// The priority of the member.
+ ///
+ public int Priority { get; }
+}
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ParamCollectionAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ParamCollectionAttribute.cs
new file mode 100644
index 000000000..e4563f446
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/ParamCollectionAttribute.cs
@@ -0,0 +1,23 @@
+//
+#pragma warning disable
+
+#if !NET9_0_OR_GREATER
+
+namespace System.Runtime.CompilerServices;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// Indicates that a method allows a variable number of arguments in its invocation.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
+//Link: https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.paramcollectionattribute
+#if PolyPublic
+public
+#endif
+sealed class ParamCollectionAttribute : Attribute;
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/OSPlatformAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/OSPlatformAttribute.cs
new file mode 100644
index 000000000..9c4017b28
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/OSPlatformAttribute.cs
@@ -0,0 +1,25 @@
+//
+#pragma warning disable
+
+#if !NET7_0_OR_GREATER
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// Base type for all platform-specific API attributes.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+abstract class OSPlatformAttribute(string platformName) :
+ Attribute
+{
+ public string PlatformName { get; } = platformName;
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/ObsoletedOSPlatformAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/ObsoletedOSPlatformAttribute.cs
new file mode 100644
index 000000000..50d229ba7
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/ObsoletedOSPlatformAttribute.cs
@@ -0,0 +1,56 @@
+//
+#pragma warning disable
+
+#if !NET7_0_OR_GREATER
+
+#nullable enable
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Marks APIs that were obsoleted in a given operating system version.
+///
+///
+/// Primarily used by OS bindings to indicate APIs that should not be used anymore.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Assembly |
+ Targets.Class |
+ Targets.Constructor |
+ Targets.Enum |
+ Targets.Event |
+ Targets.Field |
+ Targets.Interface |
+ Targets.Method |
+ Targets.Module |
+ Targets.Property |
+ Targets.Struct,
+ AllowMultiple = true,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class ObsoletedOSPlatformAttribute :
+ OSPlatformAttribute
+{
+ public ObsoletedOSPlatformAttribute(string platformName) :
+ base(platformName)
+ {
+ }
+
+ public ObsoletedOSPlatformAttribute(string platformName, string? message) :
+ base(platformName) =>
+ Message = message;
+
+ public string? Message { get; }
+ public string? Url { get; set; }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/SupportedOSPlatformAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/SupportedOSPlatformAttribute.cs
new file mode 100644
index 000000000..ae43f4971
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/SupportedOSPlatformAttribute.cs
@@ -0,0 +1,47 @@
+//
+#pragma warning disable
+
+#if !NET5_0_OR_GREATER
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Records the operating system (and minimum version) that supports an API. Multiple attributes can be
+/// applied to indicate support on multiple operating systems.
+///
+///
+/// Callers can apply a
+/// or use guards to prevent calls to APIs on unsupported operating systems.
+///
+/// A given platform should only be specified once.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Assembly |
+ Targets.Class |
+ Targets.Constructor |
+ Targets.Enum |
+ Targets.Event |
+ Targets.Field |
+ Targets.Interface |
+ Targets.Method |
+ Targets.Module |
+ Targets.Property |
+ Targets.Struct,
+ AllowMultiple = true,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class SupportedOSPlatformAttribute(string platformName) :
+ OSPlatformAttribute(platformName)
+{
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/SupportedOSPlatformGuardAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/SupportedOSPlatformGuardAttribute.cs
new file mode 100644
index 000000000..a0d55a7aa
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/SupportedOSPlatformGuardAttribute.cs
@@ -0,0 +1,39 @@
+//
+#pragma warning disable
+
+#if !NET6_0_OR_GREATER
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Annotates a custom guard field, property or method with a supported platform name and optional version.
+/// Multiple attributes can be applied to indicate guard for multiple supported platforms.
+///
+///
+/// Callers can apply a to a field, property or method
+/// and use that field, property or method in a conditional or assert statements in order to safely call platform specific APIs.
+///
+/// The type of the field or property should be boolean, the method return type should be boolean in order to be used as platform guard.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Field |
+ Targets.Method |
+ Targets.Property,
+ AllowMultiple = true,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class SupportedOSPlatformGuardAttribute(string platformName) :
+ OSPlatformAttribute(platformName)
+{
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/TargetPlatformAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/TargetPlatformAttribute.cs
new file mode 100644
index 000000000..e34820c89
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/TargetPlatformAttribute.cs
@@ -0,0 +1,25 @@
+//
+#pragma warning disable
+
+#if !NET5_0_OR_GREATER
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+///
+/// Records the platform that the project targeted.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(AttributeTargets.Assembly)]
+#if PolyPublic
+public
+#endif
+sealed class TargetPlatformAttribute(string platformName) :
+ OSPlatformAttribute(platformName)
+{
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/UnsupportedOSPlatformAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/UnsupportedOSPlatformAttribute.cs
new file mode 100644
index 000000000..38e3febb3
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/UnsupportedOSPlatformAttribute.cs
@@ -0,0 +1,56 @@
+//
+#pragma warning disable
+
+#if !NET5_0_OR_GREATER
+
+#nullable enable
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Marks APIs that were removed in a given operating system version.
+///
+///
+/// Primarily used by OS bindings to indicate APIs that are only available in
+/// earlier versions.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Assembly |
+ Targets.Class |
+ Targets.Constructor |
+ Targets.Enum |
+ Targets.Event |
+ Targets.Field |
+ Targets.Interface |
+ Targets.Method |
+ Targets.Module |
+ Targets.Property |
+ Targets.Struct,
+ AllowMultiple = true,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class UnsupportedOSPlatformAttribute :
+ OSPlatformAttribute
+{
+ public UnsupportedOSPlatformAttribute(string platformName) :
+ base(platformName)
+ {
+ }
+
+ public UnsupportedOSPlatformAttribute(string platformName, string? message) :
+ base(platformName) =>
+ Message = message;
+
+ public string? Message { get; }
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/UnsupportedOSPlatformGuardAttribute.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/UnsupportedOSPlatformGuardAttribute.cs
new file mode 100644
index 000000000..43f9071e6
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/PlatformCompatibility/UnsupportedOSPlatformGuardAttribute.cs
@@ -0,0 +1,41 @@
+//
+#pragma warning disable
+
+#if !NET6_0_OR_GREATER
+
+#pragma warning disable
+
+namespace System.Runtime.Versioning;
+
+using Diagnostics;
+using Diagnostics.CodeAnalysis;
+
+using Targets = AttributeTargets;
+
+///
+/// Annotates the custom guard field, property or method with an unsupported platform name and optional version.
+/// Multiple attributes can be applied to indicate guard for multiple unsupported platforms.
+///
+///
+/// Callers can apply a to a field, property or method
+/// and use that field, property or method in a conditional or assert statements as a guard to safely call APIs unsupported on those platforms.
+///
+/// The type of the field or property should be boolean, the method return type should be boolean in order to be used as platform guard.
+///
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+[AttributeUsage(
+ validOn: Targets.Field |
+ Targets.Method |
+ Targets.Property,
+ AllowMultiple = true,
+ Inherited = false)]
+#if PolyPublic
+public
+#endif
+sealed class UnsupportedOSPlatformGuardAttribute(string platformName) :
+ OSPlatformAttribute(platformName)
+{
+}
+
+#endif
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Polyfill.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Polyfill.cs
new file mode 100644
index 000000000..c790ed9b2
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Polyfill.cs
@@ -0,0 +1,16 @@
+//
+#pragma warning disable
+global using global::Polyfills;
+
+namespace Polyfills;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+
+[EditorBrowsable(EditorBrowsableState.Never)]
+[ExcludeFromCodeCoverage]
+[DebuggerNonUserCode]
+#if PolyPublic
+public
+#endif
+static partial class Polyfill;
\ No newline at end of file
diff --git a/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Polyfill_CancellationToken.cs b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Polyfill_CancellationToken.cs
new file mode 100644
index 000000000..121aebce4
--- /dev/null
+++ b/src/textOnlyPackages/src/polyfill/7.9.1/contentFiles/cs/netstandard2.0/Polyfill/Polyfill_CancellationToken.cs
@@ -0,0 +1,136 @@
+//
+#pragma warning disable
+
+#nullable enable
+
+namespace Polyfills;
+
+using System;
+using System.Threading;
+
+static partial class Polyfill
+{
+#if !NETCOREAPP3_0_OR_GREATER
+
+ ///
+ /// Registers a delegate that will be called when this
+ /// CancellationToken is canceled.
+ ///
+ ///
+ ///
+ /// If this token is already in the canceled state, the delegate will be run immediately and synchronously.
+ /// Any exception the delegate generates will be propagated out of this method call.
+ ///
+ ///
+ /// ExecutionContext is not captured nor flowed
+ /// to the callback's invocation.
+ ///
+ ///
+ /// The delegate to be executed when the CancellationToken is canceled.
+ /// The state to pass to the when the delegate is invoked. This may be null.
+ /// The instance that can
+ /// be used to unregister the callback.
+ /// is null.
+ //Link: https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken.unsaferegister#system-threading-cancellationtoken-unsaferegister(system-action((system-object))-system-object)
+ public static CancellationTokenRegistration UnsafeRegister(this CancellationToken target, Action