Decompiled source of BarchLib v1.0.2

BepInEx/core/FSharp.Control.AsyncSeq.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$FSharp-Control-AsyncSeq>;
using FSharp.Control;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: AssemblyTitle("FSharp.Control.AsyncSeq")]
[assembly: AssemblyProduct("src/FSharp.Control.AsyncSeq")]
[assembly: AssemblyDescription("Asynchronous sequences for F#")]
[assembly: AssemblyVersion("2.0.21")]
[assembly: AssemblyFileVersion("2.0.21")]
[assembly: InternalsVisibleTo("FSharp.Control.AsyncSeq.Tests")]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("2.0.21.0")]
namespace FSharp.Control
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public interface IAsyncEnumerator<T> : IDisposable
	{
		virtual FSharpAsync<FSharpOption<T>> MoveNext();
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public interface IAsyncEnumerable<T>
	{
		virtual IAsyncEnumerator<T> GetEnumerator();
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public sealed class AsyncSeqSrc<T> : IEquatable<AsyncSeqSrc<T>>, IStructuralEquatable
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal FSharpRef<AsyncSeqSrcNode<T>> tail@;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal FSharpRef<AsyncSeqSrcNode<T>> tail => tail@;

		internal AsyncSeqSrc(FSharpRef<AsyncSeqSrcNode<T>> tail)
		{
			tail@ = tail;
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<AsyncSeqSrc<AsyncSeqSrc<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<AsyncSeqSrc<T>, string>>((PrintfFormat<FSharpFunc<AsyncSeqSrc<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<AsyncSeqSrc<FSharpFunc<AsyncSeqSrc<T>, string>>, string>, Unit, string, string, AsyncSeqSrc<FSharpFunc<AsyncSeqSrc<T>, string>>>("%+A"))).Invoke((AsyncSeqSrc<AsyncSeqSrc<T>>)(object)this);
		}

		[CompilerGenerated]
		public sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				return -1640531527 + (((FSharpRef<AsyncSeqSrcNode<AsyncSeqSrcNode<T>>>)(object)tail@).GetHashCode(comp) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is AsyncSeqSrc<T> asyncSeqSrc)
				{
					FSharpRef<AsyncSeqSrcNode<T>> val = tail@;
					FSharpRef<AsyncSeqSrcNode<T>> val2 = asyncSeqSrc.tail@;
					return ((FSharpRef<AsyncSeqSrcNode<AsyncSeqSrcNode<T>>>)(object)val).Equals((object)val2, comp);
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed bool Equals(AsyncSeqSrc<T> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					return HashCompare.GenericEqualityERIntrinsic<FSharpRef<AsyncSeqSrcNode<T>>>(tail@, obj.tail@);
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is AsyncSeqSrc<T> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal class AsyncSeqSrcNode<a>
	{
		internal TaskCompletionSource<FSharpOption<Tuple<a, AsyncSeqSrcNode<a>>>> tcs@;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal TaskCompletionSource<FSharpOption<Tuple<a, AsyncSeqSrcNode<a>>>> tcs => tcs@;

		public AsyncSeqSrcNode(TaskCompletionSource<FSharpOption<Tuple<a, AsyncSeqSrcNode<a>>>> tcs)
		{
			tcs@ = tcs;
		}
	}
	[Serializable]
	[AbstractClass]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal abstract class AsyncSeqOp<T>
	{
		public abstract virtual IAsyncEnumerable<U> ChooseAsync<U>(FSharpFunc<T, FSharpAsync<FSharpOption<U>>> P_0);

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public abstract virtual FSharpAsync<S> FoldAsync<S>(FSharpFunc<S, FSharpFunc<T, FSharpAsync<S>>> P_0, S P_1);

		public AsyncSeqOp()
		{
		}

		public virtual IAsyncEnumerable<a> MapAsync<a>(FSharpFunc<T, FSharpAsync<a>> f)
		{
			FSharpFunc<a, FSharpOption<a>> arg = new $AsyncSeq.MapAsync@279<a>();
			FSharpFunc<FSharpAsync<a>, FSharpAsync<FSharpOption<a>>> g = new $AsyncSeq.MapAsync@279-1<a>(arg);
			return ChooseAsync(new $AsyncSeq.MapAsync@279-2<T, a>(f, g));
		}

		public virtual FSharpAsync<Unit> IterAsync(FSharpFunc<T, FSharpAsync<Unit>> f)
		{
			return FoldAsync<Unit>((FSharpFunc<Unit, FSharpFunc<T, FSharpAsync<Unit>>>)(object)new $AsyncSeq.IterAsync@281<T>(f), null);
		}
	}
}
namespace <StartupCode$FSharp-Control-AsyncSeq>.$.NETFramework,Version=v4.5
{
	internal static class AssemblyAttributes
	{
	}
}
namespace FSharp.Control
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Seq
	{
		public static IEnumerable<T> ofAsyncSeq<T>(IAsyncEnumerable<T> source)
		{
			return AsyncSeq.toBlockingSeq(source);
		}
	}
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class AsyncSeqSrc
	{
		public static AsyncSeqSrc<T> create<T>()
		{
			return new AsyncSeqSrc<T>(new FSharpRef<AsyncSeqSrcNode<T>>(new AsyncSeqSrcNode<T>(new TaskCompletionSource<FSharpOption<Tuple<T, AsyncSeqSrcNode<T>>>>())));
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static void put<T>(T item, AsyncSeqSrc<T> src)
		{
			AsyncSeq.AsyncSeqSrcImpl.put(item, src);
		}

		public static void close<T>(AsyncSeqSrc<T> src)
		{
			src.tail@.contents.tcs@.SetResult(null);
		}

		public static IAsyncEnumerable<T> toAsyncSeq<T>(AsyncSeqSrc<T> src)
		{
			return AsyncSeq.AsyncSeqSrcImpl.toAsyncSeqImpl(src.tail@.contents);
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static void error<T>(Exception exn, AsyncSeqSrc<T> src)
		{
			src.tail@.contents.tcs@.SetException(exn);
		}
	}
	[AutoOpen]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class AsyncSeqExtensions
	{
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static AsyncSeq.AsyncSeqBuilder asyncSeq => $AsyncSeq.asyncSeq@1704-1;

		[CompilationArgumentCounts(new int[] { 1, 2 })]
		public static FSharpAsync<Unit> AsyncBuilder.For<T>(FSharpAsyncBuilder x, IAsyncEnumerable<T> seq, FSharpFunc<T, FSharpAsync<Unit>> action)
		{
			return AsyncSeq.iterAsync(action, seq);
		}
	}
	[RequireQualifiedAccess]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class AsyncSeq
	{
		[Serializable]
		internal sealed class empty@357-3<T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal empty@357-3()
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(Unit unitVar)
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<T>>((FSharpOption<T>)null);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class empty@356-2<T> : IAsyncEnumerator<T>
		{
			private FSharpAsync<FSharpOption<T>> FSharp-Control-IAsyncEnumerator`1-MoveNext()
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<T>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>)new empty@357-3<T>());
			}

			FSharpAsync<FSharpOption<T>> IAsyncEnumerator<T>.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerator`1-MoveNext
				return this.FSharp-Control-IAsyncEnumerator`1-MoveNext();
			}

			private void System-IDisposable-Dispose()
			{
			}

			void IDisposable.Dispose()
			{
				//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
				this.System-IDisposable-Dispose();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class empty@354-1<T> : IAsyncEnumerable<T>
		{
			private IAsyncEnumerator<T> FSharp-Control-IAsyncEnumerable`1-GetEnumerator()
			{
				return new empty@356-2<T>();
			}

			IAsyncEnumerator<T> IAsyncEnumerable<T>.GetEnumerator()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerable`1-GetEnumerator
				return this.FSharp-Control-IAsyncEnumerable`1-GetEnumerator();
			}
		}

		[Serializable]
		internal sealed class singleton@365-2<T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>
		{
			public T v;

			public FSharpRef<int> state;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal singleton@365-2(T v, FSharpRef<int> state)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.v = v;
				this.state = state;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(Unit unitVar)
			{
				bool flag = state.contents == 0;
				state.contents += 1;
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<T>>((!flag) ? null : FSharpOption<T>.Some(v));
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class singleton@364-1<T> : IAsyncEnumerator<T>
		{
			public T v;

			public FSharpRef<int> state;

			public singleton@364-1(T v, FSharpRef<int> state)
			{
				this.v = v;
				this.state = state;
				base..ctor();
			}

			private FSharpAsync<FSharpOption<T>> FSharp-Control-IAsyncEnumerator`1-MoveNext()
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<T>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>)new singleton@365-2<T>(v, state));
			}

			FSharpAsync<FSharpOption<T>> IAsyncEnumerator<T>.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerator`1-MoveNext
				return this.FSharp-Control-IAsyncEnumerator`1-MoveNext();
			}

			private void System-IDisposable-Dispose()
			{
			}

			void IDisposable.Dispose()
			{
				//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
				this.System-IDisposable-Dispose();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class singleton@361<T> : IAsyncEnumerable<T>
		{
			public T v;

			public singleton@361(T v)
			{
				this.v = v;
				base..ctor();
			}

			private IAsyncEnumerator<T> FSharp-Control-IAsyncEnumerable`1-GetEnumerator()
			{
				FSharpRef<int> state = new FSharpRef<int>(0);
				return new singleton@364-1<T>(v, state);
			}

			IAsyncEnumerator<T> IAsyncEnumerable<T>.GetEnumerator()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerable`1-GetEnumerator
				return this.FSharp-Control-IAsyncEnumerable`1-GetEnumerator();
			}
		}

		[Serializable]
		internal sealed class bindAsync@382-3<T, U> : FSharpFunc<T, FSharpAsync<AsyncGenerator.Step<U>>>
		{
			public FSharpFunc<T, IAsyncEnumerable<U>> f;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal bindAsync@382-3(FSharpFunc<T, IAsyncEnumerable<U>> f)
			{
				((FSharpFunc<T, FSharpAsync<AsyncGenerator.Step<FSharpAsync<AsyncGenerator.Step<U>>>>>)(object)this)..ctor();
				this.f = f;
			}

			public override FSharpAsync<AsyncGenerator.Step<U>> Invoke(T _arg1)
			{
				AsyncGenerator.AsyncGenerator<U> item = AsyncGenerator.generatorFromEnumerator(((FSharpFunc<T, IAsyncEnumerable<IAsyncEnumerable<U>>>)(object)f).Invoke(_arg1).GetEnumerator());
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<AsyncGenerator.Step<U>>(AsyncGenerator.Step<U>.NewGoto(item));
			}
		}

		[Serializable]
		internal sealed class bindAsync@381-2<U, T> : FSharpFunc<Unit, FSharpAsync<AsyncGenerator.Step<U>>>
		{
			public FSharpFunc<T, IAsyncEnumerable<U>> f;

			public FSharpAsync<T> inp;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal bindAsync@381-2(FSharpFunc<T, IAsyncEnumerable<U>> f, FSharpAsync<T> inp)
			{
				((FSharpFunc<Unit, FSharpAsync<AsyncGenerator.Step<Unit>>>)(object)this)..ctor();
				this.f = f;
				this.inp = inp;
			}

			public override FSharpAsync<AsyncGenerator.Step<U>> Invoke(Unit unitVar)
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Bind<T, AsyncGenerator.Step<U>>(inp, (FSharpFunc<T, FSharpAsync<AsyncGenerator.Step<U>>>)new bindAsync@382-3<T, U>(f));
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class bindAsync@379-1<U, T> : AsyncGenerator.AsyncGenerator<U>
		{
			public FSharpFunc<T, IAsyncEnumerable<U>> f;

			public FSharpAsync<T> inp;

			public bindAsync@379-1(FSharpFunc<T, IAsyncEnumerable<U>> f, FSharpAsync<T> inp)
			{
				this.f = f;
				this.inp = inp;
				base..ctor();
			}

			private FSharpAsync<AsyncGenerator.Step<U>> FSharp-Control-AsyncGenerator-AsyncGenerator`1-Apply()
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<AsyncGenerator.Step<U>>((FSharpFunc<Unit, FSharpAsync<AsyncGenerator.Step<U>>>)new bindAsync@381-2<U, T>(f, inp));
			}

			FSharpAsync<AsyncGenerator.Step<U>> AsyncGenerator.AsyncGenerator<U>.Apply()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-AsyncGenerator-AsyncGenerator`1-Apply
				return this.FSharp-Control-AsyncGenerator-AsyncGenerator`1-Apply();
			}

			private FSharpOption<FSharpFunc<Unit, Unit>> FSharp-Control-AsyncGenerator-AsyncGenerator`1-get_Disposer()
			{
				return null;
			}

			FSharpOption<FSharpFunc<Unit, Unit>> AsyncGenerator.AsyncGenerator<U>.get_Disposer()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-AsyncGenerator-AsyncGenerator`1-get_Disposer
				return this.FSharp-Control-AsyncGenerator-AsyncGenerator`1-get_Disposer();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class bindAsync@377<U, T> : IAsyncEnumerable<U>
		{
			public FSharpFunc<T, IAsyncEnumerable<U>> f;

			public FSharpAsync<T> inp;

			public bindAsync@377(FSharpFunc<T, IAsyncEnumerable<U>> f, FSharpAsync<T> inp)
			{
				this.f = f;
				this.inp = inp;
				base..ctor();
			}

			private IAsyncEnumerator<U> FSharp-Control-IAsyncEnumerable`1-GetEnumerator()
			{
				return AsyncGenerator.enumeratorFromGenerator(new bindAsync@379-1<U, T>(f, inp));
			}

			IAsyncEnumerator<U> IAsyncEnumerable<U>.GetEnumerator()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerable`1-GetEnumerator
				return this.FSharp-Control-IAsyncEnumerable`1-GetEnumerator();
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public class AsyncSeqBuilder
		{
			public IAsyncEnumerable<T> Yield<T>(T value)
			{
				return singleton(value);
			}

			public IAsyncEnumerable<T> Return<unit, T>(unit _arg1)
			{
				return empty<T>();
			}

			public IAsyncEnumerable<T> YieldFrom<T>(IAsyncEnumerable<T> source)
			{
				return source;
			}

			public IAsyncEnumerable<T> Zero<T>()
			{
				return empty<T>();
			}

			public IAsyncEnumerable<U> Bind<T, U>(FSharpAsync<T> source, FSharpFunc<T, IAsyncEnumerable<U>> body)
			{
				return bindAsync<T, U>(body, source);
			}

			public IAsyncEnumerable<T> Combine<T>(IAsyncEnumerable<T> seq1, IAsyncEnumerable<T> seq2)
			{
				return AsyncGenerator.append(seq1, seq2);
			}

			public IAsyncEnumerable<T> While<T>(FSharpFunc<Unit, bool> guard, IAsyncEnumerable<T> body)
			{
				Lazy<IAsyncEnumerable<T>> fix = default(Lazy<IAsyncEnumerable<T>>);
				FSharpFunc<Unit, IAsyncEnumerable<T>> val = new While@412<T>(guard, body, fix);
				fix = LazyExtensions.Create<IAsyncEnumerable<T>>(val);
				((While@412<T>)val).fix = fix;
				return fix.Value;
			}

			public IAsyncEnumerable<T> Delay<T>(FSharpFunc<Unit, IAsyncEnumerable<T>> f)
			{
				return AsyncGenerator.delay<T>(f);
			}

			public IAsyncEnumerable<T> TryFinally<T>(IAsyncEnumerable<T> body, FSharpFunc<Unit, Unit> compensation)
			{
				return tryFinally(body, compensation);
			}

			public IAsyncEnumerable<T> TryWith<T>(IAsyncEnumerable<T> body, FSharpFunc<Exception, IAsyncEnumerable<T>> handler)
			{
				return tryWith(body, handler);
			}

			public IAsyncEnumerable<U> Using<T, U>(T resource, FSharpFunc<T, IAsyncEnumerable<U>> binder) where T : IDisposable
			{
				return tryFinally(binder.Invoke(resource), new Using@703<T>(resource));
			}

			public IAsyncEnumerable<TResult> For<T, TResult>(IEnumerable<T> source, FSharpFunc<T, IAsyncEnumerable<TResult>> action)
			{
				return collectSeq<T, TResult>(action, source);
			}

			public IAsyncEnumerable<TResult> For<T, TResult>(IAsyncEnumerable<T> source, FSharpFunc<T, IAsyncEnumerable<TResult>> action)
			{
				return collect<T, TResult>(action, source);
			}
		}

		[Serializable]
		internal sealed class While@412-1<T> : FSharpFunc<Unit, IAsyncEnumerable<T>>
		{
			public FSharpFunc<Unit, bool> guard;

			public IAsyncEnumerable<T> body;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<IAsyncEnumerable<T>> fix;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal While@412-1(FSharpFunc<Unit, bool> guard, IAsyncEnumerable<T> body, Lazy<IAsyncEnumerable<T>> fix)
			{
				((FSharpFunc<Unit, IAsyncEnumerable<Unit>>)(object)this)..ctor();
				this.guard = guard;
				this.body = body;
				this.fix = fix;
			}

			public override IAsyncEnumerable<T> Invoke(Unit unitVar0)
			{
				if (guard.Invoke((Unit)null))
				{
					return AsyncGenerator.append(body, fix.Value);
				}
				return empty<T>();
			}
		}

		[Serializable]
		internal sealed class While@412<T> : FSharpFunc<Unit, IAsyncEnumerable<T>>
		{
			public FSharpFunc<Unit, bool> guard;

			public IAsyncEnumerable<T> body;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<IAsyncEnumerable<T>> fix;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal While@412(FSharpFunc<Unit, bool> guard, IAsyncEnumerable<T> body, Lazy<IAsyncEnumerable<T>> fix)
			{
				((FSharpFunc<Unit, IAsyncEnumerable<Unit>>)(object)this)..ctor();
				this.guard = guard;
				this.body = body;
				this.fix = fix;
			}

			public override IAsyncEnumerable<T> Invoke(Unit unitVar)
			{
				return AsyncGenerator.delay(new While@412-1<T>(guard, body, fix));
			}
		}

		[Serializable]
		internal sealed class emitEnumerator@424-2<T> : FSharpFunc<Unit, bool>
		{
			public FSharpRef<FSharpOption<T>> b;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal emitEnumerator@424-2(FSharpRef<FSharpOption<T>> b)
			{
				this.b = b;
			}

			public override bool Invoke(Unit unitVar)
			{
				return ((FSharpRef<FSharpOption<FSharpOption<T>>>)(object)b).contents != null;
			}
		}

		[Serializable]
		internal sealed class emitEnumerator@427-5<T> : FSharpFunc<FSharpOption<T>, IAsyncEnumerable<T>>
		{
			public FSharpRef<FSharpOption<T>> b;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal emitEnumerator@427-5(FSharpRef<FSharpOption<T>> b)
			{
				((FSharpFunc<FSharpOption<FSharpOption<T>>, IAsyncEnumerable<FSharpOption<T>>>)(object)this)..ctor();
				this.b = b;
			}

			public override IAsyncEnumerable<T> Invoke(FSharpOption<T> _arg2)
			{
				((FSharpRef<FSharpOption<FSharpOption<T>>>)(object)b).contents = (FSharpOption<FSharpOption<T>>)(object)_arg2;
				return empty<T>();
			}
		}

		[Serializable]
		internal sealed class emitEnumerator@426-4<T> : FSharpFunc<Unit, IAsyncEnumerable<T>>
		{
			public IAsyncEnumerator<T> ie;

			public FSharpRef<FSharpOption<T>> b;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal emitEnumerator@426-4(IAsyncEnumerator<T> ie, FSharpRef<FSharpOption<T>> b)
			{
				((FSharpFunc<Unit, IAsyncEnumerable<Unit>>)(object)this)..ctor();
				this.ie = ie;
				this.b = b;
			}

			public override IAsyncEnumerable<T> Invoke(Unit unitVar)
			{
				return bindAsync(new emitEnumerator@427-5<T>(b), ie.MoveNext());
			}
		}

		[Serializable]
		internal sealed class emitEnumerator@425-3<T> : FSharpFunc<Unit, IAsyncEnumerable<T>>
		{
			public IAsyncEnumerator<T> ie;

			public FSharpRef<FSharpOption<T>> b;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal emitEnumerator@425-3(IAsyncEnumerator<T> ie, FSharpRef<FSharpOption<T>> b)
			{
				((FSharpFunc<Unit, IAsyncEnumerable<Unit>>)(object)this)..ctor();
				this.ie = ie;
				this.b = b;
			}

			public override IAsyncEnumerable<T> Invoke(Unit unitVar)
			{
				return AsyncGenerator.append(singleton(((FSharpRef<FSharpOption<FSharpOption<T>>>)(object)b).contents.Value), AsyncGenerator.delay(new emitEnumerator@426-4<T>(ie, b)));
			}
		}

		[Serializable]
		internal sealed class emitEnumerator@423-1<T> : FSharpFunc<FSharpOption<T>, IAsyncEnumerable<T>>
		{
			public IAsyncEnumerator<T> ie;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal emitEnumerator@423-1(IAsyncEnumerator<T> ie)
			{
				((FSharpFunc<FSharpOption<FSharpOption<T>>, IAsyncEnumerable<FSharpOption<T>>>)(object)this)..ctor();
				this.ie = ie;
			}

			public override IAsyncEnumerable<T> Invoke(FSharpOption<T> _arg1)
			{
				FSharpRef<FSharpOption<T>> b = (FSharpRef<FSharpOption<T>>)(object)new FSharpRef<FSharpOption<FSharpOption<T>>>((FSharpOption<FSharpOption<T>>)(object)_arg1);
				return asyncSeq.While(new emitEnumerator@424-2<T>(b), AsyncGenerator.delay(new emitEnumerator@425-3<T>(ie, b)));
			}
		}

		[Serializable]
		internal sealed class emitEnumerator@422<T> : FSharpFunc<Unit, IAsyncEnumerable<T>>
		{
			public IAsyncEnumerator<T> ie;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal emitEnumerator@422(IAsyncEnumerator<T> ie)
			{
				((FSharpFunc<Unit, IAsyncEnumerable<Unit>>)(object)this)..ctor();
				this.ie = ie;
			}

			public override IAsyncEnumerable<T> Invoke(Unit unitVar)
			{
				return bindAsync(new emitEnumerator@423-1<T>(ie), ie.MoveNext());
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[RequireQualifiedAccess]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal class TryWithState<T> : IEquatable<TryWithState<T>>, IStructuralEquatable
		{
			internal static class Tags
			{
				public const int NotStarted = 0;

				public const int HaveBodyEnumerator = 1;

				public const int HaveHandlerEnumerator = 2;

				public const int Finished = 3;
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TryWithState<>.NotStarted@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class NotStarted : TryWithState<T>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerable<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal NotStarted(IAsyncEnumerable<T> item)
					: base(0)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TryWithState<>.HaveBodyEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveBodyEnumerator : TryWithState<T>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveBodyEnumerator(IAsyncEnumerator<T> item)
					: base(1)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TryWithState<>.HaveHandlerEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveHandlerEnumerator : TryWithState<T>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveHandlerEnumerator(IAsyncEnumerator<T> item)
					: base(2)
				{
					this.item = item;
				}
			}

			[SpecialName]
			internal class NotStarted@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public NotStarted@DebugTypeProxy(NotStarted obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveBodyEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveBodyEnumerator@DebugTypeProxy(HaveBodyEnumerator obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveHandlerEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveHandlerEnumerator@DebugTypeProxy(HaveHandlerEnumerator obj)
				{
					_obj = obj;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int Tag
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsNotStarted
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 0;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveBodyEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 1;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveHandlerEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 2;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal static TryWithState<T> Finished
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return _unique_Finished;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsFinished
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 3;
				}
			}

			static TryWithState()
			{
				_unique_Finished = new TryWithState<T>(3);
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal TryWithState(int _tag)
			{
				this._tag = _tag;
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static TryWithState<T> NewNotStarted(IAsyncEnumerable<T> item)
			{
				return new NotStarted(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static TryWithState<T> NewHaveBodyEnumerator(IAsyncEnumerator<T> item)
			{
				return new HaveBodyEnumerator(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static TryWithState<T> NewHaveHandlerEnumerator(IAsyncEnumerator<T> item)
			{
				return new HaveHandlerEnumerator(item);
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ((FSharpFunc<TryWithState<TryWithState<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<TryWithState<T>, string>>((PrintfFormat<FSharpFunc<TryWithState<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<TryWithState<FSharpFunc<TryWithState<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((TryWithState<TryWithState<T>>)(object)this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<TryWithState<TryWithState<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<TryWithState<T>, string>>((PrintfFormat<FSharpFunc<TryWithState<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<TryWithState<FSharpFunc<TryWithState<T>, string>>, string>, Unit, string, string, TryWithState<FSharpFunc<TryWithState<T>, string>>>("%+A"))).Invoke((TryWithState<TryWithState<T>>)(object)this);
			}

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					switch (Tag)
					{
					default:
						return _tag;
					case 0:
					{
						NotStarted notStarted = (NotStarted)this;
						num = 0;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerable<T>>(comp, notStarted.item) + ((num << 6) + (num >> 2)));
					}
					case 1:
					{
						HaveBodyEnumerator haveBodyEnumerator = (HaveBodyEnumerator)this;
						num = 1;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveBodyEnumerator.item) + ((num << 6) + (num >> 2)));
					}
					case 2:
					{
						HaveHandlerEnumerator haveHandlerEnumerator = (HaveHandlerEnumerator)this;
						num = 2;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveHandlerEnumerator.item) + ((num << 6) + (num >> 2)));
					}
					}
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj is TryWithState<T> tryWithState)
					{
						int tag = _tag;
						int tag2 = tryWithState._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							default:
								return true;
							case 0:
							{
								NotStarted notStarted = (NotStarted)this;
								NotStarted notStarted2 = (NotStarted)tryWithState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerable<T>>(comp, notStarted.item, notStarted2.item);
							}
							case 1:
							{
								HaveBodyEnumerator haveBodyEnumerator = (HaveBodyEnumerator)this;
								HaveBodyEnumerator haveBodyEnumerator2 = (HaveBodyEnumerator)tryWithState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveBodyEnumerator.item, haveBodyEnumerator2.item);
							}
							case 2:
							{
								HaveHandlerEnumerator haveHandlerEnumerator = (HaveHandlerEnumerator)this;
								HaveHandlerEnumerator haveHandlerEnumerator2 = (HaveHandlerEnumerator)tryWithState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveHandlerEnumerator.item, haveHandlerEnumerator2.item);
							}
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(TryWithState<T> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int tag = _tag;
						int tag2 = obj._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							default:
								return true;
							case 0:
							{
								NotStarted notStarted = (NotStarted)this;
								NotStarted notStarted2 = (NotStarted)obj;
								return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerable<T>>(notStarted.item, notStarted2.item);
							}
							case 1:
							{
								HaveBodyEnumerator haveBodyEnumerator = (HaveBodyEnumerator)this;
								HaveBodyEnumerator haveBodyEnumerator2 = (HaveBodyEnumerator)obj;
								return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<T>>(haveBodyEnumerator.item, haveBodyEnumerator2.item);
							}
							case 2:
							{
								HaveHandlerEnumerator haveHandlerEnumerator = (HaveHandlerEnumerator)this;
								HaveHandlerEnumerator haveHandlerEnumerator2 = (HaveHandlerEnumerator)obj;
								return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<T>>(haveHandlerEnumerator.item, haveHandlerEnumerator2.item);
							}
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is TryWithState<T> obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		internal sealed class tryWith@448-3<T> : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			public IAsyncEnumerable<T> inp;

			public FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@448-3(IAsyncEnumerable<T> inp, FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res)
			{
				this.inp = inp;
				this.res = res;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				((FSharpRef<FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>>)(object)res).contents = (FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>)(object)FSharpChoice<IAsyncEnumerator<IAsyncEnumerator<T>>, Exception>.NewChoice1Of2((IAsyncEnumerator<IAsyncEnumerator<T>>)inp.GetEnumerator());
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
			}
		}

		[Serializable]
		internal sealed class tryWith@447-4<T> : FSharpFunc<Exception, FSharpAsync<Unit>>
		{
			public FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@447-4(FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res)
			{
				this.res = res;
			}

			public override FSharpAsync<Unit> Invoke(Exception _arg1)
			{
				((FSharpRef<FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>>)(object)res).contents = (FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>)(object)FSharpChoice<IAsyncEnumerator<IAsyncEnumerator<T>>, Exception>.NewChoice2Of2(_arg1);
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
			}
		}

		[Serializable]
		internal sealed class tryWith@451-5<T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>
		{
			public FSharpFunc<Exception, IAsyncEnumerable<T>> handler;

			public FSharpRef<TryWithState<T>> state;

			public IAsyncEnumerator<T> x;

			public FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@451-5(FSharpFunc<Exception, IAsyncEnumerable<T>> handler, FSharpRef<TryWithState<T>> state, IAsyncEnumerator<T> x, FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.handler = handler;
				this.state = state;
				this.x = x;
				this.res = res;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(Unit unitVar)
			{
				FSharpChoice<IAsyncEnumerator<T>, Exception> contents = ((FSharpRef<FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>>)(object)res).contents;
				IAsyncEnumerator<T> enumerator;
				if (contents is Choice2Of2<IAsyncEnumerator<T>, Exception>)
				{
					Choice2Of2<IAsyncEnumerator<T>, Exception> val = (Choice2Of2<IAsyncEnumerator<T>, Exception>)(object)contents;
					Exception item = ((Choice2Of2<IAsyncEnumerator<IAsyncEnumerator<T>>, Exception>)(object)val).Item;
					x.Dispose();
					enumerator = ((FSharpFunc<Exception, IAsyncEnumerable<Exception>>)(object)handler).Invoke(item).GetEnumerator();
					((FSharpRef<TryWithState<TryWithState<T>>>)(object)state).contents = (TryWithState<TryWithState<T>>)(object)TryWithState<T>.NewHaveHandlerEnumerator(enumerator);
					return x.MoveNext();
				}
				Choice1Of2<IAsyncEnumerator<T>, Exception> val2 = (Choice1Of2<IAsyncEnumerator<T>, Exception>)(object)contents;
				enumerator = ((Choice1Of2<IAsyncEnumerator<IAsyncEnumerator<T>>, Exception>)(object)val2).Item;
				((FSharpRef<TryWithState<TryWithState<T>>>)(object)state).contents = (TryWithState<TryWithState<T>>)(object)TryWithState<T>.NewHaveBodyEnumerator(enumerator);
				return x.MoveNext();
			}
		}

		[Serializable]
		internal sealed class tryWith@466-7<T> : FSharpFunc<FSharpOption<T>, FSharpAsync<Unit>>
		{
			public FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@466-7(FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res)
			{
				((FSharpFunc<FSharpOption<FSharpOption<T>>, FSharpAsync<Unit>>)(object)this)..ctor();
				this.res = res;
			}

			public override FSharpAsync<Unit> Invoke(FSharpOption<T> _arg2)
			{
				((FSharpRef<FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>>)(object)res).contents = (FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>)(object)FSharpChoice<FSharpOption<FSharpOption<T>>, Exception>.NewChoice1Of2((FSharpOption<FSharpOption<T>>)(object)_arg2);
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
			}
		}

		[Serializable]
		internal sealed class tryWith@465-6<T> : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			public IAsyncEnumerator<T> e;

			public FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@465-6(IAsyncEnumerator<T> e, FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res)
			{
				this.e = e;
				this.res = res;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Bind<FSharpOption<T>, Unit>(e.MoveNext(), (FSharpFunc<FSharpOption<T>, FSharpAsync<Unit>>)new tryWith@466-7<T>(res));
			}
		}

		[Serializable]
		internal sealed class tryWith@464-8<T> : FSharpFunc<Exception, FSharpAsync<Unit>>
		{
			public FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@464-8(FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res)
			{
				this.res = res;
			}

			public override FSharpAsync<Unit> Invoke(Exception _arg3)
			{
				((FSharpRef<FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>>)(object)res).contents = (FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>)(object)FSharpChoice<FSharpOption<FSharpOption<T>>, Exception>.NewChoice2Of2(_arg3);
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
			}
		}

		[Serializable]
		internal sealed class tryWith@469-9<T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>
		{
			public FSharpFunc<Exception, IAsyncEnumerable<T>> handler;

			public FSharpRef<TryWithState<T>> state;

			public IAsyncEnumerator<T> x;

			public FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@469-9(FSharpFunc<Exception, IAsyncEnumerable<T>> handler, FSharpRef<TryWithState<T>> state, IAsyncEnumerator<T> x, FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.handler = handler;
				this.state = state;
				this.x = x;
				this.res = res;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(Unit unitVar)
			{
				FSharpChoice<FSharpOption<T>, Exception> contents = ((FSharpRef<FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>>)(object)res).contents;
				if (contents is Choice2Of2<FSharpOption<T>, Exception>)
				{
					Choice2Of2<FSharpOption<T>, Exception> val = (Choice2Of2<FSharpOption<T>, Exception>)(object)contents;
					Exception item = ((Choice2Of2<FSharpOption<FSharpOption<T>>, Exception>)(object)val).Item;
					x.Dispose();
					IAsyncEnumerator<T> enumerator = ((FSharpFunc<Exception, IAsyncEnumerable<Exception>>)(object)handler).Invoke(item).GetEnumerator();
					((FSharpRef<TryWithState<TryWithState<T>>>)(object)state).contents = (TryWithState<TryWithState<T>>)(object)TryWithState<T>.NewHaveHandlerEnumerator(enumerator);
					return x.MoveNext();
				}
				Choice1Of2<FSharpOption<T>, Exception> val2 = (Choice1Of2<FSharpOption<T>, Exception>)(object)contents;
				FSharpOption<T> item2 = ((Choice1Of2<FSharpOption<FSharpOption<T>>, Exception>)(object)val2).Item;
				FSharpAsyncBuilder defaultAsyncBuilder = ExtraTopLevelOperators.DefaultAsyncBuilder;
				if (item2 == null)
				{
					x.Dispose();
				}
				return defaultAsyncBuilder.Return<FSharpOption<T>>(item2);
			}
		}

		[Serializable]
		internal sealed class tryWith@484-10<T> : FSharpFunc<FSharpOption<T>, FSharpAsync<FSharpOption<T>>>
		{
			public IAsyncEnumerator<T> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@484-10(IAsyncEnumerator<T> x)
			{
				((FSharpFunc<FSharpOption<FSharpOption<T>>, FSharpAsync<FSharpOption<FSharpOption<T>>>>)(object)this)..ctor();
				this.x = x;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(FSharpOption<T> _arg4)
			{
				FSharpAsyncBuilder defaultAsyncBuilder = ExtraTopLevelOperators.DefaultAsyncBuilder;
				object obj;
				if (_arg4 == null)
				{
					x.Dispose();
					obj = null;
				}
				else
				{
					obj = _arg4;
				}
				return defaultAsyncBuilder.Return<FSharpOption<T>>((FSharpOption<T>)obj);
			}
		}

		[Serializable]
		internal sealed class tryWith@444-2<T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>
		{
			public FSharpFunc<Exception, IAsyncEnumerable<T>> handler;

			public FSharpRef<TryWithState<T>> state;

			public IAsyncEnumerator<T> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryWith@444-2(FSharpFunc<Exception, IAsyncEnumerable<T>> handler, FSharpRef<TryWithState<T>> state, IAsyncEnumerator<T> x)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.handler = handler;
				this.state = state;
				this.x = x;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(Unit unitVar)
			{
				TryWithState<T> contents = ((FSharpRef<TryWithState<TryWithState<T>>>)(object)state).contents;
				switch (contents.Tag)
				{
				default:
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<T>>((FSharpOption<T>)null);
				case 0:
				{
					TryWithState<T>.NotStarted notStarted = (TryWithState<T>.NotStarted)contents;
					IAsyncEnumerable<T> item2 = notStarted.item;
					FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>> res2 = (FSharpRef<FSharpChoice<IAsyncEnumerator<T>, Exception>>)(object)new FSharpRef<FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>>((FSharpChoice<IAsyncEnumerator<FSharpChoice<IAsyncEnumerator<T>, Exception>>, Exception>)null);
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Combine<FSharpOption<T>>(ExtraTopLevelOperators.DefaultAsyncBuilder.TryWith<Unit>(ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new tryWith@448-3<T>(item2, res2)), (FSharpFunc<Exception, FSharpAsync<Unit>>)new tryWith@447-4<T>(res2)), ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<T>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>)new tryWith@451-5<T>(handler, state, x, res2)));
				}
				case 1:
				{
					TryWithState<T>.HaveBodyEnumerator haveBodyEnumerator = (TryWithState<T>.HaveBodyEnumerator)contents;
					IAsyncEnumerator<T> item = haveBodyEnumerator.item;
					FSharpRef<FSharpChoice<FSharpOption<T>, Exception>> res = (FSharpRef<FSharpChoice<FSharpOption<T>, Exception>>)(object)new FSharpRef<FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>>((FSharpChoice<FSharpOption<FSharpChoice<FSharpOption<T>, Exception>>, Exception>)null);
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Combine<FSharpOption<T>>(ExtraTopLevelOperators.DefaultAsyncBuilder.TryWith<Unit>(ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new tryWith@465-6<T>(item, res)), (FSharpFunc<Exception, FSharpAsync<Unit>>)new tryWith@464-8<T>(res)), ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<T>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>)new tryWith@469-9<T>(handler, state, x, res)));
				}
				case 2:
				{
					TryWithState<T>.HaveHandlerEnumerator haveHandlerEnumerator = (TryWithState<T>.HaveHandlerEnumerator)contents;
					IAsyncEnumerator<T> item = haveHandlerEnumerator.item;
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Bind<FSharpOption<T>, FSharpOption<T>>(item.MoveNext(), (FSharpFunc<FSharpOption<T>, FSharpAsync<FSharpOption<T>>>)new tryWith@484-10<T>(x));
				}
				}
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class tryWith@442-1<T> : IAsyncEnumerator<T>
		{
			public FSharpFunc<Exception, IAsyncEnumerable<T>> handler;

			public FSharpRef<TryWithState<T>> state;

			public tryWith@442-1(FSharpFunc<Exception, IAsyncEnumerable<T>> handler, FSharpRef<TryWithState<T>> state)
			{
				this.handler = handler;
				this.state = state;
				base..ctor();
			}

			private FSharpAsync<FSharpOption<T>> FSharp-Control-IAsyncEnumerator`1-MoveNext()
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<T>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>)new tryWith@444-2<T>(handler, state, this));
			}

			FSharpAsync<FSharpOption<T>> IAsyncEnumerator<T>.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerator`1-MoveNext
				return this.FSharp-Control-IAsyncEnumerator`1-MoveNext();
			}

			private void System-IDisposable-Dispose()
			{
				TryWithState<T> contents = ((FSharpRef<TryWithState<TryWithState<T>>>)(object)state).contents;
				IAsyncEnumerator<T> item;
				switch (contents.Tag)
				{
				default:
					return;
				case 1:
					item = ((TryWithState<T>.HaveBodyEnumerator)contents).item;
					break;
				case 2:
					item = ((TryWithState<T>.HaveHandlerEnumerator)contents).item;
					break;
				}
				((FSharpRef<TryWithState<TryWithState<T>>>)(object)state).contents = (TryWithState<TryWithState<T>>)(object)TryWithState<T>.Finished;
				item?.Dispose();
			}

			void IDisposable.Dispose()
			{
				//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
				this.System-IDisposable-Dispose();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class tryWith@439<T> : IAsyncEnumerable<T>
		{
			public IAsyncEnumerable<T> inp;

			public FSharpFunc<Exception, IAsyncEnumerable<T>> handler;

			public tryWith@439(IAsyncEnumerable<T> inp, FSharpFunc<Exception, IAsyncEnumerable<T>> handler)
			{
				this.inp = inp;
				this.handler = handler;
				base..ctor();
			}

			private IAsyncEnumerator<T> FSharp-Control-IAsyncEnumerable`1-GetEnumerator()
			{
				FSharpRef<TryWithState<T>> state = (FSharpRef<TryWithState<T>>)(object)new FSharpRef<TryWithState<TryWithState<T>>>((TryWithState<TryWithState<T>>)(object)TryWithState<T>.NewNotStarted(inp));
				return new tryWith@442-1<T>(handler, state);
			}

			IAsyncEnumerator<T> IAsyncEnumerable<T>.GetEnumerator()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerable`1-GetEnumerator
				return this.FSharp-Control-IAsyncEnumerable`1-GetEnumerator();
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[RequireQualifiedAccess]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal abstract class TryFinallyState<T> : IEquatable<TryFinallyState<T>>, IStructuralEquatable
		{
			internal static class Tags
			{
				public const int NotStarted = 0;

				public const int HaveBodyEnumerator = 1;

				public const int Finished = 2;
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TryFinallyState<>.NotStarted@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class NotStarted : TryFinallyState<T>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerable<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal NotStarted(IAsyncEnumerable<T> item)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TryFinallyState<>.HaveBodyEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveBodyEnumerator : TryFinallyState<T>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveBodyEnumerator(IAsyncEnumerator<T> item)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TryFinallyState<>._Finished@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class _Finished : TryFinallyState<T>
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal _Finished()
				{
				}
			}

			[SpecialName]
			internal class NotStarted@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public NotStarted@DebugTypeProxy(NotStarted obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveBodyEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveBodyEnumerator@DebugTypeProxy(HaveBodyEnumerator obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class _Finished@DebugTypeProxy
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public _Finished@DebugTypeProxy(_Finished obj)
				{
					_obj = obj;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int Tag
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return (this is _Finished) ? 2 : ((this is HaveBodyEnumerator) ? 1 : 0);
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsNotStarted
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return this is NotStarted;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveBodyEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return this is HaveBodyEnumerator;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal static TryFinallyState<T> Finished
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return _unique_Finished;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsFinished
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return this is _Finished;
				}
			}

			static TryFinallyState()
			{
				_unique_Finished = new _Finished();
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal TryFinallyState()
			{
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static TryFinallyState<T> NewNotStarted(IAsyncEnumerable<T> item)
			{
				return new NotStarted(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static TryFinallyState<T> NewHaveBodyEnumerator(IAsyncEnumerator<T> item)
			{
				return new HaveBodyEnumerator(item);
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ((FSharpFunc<TryFinallyState<TryFinallyState<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<TryFinallyState<T>, string>>((PrintfFormat<FSharpFunc<TryFinallyState<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<TryFinallyState<FSharpFunc<TryFinallyState<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((TryFinallyState<TryFinallyState<T>>)(object)this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<TryFinallyState<TryFinallyState<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<TryFinallyState<T>, string>>((PrintfFormat<FSharpFunc<TryFinallyState<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<TryFinallyState<FSharpFunc<TryFinallyState<T>, string>>, string>, Unit, string, string, TryFinallyState<FSharpFunc<TryFinallyState<T>, string>>>("%+A"))).Invoke((TryFinallyState<TryFinallyState<T>>)(object)this);
			}

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					if (!(this is NotStarted))
					{
						if (!(this is HaveBodyEnumerator))
						{
							return (this is _Finished) ? 2 : ((this is HaveBodyEnumerator) ? 1 : 0);
						}
						HaveBodyEnumerator haveBodyEnumerator = (HaveBodyEnumerator)this;
						num = 1;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveBodyEnumerator.item) + ((num << 6) + (num >> 2)));
					}
					NotStarted notStarted = (NotStarted)this;
					num = 0;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerable<T>>(comp, notStarted.item) + ((num << 6) + (num >> 2)));
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj is TryFinallyState<T> tryFinallyState)
					{
						int num = ((this is _Finished) ? 2 : ((this is HaveBodyEnumerator) ? 1 : 0));
						TryFinallyState<T> tryFinallyState2 = tryFinallyState;
						int num2 = ((tryFinallyState2 is _Finished) ? 2 : ((tryFinallyState2 is HaveBodyEnumerator) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is NotStarted))
							{
								if (!(this is HaveBodyEnumerator))
								{
									return true;
								}
								HaveBodyEnumerator haveBodyEnumerator = (HaveBodyEnumerator)this;
								HaveBodyEnumerator haveBodyEnumerator2 = (HaveBodyEnumerator)tryFinallyState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveBodyEnumerator.item, haveBodyEnumerator2.item);
							}
							NotStarted notStarted = (NotStarted)this;
							NotStarted notStarted2 = (NotStarted)tryFinallyState;
							return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerable<T>>(comp, notStarted.item, notStarted2.item);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(TryFinallyState<T> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = ((this is _Finished) ? 2 : ((this is HaveBodyEnumerator) ? 1 : 0));
						int num2 = ((obj is _Finished) ? 2 : ((obj is HaveBodyEnumerator) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is NotStarted))
							{
								if (!(this is HaveBodyEnumerator))
								{
									return true;
								}
								HaveBodyEnumerator haveBodyEnumerator = (HaveBodyEnumerator)this;
								HaveBodyEnumerator haveBodyEnumerator2 = (HaveBodyEnumerator)obj;
								return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<T>>(haveBodyEnumerator.item, haveBodyEnumerator2.item);
							}
							NotStarted notStarted = (NotStarted)this;
							NotStarted notStarted2 = (NotStarted)obj;
							return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerable<T>>(notStarted.item, notStarted2.item);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is TryFinallyState<T> obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		internal sealed class tryFinally@519-3<T> : FSharpFunc<FSharpOption<T>, FSharpAsync<FSharpOption<T>>>
		{
			public IAsyncEnumerator<T> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryFinally@519-3(IAsyncEnumerator<T> x)
			{
				((FSharpFunc<FSharpOption<FSharpOption<T>>, FSharpAsync<FSharpOption<FSharpOption<T>>>>)(object)this)..ctor();
				this.x = x;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(FSharpOption<T> _arg1)
			{
				FSharpAsyncBuilder defaultAsyncBuilder = ExtraTopLevelOperators.DefaultAsyncBuilder;
				if (_arg1 == null)
				{
					x.Dispose();
				}
				return defaultAsyncBuilder.Return<FSharpOption<T>>(_arg1);
			}
		}

		[Serializable]
		internal sealed class tryFinally@511-2<T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>
		{
			public FSharpRef<TryFinallyState<T>> state;

			public IAsyncEnumerator<T> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal tryFinally@511-2(FSharpRef<TryFinallyState<T>> state, IAsyncEnumerator<T> x)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.state = state;
				this.x = x;
			}

			public override FSharpAsync<FSharpOption<T>> Invoke(Unit unitVar)
			{
				TryFinallyState<T> contents = ((FSharpRef<TryFinallyState<TryFinallyState<T>>>)(object)state).contents;
				TryFinallyState<T> tryFinallyState = contents;
				IAsyncEnumerator<T> item;
				if (!(tryFinallyState is TryFinallyState<T>.NotStarted))
				{
					if (!(tryFinallyState is TryFinallyState<T>.HaveBodyEnumerator))
					{
						return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<T>>((FSharpOption<T>)null);
					}
					TryFinallyState<T>.HaveBodyEnumerator haveBodyEnumerator = (TryFinallyState<T>.HaveBodyEnumerator)contents;
					item = haveBodyEnumerator.item;
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Bind<FSharpOption<T>, FSharpOption<T>>(item.MoveNext(), (FSharpFunc<FSharpOption<T>, FSharpAsync<FSharpOption<T>>>)new tryFinally@519-3<T>(x));
				}
				TryFinallyState<T>.NotStarted notStarted = (TryFinallyState<T>.NotStarted)contents;
				IAsyncEnumerable<T> item2 = notStarted.item;
				item = item2.GetEnumerator();
				((FSharpRef<TryFinallyState<TryFinallyState<T>>>)(object)state).contents = (TryFinallyState<TryFinallyState<T>>)(object)TryFinallyState<T>.NewHaveBodyEnumerator(item);
				return x.MoveNext();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class tryFinally@509-1<T> : IAsyncEnumerator<T>
		{
			public FSharpFunc<Unit, Unit> compensation;

			public FSharpRef<TryFinallyState<T>> state;

			public tryFinally@509-1(FSharpFunc<Unit, Unit> compensation, FSharpRef<TryFinallyState<T>> state)
			{
				this.compensation = compensation;
				this.state = state;
				base..ctor();
			}

			private FSharpAsync<FSharpOption<T>> FSharp-Control-IAsyncEnumerator`1-MoveNext()
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<T>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<T>>>)new tryFinally@511-2<T>(state, this));
			}

			FSharpAsync<FSharpOption<T>> IAsyncEnumerator<T>.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerator`1-MoveNext
				return this.FSharp-Control-IAsyncEnumerator`1-MoveNext();
			}

			private void System-IDisposable-Dispose()
			{
				TryFinallyState<T> contents = ((FSharpRef<TryFinallyState<TryFinallyState<T>>>)(object)state).contents;
				if (contents is TryFinallyState<T>.HaveBodyEnumerator)
				{
					TryFinallyState<T>.HaveBodyEnumerator haveBodyEnumerator = (TryFinallyState<T>.HaveBodyEnumerator)contents;
					IAsyncEnumerator<T> item = haveBodyEnumerator.item;
					((FSharpRef<TryFinallyState<TryFinallyState<T>>>)(object)state).contents = (TryFinallyState<TryFinallyState<T>>)(object)TryFinallyState<T>.Finished;
					item?.Dispose();
					compensation.Invoke((Unit)null);
				}
			}

			void IDisposable.Dispose()
			{
				//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
				this.System-IDisposable-Dispose();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class tryFinally@506<T> : IAsyncEnumerable<T>
		{
			public IAsyncEnumerable<T> inp;

			public FSharpFunc<Unit, Unit> compensation;

			public tryFinally@506(IAsyncEnumerable<T> inp, FSharpFunc<Unit, Unit> compensation)
			{
				this.inp = inp;
				this.compensation = compensation;
				base..ctor();
			}

			private IAsyncEnumerator<T> FSharp-Control-IAsyncEnumerable`1-GetEnumerator()
			{
				FSharpRef<TryFinallyState<T>> state = (FSharpRef<TryFinallyState<T>>)(object)new FSharpRef<TryFinallyState<TryFinallyState<T>>>((TryFinallyState<TryFinallyState<T>>)(object)TryFinallyState<T>.NewNotStarted(inp));
				return new tryFinally@509-1<T>(compensation, state);
			}

			IAsyncEnumerator<T> IAsyncEnumerable<T>.GetEnumerator()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerable`1-GetEnumerator
				return this.FSharp-Control-IAsyncEnumerable`1-GetEnumerator();
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[RequireQualifiedAccess]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal class CollectState<T, U> : IEquatable<CollectState<T, U>>, IStructuralEquatable
		{
			internal static class Tags
			{
				public const int NotStarted = 0;

				public const int HaveInputEnumerator = 1;

				public const int HaveInnerEnumerator = 2;

				public const int Finished = 3;
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(CollectState<, >.NotStarted@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class NotStarted : CollectState<T, U>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerable<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal NotStarted(IAsyncEnumerable<T> item)
					: base(0)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(CollectState<, >.HaveInputEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveInputEnumerator : CollectState<T, U>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveInputEnumerator(IAsyncEnumerator<T> item)
					: base(1)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(CollectState<, >.HaveInnerEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveInnerEnumerator : CollectState<T, U>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<T> item1;

				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<U> item2;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<T> Item1
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item1;
					}
				}

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<U> Item2
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item2;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveInnerEnumerator(IAsyncEnumerator<T> item1, IAsyncEnumerator<U> item2)
					: base(2)
				{
					this.item1 = item1;
					this.item2 = item2;
				}
			}

			[SpecialName]
			internal class NotStarted@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public NotStarted@DebugTypeProxy(NotStarted obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveInputEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveInputEnumerator@DebugTypeProxy(HaveInputEnumerator obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveInnerEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<T> Item1
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item1;
					}
				}

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<U> Item2
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item2;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveInnerEnumerator@DebugTypeProxy(HaveInnerEnumerator obj)
				{
					_obj = obj;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int Tag
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsNotStarted
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 0;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveInputEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 1;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveInnerEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 2;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal static CollectState<T, U> Finished
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return _unique_Finished;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsFinished
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 3;
				}
			}

			static CollectState()
			{
				_unique_Finished = new CollectState<T, U>(3);
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal CollectState(int _tag)
			{
				this._tag = _tag;
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static CollectState<T, U> NewNotStarted(IAsyncEnumerable<T> item)
			{
				return new NotStarted(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static CollectState<T, U> NewHaveInputEnumerator(IAsyncEnumerator<T> item)
			{
				return new HaveInputEnumerator(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static CollectState<T, U> NewHaveInnerEnumerator(IAsyncEnumerator<T> item1, IAsyncEnumerator<U> item2)
			{
				return new HaveInnerEnumerator(item1, item2);
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ((FSharpFunc<CollectState<CollectState<T, U>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<CollectState<T, U>, string>>((PrintfFormat<FSharpFunc<CollectState<T, U>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<CollectState<FSharpFunc<CollectState<T, U>, string>, Unit>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((CollectState<CollectState<T, U>, string>)(object)this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<CollectState<CollectState<T, U>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<CollectState<T, U>, string>>((PrintfFormat<FSharpFunc<CollectState<T, U>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<CollectState<FSharpFunc<CollectState<T, U>, string>, Unit>, string>, Unit, string, string, CollectState<FSharpFunc<CollectState<T, U>, string>, Unit>>("%+A"))).Invoke((CollectState<CollectState<T, U>, string>)(object)this);
			}

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					switch (Tag)
					{
					default:
						return _tag;
					case 0:
					{
						NotStarted notStarted = (NotStarted)this;
						num = 0;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerable<T>>(comp, notStarted.item) + ((num << 6) + (num >> 2)));
					}
					case 1:
					{
						HaveInputEnumerator haveInputEnumerator = (HaveInputEnumerator)this;
						num = 1;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveInputEnumerator.item) + ((num << 6) + (num >> 2)));
					}
					case 2:
					{
						HaveInnerEnumerator haveInnerEnumerator = (HaveInnerEnumerator)this;
						num = 2;
						num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<U>>(comp, haveInnerEnumerator.item2) + ((num << 6) + (num >> 2)));
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveInnerEnumerator.item1) + ((num << 6) + (num >> 2)));
					}
					}
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj is CollectState<T, U> collectState)
					{
						int tag = _tag;
						int tag2 = collectState._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							default:
								return true;
							case 0:
							{
								NotStarted notStarted = (NotStarted)this;
								NotStarted notStarted2 = (NotStarted)collectState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerable<T>>(comp, notStarted.item, notStarted2.item);
							}
							case 1:
							{
								HaveInputEnumerator haveInputEnumerator = (HaveInputEnumerator)this;
								HaveInputEnumerator haveInputEnumerator2 = (HaveInputEnumerator)collectState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveInputEnumerator.item, haveInputEnumerator2.item);
							}
							case 2:
							{
								HaveInnerEnumerator haveInnerEnumerator = (HaveInnerEnumerator)this;
								HaveInnerEnumerator haveInnerEnumerator2 = (HaveInnerEnumerator)collectState;
								if (HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<T>>(comp, haveInnerEnumerator.item1, haveInnerEnumerator2.item1))
								{
									return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<U>>(comp, haveInnerEnumerator.item2, haveInnerEnumerator2.item2);
								}
								return false;
							}
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(CollectState<T, U> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int tag = _tag;
						int tag2 = obj._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							default:
								return true;
							case 0:
							{
								NotStarted notStarted = (NotStarted)this;
								NotStarted notStarted2 = (NotStarted)obj;
								return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerable<T>>(notStarted.item, notStarted2.item);
							}
							case 1:
							{
								HaveInputEnumerator haveInputEnumerator = (HaveInputEnumerator)this;
								HaveInputEnumerator haveInputEnumerator2 = (HaveInputEnumerator)obj;
								return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<T>>(haveInputEnumerator.item, haveInputEnumerator2.item);
							}
							case 2:
							{
								HaveInnerEnumerator haveInnerEnumerator = (HaveInnerEnumerator)this;
								HaveInnerEnumerator haveInnerEnumerator2 = (HaveInnerEnumerator)obj;
								if (HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<T>>(haveInnerEnumerator.item1, haveInnerEnumerator2.item1))
								{
									return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<U>>(haveInnerEnumerator.item2, haveInnerEnumerator2.item2);
								}
								return false;
							}
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is CollectState<T, U> obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		internal sealed class collect@556-3<T, TResult> : FSharpFunc<FSharpOption<T>, FSharpAsync<FSharpOption<TResult>>>
		{
			public FSharpFunc<T, IAsyncEnumerable<TResult>> f;

			public FSharpRef<CollectState<T, TResult>> state;

			public IAsyncEnumerator<TResult> x;

			public IAsyncEnumerator<T> e1;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal collect@556-3(FSharpFunc<T, IAsyncEnumerable<TResult>> f, FSharpRef<CollectState<T, TResult>> state, IAsyncEnumerator<TResult> x, IAsyncEnumerator<T> e1)
			{
				((FSharpFunc<FSharpOption<FSharpOption<T>>, FSharpAsync<FSharpOption<FSharpAsync<FSharpOption<TResult>>>>>)(object)this)..ctor();
				this.f = f;
				this.state = state;
				this.x = x;
				this.e1 = e1;
			}

			public override FSharpAsync<FSharpOption<TResult>> Invoke(FSharpOption<T> _arg1)
			{
				if (_arg1 == null)
				{
					x.Dispose();
				}
				else
				{
					T value = _arg1.Value;
					IAsyncEnumerator<TResult> enumerator = ((FSharpFunc<T, IAsyncEnumerable<IAsyncEnumerable<TResult>>>)(object)f).Invoke(value).GetEnumerator();
					((FSharpRef<CollectState<CollectState<T, TResult>, ?>>)(object)state).contents = (CollectState<CollectState<T, TResult>, ?>)(object)CollectState<T, TResult>.NewHaveInnerEnumerator(e1, enumerator);
				}
				return x.MoveNext();
			}
		}

		[Serializable]
		internal sealed class collect@566-4<TResult, T> : FSharpFunc<FSharpOption<TResult>, FSharpAsync<FSharpOption<TResult>>>
		{
			public FSharpRef<CollectState<T, TResult>> state;

			public IAsyncEnumerator<TResult> x;

			public IAsyncEnumerator<TResult> e2;

			public IAsyncEnumerator<T> e1;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal collect@566-4(FSharpRef<CollectState<T, TResult>> state, IAsyncEnumerator<TResult> x, IAsyncEnumerator<TResult> e2, IAsyncEnumerator<T> e1)
			{
				((FSharpFunc<FSharpOption<FSharpOption<TResult>>, FSharpAsync<FSharpOption<FSharpOption<TResult>>>>)(object)this)..ctor();
				this.state = state;
				this.x = x;
				this.e2 = e2;
				this.e1 = e1;
			}

			public override FSharpAsync<FSharpOption<TResult>> Invoke(FSharpOption<TResult> _arg2)
			{
				if (_arg2 != null)
				{
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<TResult>>(_arg2);
				}
				((FSharpRef<CollectState<?, CollectState<T, TResult>>>)(object)state).contents = (CollectState<?, CollectState<T, TResult>>)(object)CollectState<T, TResult>.NewHaveInputEnumerator(e1);
				e2?.Dispose();
				return x.MoveNext();
			}
		}

		[Serializable]
		internal sealed class collect@548-2<TResult, T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<TResult>>>
		{
			public FSharpFunc<T, IAsyncEnumerable<TResult>> f;

			public FSharpRef<CollectState<T, TResult>> state;

			public IAsyncEnumerator<TResult> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal collect@548-2(FSharpFunc<T, IAsyncEnumerable<TResult>> f, FSharpRef<CollectState<T, TResult>> state, IAsyncEnumerator<TResult> x)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.f = f;
				this.state = state;
				this.x = x;
			}

			public override FSharpAsync<FSharpOption<TResult>> Invoke(Unit unitVar)
			{
				CollectState<T, TResult> contents = ((FSharpRef<CollectState<?, CollectState<T, TResult>>>)(object)state).contents;
				switch (contents.Tag)
				{
				default:
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<TResult>>((FSharpOption<TResult>)null);
				case 0:
				{
					CollectState<T, TResult>.NotStarted notStarted = (CollectState<T, TResult>.NotStarted)contents;
					IAsyncEnumerable<T> item3 = notStarted.item;
					IAsyncEnumerator<T> item2 = item3.GetEnumerator();
					((FSharpRef<CollectState<?, CollectState<T, TResult>>>)(object)state).contents = (CollectState<?, CollectState<T, TResult>>)(object)CollectState<T, TResult>.NewHaveInputEnumerator(item2);
					return x.MoveNext();
				}
				case 1:
				{
					CollectState<T, TResult>.HaveInputEnumerator haveInputEnumerator = (CollectState<T, TResult>.HaveInputEnumerator)contents;
					IAsyncEnumerator<T> item2 = haveInputEnumerator.item;
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Bind<FSharpOption<T>, FSharpOption<TResult>>(item2.MoveNext(), (FSharpFunc<FSharpOption<T>, FSharpAsync<FSharpOption<TResult>>>)new collect@556-3<T, TResult>(f, state, x, item2));
				}
				case 2:
				{
					CollectState<T, TResult>.HaveInnerEnumerator haveInnerEnumerator = (CollectState<T, TResult>.HaveInnerEnumerator)contents;
					IAsyncEnumerator<TResult> item = haveInnerEnumerator.item2;
					IAsyncEnumerator<T> item2 = haveInnerEnumerator.item1;
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Bind<FSharpOption<TResult>, FSharpOption<TResult>>(item.MoveNext(), (FSharpFunc<FSharpOption<TResult>, FSharpAsync<FSharpOption<TResult>>>)new collect@566-4<TResult, T>(state, x, item, item2));
				}
				}
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class collect@546-1<TResult, T> : IAsyncEnumerator<TResult>
		{
			public FSharpFunc<T, IAsyncEnumerable<TResult>> f;

			public FSharpRef<CollectState<T, TResult>> state;

			public collect@546-1(FSharpFunc<T, IAsyncEnumerable<TResult>> f, FSharpRef<CollectState<T, TResult>> state)
			{
				this.f = f;
				this.state = state;
				base..ctor();
			}

			private FSharpAsync<FSharpOption<TResult>> FSharp-Control-IAsyncEnumerator`1-MoveNext()
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<TResult>>((FSharpFunc<Unit, FSharpAsync<FSharpOption<TResult>>>)new collect@548-2<TResult, T>(f, state, this));
			}

			FSharpAsync<FSharpOption<TResult>> IAsyncEnumerator<TResult>.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerator`1-MoveNext
				return this.FSharp-Control-IAsyncEnumerator`1-MoveNext();
			}

			private void System-IDisposable-Dispose()
			{
				CollectState<T, TResult> contents = ((FSharpRef<CollectState<?, CollectState<T, TResult>>>)(object)state).contents;
				switch (contents.Tag)
				{
				case 1:
				{
					CollectState<T, TResult>.HaveInputEnumerator haveInputEnumerator = (CollectState<T, TResult>.HaveInputEnumerator)contents;
					IAsyncEnumerator<T> item2 = haveInputEnumerator.item;
					((FSharpRef<CollectState<?, CollectState<T, TResult>>>)(object)state).contents = (CollectState<?, CollectState<T, TResult>>)(object)CollectState<T, TResult>.Finished;
					item2?.Dispose();
					break;
				}
				case 2:
				{
					CollectState<T, TResult>.HaveInnerEnumerator haveInnerEnumerator = (CollectState<T, TResult>.HaveInnerEnumerator)contents;
					IAsyncEnumerator<TResult> item = haveInnerEnumerator.item2;
					IAsyncEnumerator<T> item2 = haveInnerEnumerator.item1;
					((FSharpRef<CollectState<?, CollectState<T, TResult>>>)(object)state).contents = (CollectState<?, CollectState<T, TResult>>)(object)CollectState<T, TResult>.Finished;
					item?.Dispose();
					item2?.Dispose();
					break;
				}
				}
			}

			void IDisposable.Dispose()
			{
				//ILSpy generated this explicit interface implementation from .override directive in System-IDisposable-Dispose
				this.System-IDisposable-Dispose();
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class collect@543<TResult, T> : IAsyncEnumerable<TResult>
		{
			public FSharpFunc<T, IAsyncEnumerable<TResult>> f;

			public IAsyncEnumerable<T> inp;

			public collect@543(FSharpFunc<T, IAsyncEnumerable<TResult>> f, IAsyncEnumerable<T> inp)
			{
				this.f = f;
				this.inp = inp;
				base..ctor();
			}

			private IAsyncEnumerator<TResult> FSharp-Control-IAsyncEnumerable`1-GetEnumerator()
			{
				FSharpRef<CollectState<T, TResult>> state = (FSharpRef<CollectState<T, TResult>>)(object)new FSharpRef<CollectState<?, CollectState<T, TResult>>>((CollectState<?, CollectState<T, TResult>>)(object)CollectState<T, TResult>.NewNotStarted(inp));
				return new collect@546-1<TResult, T>(f, state);
			}

			IAsyncEnumerator<TResult> IAsyncEnumerable<TResult>.GetEnumerator()
			{
				//ILSpy generated this explicit interface implementation from .override directive in FSharp-Control-IAsyncEnumerable`1-GetEnumerator
				return this.FSharp-Control-IAsyncEnumerable`1-GetEnumerator();
			}
		}

		[Serializable]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[RequireQualifiedAccess]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal class CollectSeqState<T, U> : IEquatable<CollectSeqState<T, U>>, IStructuralEquatable
		{
			internal static class Tags
			{
				public const int NotStarted = 0;

				public const int HaveInputEnumerator = 1;

				public const int HaveInnerEnumerator = 2;

				public const int Finished = 3;
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(CollectSeqState<, >.NotStarted@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class NotStarted : CollectSeqState<T, U>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IEnumerable<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal NotStarted(IEnumerable<T> item)
					: base(0)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(CollectSeqState<, >.HaveInputEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveInputEnumerator : CollectSeqState<T, U>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IEnumerator<T> item;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveInputEnumerator(IEnumerator<T> item)
					: base(1)
				{
					this.item = item;
				}
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(CollectSeqState<, >.HaveInnerEnumerator@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class HaveInnerEnumerator : CollectSeqState<T, U>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IEnumerator<T> item1;

				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly IAsyncEnumerator<U> item2;

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IEnumerator<T> Item1
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item1;
					}
				}

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal IAsyncEnumerator<U> Item2
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return item2;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal HaveInnerEnumerator(IEnumerator<T> item1, IAsyncEnumerator<U> item2)
					: base(2)
				{
					this.item1 = item1;
					this.item2 = item2;
				}
			}

			[SpecialName]
			internal class NotStarted@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IEnumerable<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public NotStarted@DebugTypeProxy(NotStarted obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveInputEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IEnumerator<T> Item
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveInputEnumerator@DebugTypeProxy(HaveInputEnumerator obj)
				{
					_obj = obj;
				}
			}

			[SpecialName]
			internal class HaveInnerEnumerator@DebugTypeProxy
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IEnumerator<T> Item1
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item1;
					}
				}

				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public IAsyncEnumerator<U> Item2
				{
					[CompilerGenerated]
					[DebuggerNonUserCode]
					get
					{
						return _obj.item2;
					}
				}

				[CompilerGenerated]
				[DebuggerNonUserCode]
				public HaveInnerEnumerator@DebugTypeProxy(HaveInnerEnumerator obj)
				{
					_obj = obj;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal int Tag
			{
				[DebuggerNonUserCode]
				get;
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsNotStarted
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 0;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveInputEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 1;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsHaveInnerEnumerator
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 2;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal static CollectSeqState<T, U> Finished
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return _unique_Finished;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool IsFinished
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return Tag == 3;
				}
			}

			static CollectSeqState()
			{
				_unique_Finished = new CollectSeqState<T, U>(3);
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal CollectSeqState(int _tag)
			{
				this._tag = _tag;
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static CollectSeqState<T, U> NewNotStarted(IEnumerable<T> item)
			{
				return new NotStarted(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static CollectSeqState<T, U> NewHaveInputEnumerator(IEnumerator<T> item)
			{
				return new HaveInputEnumerator(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal static CollectSeqState<T, U> NewHaveInnerEnumerator(IEnumerator<T> item1, IAsyncEnumerator<U> item2)
			{
				return new HaveInnerEnumerator(item1, item2);
			}

			[SpecialName]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal object __DebugDisplay()
			{
				return ((FSharpFunc<CollectSeqState<CollectSeqState<T, U>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<CollectSeqState<T, U>, string>>((PrintfFormat<FSharpFunc<CollectSeqState<T, U>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<CollectSeqState<FSharpFunc<CollectSeqState<T, U>, string>, Unit>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((CollectSeqState<CollectSeqState<T, U>, string>)(object)this);
			}

			[CompilerGenerated]
			public override string ToString()
			{
				return ((FSharpFunc<CollectSeqState<CollectSeqState<T, U>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<CollectSeqState<T, U>, string>>((PrintfFormat<FSharpFunc<CollectSeqState<T, U>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<CollectSeqState<FSharpFunc<CollectSeqState<T, U>, string>, Unit>, string>, Unit, string, string, CollectSeqState<FSharpFunc<CollectSeqState<T, U>, string>, Unit>>("%+A"))).Invoke((CollectSeqState<CollectSeqState<T, U>, string>)(object)this);
			}

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					switch (Tag)
					{
					default:
						return _tag;
					case 0:
					{
						NotStarted notStarted = (NotStarted)this;
						num = 0;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IEnumerable<T>>(comp, notStarted.item) + ((num << 6) + (num >> 2)));
					}
					case 1:
					{
						HaveInputEnumerator haveInputEnumerator = (HaveInputEnumerator)this;
						num = 1;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IEnumerator<T>>(comp, haveInputEnumerator.item) + ((num << 6) + (num >> 2)));
					}
					case 2:
					{
						HaveInnerEnumerator haveInnerEnumerator = (HaveInnerEnumerator)this;
						num = 2;
						num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IAsyncEnumerator<U>>(comp, haveInnerEnumerator.item2) + ((num << 6) + (num >> 2)));
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IEnumerator<T>>(comp, haveInnerEnumerator.item1) + ((num << 6) + (num >> 2)));
					}
					}
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed override int GetHashCode()
			{
				return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (this != null)
				{
					if (obj is CollectSeqState<T, U> collectSeqState)
					{
						int tag = _tag;
						int tag2 = collectSeqState._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							default:
								return true;
							case 0:
							{
								NotStarted notStarted = (NotStarted)this;
								NotStarted notStarted2 = (NotStarted)collectSeqState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IEnumerable<T>>(comp, notStarted.item, notStarted2.item);
							}
							case 1:
							{
								HaveInputEnumerator haveInputEnumerator = (HaveInputEnumerator)this;
								HaveInputEnumerator haveInputEnumerator2 = (HaveInputEnumerator)collectSeqState;
								return HashCompare.GenericEqualityWithComparerIntrinsic<IEnumerator<T>>(comp, haveInputEnumerator.item, haveInputEnumerator2.item);
							}
							case 2:
							{
								HaveInnerEnumerator haveInnerEnumerator = (HaveInnerEnumerator)this;
								HaveInnerEnumerator haveInnerEnumerator2 = (HaveInnerEnumerator)collectSeqState;
								if (HashCompare.GenericEqualityWithComparerIntrinsic<IEnumerator<T>>(comp, haveInnerEnumerator.item1, haveInnerEnumerator2.item1))
								{
									return HashCompare.GenericEqualityWithComparerIntrinsic<IAsyncEnumerator<U>>(comp, haveInnerEnumerator.item2, haveInnerEnumerator2.item2);
								}
								return false;
							}
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(CollectSeqState<T, U> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int tag = _tag;
						int tag2 = obj._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							default:
								return true;
							case 0:
							{
								NotStarted notStarted = (NotStarted)this;
								NotStarted notStarted2 = (NotStarted)obj;
								return HashCompare.GenericEqualityERIntrinsic<IEnumerable<T>>(notStarted.item, notStarted2.item);
							}
							case 1:
							{
								HaveInputEnumerator haveInputEnumerator = (HaveInputEnumerator)this;
								HaveInputEnumerator haveInputEnumerator2 = (HaveInputEnumerator)obj;
								return HashCompare.GenericEqualityERIntrinsic<IEnumerator<T>>(haveInputEnumerator.item, haveInputEnumerator2.item);
							}
							case 2:
							{
								HaveInnerEnumerator haveInnerEnumerator = (HaveInnerEnumerator)this;
								HaveInnerEnumerator haveInnerEnumerator2 = (HaveInnerEnumerator)obj;
								if (HashCompare.GenericEqualityERIntrinsic<IEnumerator<T>>(haveInnerEnumerator.item1, haveInnerEnumerator2.item1))
								{
									return HashCompare.GenericEqualityERIntrinsic<IAsyncEnumerator<U>>(haveInnerEnumerator.item2, haveInnerEnumerator2.item2);
								}
								return false;
							}
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is CollectSeqState<T, U> obj2)
				{
					return Equals(obj2);
				}
				return false;
			}
		}

		[Serializable]
		internal sealed class collectSeq@619-3<U, T> : FSharpFunc<FSharpOption<U>, FSharpAsync<FSharpOption<U>>>
		{
			public FSharpRef<CollectSeqState<T, U>> state;

			public IAsyncEnumerator<U> x;

			public IAsyncEnumerator<U> e2;

			public IEnumerator<T> e1;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal collectSeq@619-3(FSharpRef<CollectSeqState<T, U>> state, IAsyncEnumerator<U> x, IAsyncEnumerator<U> e2, IEnumerator<T> e1)
			{
				((FSharpFunc<FSharpOption<FSharpOption<U>>, FSharpAsync<FSharpOption<FSharpOption<U>>>>)(object)this)..ctor();
				this.state = state;
				this.x = x;
				this.e2 = e2;
				this.e1 = e1;
			}

			public override FSharpAsync<FSharpOption<U>> Invoke(FSharpOption<U> _arg1)
			{
				if (_arg1 != null)
				{
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<U>>(_arg1);
				}
				((FSharpRef<CollectSeqState<?, CollectSeqState<T, U>>>)(object)state).contents = (CollectSeqState<?, CollectSeqState<T, U>>)(object)CollectSeqState<T, U>.NewHaveInputEnumerator(e1);
				e2?.Dispose();
				return x.MoveNext();
			}
		}

		[Serializable]
		internal sealed class collectSeq@603-2<U, T> : FSharpFunc<Unit, FSharpAsync<FSharpOption<U>>>
		{
			public FSharpFunc<T, IAsyncEnumerable<U>> f;

			public FSharpRef<CollectSeqState<T, U>> state;

			public IAsyncEnumerator<U> x;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal collectSeq@603-2(FSharpFunc<T, IAsyncEnumerable<U>> f, FSharpRef<CollectSeqState<T, U>> state, IAsyncEnumerator<U> x)
			{
				((FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>)(object)this)..ctor();
				this.f = f;
				this.state = state;
				this.x = x;
			}

			public override FSharpAsync<FSharpOption<U>> Invoke(Unit unitVar)
			{
				CollectSeqState<T, U> contents = ((FSharpRef<CollectSeqState<?, CollectSeqState<T, U>>>)(object)state).contents;
				switch (contents.Tag)
				{
				default:
					return ExtraTopLevelOperators.DefaultAsyncBuilder.Return<FSharpOption<U>>((FSharpOption<U>)null);
				case 0:
				{
					CollectSeqState<T, U>.NotStarted notStarted = (CollectSeqState<T, U>.NotStarted)contents;
					IEnumerable<T> item3 = notStarted.item;
					IEnumerator<T> item2 = item3.GetEnumerator();
					((FSharpRef<CollectSeqState<?, CollectSeqState<T, U>>>)(object)state).contents = (CollectSeqState<?, CollectSeqState<T, U>>)(object)CollectSeqS

BepInEx/core/FSharp.Core.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Numerics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$FSharp-Core>;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;
using Microsoft.FSharp.Linq;
using Microsoft.FSharp.Linq.RuntimeHelpers;
using Microsoft.FSharp.Primitives.Basics;
using Microsoft.FSharp.Quotations;
using Microsoft.FSharp.Reflection;
using Microsoft.FSharp.Text.StructuredPrintfImpl;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")]
[assembly: AssemblyFileVersion("8.1.23.52306")]
[assembly: AssemblyInformationalVersion("8.0.100-beta.23523.6+f41fe153f68dd6b20cf4f91de9ea1e55fc09bb20")]
[assembly: AssemblyProduct("FSharp.Core")]
[assembly: AssemblyTitle("FSharp.Core")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/dotnet/fsharp")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: ComVisible(false)]
[assembly: CLSCompliant(true)]
[assembly: SecurityTransparent]
[assembly: AutoOpen("Microsoft.FSharp")]
[assembly: AutoOpen("Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators")]
[assembly: AutoOpen("Microsoft.FSharp.Core")]
[assembly: AutoOpen("Microsoft.FSharp.Collections")]
[assembly: AutoOpen("Microsoft.FSharp.Control")]
[assembly: AutoOpen("Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority")]
[assembly: AutoOpen("Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default)]
[assembly: AssemblyVersion("8.0.0.0")]
[assembly: TypeForwardedTo(typeof(AggregateException))]
[assembly: TypeForwardedTo(typeof(IStructuralComparable))]
[assembly: TypeForwardedTo(typeof(IStructuralEquatable))]
[assembly: TypeForwardedTo(typeof(IObservable<>))]
[assembly: TypeForwardedTo(typeof(IObserver<>))]
[assembly: TypeForwardedTo(typeof(Lazy<>))]
[assembly: TypeForwardedTo(typeof(BigInteger))]
[assembly: TypeForwardedTo(typeof(CancellationToken))]
[assembly: TypeForwardedTo(typeof(CancellationTokenRegistration))]
[assembly: TypeForwardedTo(typeof(CancellationTokenSource))]
[assembly: TypeForwardedTo(typeof(Tuple))]
[assembly: TypeForwardedTo(typeof(Tuple<>))]
[assembly: TypeForwardedTo(typeof(Tuple<, >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , , , >))]
namespace Microsoft.FSharp.Core
{
	[Serializable]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class Unit : IComparable
	{
		internal Unit()
		{
		}

		public override int GetHashCode()
		{
			return 0;
		}

		public override bool Equals(object obj)
		{
			if (obj != null)
			{
				if (LanguagePrimitives.IntrinsicFunctions.TypeTestGeneric<Unit>(obj))
				{
					return true;
				}
				return false;
			}
			return true;
		}

		virtual int IComparable.CompareTo(object _obj)
		{
			return 0;
		}
	}
	[Serializable]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public enum SourceConstructFlags
	{
		None = 0,
		SumType = 1,
		RecordType = 2,
		ObjectType = 3,
		Field = 4,
		Exception = 5,
		Closure = 6,
		Module = 7,
		UnionCase = 8,
		Value = 9,
		KindMask = 31,
		NonPublicRepresentation = 32
	}
	[Serializable]
	[Flags]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public enum CompilationRepresentationFlags
	{
		None = 0,
		Static = 1,
		Instance = 2,
		ModuleSuffix = 4,
		UseNullAsTrueValue = 8,
		Event = 0x10
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class SealedAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public SealedAttribute(bool value)
		{
			this.value = value;
		}

		public SealedAttribute()
			: this(value: true)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AbstractClassAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.GenericParameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class EqualityConditionalOnAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.GenericParameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ComparisonConditionalOnAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AllowNullLiteralAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public AllowNullLiteralAttribute(bool value)
		{
			this.value = value;
		}

		public AllowNullLiteralAttribute()
			: this(value: true)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class VolatileFieldAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class DefaultAugmentationAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public DefaultAugmentationAttribute(bool value)
		{
			this.value = value;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CLIEventAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CLIMutableAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AutoSerializableAttribute : Attribute
	{
		internal bool value;

		public bool Value => value;

		public AutoSerializableAttribute(bool value)
		{
			this.value = value;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Field, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class DefaultValueAttribute : Attribute
	{
		internal bool check;

		public bool Check => check;

		public DefaultValueAttribute(bool check)
		{
			this.check = check;
		}

		public DefaultValueAttribute()
			: this(check: true)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class EntryPointAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ReferenceEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructuralComparisonAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructuralEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CustomEqualityAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CustomComparisonAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoComparisonAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ReflectedDefinitionAttribute : Attribute
	{
		internal bool includeValue;

		public bool IncludeValue => includeValue;

		public ReflectedDefinitionAttribute(bool includeValue)
		{
			this.includeValue = includeValue;
		}

		public ReflectedDefinitionAttribute()
			: this(includeValue: false)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompiledNameAttribute : Attribute
	{
		internal string compiledName;

		public string CompiledName => compiledName;

		public CompiledNameAttribute(string compiledName)
		{
			this.compiledName = compiledName;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Struct | AttributeTargets.ReturnValue, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.GenericParameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class MeasureAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class MeasureAnnotatedAbbreviationAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Interface, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class InterfaceAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ClassAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class LiteralAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class FSharpInterfaceDataVersionAttribute : Attribute
	{
		internal int release;

		internal int minor;

		internal int major;

		public int Major => major;

		public int Minor => minor;

		public int Release => release;

		public FSharpInterfaceDataVersionAttribute(int major, int minor, int release)
		{
			this.major = major;
			this.minor = minor;
			this.release = release;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationMappingAttribute : Attribute
	{
		internal int variantNumber;

		internal Type[] typeDefinitions;

		internal SourceConstructFlags sourceConstructFlags;

		internal int sequenceNumber;

		internal string resourceName;

		public SourceConstructFlags SourceConstructFlags => sourceConstructFlags;

		public int SequenceNumber => sequenceNumber;

		public int VariantNumber => variantNumber;

		public Type[] TypeDefinitions => typeDefinitions;

		public string ResourceName => resourceName;

		internal CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags, int variantNumber, int sequenceNumber, string resourceName, Type[] typeDefinitions)
		{
			this.sourceConstructFlags = sourceConstructFlags;
			this.variantNumber = variantNumber;
			this.sequenceNumber = sequenceNumber;
			this.resourceName = resourceName;
			this.typeDefinitions = typeDefinitions;
		}

		public CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags)
			: this(sourceConstructFlags, 0, 0)
		{
		}

		public CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags, int sequenceNumber)
			: this(sourceConstructFlags, 0, sequenceNumber)
		{
		}

		public CompilationMappingAttribute(SourceConstructFlags sourceConstructFlags, int variantNumber, int sequenceNumber)
			: this(sourceConstructFlags, variantNumber, sequenceNumber, null, null)
		{
		}

		public CompilationMappingAttribute(string resourceName, Type[] typeDefinitions)
			: this(SourceConstructFlags.None, 0, 0, resourceName, typeDefinitions)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationSourceNameAttribute : Attribute
	{
		internal string sourceName;

		public string SourceName => sourceName;

		public CompilationSourceNameAttribute(string sourceName)
		{
			this.sourceName = sourceName;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationRepresentationAttribute : Attribute
	{
		internal CompilationRepresentationFlags flags;

		public CompilationRepresentationFlags Flags => flags;

		public CompilationRepresentationAttribute(CompilationRepresentationFlags flags)
		{
			this.flags = flags;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ExperimentalAttribute : Attribute
	{
		internal string message;

		public string Message => message;

		public ExperimentalAttribute(string message)
		{
			this.message = message;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class InlineIfLambdaAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilationArgumentCountsAttribute : Attribute
	{
		internal int[] counts;

		public IEnumerable<int> Counts => (IEnumerable<int>)counts.Clone();

		public CompilationArgumentCountsAttribute(int[] counts)
		{
			this.counts = counts;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CustomOperationAttribute : Attribute
	{
		internal string name;

		internal bool isBinary;

		internal bool allowInto;

		internal bool isJoin;

		internal bool isGroupJoin;

		internal bool maintainsVarSpace;

		internal bool maintainsVarSpaceWithBind;

		internal string joinOnWord;

		public string Name => name;

		public bool AllowIntoPattern
		{
			get
			{
				return allowInto;
			}
			set
			{
				allowInto = value;
			}
		}

		public bool IsLikeZip
		{
			get
			{
				return isBinary;
			}
			set
			{
				isBinary = value;
			}
		}

		public bool IsLikeJoin
		{
			get
			{
				return isJoin;
			}
			set
			{
				isJoin = value;
			}
		}

		public bool IsLikeGroupJoin
		{
			get
			{
				return isGroupJoin;
			}
			set
			{
				isGroupJoin = value;
			}
		}

		public string JoinConditionWord
		{
			get
			{
				return joinOnWord;
			}
			set
			{
				joinOnWord = value;
			}
		}

		public bool MaintainsVariableSpace
		{
			get
			{
				return maintainsVarSpace;
			}
			set
			{
				maintainsVarSpace = value;
			}
		}

		public bool MaintainsVariableSpaceUsingBind
		{
			get
			{
				return maintainsVarSpaceWithBind;
			}
			set
			{
				maintainsVarSpaceWithBind = value;
			}
		}

		public CustomOperationAttribute(string name)
		{
			this.name = name;
			isBinary = false;
			allowInto = false;
			isJoin = false;
			isGroupJoin = false;
			maintainsVarSpace = false;
			maintainsVarSpaceWithBind = false;
			joinOnWord = "";
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class ProjectionParameterAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class StructuredFormatDisplayAttribute : Attribute
	{
		internal string value;

		public string Value => value;

		public StructuredFormatDisplayAttribute(string value)
		{
			this.value = value;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class CompilerMessageAttribute : Attribute
	{
		internal int messageNumber;

		internal string message;

		internal bool isError;

		internal bool isHidden;

		public string Message => message;

		public int MessageNumber => messageNumber;

		public bool IsError
		{
			get
			{
				return isError;
			}
			set
			{
				isError = value;
			}
		}

		public bool IsHidden
		{
			get
			{
				return isHidden;
			}
			set
			{
				isHidden = value;
			}
		}

		public CompilerMessageAttribute(string message, int messageNumber)
		{
			this.message = message;
			this.messageNumber = messageNumber;
			isError = false;
			isHidden = false;
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class UnverifiableAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoDynamicInvocationAttribute : Attribute
	{
		internal bool isLegacy;

		internal bool IsLegacy => isLegacy;

		internal NoDynamicInvocationAttribute(bool isLegacy)
		{
			this.isLegacy = isLegacy;
		}

		public NoDynamicInvocationAttribute()
			: this(isLegacy: false)
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class OptionalArgumentAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class GeneralizableValueAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class RequiresExplicitTypeArgumentsAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class RequireQualifiedAccessAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class AutoOpenAttribute : Attribute
	{
		internal string path;

		public string Path => path;

		public AutoOpenAttribute(string path)
		{
			this.path = path;
		}

		public AutoOpenAttribute()
			: this("")
		{
		}
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	internal sealed class ValueAsStaticPropertyAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class NoCompilerInliningAttribute : Attribute
	{
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
	[Sealed]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	public sealed class TailCallAttribute : Attribute
	{
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[Serializable]
	[Flags]
	[RequireQualifiedAccess]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	internal enum DynamicallyAccessedMemberTypes
	{
		None = 0,
		PublicParameterlessConstructor = 1,
		PublicConstructors = 3,
		NonPublicConstructors = 4,
		PublicMethods = 8,
		NonPublicMethods = 0x10,
		PublicFields = 0x20,
		NonPublicFields = 0x40,
		PublicNestedTypes = 0x80,
		NonPublicNestedTypes = 0x100,
		PublicProperties = 0x200,
		NonPublicProperties = 0x400,
		PublicEvents = 0x800,
		NonPublicEvents = 0x1000,
		Interfaces = 0x2000,
		All = -1
	}
	[Serializable]
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, Inherited = false)]
	[CompilationMapping(SourceConstructFlags.ObjectType)]
	internal class DynamicallyAccessedMembersAttribute : Attribute
	{
		internal DynamicallyAccessedMemberTypes MemberTypes@;

		internal DynamicallyAccessedMemberTypes MemberTypes
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return MemberTypes@;
			}
			[CompilerGenerated]
			[DebuggerNonUserCode]
			set
			{
				MemberTypes@ = value;
			}
		}

		public DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes)
		{
			MemberTypes@ = memberTypes;
		}

		internal void DynamicallyAccessedMembersAttribute(DynamicallyAccessedMemberTypes memberTypes)
		{
			MemberTypes@ = memberTypes;
		}
	}
}
namespace Microsoft.FSharp.Core
{
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`2")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2> : IEquatable<FSharpChoice<T1, T2>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of2 = 0;

			public const int Choice2Of2 = 1;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, >.Choice1Of2@DebugTypeProxy))]
		public class Choice1Of2 : FSharpChoice<T1, T2>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of2(T1 item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, >.Choice2Of2@DebugTypeProxy))]
		public class Choice2Of2 : FSharpChoice<T1, T2>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of2(T2 item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of2@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of2@DebugTypeProxy(Choice1Of2 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of2@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of2@DebugTypeProxy(Choice2Of2 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is Choice2Of2) ? 1 : 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of2
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice1Of2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of2
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice2Of2;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice()
		{
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2> NewChoice1Of2(T1 item)
		{
			return new Choice1Of2(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2> NewChoice2Of2(T2 item)
		{
			return new Choice2Of2(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					int num2 = ((obj is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						IComparer genericComparer;
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)obj;
							genericComparer = LanguagePrimitives.GenericComparer;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)obj;
						genericComparer = LanguagePrimitives.GenericComparer;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2> fSharpChoice = (FSharpChoice<T1, T2>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2>)obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					FSharpChoice<T1, T2> fSharpChoice2 = fSharpChoice;
					int num2 = ((fSharpChoice2 is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)fSharpChoice;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)fSharpChoice;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (this is Choice1Of2)
				{
					Choice1Of2 choice1Of = (Choice1Of2)this;
					num = 0;
					T1 item = choice1Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item) + ((num << 6) + (num >> 2)));
				}
				Choice2Of2 choice2Of = (Choice2Of2)this;
				num = 1;
				T2 item2 = choice2Of.item;
				return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item2) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is FSharpChoice<T1, T2> fSharpChoice)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					FSharpChoice<T1, T2> fSharpChoice2 = fSharpChoice;
					int num2 = ((fSharpChoice2 is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)fSharpChoice;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)fSharpChoice;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice2Of2) ? 1 : 0);
					int num2 = ((obj is Choice2Of2) ? 1 : 0);
					if (num == num2)
					{
						if (this is Choice1Of2)
						{
							Choice1Of2 choice1Of = (Choice1Of2)this;
							Choice1Of2 choice1Of2 = (Choice1Of2)obj;
							T1 item = choice1Of.item;
							T1 item2 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
						}
						Choice2Of2 choice2Of = (Choice2Of2)this;
						Choice2Of2 choice2Of2 = (Choice2Of2)obj;
						T2 item3 = choice2Of.item;
						T2 item4 = choice2Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`3")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3> : IEquatable<FSharpChoice<T1, T2, T3>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of3 = 0;

			public const int Choice2Of3 = 1;

			public const int Choice3Of3 = 2;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , >.Choice1Of3@DebugTypeProxy))]
		public class Choice1Of3 : FSharpChoice<T1, T2, T3>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of3(T1 item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , >.Choice2Of3@DebugTypeProxy))]
		public class Choice2Of3 : FSharpChoice<T1, T2, T3>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of3(T2 item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , >.Choice3Of3@DebugTypeProxy))]
		public class Choice3Of3 : FSharpChoice<T1, T2, T3>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of3(T3 item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of3@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of3@DebugTypeProxy(Choice1Of3 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of3@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of3@DebugTypeProxy(Choice2Of3 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of3@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of3@DebugTypeProxy(Choice3Of3 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0);
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of3
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice1Of3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of3
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice2Of3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of3
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Choice3Of3;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice()
		{
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3> NewChoice1Of3(T1 item)
		{
			return new Choice1Of3(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3> NewChoice2Of3(T2 item)
		{
			return new Choice2Of3(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3> NewChoice3Of3(T3 item)
		{
			return new Choice3Of3(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					int num2 = ((obj is Choice3Of3) ? 2 : ((obj is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						IComparer genericComparer;
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)obj;
								genericComparer = LanguagePrimitives.GenericComparer;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)obj;
								genericComparer = LanguagePrimitives.GenericComparer;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)obj;
						genericComparer = LanguagePrimitives.GenericComparer;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item5, item6);
					}
					return num - num2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3> fSharpChoice = (FSharpChoice<T1, T2, T3>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2, T3>)obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					FSharpChoice<T1, T2, T3> fSharpChoice2 = fSharpChoice;
					int num2 = ((fSharpChoice2 is Choice3Of3) ? 2 : ((fSharpChoice2 is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)fSharpChoice;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)fSharpChoice;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)fSharpChoice;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item5, item6);
					}
					return num - num2;
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2, T3>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (!(this is Choice1Of3))
				{
					if (this is Choice2Of3)
					{
						Choice2Of3 choice2Of = (Choice2Of3)this;
						num = 1;
						T2 item = choice2Of.item;
						return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item) + ((num << 6) + (num >> 2)));
					}
					if (this is Choice3Of3)
					{
						Choice3Of3 choice3Of = (Choice3Of3)this;
						num = 2;
						T3 item2 = choice3Of.item;
						return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item2) + ((num << 6) + (num >> 2)));
					}
				}
				Choice1Of3 choice1Of = (Choice1Of3)this;
				num = 0;
				T1 item3 = choice1Of.item;
				return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item3) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is FSharpChoice<T1, T2, T3> fSharpChoice)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					FSharpChoice<T1, T2, T3> fSharpChoice2 = fSharpChoice;
					int num2 = ((fSharpChoice2 is Choice3Of3) ? 2 : ((fSharpChoice2 is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)fSharpChoice;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)fSharpChoice;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)fSharpChoice;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item5, item6);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Choice3Of3) ? 2 : ((this is Choice2Of3) ? 1 : 0));
					int num2 = ((obj is Choice3Of3) ? 2 : ((obj is Choice2Of3) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Choice1Of3))
						{
							if (this is Choice2Of3)
							{
								Choice2Of3 choice2Of = (Choice2Of3)this;
								Choice2Of3 choice2Of2 = (Choice2Of3)obj;
								T2 item = choice2Of.item;
								T2 item2 = choice2Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
							}
							if (this is Choice3Of3)
							{
								Choice3Of3 choice3Of = (Choice3Of3)this;
								Choice3Of3 choice3Of2 = (Choice3Of3)obj;
								T3 item3 = choice3Of.item;
								T3 item4 = choice3Of2.item;
								return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
							}
						}
						Choice1Of3 choice1Of = (Choice1Of3)this;
						Choice1Of3 choice1Of2 = (Choice1Of3)obj;
						T1 item5 = choice1Of.item;
						T1 item6 = choice1Of2.item;
						return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item5, item6);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`4")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4> : IEquatable<FSharpChoice<T1, T2, T3, T4>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of4 = 0;

			public const int Choice2Of4 = 1;

			public const int Choice3Of4 = 2;

			public const int Choice4Of4 = 3;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice1Of4@DebugTypeProxy))]
		public class Choice1Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of4(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice2Of4@DebugTypeProxy))]
		public class Choice2Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of4(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice3Of4@DebugTypeProxy))]
		public class Choice3Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of4(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , >.Choice4Of4@DebugTypeProxy))]
		public class Choice4Of4 : FSharpChoice<T1, T2, T3, T4>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of4(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of4@DebugTypeProxy(Choice1Of4 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of4@DebugTypeProxy(Choice2Of4 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of4@DebugTypeProxy(Choice3Of4 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice4Of4@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice4Of4@DebugTypeProxy(Choice4Of4 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice4Of4
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice1Of4(T1 item)
		{
			return new Choice1Of4(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice2Of4(T2 item)
		{
			return new Choice2Of4(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice3Of4(T3 item)
		{
			return new Choice3Of4(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 3)]
		public static FSharpChoice<T1, T2, T3, T4> NewChoice4Of4(T4 item)
		{
			return new Choice4Of4(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3, T4> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)obj;
							IComparer genericComparer = LanguagePrimitives.GenericComparer;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(genericComparer, item, item2);
						}
						}
					}
					return tag - tag2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3, T4>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3, T4> fSharpChoice = (FSharpChoice<T1, T2, T3, T4>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2, T3, T4>)obj != null)
				{
					int tag = _tag;
					int tag2 = fSharpChoice._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)fSharpChoice;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)fSharpChoice;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)fSharpChoice;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)fSharpChoice;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericComparisonWithComparerIntrinsic(comp, item, item2);
						}
						}
					}
					return tag - tag2;
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2, T3, T4>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				switch (Tag)
				{
				default:
				{
					Choice1Of4 choice1Of = (Choice1Of4)this;
					num = 0;
					T1 item4 = choice1Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item4) + ((num << 6) + (num >> 2)));
				}
				case 1:
				{
					Choice2Of4 choice2Of = (Choice2Of4)this;
					num = 1;
					T2 item3 = choice2Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item3) + ((num << 6) + (num >> 2)));
				}
				case 2:
				{
					Choice3Of4 choice3Of = (Choice3Of4)this;
					num = 2;
					T3 item2 = choice3Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item2) + ((num << 6) + (num >> 2)));
				}
				case 3:
				{
					Choice4Of4 choice4Of = (Choice4Of4)this;
					num = 3;
					T4 item = choice4Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item) + ((num << 6) + (num >> 2)));
				}
				}
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is FSharpChoice<T1, T2, T3, T4> fSharpChoice)
				{
					int tag = _tag;
					int tag2 = fSharpChoice._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)fSharpChoice;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)fSharpChoice;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)fSharpChoice;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)fSharpChoice;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityWithComparerIntrinsic(comp, item, item2);
						}
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3, T4> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of4 choice1Of = (Choice1Of4)this;
							Choice1Of4 choice1Of2 = (Choice1Of4)obj;
							T1 item7 = choice1Of.item;
							T1 item8 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item7, item8);
						}
						case 1:
						{
							Choice2Of4 choice2Of = (Choice2Of4)this;
							Choice2Of4 choice2Of2 = (Choice2Of4)obj;
							T2 item5 = choice2Of.item;
							T2 item6 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item5, item6);
						}
						case 2:
						{
							Choice3Of4 choice3Of = (Choice3Of4)this;
							Choice3Of4 choice3Of2 = (Choice3Of4)obj;
							T3 item3 = choice3Of.item;
							T3 item4 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
						}
						case 3:
						{
							Choice4Of4 choice4Of = (Choice4Of4)this;
							Choice4Of4 choice4Of2 = (Choice4Of4)obj;
							T4 item = choice4Of.item;
							T4 item2 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
						}
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`5")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4, T5> : IEquatable<FSharpChoice<T1, T2, T3, T4, T5>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4, T5>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of5 = 0;

			public const int Choice2Of5 = 1;

			public const int Choice3Of5 = 2;

			public const int Choice4Of5 = 3;

			public const int Choice5Of5 = 4;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice1Of5@DebugTypeProxy))]
		public class Choice1Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of5(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice2Of5@DebugTypeProxy))]
		public class Choice2Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of5(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice3Of5@DebugTypeProxy))]
		public class Choice3Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of5(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice4Of5@DebugTypeProxy))]
		public class Choice4Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of5(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , >.Choice5Of5@DebugTypeProxy))]
		public class Choice5Of5 : FSharpChoice<T1, T2, T3, T4, T5>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T5 item;

			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice5Of5(T5 item)
				: base(4)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of5@DebugTypeProxy(Choice1Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of5@DebugTypeProxy(Choice2Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of5@DebugTypeProxy(Choice3Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice4Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice4Of5@DebugTypeProxy(Choice4Of5 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice5Of5@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice5Of5@DebugTypeProxy(Choice5Of5 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice4Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice5Of5
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 4;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice1Of5(T1 item)
		{
			return new Choice1Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice2Of5(T2 item)
		{
			return new Choice2Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice3Of5(T3 item)
		{
			return new Choice3Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 3)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice4Of5(T4 item)
		{
			return new Choice4Of5(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 4)]
		public static FSharpChoice<T1, T2, T3, T4, T5> NewChoice5Of5(T5 item)
		{
			return new Choice5Of5(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3, T4, T5> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					return $Prim-types.CompareTo$cont@3583(this, obj, null);
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3, T4, T5>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3, T4, T5> objTemp = (FSharpChoice<T1, T2, T3, T4, T5>)obj;
			if (this != null)
			{
				return $Prim-types.CompareTo$cont@3583-1(comp, this, obj, objTemp, null);
			}
			if ((FSharpChoice<T1, T2, T3, T4, T5>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				switch (Tag)
				{
				default:
				{
					Choice1Of5 choice1Of = (Choice1Of5)this;
					num = 0;
					T1 item5 = choice1Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item5) + ((num << 6) + (num >> 2)));
				}
				case 1:
				{
					Choice2Of5 choice2Of = (Choice2Of5)this;
					num = 1;
					T2 item4 = choice2Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item4) + ((num << 6) + (num >> 2)));
				}
				case 2:
				{
					Choice3Of5 choice3Of = (Choice3Of5)this;
					num = 2;
					T3 item3 = choice3Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item3) + ((num << 6) + (num >> 2)));
				}
				case 3:
				{
					Choice4Of5 choice4Of = (Choice4Of5)this;
					num = 3;
					T4 item2 = choice4Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item2) + ((num << 6) + (num >> 2)));
				}
				case 4:
				{
					Choice5Of5 choice5Of = (Choice5Of5)this;
					num = 4;
					T5 item = choice5Of.item;
					return -1640531527 + (LanguagePrimitives.HashCompare.GenericHashParamObj(comp, item) + ((num << 6) + (num >> 2)));
				}
				}
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				return $Prim-types.Equals$cont@3583(this, obj, comp, null);
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3, T4, T5> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						default:
						{
							Choice1Of5 choice1Of = (Choice1Of5)this;
							Choice1Of5 choice1Of2 = (Choice1Of5)obj;
							T1 item9 = choice1Of.item;
							T1 item10 = choice1Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item9, item10);
						}
						case 1:
						{
							Choice2Of5 choice2Of = (Choice2Of5)this;
							Choice2Of5 choice2Of2 = (Choice2Of5)obj;
							T2 item7 = choice2Of.item;
							T2 item8 = choice2Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item7, item8);
						}
						case 2:
						{
							Choice3Of5 choice3Of = (Choice3Of5)this;
							Choice3Of5 choice3Of2 = (Choice3Of5)obj;
							T3 item5 = choice3Of.item;
							T3 item6 = choice3Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item5, item6);
						}
						case 3:
						{
							Choice4Of5 choice4Of = (Choice4Of5)this;
							Choice4Of5 choice4Of2 = (Choice4Of5)obj;
							T4 item3 = choice4Of.item;
							T4 item4 = choice4Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item3, item4);
						}
						case 4:
						{
							Choice5Of5 choice5Of = (Choice5Of5)this;
							Choice5Of5 choice5Of2 = (Choice5Of5)obj;
							T5 item = choice5Of.item;
							T5 item2 = choice5Of2.item;
							return LanguagePrimitives.HashCompare.GenericEqualityERIntrinsic(item, item2);
						}
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4, T5> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`6")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4, T5, T6> : IEquatable<FSharpChoice<T1, T2, T3, T4, T5, T6>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4, T5, T6>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of6 = 0;

			public const int Choice2Of6 = 1;

			public const int Choice3Of6 = 2;

			public const int Choice4Of6 = 3;

			public const int Choice5Of6 = 4;

			public const int Choice6Of6 = 5;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice1Of6@DebugTypeProxy))]
		public class Choice1Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of6(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice2Of6@DebugTypeProxy))]
		public class Choice2Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of6(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice3Of6@DebugTypeProxy))]
		public class Choice3Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of6(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice4Of6@DebugTypeProxy))]
		public class Choice4Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of6(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice5Of6@DebugTypeProxy))]
		public class Choice5Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T5 item;

			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice5Of6(T5 item)
				: base(4)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , >.Choice6Of6@DebugTypeProxy))]
		public class Choice6Of6 : FSharpChoice<T1, T2, T3, T4, T5, T6>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T6 item;

			[CompilationMapping(SourceConstructFlags.Field, 5, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T6 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice6Of6(T6 item)
				: base(5)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Choice1Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice1Of6@DebugTypeProxy(Choice1Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice2Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice2Of6@DebugTypeProxy(Choice2Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice3Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice3Of6@DebugTypeProxy(Choice3Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice4Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice4Of6@DebugTypeProxy(Choice4Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice5Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice5Of6@DebugTypeProxy(Choice5Of6 obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Choice6Of6@DebugTypeProxy
		{
			[CompilationMapping(SourceConstructFlags.Field, 5, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T6 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Choice6Of6@DebugTypeProxy(Choice6Of6 obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice1Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice2Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice3Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice4Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice5Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 4;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsChoice6Of6
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 5;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , >))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal FSharpChoice(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 0)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice1Of6(T1 item)
		{
			return new Choice1Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 1)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice2Of6(T2 item)
		{
			return new Choice2Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 2)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice3Of6(T3 item)
		{
			return new Choice3Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 3)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice4Of6(T4 item)
		{
			return new Choice4Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 4)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice5Of6(T5 item)
		{
			return new Choice5Of6(item);
		}

		[CompilationMapping(SourceConstructFlags.UnionCase, 5)]
		public static FSharpChoice<T1, T2, T3, T4, T5, T6> NewChoice6Of6(T6 item)
		{
			return new Choice6Of6(item);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(FSharpChoice<T1, T2, T3, T4, T5, T6> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						return $Prim-types.CompareTo$cont@3592-2(this, obj, null);
					}
					return tag - tag2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((FSharpChoice<T1, T2, T3, T4, T5, T6>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			FSharpChoice<T1, T2, T3, T4, T5, T6> objTemp = (FSharpChoice<T1, T2, T3, T4, T5, T6>)obj;
			if (this != null)
			{
				if ((FSharpChoice<T1, T2, T3, T4, T5, T6>)obj != null)
				{
					return $Prim-types.CompareTo$cont@3592-3(comp, this, objTemp, null);
				}
				return 1;
			}
			if ((FSharpChoice<T1, T2, T3, T4, T5, T6>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				return $Prim-types.GetHashCode$cont@3592(comp, this, null);
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is FSharpChoice<T1, T2, T3, T4, T5, T6> that)
				{
					return $Prim-types.Equals$cont@3592-1(this, that, comp, null);
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(FSharpChoice<T1, T2, T3, T4, T5, T6> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					return $Prim-types.Equals$cont@3592-2(this, obj, null);
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is FSharpChoice<T1, T2, T3, T4, T5, T6> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[StructuralEquality]
	[StructuralComparison]
	[CompiledName("FSharpChoice`7")]
	[CompilationMapping(SourceConstructFlags.SumType)]
	public abstract class FSharpChoice<T1, T2, T3, T4, T5, T6, T7> : IEquatable<FSharpChoice<T1, T2, T3, T4, T5, T6, T7>>, IStructuralEquatable, IComparable<FSharpChoice<T1, T2, T3, T4, T5, T6, T7>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Choice1Of7 = 0;

			public const int Choice2Of7 = 1;

			public const int Choice3Of7 = 2;

			public const int Choice4Of7 = 3;

			public const int Choice5Of7 = 4;

			public const int Choice6Of7 = 5;

			public const int Choice7Of7 = 6;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice1Of7@DebugTypeProxy))]
		public class Choice1Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T1 item;

			[CompilationMapping(SourceConstructFlags.Field, 0, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T1 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice1Of7(T1 item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice2Of7@DebugTypeProxy))]
		public class Choice2Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T2 item;

			[CompilationMapping(SourceConstructFlags.Field, 1, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T2 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice2Of7(T2 item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice3Of7@DebugTypeProxy))]
		public class Choice3Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T3 item;

			[CompilationMapping(SourceConstructFlags.Field, 2, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T3 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice3Of7(T3 item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice4Of7@DebugTypeProxy))]
		public class Choice4Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T4 item;

			[CompilationMapping(SourceConstructFlags.Field, 3, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T4 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(FSharpChoice<, , , , , , >))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Choice4Of7(T4 item)
				: base(3)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(FSharpChoice<, , , , , , >.Choice5Of7@DebugTypeProxy))]
		public class Choice5Of7 : FSharpChoice<T1, T2, T3, T4, T5, T6, T7>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T5 item;

			[CompilationMapping(SourceConstructFlags.Field, 4, 0)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T5 Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonP

BepInEx/core/FSharpPlus.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$FSharpPlus>;
using FSharpPlus;
using FSharpPlus.Control;
using FSharpPlus.Data;
using FSharpPlus.Internals;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;
using Microsoft.FSharp.Quotations;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("gusty; wallymathieu")]
[assembly: AssemblyCopyright("2012-2023 Gustavo M. Wild - Oskar Gewalli (and contributors https://github.com/fsprojects/FSharpPlus/graphs/contributors)")]
[assembly: AssemblyInformationalVersion("1.5.0")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/fsprojects/FSharpPlus")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace FSharpPlus.Internals
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default6
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default5 : Default6
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default4 : Default5
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default3 : Default4
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default2 : Default3
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Default1 : Default2
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Id<t>
	{
		internal t value;

		public t getValue => value;

		public Id(t v)
		{
			value = v;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Id0
	{
		internal string value;

		public string getValue => value;

		public Id0(string v)
		{
			value = v;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public abstract class Either<t, u> : IEquatable<Either<t, u>>, IStructuralEquatable, IComparable<Either<t, u>>, IComparable, IStructuralComparable
	{
		public static class Tags
		{
			public const int Left = 0;

			public const int Right = 1;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(Either<, >.Left@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class Left : Either<t, u>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly t item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public t Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Left(t item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(Either<, >.Right@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class Right : Either<t, u>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly u item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public u Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Right(u item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Left@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public t Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Left@DebugTypeProxy(Left obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Right@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public u Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Right@DebugTypeProxy(Right obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is Right) ? 1 : 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsLeft
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Left;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsRight
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Right;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal Either()
		{
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static Either<t, u> NewLeft(t item)
		{
			return new Left(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static Either<t, u> NewRight(u item)
		{
			return new Right(item);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<Either<Either<t, u>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<Either<t, u>, string>>((PrintfFormat<FSharpFunc<Either<t, u>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<Either<FSharpFunc<Either<t, u>, string>, Unit>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((Either<Either<t, u>, string>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<Either<Either<t, u>, string>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<Either<t, u>, string>>((PrintfFormat<FSharpFunc<Either<t, u>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<Either<FSharpFunc<Either<t, u>, string>, Unit>, string>, Unit, string, string, Either<FSharpFunc<Either<t, u>, string>, Unit>>("%+A"))).Invoke((Either<Either<t, u>, string>)(object)this);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(Either<t, u> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Right) ? 1 : 0);
					int num2 = ((obj is Right) ? 1 : 0);
					if (num == num2)
					{
						IComparer genericComparer;
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)obj;
							genericComparer = LanguagePrimitives.GenericComparer;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericComparisonWithComparerIntrinsic<t>(genericComparer, item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)obj;
						genericComparer = LanguagePrimitives.GenericComparer;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericComparisonWithComparerIntrinsic<u>(genericComparer, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if (obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj)
		{
			return CompareTo((Either<t, u>)obj);
		}

		[CompilerGenerated]
		public virtual sealed int CompareTo(object obj, IComparer comp)
		{
			Either<t, u> either = (Either<t, u>)obj;
			if (this != null)
			{
				if ((Either<t, u>)obj != null)
				{
					int num = ((this is Right) ? 1 : 0);
					Either<t, u> either2 = either;
					int num2 = ((either2 is Right) ? 1 : 0);
					if (num == num2)
					{
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)either;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericComparisonWithComparerIntrinsic<t>(comp, item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)either;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericComparisonWithComparerIntrinsic<u>(comp, item3, item4);
					}
					return num - num2;
				}
				return 1;
			}
			if ((Either<t, u>)obj != null)
			{
				return -1;
			}
			return 0;
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (this is Left)
				{
					Left left = (Left)this;
					num = 0;
					t item = left.item;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<t>(comp, item) + ((num << 6) + (num >> 2)));
				}
				Right right = (Right)this;
				num = 1;
				u item2 = right.item;
				return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<u>(comp, item2) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is Either<t, u> either)
				{
					int num = ((this is Right) ? 1 : 0);
					Either<t, u> either2 = either;
					int num2 = ((either2 is Right) ? 1 : 0);
					if (num == num2)
					{
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)either;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericEqualityWithComparerIntrinsic<t>(comp, item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)either;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericEqualityWithComparerIntrinsic<u>(comp, item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(Either<t, u> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is Right) ? 1 : 0);
					int num2 = ((obj is Right) ? 1 : 0);
					if (num == num2)
					{
						if (this is Left)
						{
							Left left = (Left)this;
							Left left2 = (Left)obj;
							t item = left.item;
							t item2 = left2.item;
							return HashCompare.GenericEqualityERIntrinsic<t>(item, item2);
						}
						Right right = (Right)this;
						Right right2 = (Right)obj;
						u item3 = right.item;
						u item4 = right2.item;
						return HashCompare.GenericEqualityERIntrinsic<u>(item3, item4);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is Either<t, u> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Sequential, Size = 1)]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public struct DmStruct : IEquatable<DmStruct>, IStructuralEquatable, IComparable<DmStruct>, IComparable, IStructuralComparable
	{
		[CompilerGenerated]
		public sealed int CompareTo(DmStruct obj)
		{
			return 0;
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj)
		{
			DmStruct dmStruct = (DmStruct)obj;
			return 0;
		}

		[CompilerGenerated]
		public sealed int CompareTo(object obj, IComparer comp)
		{
			DmStruct dmStruct = (DmStruct)obj;
			return 0;
		}

		[CompilerGenerated]
		public sealed int GetHashCode(IEqualityComparer comp)
		{
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (obj is DmStruct)
			{
				return true;
			}
			return false;
		}

		[CompilerGenerated]
		public sealed bool Equals(DmStruct obj)
		{
			return true;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is DmStruct)
			{
				return true;
			}
			return false;
		}
	}
	[Serializable]
	[Sealed]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public sealed class Set2<T>
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class BitConverter
	{
		public static byte[] GetBytes(bool value)
		{
			return new byte[1] { (byte)(value ? 1 : 0) };
		}

		public static byte[] GetBytes(char value, bool isLittleEndian)
		{
			return GetBytes((short)value, isLittleEndian);
		}

		public unsafe static byte[] GetBytes(short value, bool isLittleEndian)
		{
			//The blocks IL_004a are reachable both inside and outside the pinned region starting at IL_003c. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			if (!isLittleEndian)
			{
				return new byte[2]
				{
					(byte)(short)(value >> 8),
					(byte)value
				};
			}
			byte[] array = ArrayModule.ZeroCreate<byte>(2);
			nint num;
			IntPtr intPtr;
			if (array != null)
			{
				if (ArrayModule.Length<byte>(array) != 0)
				{
					fixed (byte* ptr = &array[0])
					{
						num = (intPtr = (nint)ptr);
						*(short*)intPtr = value;
						return array;
					}
				}
				num = 0;
			}
			else
			{
				num = 0;
			}
			intPtr = num;
			*(short*)intPtr = value;
			return array;
		}

		public unsafe static byte[] GetBytes(int value, bool isLittleEndian)
		{
			//The blocks IL_0061 are reachable both inside and outside the pinned region starting at IL_0053. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			if (!isLittleEndian)
			{
				return new byte[4]
				{
					(byte)(value >> 24),
					(byte)(value >> 16),
					(byte)(value >> 8),
					(byte)value
				};
			}
			byte[] array = ArrayModule.ZeroCreate<byte>(4);
			nint num;
			IntPtr intPtr;
			if (array != null)
			{
				if (ArrayModule.Length<byte>(array) != 0)
				{
					fixed (byte* ptr = &array[0])
					{
						num = (intPtr = (nint)ptr);
						*(int*)intPtr = value;
						return array;
					}
				}
				num = 0;
			}
			else
			{
				num = 0;
			}
			intPtr = num;
			*(int*)intPtr = value;
			return array;
		}

		public unsafe static byte[] GetBytes(long value, bool isLittleEndian)
		{
			//The blocks IL_0091 are reachable both inside and outside the pinned region starting at IL_0083. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			if (!isLittleEndian)
			{
				return new byte[8]
				{
					(byte)(value >> 56),
					(byte)(value >> 48),
					(byte)(value >> 40),
					(byte)(value >> 32),
					(byte)(value >> 24),
					(byte)(value >> 16),
					(byte)(value >> 8),
					(byte)value
				};
			}
			byte[] array = ArrayModule.ZeroCreate<byte>(8);
			nint num;
			IntPtr intPtr;
			if (array != null)
			{
				if (ArrayModule.Length<byte>(array) != 0)
				{
					fixed (byte* ptr = &array[0])
					{
						num = (intPtr = (nint)ptr);
						*(long*)intPtr = value;
						return array;
					}
				}
				num = 0;
			}
			else
			{
				num = 0;
			}
			intPtr = num;
			*(long*)intPtr = value;
			return array;
		}

		public static byte[] GetBytes(ushort value, bool isLittleEndian)
		{
			return GetBytes((short)value, isLittleEndian);
		}

		public static byte[] GetBytes(uint value, bool isLittleEndian)
		{
			return GetBytes((int)value, isLittleEndian);
		}

		public static byte[] GetBytes(ulong value, bool isLittleEndian)
		{
			return GetBytes((long)value, isLittleEndian);
		}

		public unsafe static byte[] GetBytes(float value, bool isLittleEndian)
		{
			float num = value;
			return GetBytes(*(int*)(&num), isLittleEndian);
		}

		public unsafe static byte[] GetBytes(double value, bool isLittleEndian)
		{
			double num = value;
			return GetBytes(*(long*)(&num), isLittleEndian);
		}

		public static byte[] GetBytes(Guid value, bool isLittleEndian)
		{
			byte[] array = value.ToByteArray();
			if (isLittleEndian)
			{
				return array;
			}
			return $Internals.GetBytes$cont@207(array, null);
		}

		public static char ToChar(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (char)ToInt16(value, startIndex, isLittleEndian);
		}

		public unsafe static short ToInt16(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 2)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			fixed (byte* ptr = &value[startIndex])
			{
				nint num = (nint)ptr;
				short num3;
				if (isLittleEndian)
				{
					if (startIndex % 2 == 0)
					{
						return *(short*)num;
					}
					short num2 = *(byte*)(num + (nint)0 * (nint)sizeof(byte));
					num3 = *(byte*)(num + (nint)1 * (nint)sizeof(byte));
					return (short)(num2 | (short)(num3 << 8));
				}
				num3 = *(byte*)(num + (nint)0 * (nint)sizeof(byte));
				return (short)((short)(num3 << 8) | (short)(*(byte*)(num + (nint)1 * (nint)sizeof(byte))));
			}
		}

		public unsafe static int ToInt32(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 4)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			fixed (byte* ptr = &value[startIndex])
			{
				nint num = (nint)ptr;
				if (isLittleEndian)
				{
					if (startIndex % 4 == 0)
					{
						return *(int*)num;
					}
					return *(byte*)(num + (nint)0 * (nint)sizeof(byte)) | (*(byte*)(num + (nint)1 * (nint)sizeof(byte)) << 8) | (*(byte*)(num + (nint)2 * (nint)sizeof(byte)) << 16) | (*(byte*)(num + (nint)3 * (nint)sizeof(byte)) << 24);
				}
				return (*(byte*)(num + (nint)0 * (nint)sizeof(byte)) << 24) | (*(byte*)(num + (nint)1 * (nint)sizeof(byte)) << 16) | (*(byte*)(num + (nint)2 * (nint)sizeof(byte)) << 8) | *(byte*)(num + (nint)3 * (nint)sizeof(byte));
			}
		}

		public unsafe static long ToInt64(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 8)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			fixed (byte* ptr = &value[startIndex])
			{
				nint num = (nint)ptr;
				long num2;
				if (isLittleEndian)
				{
					if (startIndex % 8 == 0)
					{
						return *(long*)num;
					}
					num2 = (long)(*(byte*)(num + (nint)0 * (nint)sizeof(byte)) | ((ulong)(*(byte*)(num + (nint)1 * (nint)sizeof(byte))) << 8) | ((ulong)(*(byte*)(num + (nint)2 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)3 * (nint)sizeof(byte))) << 24));
					long num3 = (long)(*(byte*)(num + (nint)4 * (nint)sizeof(byte)) | ((ulong)(*(byte*)(num + (nint)5 * (nint)sizeof(byte))) << 8) | ((ulong)(*(byte*)(num + (nint)6 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)7 * (nint)sizeof(byte))) << 24));
					return num2 | (num3 << 32);
				}
				num2 = (long)(((ulong)(*(byte*)(num + (nint)0 * (nint)sizeof(byte))) << 24) | ((ulong)(*(byte*)(num + (nint)1 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)2 * (nint)sizeof(byte))) << 8) | *(byte*)(num + (nint)3 * (nint)sizeof(byte)));
				return (long)(((ulong)(*(byte*)(num + (nint)4 * (nint)sizeof(byte))) << 24) | ((ulong)(*(byte*)(num + (nint)5 * (nint)sizeof(byte))) << 16) | ((ulong)(*(byte*)(num + (nint)6 * (nint)sizeof(byte))) << 8) | *(byte*)(num + (nint)7 * (nint)sizeof(byte))) | (num2 << 32);
			}
		}

		public static Guid ToGuid(byte[] value, int startIndex, bool isLittleEndian)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_Index");
				throw ex;
			}
			if (startIndex > value.Length - 16)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			if (isLittleEndian)
			{
				if (startIndex == 0)
				{
					return new Guid(value);
				}
				int num = startIndex + 15;
				int num2 = value.Length;
				int num3 = ((startIndex >= 0) ? startIndex : 0);
				int num4 = ((num >= 0 + num2) ? (0 + num2 - 1) : num);
				int num5 = num4 - num3 + 1;
				int num6 = ((num5 >= 0) ? num5 : 0);
				byte[] array = new byte[num6];
				int num7 = 0;
				int num8 = num6 - 1;
				if (num8 >= num7)
				{
					do
					{
						array[num7] = value[num3 + num7];
						num7++;
					}
					while (num7 != num8 + 1);
				}
				return new Guid(array);
			}
			return $Internals.ToGuid$cont@267(value, startIndex, null);
		}

		public static ushort ToUInt16(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (ushort)ToInt16(value, startIndex, isLittleEndian);
		}

		public static uint ToUInt32(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (uint)ToInt32(value, startIndex, isLittleEndian);
		}

		public static ulong ToUInt64(byte[] value, int startIndex, bool isLittleEndian)
		{
			return (ulong)ToInt64(value, startIndex, isLittleEndian);
		}

		public unsafe static float ToSingle(byte[] value, int startIndex, bool isLittleEndian)
		{
			int num = ToInt32(value, startIndex, isLittleEndian);
			return *(float*)(&num);
		}

		public unsafe static double ToDouble(byte[] value, int startIndex, bool isLittleEndian)
		{
			long num = ToInt64(value, startIndex, isLittleEndian);
			return *(double*)(&num);
		}

		internal static char GetHexValue(int i)
		{
			char c;
			if (i < 10)
			{
				c = (char)i;
				return (char)(c + 48);
			}
			c = (char)(i - 10);
			return (char)(c + 65);
		}

		public static string ToString(byte[] value, int startIndex, int length)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			int num = value.Length;
			if (startIndex >= value.Length)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("startIndex", "ArgumentOutOfRange_StartIndex");
				throw ex;
			}
			if (length < 0)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("length", "ArgumentOutOfRange_GenericPositive");
				throw ex;
			}
			if (startIndex > num - length)
			{
				ArgumentException ex2 = new ArgumentException("Arg_ArrayPlusOffTooSmall");
				throw ex2;
			}
			if (length == 0)
			{
				return string.Empty;
			}
			char[] array = ArrayModule.ZeroCreate<char>(length * 3);
			int num2 = startIndex;
			IEnumerable<int> enumerable = OperatorIntrinsics.RangeInt32(0, 3, 3 * length - 1);
			foreach (int item in enumerable)
			{
				int num3 = value[num2];
				num2++;
				array[item] = GetHexValue(num3 / 16);
				array[item + 1] = GetHexValue(num3 % 16);
				array[item + 2] = '-';
			}
			return new string(array, 0, array.Length - 1);
		}

		public static string ToString(byte[] value)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			return ToString(value, 0, value.Length);
		}

		public static string ToString(byte[] value, int startIndex)
		{
			if (value == null)
			{
				throw new ArgumentNullException("value");
			}
			return ToString(value, startIndex, value.Length - startIndex);
		}
	}
}
namespace FSharpPlus.Data
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public interface NonEmptySeq<T> : IEnumerable<T>
	{
		T First { get; }
	}
}
namespace FSharpPlus.Control
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Explicit : Default1
	{
		public static FSharpFunc<t, R> Explicit<R, t>(R _arg1, Default1 _arg2)
		{
			return $Converter.Explicit@18<R, t>.@_instance;
		}

		public static FSharpFunc<t, R> Explicit$W<R, t>(FSharpFunc<t, R> op_Explicit, R _arg1, Default1 _arg2)
		{
			return new $Converter.Explicit@18-1<R, t>(op_Explicit);
		}

		public static void Explicit<t>(t _arg3, Default1 _arg4) where t : class
		{
		}

		public static FSharpFunc<a, byte> Explicit<a>(byte _arg5, Explicit _arg6)
		{
			return $Converter.Explicit@21-2<a>.@_instance;
		}

		public static FSharpFunc<a, byte> Explicit$W<a>(FSharpFunc<a, byte> op_Explicit, byte _arg5, Explicit _arg6)
		{
			return new $Converter.Explicit@21-3<a>(op_Explicit);
		}

		public static FSharpFunc<a, sbyte> Explicit<a>(sbyte _arg7, Explicit _arg8)
		{
			return $Converter.Explicit@22-4<a>.@_instance;
		}

		public static FSharpFunc<a, sbyte> Explicit$W<a>(FSharpFunc<a, sbyte> op_Explicit, sbyte _arg7, Explicit _arg8)
		{
			return new $Converter.Explicit@22-5<a>(op_Explicit);
		}

		public static FSharpFunc<a, short> Explicit<a>(short _arg9, Explicit _arg10)
		{
			return $Converter.Explicit@23-6<a>.@_instance;
		}

		public static FSharpFunc<a, short> Explicit$W<a>(FSharpFunc<a, short> op_Explicit, short _arg9, Explicit _arg10)
		{
			return new $Converter.Explicit@23-7<a>(op_Explicit);
		}

		public static FSharpFunc<a, ushort> Explicit<a>(ushort _arg11, Explicit _arg12)
		{
			return $Converter.Explicit@24-8<a>.@_instance;
		}

		public static FSharpFunc<a, ushort> Explicit$W<a>(FSharpFunc<a, ushort> op_Explicit, ushort _arg11, Explicit _arg12)
		{
			return new $Converter.Explicit@24-9<a>(op_Explicit);
		}

		public static FSharpFunc<a, int> Explicit<a>(int _arg13, Explicit _arg14)
		{
			return $Converter.Explicit@25-10<a>.@_instance;
		}

		public static FSharpFunc<a, int> Explicit$W<a>(FSharpFunc<a, int> op_Explicit, int _arg13, Explicit _arg14)
		{
			return new $Converter.Explicit@25-11<a>(op_Explicit);
		}

		public static FSharpFunc<a, uint> Explicit<a>(uint _arg15, Explicit _arg16)
		{
			return $Converter.Explicit@26-12<a>.@_instance;
		}

		public static FSharpFunc<a, uint> Explicit$W<a>(FSharpFunc<a, uint> op_Explicit, uint _arg15, Explicit _arg16)
		{
			return new $Converter.Explicit@26-13<a>(op_Explicit);
		}

		public static FSharpFunc<a, long> Explicit<a>(long _arg17, Explicit _arg18)
		{
			return $Converter.Explicit@27-14<a>.@_instance;
		}

		public static FSharpFunc<a, long> Explicit$W<a>(FSharpFunc<a, long> op_Explicit, long _arg17, Explicit _arg18)
		{
			return new $Converter.Explicit@27-15<a>(op_Explicit);
		}

		public static FSharpFunc<a, ulong> Explicit<a>(ulong _arg19, Explicit _arg20)
		{
			return $Converter.Explicit@28-16<a>.@_instance;
		}

		public static FSharpFunc<a, ulong> Explicit$W<a>(FSharpFunc<a, ulong> op_Explicit, ulong _arg19, Explicit _arg20)
		{
			return new $Converter.Explicit@28-17<a>(op_Explicit);
		}

		public static FSharpFunc<a, IntPtr> Explicit<a>(IntPtr _arg21, Explicit _arg22)
		{
			return $Converter.Explicit@30-18<a>.@_instance;
		}

		public static FSharpFunc<a, IntPtr> Explicit$W<a>(FSharpFunc<a, int> op_Explicit, IntPtr _arg21, Explicit _arg22)
		{
			return new $Converter.Explicit@30-19<a>(op_Explicit);
		}

		public static FSharpFunc<a, UIntPtr> Explicit<a>(UIntPtr _arg23, Explicit _arg24)
		{
			return $Converter.Explicit@31-20<a>.@_instance;
		}

		public static FSharpFunc<a, UIntPtr> Explicit$W<a>(FSharpFunc<a, uint> op_Explicit, UIntPtr _arg23, Explicit _arg24)
		{
			return new $Converter.Explicit@31-21<a>(op_Explicit);
		}

		public static FSharpFunc<a, double> Explicit<a>(double _arg25, Explicit _arg26)
		{
			return $Converter.Explicit@33-22<a>.@_instance;
		}

		public static FSharpFunc<a, double> Explicit$W<a>(FSharpFunc<a, double> op_Explicit, double _arg25, Explicit _arg26)
		{
			return new $Converter.Explicit@33-23<a>(op_Explicit);
		}

		public static FSharpFunc<a, float> Explicit<a>(float _arg27, Explicit _arg28)
		{
			return $Converter.Explicit@34-24<a>.@_instance;
		}

		public static FSharpFunc<a, float> Explicit$W<a>(FSharpFunc<a, float> op_Explicit, float _arg27, Explicit _arg28)
		{
			return new $Converter.Explicit@34-25<a>(op_Explicit);
		}

		public static FSharpFunc<a, decimal> Explicit<a>(decimal _arg29, Explicit _arg30)
		{
			return $Converter.Explicit@35-26<a>.@_instance;
		}

		public static FSharpFunc<a, decimal> Explicit$W<a>(FSharpFunc<a, decimal> op_Explicit, decimal _arg29, Explicit _arg30)
		{
			return new $Converter.Explicit@35-27<a>(op_Explicit);
		}

		public static FSharpFunc<a, char> Explicit<a>(char _arg31, Explicit _arg32)
		{
			return $Converter.Explicit@36-28<a>.@_instance;
		}

		public static FSharpFunc<a, char> Explicit$W<a>(FSharpFunc<a, char> op_Explicit, char _arg31, Explicit _arg32)
		{
			return new $Converter.Explicit@36-29<a>(op_Explicit);
		}

		public static T Invoke<a, T>(a value)
		{
			Explicit item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Explicit, ?>, T>.InvokeFast<T>((FSharpFunc<Tuple<Explicit, ?>, FSharpFunc<T, T>>)(object)$Converter.Invoke@40<a, T>.@_instance, (Tuple<Explicit, ?>)(object)new Tuple<Explicit, T>(item, default(T)), (T)value);
		}

		public static T Invoke$W<a, T>(FSharpFunc<T, FSharpFunc<Explicit, FSharpFunc<a, T>>> @explicit, a value)
		{
			Explicit item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Explicit, ?>, T>.InvokeFast<T>((FSharpFunc<Tuple<Explicit, ?>, FSharpFunc<T, T>>)(object)new $Converter.Invoke@40-1<a, T>(@explicit), (Tuple<Explicit, ?>)(object)new Tuple<Explicit, T>(item, default(T)), (T)value);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class OfBytes
	{
		public static FSharpFunc<Tuple<byte[], int, a>, bool> OfBytes<a>(bool _arg1, OfBytes _arg2)
		{
			return $Converter.OfBytes@43<a>.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, char> OfBytes(char _arg3, OfBytes _arg4)
		{
			return $Converter.OfBytes@45-1.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, double> OfBytes(double _arg5, OfBytes _arg6)
		{
			return $Converter.OfBytes@46-2.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, short> OfBytes(short _arg7, OfBytes _arg8)
		{
			return $Converter.OfBytes@47-3.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, int> OfBytes(int _arg9, OfBytes _arg10)
		{
			return $Converter.OfBytes@48-4.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, long> OfBytes(long _arg11, OfBytes _arg12)
		{
			return $Converter.OfBytes@49-5.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, float> OfBytes(float _arg13, OfBytes _arg14)
		{
			return $Converter.OfBytes@50-6.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, b>, string> OfBytes<b>(string _arg15, OfBytes _arg16)
		{
			return $Converter.OfBytes@52-7<b>.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, Guid> OfBytes(Guid _arg17, OfBytes _arg18)
		{
			return $Converter.OfBytes@53-8.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, ushort> OfBytes(ushort _arg19, OfBytes _arg20)
		{
			return $Converter.OfBytes@55-9.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, uint> OfBytes(uint _arg21, OfBytes _arg22)
		{
			return $Converter.OfBytes@56-10.@_instance;
		}

		public static FSharpFunc<Tuple<byte[], int, bool>, ulong> OfBytes(ulong _arg23, OfBytes _arg24)
		{
			return $Converter.OfBytes@57-11.@_instance;
		}

		[CompilationArgumentCounts(new int[] { 1, 1, 1 })]
		public static a Invoke<a>(bool isLtEndian, int startIndex, byte[] value)
		{
			OfBytes item = null;
			Tuple<byte[], int, bool> tuple = new Tuple<byte[], int, bool>(value, startIndex, isLtEndian);
			return FSharpFunc<Tuple<FSharpPlus.Control.OfBytes, a>, Tuple<byte[], int, bool>>.InvokeFast<a>((FSharpFunc<Tuple<OfBytes, a>, FSharpFunc<Tuple<byte[], int, bool>, a>>)$Converter.Invoke@62-2<a>.@_instance, new Tuple<OfBytes, a>(item, default(a)), tuple);
		}

		[CompilationArgumentCounts(new int[] { 1, 1, 1 })]
		public static a Invoke$W<a>(FSharpFunc<a, FSharpFunc<OfBytes, FSharpFunc<Tuple<byte[], int, bool>, a>>> ofBytes, bool isLtEndian, int startIndex, byte[] value)
		{
			OfBytes item = null;
			Tuple<byte[], int, bool> tuple = new Tuple<byte[], int, bool>(value, startIndex, isLtEndian);
			return FSharpFunc<Tuple<FSharpPlus.Control.OfBytes, a>, Tuple<byte[], int, bool>>.InvokeFast<a>((FSharpFunc<Tuple<OfBytes, a>, FSharpFunc<Tuple<byte[], int, bool>, a>>)new $Converter.Invoke@62-3<a>(ofBytes), new Tuple<OfBytes, a>(item, default(a)), tuple);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ToBytes
	{
		public static byte[] ToBytes<a>(bool x, a _arg1, ToBytes _arg2)
		{
			return new byte[1] { (byte)(x ? 1 : 0) };
		}

		public static byte[] ToBytes(char x, bool e, ToBytes _arg3)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((short)x, isLittleEndian);
		}

		public unsafe static byte[] ToBytes(double x, bool e, ToBytes _arg4)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			double num = x;
			return FSharpPlus.Internals.BitConverter.GetBytes(*(long*)(&num), isLittleEndian);
		}

		public static byte[] ToBytes(short x, bool e, ToBytes _arg5)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public static byte[] ToBytes(int x, bool e, ToBytes _arg6)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public static byte[] ToBytes(long x, bool e, ToBytes _arg7)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public unsafe static byte[] ToBytes(float x, bool e, ToBytes _arg8)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			float num = x;
			return FSharpPlus.Internals.BitConverter.GetBytes(*(int*)(&num), isLittleEndian);
		}

		public static byte[] ToBytes<b>(string x, b _arg9, ToBytes _arg10)
		{
			char[] array = x.ToCharArray();
			if (array == null)
			{
				throw new ArgumentNullException("array");
			}
			byte[] array2 = new byte[array.Length];
			for (int i = 0; i < array2.Length; i++)
			{
				array2[i] = (byte)array[i];
			}
			return array2;
		}

		public static byte[] ToBytes(Guid x, bool e, ToBytes _arg11)
		{
			return FSharpPlus.Internals.BitConverter.GetBytes(x, System.BitConverter.IsLittleEndian == e);
		}

		public static byte[] ToBytes(ushort x, bool e, ToBytes _arg12)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((short)x, isLittleEndian);
		}

		public static byte[] ToBytes(uint x, bool e, ToBytes _arg13)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((int)x, isLittleEndian);
		}

		public static byte[] ToBytes(ulong x, bool e, ToBytes _arg14)
		{
			bool isLittleEndian = System.BitConverter.IsLittleEndian == e;
			return FSharpPlus.Internals.BitConverter.GetBytes((long)x, isLittleEndian);
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static byte[] Invoke<a>(bool isLittleEndian, a value)
		{
			throw new NotSupportedException("Dynamic invocation of ToBytes is not supported");
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		public static byte[] Invoke$W<a>(FSharpFunc<a, FSharpFunc<bool, FSharpFunc<ToBytes, byte[]>>> toBytes, bool isLittleEndian, a value)
		{
			return FSharpFunc<FSharpPlus.Control.ToBytes, bool>.InvokeFast<ToBytes, byte[]>((FSharpFunc<ToBytes, FSharpFunc<bool, FSharpFunc<ToBytes, byte[]>>>)(object)toBytes, (ToBytes)value, isLittleEndian, (ToBytes)null);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class TryParse : Default1
	{
		public static FSharpFunc<string, FSharpOption<decimal>> TryParse(decimal _arg1, TryParse _arg2)
		{
			return $Converter.TryParse@90.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<float>> TryParse(float _arg3, TryParse _arg4)
		{
			return $Converter.TryParse@91-1.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<double>> TryParse(double _arg5, TryParse _arg6)
		{
			return $Converter.TryParse@92-2.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<ushort>> TryParse(ushort _arg7, TryParse _arg8)
		{
			return $Converter.TryParse@93-3.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<uint>> TryParse(uint _arg9, TryParse _arg10)
		{
			return $Converter.TryParse@94-4.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<ulong>> TryParse(ulong _arg11, TryParse _arg12)
		{
			return $Converter.TryParse@95-5.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<short>> TryParse(short _arg13, TryParse _arg14)
		{
			return $Converter.TryParse@96-6.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<int>> TryParse(int _arg15, TryParse _arg16)
		{
			return $Converter.TryParse@97-7.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<long>> TryParse(long _arg17, TryParse _arg18)
		{
			return $Converter.TryParse@98-8.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<string>> TryParse(string _arg19, TryParse _arg20)
		{
			return $Converter.TryParse@111-9.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<StringBuilder>> TryParse(StringBuilder _arg21, TryParse _arg22)
		{
			return $Converter.TryParse@112-10.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<DateTime>> TryParse(DateTime _arg23, TryParse _arg24)
		{
			return $Converter.TryParse@115-11.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<DateTimeOffset>> TryParse(DateTimeOffset _arg25, TryParse _arg26)
		{
			return $Converter.TryParse@123-12.@_instance;
		}

		public static FSharpOption<b> Invoke<b>(string value)
		{
			TryParse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.TryParse, FSharpOption<b>>, string>.InvokeFast<FSharpOption<b>>((FSharpFunc<Tuple<TryParse, FSharpOption<b>>, FSharpFunc<string, FSharpOption<b>>>)(object)$Converter.Invoke@135-4<b>.@_instance, (Tuple<TryParse, FSharpOption<b>>)(object)new Tuple<TryParse, b>(item, default(b)), value);
		}

		public static FSharpOption<b> Invoke$W<b>(FSharpFunc<b, FSharpFunc<TryParse, FSharpFunc<string, FSharpOption<b>>>> tryParse, string value)
		{
			TryParse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.TryParse, FSharpOption<b>>, string>.InvokeFast<FSharpOption<b>>((FSharpFunc<Tuple<TryParse, FSharpOption<b>>, FSharpFunc<string, FSharpOption<b>>>)(object)new $Converter.Invoke@135-5<b>(tryParse), (Tuple<TryParse, FSharpOption<b>>)(object)new Tuple<TryParse, b>(item, default(b)), value);
		}

		public static FSharpOption<R> InvokeOnInstance<R>(string value)
		{
			throw new NotSupportedException("Dynamic invocation of TryParse is not supported");
		}

		public static FSharpOption<R> InvokeOnInstance$W<R>(FSharpFunc<string, FSharpOption<R>> tryParse, string value)
		{
			return tryParse.Invoke(value);
		}

		public static FSharpOption<R> InvokeOnConvention<R, a>(string value)
		{
			R val = default(R);
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of TryParse is not supported");
			}
			if ((bool)(object)null)
			{
				return FSharpOption<R>.Some(val);
			}
			return null;
		}

		public unsafe static FSharpOption<R> InvokeOnConvention$W<R, a>(FSharpFunc<string, FSharpFunc<ref R, bool>> tryParse, string value)
		{
			R val = default(R);
			if (FSharpFunc<string, ref bool>.InvokeFast<bool>((FSharpFunc<string, FSharpFunc<ref bool, bool>>)(object)tryParse, value, ref *(bool*)(&val)))
			{
				return FSharpOption<R>.Some(val);
			}
			return null;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse<R>(R _arg1, Default4 _arg2)
		{
			return $Converter.TryParse@211-13<R>.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse$W<R>(FSharpFunc<string, R> parse, R _arg1, Default4 _arg2)
		{
			return new $Converter.TryParse@211-14<R>(parse);
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse<R, a>(R _arg3, Default3 _arg4)
		{
			return $Converter.TryParse@216-15<R, a>.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse$W<R, a>(FSharpFunc<string, FSharpFunc<ref R, bool>> tryParse, R _arg3, Default3 _arg4)
		{
			return new $Converter.TryParse@216-16<R, a>(tryParse);
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse<R>(R _arg5, Default2 _arg6)
		{
			return $Converter.TryParse@218-17<R>.@_instance;
		}

		public static FSharpFunc<string, FSharpOption<R>> TryParse$W<R>(FSharpFunc<string, FSharpOption<R>> tryParse, R _arg5, Default2 _arg6)
		{
			return new $Converter.TryParse@218-18<R>(tryParse);
		}

		public static FSharpFunc<a, a> TryParse<t, a>(t _arg7, Default2 _arg8) where t : class
		{
			return $Converter.TryParse@224-19<a>.@_instance;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Parse : Default1
	{
		public static FSharpFunc<string, R> Parse<R>(R _arg1, Parse _arg2)
		{
			return $Converter.Parse@155<R>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R>(FSharpFunc<string, FSharpFunc<CultureInfo, R>> parse, R _arg1, Parse _arg2)
		{
			return new $Converter.Parse@155-1<R>(parse);
		}

		public static FSharpFunc<string, @enum> Parse<T, a, @enum>(T _arg3, Parse _arg4) where @enum : struct
		{
			return $Converter.Parse@157-2<@enum>.@_instance;
		}

		public static FSharpFunc<string, DateTime> Parse(DateTime _arg5, Parse _arg6)
		{
			return $Converter.Parse@164-3.@_instance;
		}

		public static FSharpFunc<string, DateTimeOffset> Parse(DateTimeOffset _arg7, Parse _arg8)
		{
			return $Converter.Parse@169-4.@_instance;
		}

		public static FSharpFunc<string, bool> Parse(bool _arg9, Parse _arg10)
		{
			return $Converter.Parse@174-5.@_instance;
		}

		public static FSharpFunc<string, char> Parse(char _arg11, Parse _arg12)
		{
			return $Converter.Parse@176-6.@_instance;
		}

		public static FSharpFunc<string, string> Parse(string _arg13, Parse _arg14)
		{
			return $Converter.Parse@177-7.@_instance;
		}

		public static FSharpFunc<string, StringBuilder> Parse(StringBuilder _arg15, Parse _arg16)
		{
			return $Converter.Parse@178-8.@_instance;
		}

		public static a Invoke<a>(string value)
		{
			Parse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Parse, a>, string>.InvokeFast<a>((FSharpFunc<Tuple<Parse, a>, FSharpFunc<string, a>>)$Converter.Invoke@183-6<a>.@_instance, new Tuple<Parse, a>(item, default(a)), value);
		}

		public static a Invoke$W<a>(FSharpFunc<a, FSharpFunc<Parse, FSharpFunc<string, a>>> parse, string value)
		{
			Parse item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.Parse, a>, string>.InvokeFast<a>((FSharpFunc<Tuple<Parse, a>, FSharpFunc<string, a>>)new $Converter.Invoke@183-7<a>(parse), new Tuple<Parse, a>(item, default(a)), value);
		}

		public static R InvokeOnInstance<R>(string value)
		{
			throw new NotSupportedException("Dynamic invocation of Parse is not supported");
		}

		public static R InvokeOnInstance$W<R>(FSharpFunc<string, R> parse, string value)
		{
			return parse.Invoke(value);
		}

		public static FSharpFunc<string, R> Parse<R, a>(R _arg1, Default4 _arg2)
		{
			return $Converter.Parse@190-9<R, a>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R, a>(FSharpFunc<string, FSharpFunc<ref R, bool>> tryParse, R _arg1, Default4 _arg2)
		{
			return new $Converter.Parse@190-10<R, a>(tryParse);
		}

		public static FSharpFunc<string, R> Parse<R>(R _arg3, Default3 _arg4)
		{
			return $Converter.Parse@195-11<R>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R>(FSharpFunc<string, FSharpOption<R>> tryParse, R _arg3, Default3 _arg4)
		{
			return new $Converter.Parse@195-12<R>(tryParse);
		}

		public static FSharpFunc<string, R> Parse<R>(R _arg5, Default2 _arg6)
		{
			return $Converter.Parse@200-13<R>.@_instance;
		}

		public static FSharpFunc<string, R> Parse$W<R>(FSharpFunc<string, R> parse, R _arg5, Default2 _arg6)
		{
			return new $Converter.Parse@200-14<R>(parse);
		}

		public static FSharpFunc<a, a> Parse<t, a>(t _arg7, Default2 _arg8) where t : class
		{
			return $Converter.Parse@206-15<a>.@_instance;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class FromBigInt : Default1
	{
		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg1, Default4 _arg2)
		{
			return $Numeric.FromBigInt@19<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<R, FSharpFunc<Explicit, FSharpFunc<System.Numerics.BigInteger, R>>> @explicit, R _arg1, Default4 _arg2)
		{
			return new $Numeric.FromBigInt@19-2<R>(@explicit);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg3, Default3 _arg4)
		{
			return $Numeric.FromBigInt@20-4<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<long, R> op_Implicit, R _arg3, Default3 _arg4)
		{
			return new $Numeric.FromBigInt@20-5<R>(op_Implicit);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg5, Default2 _arg6)
		{
			return $Numeric.FromBigInt@21-6<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<System.Numerics.BigInteger, R> op_Implicit, R _arg5, Default2 _arg6)
		{
			return new $Numeric.FromBigInt@21-7<R>(op_Implicit);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(R _arg7, Default1 _arg8)
		{
			return $Numeric.FromBigInt@22-8<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<System.Numerics.BigInteger, R> fromBigInt, R _arg7, Default1 _arg8)
		{
			return new $Numeric.FromBigInt@22-9<R>(fromBigInt);
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt<R>(Default1 _arg9, Default1 _arg10)
		{
			return $Numeric.FromBigInt@23-10<R>.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, R> FromBigInt$W<R>(FSharpFunc<System.Numerics.BigInteger, R> fromBigInt, Default1 _arg9, Default1 _arg10)
		{
			return new $Numeric.FromBigInt@23-11<R>(fromBigInt);
		}

		public static FSharpFunc<System.Numerics.BigInteger, int> FromBigInt(int _arg11, FromBigInt _arg12)
		{
			return $Numeric.FromBigInt@24-12.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, long> FromBigInt(long _arg13, FromBigInt _arg14)
		{
			return $Numeric.FromBigInt@25-13.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, IntPtr> FromBigInt(IntPtr _arg15, FromBigInt _arg16)
		{
			return $Numeric.FromBigInt@26-14.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, UIntPtr> FromBigInt(UIntPtr _arg17, FromBigInt _arg18)
		{
			return $Numeric.FromBigInt@27-15.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, System.Numerics.BigInteger> FromBigInt(System.Numerics.BigInteger _arg19, FromBigInt _arg20)
		{
			return $Numeric.FromBigInt@28-16.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, double> FromBigInt(double _arg21, FromBigInt _arg22)
		{
			return $Numeric.FromBigInt@29-17.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, sbyte> FromBigInt(sbyte _arg23, FromBigInt _arg24)
		{
			return $Numeric.FromBigInt@30-18.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, short> FromBigInt(short _arg25, FromBigInt _arg26)
		{
			return $Numeric.FromBigInt@31-19.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, byte> FromBigInt(byte _arg27, FromBigInt _arg28)
		{
			return $Numeric.FromBigInt@32-20.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, ushort> FromBigInt(ushort _arg29, FromBigInt _arg30)
		{
			return $Numeric.FromBigInt@33-21.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, uint> FromBigInt(uint _arg31, FromBigInt _arg32)
		{
			return $Numeric.FromBigInt@34-22.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, ulong> FromBigInt(ulong _arg33, FromBigInt _arg34)
		{
			return $Numeric.FromBigInt@35-23.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, float> FromBigInt(float _arg35, FromBigInt _arg36)
		{
			return $Numeric.FromBigInt@36-24.@_instance;
		}

		public static FSharpFunc<System.Numerics.BigInteger, decimal> FromBigInt(decimal _arg37, FromBigInt _arg38)
		{
			return $Numeric.FromBigInt@37-25.@_instance;
		}

		public static Num Invoke<Num>(System.Numerics.BigInteger x)
		{
			FromBigInt item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromBigInt, Num>, System.Numerics.BigInteger>.InvokeFast<Num>((FSharpFunc<Tuple<FromBigInt, Num>, FSharpFunc<System.Numerics.BigInteger, Num>>)$Numeric.Invoke@42-8<Num>.@_instance, new Tuple<FromBigInt, Num>(item, default(Num)), x);
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<FromBigInt, FSharpFunc<System.Numerics.BigInteger, Num>>> fromBigInt, System.Numerics.BigInteger x)
		{
			FromBigInt item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromBigInt, Num>, System.Numerics.BigInteger>.InvokeFast<Num>((FSharpFunc<Tuple<FromBigInt, Num>, FSharpFunc<System.Numerics.BigInteger, Num>>)new $Numeric.Invoke@42-9<Num>(fromBigInt), new Tuple<FromBigInt, Num>(item, default(Num)), x);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class FromInt64 : Default1
	{
		public static FSharpFunc<long, R> FromInt64<R>(R _arg1, Default4 _arg2)
		{
			return $Numeric.FromInt64@49<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<R, FSharpFunc<Explicit, FSharpFunc<long, R>>> @explicit, R _arg1, Default4 _arg2)
		{
			return new $Numeric.FromInt64@49-2<R>(@explicit);
		}

		public static FSharpFunc<long, R> FromInt64<R>(R _arg3, Default3 _arg4)
		{
			return $Numeric.FromInt64@51-4<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<R, FSharpFunc<FromBigInt, FSharpFunc<System.Numerics.BigInteger, R>>> fromBigInt, R _arg3, Default3 _arg4)
		{
			return new $Numeric.FromInt64@51-6<R>(fromBigInt);
		}

		public static FSharpFunc<long, R> FromInt64<R>(R _arg5, Default2 _arg6)
		{
			return $Numeric.FromInt64@53-8<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<long, R> op_Implicit, R _arg5, Default2 _arg6)
		{
			return new $Numeric.FromInt64@53-9<R>(op_Implicit);
		}

		public static FSharpFunc<long, R> FromInt64<R>(R _arg7, Default1 _arg8)
		{
			return $Numeric.FromInt64@54-10<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<long, R> fromInt64, R _arg7, Default1 _arg8)
		{
			return new $Numeric.FromInt64@54-11<R>(fromInt64);
		}

		public static FSharpFunc<long, R> FromInt64<R>(Default1 _arg9, Default1 _arg10)
		{
			return $Numeric.FromInt64@55-12<R>.@_instance;
		}

		public static FSharpFunc<long, R> FromInt64$W<R>(FSharpFunc<long, R> fromInt64, Default1 _arg9, Default1 _arg10)
		{
			return new $Numeric.FromInt64@55-13<R>(fromInt64);
		}

		public static FSharpFunc<long, int> FromInt64(int _arg11, FromInt64 _arg12)
		{
			return $Numeric.FromInt64@56-14.@_instance;
		}

		public static FSharpFunc<long, long> FromInt64(long _arg13, FromInt64 _arg14)
		{
			return $Numeric.FromInt64@57-15.@_instance;
		}

		public static FSharpFunc<long, IntPtr> FromInt64(IntPtr _arg15, FromInt64 _arg16)
		{
			return $Numeric.FromInt64@59-16.@_instance;
		}

		public static FSharpFunc<long, UIntPtr> FromInt64(UIntPtr _arg17, FromInt64 _arg18)
		{
			return $Numeric.FromInt64@60-17.@_instance;
		}

		public static FSharpFunc<long, System.Numerics.BigInteger> FromInt64(System.Numerics.BigInteger _arg19, FromInt64 _arg20)
		{
			return $Numeric.FromInt64@61-18.@_instance;
		}

		public static FSharpFunc<long, double> FromInt64(double _arg21, FromInt64 _arg22)
		{
			return $Numeric.FromInt64@63-19.@_instance;
		}

		public static FSharpFunc<long, float> FromInt64(float _arg23, FromInt64 _arg24)
		{
			return $Numeric.FromInt64@64-20.@_instance;
		}

		public static FSharpFunc<long, decimal> FromInt64(decimal _arg25, FromInt64 _arg26)
		{
			return $Numeric.FromInt64@65-21.@_instance;
		}

		public static FSharpFunc<long, sbyte> FromInt64(sbyte _arg27, FromInt64 _arg28)
		{
			return $Numeric.FromInt64@66-22.@_instance;
		}

		public static FSharpFunc<long, short> FromInt64(short _arg29, FromInt64 _arg30)
		{
			return $Numeric.FromInt64@67-23.@_instance;
		}

		public static FSharpFunc<long, byte> FromInt64(byte _arg31, FromInt64 _arg32)
		{
			return $Numeric.FromInt64@68-24.@_instance;
		}

		public static FSharpFunc<long, ushort> FromInt64(ushort _arg33, FromInt64 _arg34)
		{
			return $Numeric.FromInt64@69-25.@_instance;
		}

		public static FSharpFunc<long, uint> FromInt64(uint _arg35, FromInt64 _arg36)
		{
			return $Numeric.FromInt64@70-26.@_instance;
		}

		public static FSharpFunc<long, ulong> FromInt64(ulong _arg37, FromInt64 _arg38)
		{
			return $Numeric.FromInt64@71-27.@_instance;
		}

		public static Num Invoke<Num>(long x)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt64, Num>, long>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt64, Num>, FSharpFunc<long, Num>>)$Numeric.Invoke@76-10<Num>.@_instance, new Tuple<FromInt64, Num>(item, default(Num)), x);
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<FromInt64, FSharpFunc<long, Num>>> fromInt64, long x)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt64, Num>, long>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt64, Num>, FSharpFunc<long, Num>>)new $Numeric.Invoke@76-11<Num>(fromInt64), new Tuple<FromInt64, Num>(item, default(Num)), x);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class FromInt32 : Default1
	{
		public static FSharpFunc<int, R> FromInt32<R>(R _arg1, Default4 _arg2)
		{
			return $Numeric.FromInt32@81<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<R, FSharpFunc<Explicit, FSharpFunc<int, R>>> @explicit, R _arg1, Default4 _arg2)
		{
			return new $Numeric.FromInt32@81-2<R>(@explicit);
		}

		public static FSharpFunc<int, R> FromInt32<R>(R _arg3, Default3 _arg4)
		{
			return $Numeric.FromInt32@82-4<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<R, FSharpFunc<FromInt64, FSharpFunc<long, R>>> fromInt64, R _arg3, Default3 _arg4)
		{
			return new $Numeric.FromInt32@82-6<R>(fromInt64);
		}

		public static FSharpFunc<int, R> FromInt32<R>(R _arg5, Default2 _arg6)
		{
			return $Numeric.FromInt32@83-8<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<int, R> op_Implicit, R _arg5, Default2 _arg6)
		{
			return new $Numeric.FromInt32@83-9<R>(op_Implicit);
		}

		public static FSharpFunc<int, R> FromInt32<R>(R _arg7, Default1 _arg8)
		{
			return $Numeric.FromInt32@84-10<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<int, R> fromInt32, R _arg7, Default1 _arg8)
		{
			return new $Numeric.FromInt32@84-11<R>(fromInt32);
		}

		public static FSharpFunc<int, R> FromInt32<R>(Default1 _arg9, Default1 _arg10)
		{
			return $Numeric.FromInt32@85-12<R>.@_instance;
		}

		public static FSharpFunc<int, R> FromInt32$W<R>(FSharpFunc<int, R> fromInt32, Default1 _arg9, Default1 _arg10)
		{
			return new $Numeric.FromInt32@85-13<R>(fromInt32);
		}

		public static FSharpFunc<int, int> FromInt32(int _arg11, FromInt32 _arg12)
		{
			return $Numeric.FromInt32@86-14.@_instance;
		}

		public static FSharpFunc<int, long> FromInt32(long _arg13, FromInt32 _arg14)
		{
			return $Numeric.FromInt32@87-15.@_instance;
		}

		public static FSharpFunc<int, IntPtr> FromInt32(IntPtr _arg15, FromInt32 _arg16)
		{
			return $Numeric.FromInt32@89-16.@_instance;
		}

		public static FSharpFunc<int, UIntPtr> FromInt32(UIntPtr _arg17, FromInt32 _arg18)
		{
			return $Numeric.FromInt32@90-17.@_instance;
		}

		public static FSharpFunc<int, System.Numerics.BigInteger> FromInt32(System.Numerics.BigInteger _arg19, FromInt32 _arg20)
		{
			return $Numeric.FromInt32@91-18.@_instance;
		}

		public static FSharpFunc<int, double> FromInt32(double _arg21, FromInt32 _arg22)
		{
			return $Numeric.FromInt32@93-19.@_instance;
		}

		public static FSharpFunc<int, sbyte> FromInt32(sbyte _arg23, FromInt32 _arg24)
		{
			return $Numeric.FromInt32@94-20.@_instance;
		}

		public static FSharpFunc<int, short> FromInt32(short _arg25, FromInt32 _arg26)
		{
			return $Numeric.FromInt32@95-21.@_instance;
		}

		public static FSharpFunc<int, byte> FromInt32(byte _arg27, FromInt32 _arg28)
		{
			return $Numeric.FromInt32@96-22.@_instance;
		}

		public static FSharpFunc<int, ushort> FromInt32(ushort _arg29, FromInt32 _arg30)
		{
			return $Numeric.FromInt32@97-23.@_instance;
		}

		public static FSharpFunc<int, uint> FromInt32(uint _arg31, FromInt32 _arg32)
		{
			return $Numeric.FromInt32@98-24.@_instance;
		}

		public static FSharpFunc<int, ulong> FromInt32(ulong _arg33, FromInt32 _arg34)
		{
			return $Numeric.FromInt32@99-25.@_instance;
		}

		public static FSharpFunc<int, float> FromInt32(float _arg35, FromInt32 _arg36)
		{
			return $Numeric.FromInt32@100-26.@_instance;
		}

		public static FSharpFunc<int, decimal> FromInt32(decimal _arg37, FromInt32 _arg38)
		{
			return $Numeric.FromInt32@101-27.@_instance;
		}

		public static Num Invoke<Num>(int x)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt32, Num>, int>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt32, Num>, FSharpFunc<int, Num>>)$Numeric.Invoke@106-12<Num>.@_instance, new Tuple<FromInt32, Num>(item, default(Num)), x);
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<FromInt32, FSharpFunc<int, Num>>> fromInt32, int x)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FSharpPlus.Control.FromInt32, Num>, int>.InvokeFast<Num>((FSharpFunc<Tuple<FromInt32, Num>, FSharpFunc<int, Num>>)new $Numeric.Invoke@106-13<Num>(fromInt32), new Tuple<FromInt32, Num>(item, default(Num)), x);
		}

		public static Num InvokeOnInstance<Num>(int x)
		{
			throw new NotSupportedException("Dynamic invocation of FromInt32 is not supported");
		}

		public static Num InvokeOnInstance$W<Num>(FSharpFunc<int, Num> fromInt32, int x)
		{
			return fromInt32.Invoke(x);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class One : Default1
	{
		public static t One<t>(t _arg1, Default1 _arg2)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FromInt32, t>, int>.InvokeFast<t>((FSharpFunc<Tuple<FromInt32, t>, FSharpFunc<int, t>>)$Numeric.One@115<t>.@_instance, new Tuple<FromInt32, t>(item, default(t)), 1);
		}

		public static t One$W<t>(FSharpFunc<t, FSharpFunc<FromInt32, FSharpFunc<int, t>>> fromInt32, t _arg1, Default1 _arg2)
		{
			FromInt32 item = null;
			return FSharpFunc<Tuple<FromInt32, t>, int>.InvokeFast<t>((FSharpFunc<Tuple<FromInt32, t>, FSharpFunc<int, t>>)new $Numeric.One@115-1<t>(fromInt32), new Tuple<FromInt32, t>(item, default(t)), 1);
		}

		public static t One<t>(t _arg3, One _arg4)
		{
			return LanguagePrimitives.GenericOneDynamic<t>();
		}

		public static t One$W<t>(FSharpFunc<Unit, t> get_One, t _arg3, One _arg4)
		{
			return get_One.Invoke((Unit)null);
		}

		public static FSharpFunc<a, a> One<t, a>(t _arg5, One _arg6) where t : class
		{
			return $Numeric.One@117-2<a>.@_instance;
		}

		public static Num Invoke<Num>()
		{
			One one = null;
			throw new NotSupportedException("Dynamic invocation of One is not supported");
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<One, Num>> one)
		{
			One one2 = null;
			return FSharpFunc<Num, FSharpPlus.Control.One>.InvokeFast<Num>(one, default(Num), one2);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Zero : Default1
	{
		public static TimeSpan Zero(TimeSpan _arg1, Zero _arg2)
		{
			return default(TimeSpan);
		}

		public static DmStruct Zero(DmStruct _arg3, Zero _arg4)
		{
			return default(DmStruct);
		}

		public static FSharpList<a> Zero<a>(FSharpList<a> _arg5, Zero _arg6)
		{
			return FSharpList<a>.Empty;
		}

		public static FSharpOption<a> Zero<a>(FSharpOption<a> _arg7, Zero _arg8)
		{
			return null;
		}

		public static FSharpValueOption<a> Zero<a>(FSharpValueOption<a> _arg9, Zero _arg10)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			return FSharpValueOption<a>.ValueNone;
		}

		public static a[] Zero<a>(a[] _arg11, Zero _arg12)
		{
			return System.Array.Empty<a>();
		}

		public static string Zero(string _arg13, Zero _arg14)
		{
			return "";
		}

		public static StringBuilder Zero(StringBuilder _arg15, Zero _arg16)
		{
			return new StringBuilder();
		}

		public static void Zero(Unit _arg17, Zero _arg18)
		{
		}

		public static bool Zero(bool _arg19, Zero _arg20)
		{
			return false;
		}

		public static FSharpSet<a> Zero<a>(FSharpSet<a> _arg21, Zero _arg22)
		{
			return SetModule.Empty<a>();
		}

		public static FSharpMap<a, b> Zero<a, b>(FSharpMap<a, b> _arg23, Zero _arg24)
		{
			return MapModule.Empty<a, b>();
		}

		public static a Invoke<a>()
		{
			Zero zero = null;
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static a Invoke$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero)
		{
			Zero zero2 = null;
			return FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
		}

		public static t Zero<t, t1, t2, t3, t4, t5, t6, t7, tr>(t t, Zero _arg1)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			tr rest = (tr)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t7 item = (t7)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t6 item2 = (t6)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t5 item3 = (t5)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t4 item4 = (t4)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t3 item5 = (t3)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t2 item6 = (t2)(object)null;
			zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t1 item7 = (t1)(object)null;
			return (t)new Tuple<t1, t2, t3, t4, t5, t6, t7, tr>(item7, item6, item5, item4, item3, item2, item, rest);
		}

		public static t Zero$W<t, t1, t2, t3, t4, t5, t6, t7, tr>(FSharpFunc<t1, FSharpFunc<Zero, t1>> zero, FSharpFunc<t2, FSharpFunc<Zero, t2>> zero1, FSharpFunc<t3, FSharpFunc<Zero, t3>> zero2, FSharpFunc<t4, FSharpFunc<Zero, t4>> zero3, FSharpFunc<t5, FSharpFunc<Zero, t5>> zero4, FSharpFunc<t6, FSharpFunc<Zero, t6>> zero5, FSharpFunc<t7, FSharpFunc<Zero, t7>> zero6, FSharpFunc<tr, FSharpFunc<Zero, tr>> zero7, FSharpFunc<t, t1> get_Item1, FSharpFunc<t, t2> get_Item2, FSharpFunc<t, t3> get_Item3, FSharpFunc<t, t4> get_Item4, FSharpFunc<t, t5> get_Item5, FSharpFunc<t, t6> get_Item6, FSharpFunc<t, t7> get_Item7, FSharpFunc<t, tr> get_Rest, t t, Zero _arg1)
		{
			Zero zero8 = null;
			tr rest = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<tr>((FSharpFunc<?, FSharpFunc<Zero, tr>>)(object)zero7, default(tr), zero8);
			zero8 = null;
			t7 item = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t7>((FSharpFunc<?, FSharpFunc<Zero, t7>>)(object)zero6, default(t7), zero8);
			zero8 = null;
			t6 item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t6>((FSharpFunc<?, FSharpFunc<Zero, t6>>)(object)zero5, default(t6), zero8);
			zero8 = null;
			t5 item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t5>((FSharpFunc<?, FSharpFunc<Zero, t5>>)(object)zero4, default(t5), zero8);
			zero8 = null;
			t4 item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t4>((FSharpFunc<?, FSharpFunc<Zero, t4>>)(object)zero3, default(t4), zero8);
			zero8 = null;
			t3 item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t3>((FSharpFunc<?, FSharpFunc<Zero, t3>>)(object)zero2, default(t3), zero8);
			zero8 = null;
			t2 item6 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t2>((FSharpFunc<?, FSharpFunc<Zero, t2>>)(object)zero1, default(t2), zero8);
			zero8 = null;
			t1 item7 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<t1>((FSharpFunc<?, FSharpFunc<Zero, t1>>)(object)zero, default(t1), zero8);
			return (t)new Tuple<t1, t2, t3, t4, t5, t6, t7, tr>(item7, item6, item5, item4, item3, item2, item, rest);
		}

		public static Tuple<a> Zero<a>(Tuple<a> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			return new Tuple<a>((a)(object)null);
		}

		public static Tuple<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Tuple<a> _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			return new Tuple<a>(FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2));
		}

		public static Id<a> Zero<a, a>(Id<a> _arg3, Zero _arg4)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			return new Id<a>((a)(object)null);
		}

		public static Id<a> Zero$W<a, a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Id<a> _arg3, Zero _arg4)
		{
			Zero zero2 = null;
			return new Id<a>(FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<a>((FSharpFunc<?, FSharpFunc<Zero, a>>)(object)zero, default(a), zero2));
		}

		public static ValueTuple<a> Zero<a>(ValueTuple<a> _arg5, Zero _arg6)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			return ValueTuple.Create((a)(object)null);
		}

		public static ValueTuple<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, ValueTuple<a> _arg5, Zero _arg6)
		{
			Zero zero2 = null;
			return ValueTuple.Create(FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2));
		}

		public static Tuple<a, b> Zero<a, b>(Tuple<a, b> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (0 == 0)
				{
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				return new Tuple<a, b>(item, (b)(object)null);
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b> Zero$W<a, b>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, Tuple<a, b> _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			zero2 = null;
			return new Tuple<a, b>(item, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero2));
		}

		public static Tuple<a, b, c> Zero<a, b, c>(Tuple<a, b, c> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (0 == 0)
					{
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					return new Tuple<a, b, c>(item, item2, (c)(object)null);
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c> Zero$W<a, b, c>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, Tuple<a, b, c> _arg1, Zero _arg2)
		{
			Zero zero3 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero3);
			zero3 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero3);
			zero3 = null;
			return new Tuple<a, b, c>(item, item2, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero3));
		}

		public static Tuple<a, b, c, d> Zero<a, b, c, d>(Tuple<a, b, c, d> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (0 == 0)
						{
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						return new Tuple<a, b, c, d>(item, item2, item3, (d)(object)null);
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d> Zero$W<a, b, c, d>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, Tuple<a, b, c, d> _arg1, Zero _arg2)
		{
			Zero zero4 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero4);
			zero4 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero4);
			zero4 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero4);
			zero4 = null;
			return new Tuple<a, b, c, d>(item, item2, item3, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero4));
		}

		public static Tuple<a, b, c, d, e> Zero<a, b, c, d, e>(Tuple<a, b, c, d, e> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							return new Tuple<a, b, c, d, e>(item, item2, item3, item4, (e)(object)null);
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d, e> Zero$W<a, b, c, d, e>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, Tuple<a, b, c, d, e> _arg1, Zero _arg2)
		{
			Zero zero5 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero5);
			zero5 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero5);
			zero5 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero5);
			zero5 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero5);
			zero5 = null;
			return new Tuple<a, b, c, d, e>(item, item2, item3, item4, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero5));
		}

		public static Tuple<a, b, c, d, e, f> Zero<a, b, c, d, e, f>(Tuple<a, b, c, d, e, f> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (0 == 0)
								{
									throw new NotSupportedException("Dynamic invocation of Zero is not supported");
								}
								return new Tuple<a, b, c, d, e, f>(item, item2, item3, item4, item5, (f)(object)null);
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d, e, f> Zero$W<a, b, c, d, e, f>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, Tuple<a, b, c, d, e, f> _arg1, Zero _arg2)
		{
			Zero zero6 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero6);
			zero6 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero6);
			zero6 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero6);
			zero6 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero6);
			zero6 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero6);
			zero6 = null;
			return new Tuple<a, b, c, d, e, f>(item, item2, item3, item4, item5, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero6));
		}

		public static Tuple<a, b, c, d, e, f, g> Zero<a, b, c, d, e, f, g>(Tuple<a, b, c, d, e, f, g> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (false)
								{
									f item6 = (f)(object)null;
									zero = null;
									if (0 == 0)
									{
										throw new NotSupportedException("Dynamic invocation of Zero is not supported");
									}
									return new Tuple<a, b, c, d, e, f, g>(item, item2, item3, item4, item5, item6, (g)(object)null);
								}
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static Tuple<a, b, c, d, e, f, g> Zero$W<a, b, c, d, e, f, g>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, FSharpFunc<g, FSharpFunc<Zero, g>> zero6, Tuple<a, b, c, d, e, f, g> _arg1, Zero _arg2)
		{
			Zero zero7 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero7);
			zero7 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero7);
			zero7 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero7);
			zero7 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero7);
			zero7 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero7);
			zero7 = null;
			f item6 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero7);
			zero7 = null;
			return new Tuple<a, b, c, d, e, f, g>(item, item2, item3, item4, item5, item6, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<g>((FSharpFunc<?, FSharpFunc<Zero, g>>)(object)zero6, default(g), zero7));
		}

		public static (a, b) Zero<a, b>((a, b) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (0 == 0)
				{
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				return ValueTuple.Create(item, (b)(object)null);
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b) Zero$W<a, b>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, (a, b) _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			zero2 = null;
			return ValueTuple.Create(item, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero2));
		}

		public static (a, b, c) Zero<a, b, c>((a, b, c) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (0 == 0)
					{
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					return ValueTuple.Create(item, item2, (c)(object)null);
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c) Zero$W<a, b, c>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, (a, b, c) _arg1, Zero _arg2)
		{
			Zero zero3 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero3);
			zero3 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero3);
			zero3 = null;
			return ValueTuple.Create(item, item2, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero3));
		}

		public static (a, b, c, d) Zero<a, b, c, d>((a, b, c, d) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (0 == 0)
						{
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						return ValueTuple.Create(item, item2, item3, (d)(object)null);
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d) Zero$W<a, b, c, d>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, (a, b, c, d) _arg1, Zero _arg2)
		{
			Zero zero4 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero4);
			zero4 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero4);
			zero4 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero4);
			zero4 = null;
			return ValueTuple.Create(item, item2, item3, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero4));
		}

		public static (a, b, c, d, e) Zero<a, b, c, d, e>((a, b, c, d, e) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (0 == 0)
							{
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							return ValueTuple.Create(item, item2, item3, item4, (e)(object)null);
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d, e) Zero$W<a, b, c, d, e>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, (a, b, c, d, e) _arg1, Zero _arg2)
		{
			Zero zero5 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero5);
			zero5 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero5);
			zero5 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero5);
			zero5 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero5);
			zero5 = null;
			return ValueTuple.Create(item, item2, item3, item4, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero5));
		}

		public static (a, b, c, d, e, f) Zero<a, b, c, d, e, f>((a, b, c, d, e, f) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (0 == 0)
								{
									throw new NotSupportedException("Dynamic invocation of Zero is not supported");
								}
								return ValueTuple.Create(item, item2, item3, item4, item5, (f)(object)null);
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d, e, f) Zero$W<a, b, c, d, e, f>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, (a, b, c, d, e, f) _arg1, Zero _arg2)
		{
			Zero zero6 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero6);
			zero6 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero6);
			zero6 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero6);
			zero6 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero6);
			zero6 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero6);
			zero6 = null;
			return ValueTuple.Create(item, item2, item3, item4, item5, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero6));
		}

		public static (a, b, c, d, e, f, g) Zero<a, b, c, d, e, f, g>((a, b, c, d, e, f, g) _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (false)
			{
				a item = (a)(object)null;
				zero = null;
				if (false)
				{
					b item2 = (b)(object)null;
					zero = null;
					if (false)
					{
						c item3 = (c)(object)null;
						zero = null;
						if (false)
						{
							d item4 = (d)(object)null;
							zero = null;
							if (false)
							{
								e item5 = (e)(object)null;
								zero = null;
								if (false)
								{
									f item6 = (f)(object)null;
									zero = null;
									if (0 == 0)
									{
										throw new NotSupportedException("Dynamic invocation of Zero is not supported");
									}
									return ValueTuple.Create(item, item2, item3, item4, item5, item6, (g)(object)null);
								}
								throw new NotSupportedException("Dynamic invocation of Zero is not supported");
							}
							throw new NotSupportedException("Dynamic invocation of Zero is not supported");
						}
						throw new NotSupportedException("Dynamic invocation of Zero is not supported");
					}
					throw new NotSupportedException("Dynamic invocation of Zero is not supported");
				}
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			throw new NotSupportedException("Dynamic invocation of Zero is not supported");
		}

		public static (a, b, c, d, e, f, g) Zero$W<a, b, c, d, e, f, g>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpFunc<b, FSharpFunc<Zero, b>> zero1, FSharpFunc<c, FSharpFunc<Zero, c>> zero2, FSharpFunc<d, FSharpFunc<Zero, d>> zero3, FSharpFunc<e, FSharpFunc<Zero, e>> zero4, FSharpFunc<f, FSharpFunc<Zero, f>> zero5, FSharpFunc<g, FSharpFunc<Zero, g>> zero6, (a, b, c, d, e, f, g) _arg1, Zero _arg2)
		{
			Zero zero7 = null;
			a item = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero7);
			zero7 = null;
			b item2 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<b>((FSharpFunc<?, FSharpFunc<Zero, b>>)(object)zero1, default(b), zero7);
			zero7 = null;
			c item3 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<c>((FSharpFunc<?, FSharpFunc<Zero, c>>)(object)zero2, default(c), zero7);
			zero7 = null;
			d item4 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<d>((FSharpFunc<?, FSharpFunc<Zero, d>>)(object)zero3, default(d), zero7);
			zero7 = null;
			e item5 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<e>((FSharpFunc<?, FSharpFunc<Zero, e>>)(object)zero4, default(e), zero7);
			zero7 = null;
			f item6 = FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<f>((FSharpFunc<?, FSharpFunc<Zero, f>>)(object)zero5, default(f), zero7);
			zero7 = null;
			return ValueTuple.Create(item, item2, item3, item4, item5, item6, FSharpFunc<?, FSharpPlus.Control.Zero>.InvokeFast<g>((FSharpFunc<?, FSharpFunc<Zero, g>>)(object)zero6, default(g), zero7));
		}

		public static Task<a> Zero<a>(Task<a> _arg1, Zero _arg2)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a result = (a)(object)null;
			TaskCompletionSource<a> taskCompletionSource = new TaskCompletionSource<a>();
			taskCompletionSource.SetResult(result);
			return taskCompletionSource.Task;
		}

		public static Task<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Task<a> _arg1, Zero _arg2)
		{
			Zero zero2 = null;
			a result = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			TaskCompletionSource<a> taskCompletionSource = new TaskCompletionSource<a>();
			taskCompletionSource.SetResult(result);
			return taskCompletionSource.Task;
		}

		public static ValueTask<a> Zero<a>(ValueTask<a> _arg3, Zero _arg4)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a result = (a)(object)null;
			return new ValueTask<a>(result);
		}

		public static ValueTask<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, ValueTask<a> _arg3, Zero _arg4)
		{
			Zero zero2 = null;
			a result = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return new ValueTask<a>(result);
		}

		public static FSharpFunc<T, Monoid> Zero<T, Monoid>(FSharpFunc<T, Monoid> _arg5, Zero _arg6)
		{
			return $Numeric.Zero@201<T, Monoid>.@_instance;
		}

		public static FSharpFunc<T, Monoid> Zero$W<T, Monoid>(FSharpFunc<Monoid, FSharpFunc<Zero, Monoid>> zero, FSharpFunc<T, Monoid> _arg5, Zero _arg6)
		{
			return new $Numeric.Zero@201-1<T, Monoid>(zero);
		}

		public static FSharpAsync<a> Zero<a>(FSharpAsync<a> _arg7, Zero _arg8)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a v = (a)(object)null;
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $Numeric.Zero@202-2<a>(v));
		}

		public static FSharpAsync<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpAsync<a> _arg7, Zero _arg8)
		{
			Zero zero2 = null;
			a v = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return AsyncPrimitives.MakeAsync<a>((FSharpFunc<AsyncActivation<a>, AsyncReturn>)new $Numeric.Zero@202-3<a>(zero, v));
		}

		public static FSharpExpr<a> Zero<a>(FSharpExpr<a> _arg9, Zero _arg10)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a val = (a)(object)null;
			return FSharpExpr.Cast<a>(FSharpExpr.Value<a>(val));
		}

		public static FSharpExpr<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, FSharpExpr<a> _arg9, Zero _arg10)
		{
			Zero zero2 = null;
			a val = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return FSharpExpr.Cast<a>(FSharpExpr.Value<a>(val));
		}

		public static Lazy<a> Zero<a>(Lazy<a> _arg11, Zero _arg12)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			a v = (a)(object)null;
			return LazyExtensions.Create<a>((FSharpFunc<Unit, a>)new $Numeric.Zero@206-4<a>(v));
		}

		public static Lazy<a> Zero$W<a>(FSharpFunc<a, FSharpFunc<Zero, a>> zero, Lazy<a> _arg11, Zero _arg12)
		{
			Zero zero2 = null;
			a v = FSharpFunc<a, FSharpPlus.Control.Zero>.InvokeFast<a>(zero, default(a), zero2);
			return LazyExtensions.Create<a>((FSharpFunc<Unit, a>)new $Numeric.Zero@206-5<a>(zero, v));
		}

		public static Dictionary<a, b> Zero<a, b>(Dictionary<a, b> _arg13, Zero _arg14)
		{
			return new Dictionary<a, b>();
		}

		public static List<a> Zero<a>(List<a> _arg15, Zero _arg16)
		{
			return new List<a>();
		}

		public static R Zero<R>(R _arg1, Default6 _arg2)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FromInt64, R>, long>.InvokeFast<R>((FSharpFunc<Tuple<FromInt64, R>, FSharpFunc<long, R>>)$Numeric.Zero@211-6<R>.@_instance, new Tuple<FromInt64, R>(item, default(R)), 0L);
		}

		public static R Zero$W<R>(FSharpFunc<R, FSharpFunc<FromInt64, FSharpFunc<long, R>>> fromInt64, R _arg1, Default6 _arg2)
		{
			FromInt64 item = null;
			return FSharpFunc<Tuple<FromInt64, R>, long>.InvokeFast<R>((FSharpFunc<Tuple<FromInt64, R>, FSharpFunc<long, R>>)new $Numeric.Zero@211-7<R>(fromInt64), new Tuple<FromInt64, R>(item, default(R)), 0L);
		}

		public static R Zero<R>(R _arg3, Default5 _arg4)
		{
			throw new NotSupportedException("Dynamic invocation of op_Implicit is not supported");
		}

		public static R Zero$W<R>(FSharpFunc<int, R> op_Implicit, R _arg3, Default5 _arg4)
		{
			return op_Implicit.Invoke(0);
		}

		public static IEnumerable<a> Zero<a>(IEnumerable<a> _arg5, Default4 _arg6)
		{
			return SeqModule.Empty<a>();
		}

		public static IEnumerator<a> Zero<a>(IEnumerator<a> _arg7, Default4 _arg8)
		{
			return new Enumerator.EmptyEnumerator<a>();
		}

		public static IDictionary<a, b> Zero<a, b>(IDictionary<a, b> _arg9, Default4 _arg10)
		{
			return new Dictionary<a, b>();
		}

		public static IReadOnlyDictionary<a, b> Zero<a, b>(IReadOnlyDictionary<a, b> _arg11, Default4 _arg12)
		{
			return new Dictionary<a, b>();
		}

		public static t Zero<t>(t _arg13, Default3 _arg14)
		{
			throw new NotSupportedException("Dynamic invocation of get_Empty is not supported");
		}

		public static t Zero$W<t>(FSharpFunc<Unit, t> get_Empty, t _arg13, Default3 _arg14)
		{
			return get_Empty.Invoke((Unit)null);
		}

		public static t Zero<t>(t _arg15, Default2 _arg16)
		{
			throw new NotSupportedException("Dynamic invocation of FromInt32 is not supported");
		}

		public static t Zero$W<t>(FSharpFunc<int, t> fromInt32, t _arg15, Default2 _arg16)
		{
			return fromInt32.Invoke(0);
		}

		public static FSharpFunc<a, a> Zero<t, a>(t _arg17, Default2 _arg18) where t : class
		{
			return $Numeric.Zero@222-8<a>.@_instance;
		}

		public static t Zero<t>(t _arg19, Default1 _arg20)
		{
			return LanguagePrimitives.GenericZeroDynamic<t>();
		}

		public static t Zero$W<t>(FSharpFunc<Unit, t> get_Zero, t _arg19, Default1 _arg20)
		{
			return get_Zero.Invoke((Unit)null);
		}

		public static FSharpFunc<a, a> Zero<t, a>(t _arg21, Default1 _arg22) where t : class
		{
			return $Numeric.Zero@225-9<a>.@_instance;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Abs : Default1
	{
		public static t Abs<t, u>(t x, Default2 _arg1)
		{
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Abs is not supported");
			}
			u val = (u)(object)null;
			Explicit item = null;
			return FSharpFunc<Tuple<Explicit, t>, ?>.InvokeFast<t>((FSharpFunc<Tuple<Explicit, t>, FSharpFunc<?, t>>)(object)$Numeric.Abs@231<t, u>.@_instance, new Tuple<Explicit, t>(item, default(t)), val);
		}

		public static t Abs$W<t, u>(FSharpFunc<t, u> abs, FSharpFunc<t, FSharpFunc<Explicit, FSharpFunc<u, t>>> @explicit, t x, Default2 _arg1)
		{
			u val = abs.Invoke(x);
			Explicit item = null;
			return FSharpFunc<Tuple<Explicit, t>, ?>.InvokeFast<t>((FSharpFunc<Tuple<Explicit, t>, FSharpFunc<?, t>>)(object)new $Numeric.Abs@231-1<t, u>(abs, @explicit), new Tuple<Explicit, t>(item, default(t)), val);
		}

		public static t Abs<t, u>(t x, Default1 _arg2)
		{
			throw new NotSupportedException("Dynamic invocation of op_Implicit is not supported");
		}

		public static t Abs$W<t, u>(FSharpFunc<t, u> abs, FSharpFunc<u, t> op_Implicit, t x, Default1 _arg2)
		{
			return op_Implicit.Invoke(abs.Invoke(x));
		}

		public static t Abs<t>(t x, Abs _arg3)
		{
			return OperatorIntrinsics.AbsDynamic<t>(x);
		}

		public static t Abs$W<t>(FSharpFunc<t, t> abs, t x, Abs _arg3)
		{
			return abs.Invoke(x);
		}

		public static FSharpFunc<a, R> Abs<a, R>(Default1 _arg4, Abs _arg5)
		{
			return $Numeric.Abs@234-2<a, R>.@_instance;
		}

		public static FSharpFunc<a, R> Abs$W<a, R>(FSharpFunc<a, R> abs, Default1 _arg4, Abs _arg5)
		{
			return new $Numeric.Abs@234-3<a, R>(abs);
		}

		public static Num Invoke<Num>(Num x)
		{
			throw new NotSupportedException("Dynamic invocation of Abs is not supported");
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<Abs, Num>> abs, Num x)
		{
			return FSharpFunc<Num, FSharpPlus.Control.Abs>.InvokeFast<Num>(abs, x, (Abs)null);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Abs' : Abs
	{
		public static byte Abs(byte x, Abs' _arg1)
		{
			return x;
		}

		public static ushort Abs(ushort x, Abs' _arg2)
		{
			return x;
		}

		public static uint Abs(uint x, Abs' _arg3)
		{
			return x;
		}

		public static ulong Abs(ulong x, Abs' _arg4)
		{
			return x;
		}

		public static UIntPtr Abs(UIntPtr x, Abs' _arg5)
		{
			return x;
		}

		public new static Num Invoke<Num>(Num x)
		{
			throw new NotSupportedException("Dynamic invocation of Abs is not supported");
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<Abs', Num>> abs, Num x)
		{
			return FSharpFunc<Num, Abs'>.InvokeFast<Num>(abs, x, (Abs')null);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Signum : Default1
	{
		public static t Signum<t>(t x, Default2 _arg1)
		{
			Zero zero = null;
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Zero is not supported");
			}
			t val = (t)(object)null;
			if (HashCompare.GenericEqualityIntrinsic<t>(x, val))
			{
				return val;
			}
			if (0 == 0)
			{
				throw new NotSupportedException("Dynamic invocation of Abs is not supported");
			}
			t val2 = (t)(object)null;
			return LanguagePrimitives.DivisionDynamic<t, t, t>(x, val2);
		}

		public static t Signum$W<t>(FSharpFunc<t, FSharpFunc<Abs, t>> abs, FSharpFunc<t, FSharpFunc<Zero, t>> zero, FSharpFunc<t, FSharpFunc<t, t>> op_Division, t x, Default2 _arg1)
		{
			Zero zero2 = null;
			t val = FSharpFunc<t, Zero>.InvokeFast<t>(zero, default(t), zero2);
			if (HashCompare.GenericEqualityIntrinsic<t>(x, val))
			{
				return val;
			}
			t val2 = FSharpFunc<t, Abs>.InvokeFast<t>(abs, x, (Abs)null);
			return FSharpFunc<t, t>.InvokeFast<t>(op_Division, x, val2);
		}

		public static FSharpFunc<a, a> Signum<t, a>(t _arg2, Default1 _arg3) where t : class
		{
			return $Numeric.Signum@263<a>.@_instance;
		}

		public static t Signum<t>(t x, Default1 _arg4)
		{
			int num = OperatorIntrinsics.SignDynamic<t>(x);
			FromInt32 item = null;
			return FSharpFunc<Tuple<FromInt32, t>, int>.InvokeFast<t>((FSharpFunc<Tuple<FromInt32, t>, FSharpFunc<int, t>>)$Numeric.Signum@264-1<t>.@_instance, new Tuple<FromInt32, t>(item, default(t)), num);
		}

		public static t Signum$W<t>(FSharpFunc<t, FSharpFunc<FromInt32, FSharpFunc<int, t>>> fromInt32, FSharpFunc<t, int> get_Sign, t x, Default1 _arg4)
		{
			int num = get_Sign.Invoke(x);
			FromInt32 item = null;
			return FSharpFunc<Tuple<FromInt32, t>, int>.InvokeFast<t>((FSharpFunc<Tuple<FromInt32, t>, FSharpFunc<int, t>>)new $Numeric.Signum@264-2<t>(fromInt32, get_Sign), new Tuple<FromInt32, t>(item, default(t)), num);
		}

		public static Num Invoke<Num>(Num x)
		{
			throw new NotSupportedException("Dynamic invocation of Signum is not supported");
		}

		public static Num Invoke$W<Num>(FSharpFunc<Num, FSharpFunc<Signum, Num>> signum, Num x)
		{
			return FSharpFunc<Num, FSharpPlus.Control.Signum>.InvokeFast<Num>(signum, x, (Signum)null);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Signum' : Signum
	{
		public static byte Signum(byte x, Signum' _arg1)
		{
			if (x == 0)
			{
				return 0;
			}
			return 1;
		}

		public static ushort Signum(ushort x, Signum' _arg2)
		{
			if (x == 0)
			{
				re

BepInEx/core/FSharpx.Async.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Net;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$FSharpx-Async>;
using <StartupCode$FSharpx-Async>.$Async;
using FSharp.Control;
using FSharpx.Collections.Mutable;
using FSharpx.Control;
using FSharpx.IO;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Microsoft.FSharp.Core.CompilerServices;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETFramework,Version=v4.5.2", FrameworkDisplayName = ".NET Framework 4.5.2")]
[assembly: AssemblyCompany("Tomas Petricek;David Thomas;Ryan Riley;Steffen Forkmann")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Async extensions for F#")]
[assembly: AssemblyFileVersion("1.14.2.0")]
[assembly: AssemblyInformationalVersion("1.14.2+b63df53c523701e74e5dea8989289a1426c05cdb")]
[assembly: AssemblyProduct("FSharpx.Async")]
[assembly: AssemblyTitle("FSharpx.Async")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/fsprojects/FSharpx.Async")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default)]
[assembly: AssemblyVersion("1.14.2.0")]
namespace FSharpx.Collections.Mutable
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class CircularBuffer<T> : IEnumerable<T>
	{
		internal int bufferSize;

		internal T[] buffer;

		internal int head;

		internal int tail;

		internal int length;

		public int Count => length;

		public CircularBuffer(int bufferSize)
		{
			this.bufferSize = bufferSize;
			if (this.bufferSize <= 0)
			{
				throw new ArgumentException("The bufferSize must be greater than 0.", "bufferSize");
			}
			buffer = ArrayModule.ZeroCreate<T>(this.bufferSize);
			head = this.bufferSize - 1;
			tail = 0;
			length = 0;
		}

		public T[] Dequeue(int count)
		{
			if (length == 0)
			{
				throw new InvalidOperationException("Queue exhausted.");
			}
			if (count > bufferSize)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("Requested count exceeds the buffer size.");
				throw ex;
			}
			int num = length;
			int num2 = ((count >= num) ? num : count);
			T[] result = ArrayModule.Concat<T>((IEnumerable<T[]>)SeqModule.ToArray<T[]>((IEnumerable<T[]>)(object)new $CircularBuffer.dequeued@37<T>(this, num2, null, 0, null)));
			tail = (tail + num2) % bufferSize;
			length -= num2;
			return result;
		}

		public void Enqueue(T[] value, int offset, int count)
		{
			if (count > bufferSize)
			{
				throw new InvalidOperationException("Requested count is too large.");
			}
			int num = offset;
			head = (head + 1) % bufferSize;
			IEnumerable<Tuple<int, int>> enumerable = nextBuffer(head, count);
			int item;
			int item2;
			int sourceIndex;
			foreach (Tuple<int, int> item3 in enumerable)
			{
				item = item3.Item2;
				item2 = item3.Item1;
				sourceIndex = num;
				T[] destinationArray = buffer;
				Array.Copy(value, sourceIndex, destinationArray, item2, item);
				num += item;
			}
			if (length == bufferSize)
			{
				tail = (tail + count) % bufferSize;
				return;
			}
			item = length + count - bufferSize;
			if (item > 0)
			{
				tail = (tail + item) % bufferSize;
			}
			item2 = length + count;
			sourceIndex = bufferSize;
			length = ((item2 >= sourceIndex) ? sourceIndex : item2);
		}

		public void Enqueue(T[] value)
		{
			Enqueue(value, 0, value.Length);
		}

		public void Enqueue(T[] value, int offset)
		{
			Enqueue(value, offset, value.Length - offset);
		}

		public void Enqueue(ArraySegment<T> value)
		{
			Enqueue(value.Array, value.Offset, value.Count);
		}

		public void Enqueue(T value)
		{
			Enqueue(new T[1] { value }, 0, 1);
		}

		public IEnumerator<T> GetEnumerator()
		{
			return $CircularBuffer.loop@74(this, null).GetEnumerator();
		}

		virtual IEnumerator<T> IEnumerable<T>.GetEnumerator()
		{
			return GetEnumerator();
		}

		virtual IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		[CompilerGenerated]
		internal IEnumerable<Tuple<int, int>> nextBuffer(int offset, int count)
		{
			return (IEnumerable<Tuple<int, int>>)(object)new $CircularBuffer.clo@20<T>(this, offset, count, 0, 0, null);
		}
	}
}
namespace FSharpx.Control
{
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class AutoCancelAgent<T> : IDisposable
	{
		internal FSharpMailboxProcessor<T> mbox;

		internal CancellationTokenSource cts;

		public int CurrentQueueLength => mbox.CurrentQueueLength;

		[CLIEvent]
		public event FSharpHandler<Exception> Error
		{
			add
			{
				FSharpMailboxProcessor<T> eventTarget = mbox;
				((IDelegateEvent<FSharpHandler<Exception>>)(object)RuntimeHelpers.CreateEvent<FSharpHandler<Exception>, Exception>((FSharpFunc<FSharpHandler<Exception>, Unit>)new $AutoCancelAgent.add_Error@29<T>(eventTarget), (FSharpFunc<FSharpHandler<Exception>, Unit>)new $AutoCancelAgent.add_Error@29-1<T>(eventTarget), (FSharpFunc<FSharpFunc<object, FSharpFunc<Exception, Unit>>, FSharpHandler<Exception>>)$AutoCancelAgent.add_Error@29-2.@_instance)).AddHandler(value);
			}
			remove
			{
				FSharpMailboxProcessor<T> eventTarget = mbox;
				((IDelegateEvent<FSharpHandler<Exception>>)(object)RuntimeHelpers.CreateEvent<FSharpHandler<Exception>, Exception>((FSharpFunc<FSharpHandler<Exception>, Unit>)new $AutoCancelAgent.remove_Error@29<T>(eventTarget), (FSharpFunc<FSharpHandler<Exception>, Unit>)new $AutoCancelAgent.remove_Error@29-1<T>(eventTarget), (FSharpFunc<FSharpFunc<object, FSharpFunc<Exception, Unit>>, FSharpHandler<Exception>>)$AutoCancelAgent.remove_Error@29-2.@_instance)).RemoveHandler(value);
			}
		}

		internal AutoCancelAgent(FSharpMailboxProcessor<T> mbox, CancellationTokenSource cts)
		{
			this.mbox = mbox;
			this.cts = cts;
		}

		public static AutoCancelAgent<T> Start(FSharpFunc<FSharpMailboxProcessor<T>, FSharpAsync<Unit>> f)
		{
			CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
			return new AutoCancelAgent<T>(FSharpMailboxProcessor<T>.Start(f, FSharpOption<CancellationToken>.Some(cancellationTokenSource.Token)), cancellationTokenSource);
		}

		public FSharpAsync<T> Receive([OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.Receive(timeout);
		}

		public FSharpAsync<a> Scan<a>(FSharpFunc<T, FSharpOption<FSharpAsync<a>>> scanner, [OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.Scan<a>(scanner, timeout);
		}

		public FSharpOption<a> TryPostAndReply<a>(FSharpFunc<FSharpAsyncReplyChannel<a>, T> buildMessage, [OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.TryPostAndReply<a>(buildMessage, timeout);
		}

		public FSharpAsync<FSharpOption<T>> TryReceive([OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.TryReceive(timeout);
		}

		public FSharpAsync<FSharpOption<a>> TryScan<a>(FSharpFunc<T, FSharpOption<FSharpAsync<a>>> scanner, [OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.TryScan<a>(scanner, timeout);
		}

		public void Post(T m)
		{
			mbox.Post(m);
		}

		public a PostAndReply<a>(FSharpFunc<FSharpAsyncReplyChannel<a>, T> buildMessage, [OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.PostAndReply<a>(buildMessage, timeout);
		}

		public FSharpAsync<FSharpOption<a>> PostAndTryAsyncReply<a>(FSharpFunc<FSharpAsyncReplyChannel<a>, T> buildMessage, [OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.PostAndTryAsyncReply<a>(buildMessage, timeout);
		}

		public FSharpAsync<a> PostAndAsyncReply<a>(FSharpFunc<FSharpAsyncReplyChannel<a>, T> buildMessage, [OptionalArgument] FSharpOption<int> timeout)
		{
			return mbox.PostAndAsyncReply<a>(buildMessage, timeout);
		}

		virtual void IDisposable.Dispose()
		{
			((IDisposable)mbox).Dispose();
			cts.Cancel();
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class BatchProcessingAgent<T> : IDisposable
	{
		internal int timeout;

		internal int batchSize;

		internal FSharpEvent<T[]> batchEvent;

		internal CancellationTokenSource cts;

		internal FSharpMailboxProcessor<T> agent;

		[CLIEvent]
		public event FSharpHandler<T[]> BatchProduced
		{
			add
			{
				((IDelegateEvent<FSharpHandler<FSharpHandler<T[]>[]>>)(object)((FSharpEvent<T[][]>)(object)batchEvent).Publish).AddHandler((FSharpHandler<FSharpHandler<T[]>[]>)(object)value);
			}
			remove
			{
				((IDelegateEvent<FSharpHandler<FSharpHandler<T[]>[]>>)(object)((FSharpEvent<T[][]>)(object)batchEvent).Publish).RemoveHandler((FSharpHandler<FSharpHandler<T[]>[]>)(object)value);
			}
		}

		public BatchProcessingAgent(int batchSize, int timeout)
		{
			this.batchSize = batchSize;
			this.timeout = timeout;
			batchEvent = (FSharpEvent<T[]>)(object)new FSharpEvent<T[][]>();
			cts = new CancellationTokenSource();
			agent = FSharpMailboxProcessor<T>.Start((FSharpFunc<FSharpMailboxProcessor<T>, FSharpAsync<Unit>>)new $BatchProcessingAgent.-ctor@39<T>(this), FSharpOption<CancellationToken>.Some(cts.Token));
		}

		public void Enqueue(T v)
		{
			agent.Post(v);
		}

		virtual void IDisposable.Dispose()
		{
			cts.Cancel();
		}

		[CompilerGenerated]
		internal FSharpAsync<b> body<b>(FSharpMailboxProcessor<T> agent)
		{
			return $BatchProcessingAgent.loop@23-2<T, b>(this, agent, timeout, FSharpList<T>.Empty);
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal abstract class BlockingAgentMessage<T> : IEquatable<BlockingAgentMessage<T>>, IStructuralEquatable
	{
		internal static class Tags
		{
			public const int AsyncAdd = 0;

			public const int Add = 1;

			public const int AsyncGet = 2;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BlockingAgentMessage<>.AsyncAdd@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class AsyncAdd : BlockingAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T item1;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly FSharpAsyncReplyChannel<Unit> item2;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal T Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal FSharpAsyncReplyChannel<Unit> Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item2;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncAdd(T item1, FSharpAsyncReplyChannel<Unit> item2)
			{
				this.item1 = item1;
				this.item2 = item2;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BlockingAgentMessage<>.Add@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class Add : BlockingAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Add(T item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BlockingAgentMessage<>.AsyncGet@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class AsyncGet : BlockingAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly FSharpAsyncReplyChannel<T> item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal FSharpAsyncReplyChannel<T> Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncGet(FSharpAsyncReplyChannel<T> item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class AsyncAdd@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsyncReplyChannel<Unit> Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item2;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncAdd@DebugTypeProxy(AsyncAdd obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Add@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Add@DebugTypeProxy(Add obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class AsyncGet@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsyncReplyChannel<T> Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncGet@DebugTypeProxy(AsyncGet obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is AsyncGet) ? 2 : ((this is Add) ? 1 : 0);
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsAsyncAdd
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncAdd;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsAdd
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Add;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsAsyncGet
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncGet;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BlockingAgentMessage<>))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal BlockingAgentMessage()
		{
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BlockingAgentMessage<T> NewAsyncAdd(T item1, FSharpAsyncReplyChannel<Unit> item2)
		{
			return new AsyncAdd(item1, item2);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BlockingAgentMessage<T> NewAdd(T item)
		{
			return new Add(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BlockingAgentMessage<T> NewAsyncGet(FSharpAsyncReplyChannel<T> item)
		{
			return new AsyncGet(item);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<BlockingAgentMessage<BlockingAgentMessage<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<BlockingAgentMessage<T>, string>>((PrintfFormat<FSharpFunc<BlockingAgentMessage<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<BlockingAgentMessage<FSharpFunc<BlockingAgentMessage<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((BlockingAgentMessage<BlockingAgentMessage<T>>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<BlockingAgentMessage<BlockingAgentMessage<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<BlockingAgentMessage<T>, string>>((PrintfFormat<FSharpFunc<BlockingAgentMessage<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<BlockingAgentMessage<FSharpFunc<BlockingAgentMessage<T>, string>>, string>, Unit, string, string, BlockingAgentMessage<FSharpFunc<BlockingAgentMessage<T>, string>>>("%+A"))).Invoke((BlockingAgentMessage<BlockingAgentMessage<T>>)(object)this);
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				T item;
				if (!(this is AsyncAdd))
				{
					if (this is Add)
					{
						Add add = (Add)this;
						num = 1;
						item = add.item;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<T>(comp, item) + ((num << 6) + (num >> 2)));
					}
					if (this is AsyncGet)
					{
						AsyncGet asyncGet = (AsyncGet)this;
						num = 2;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<FSharpAsyncReplyChannel<T>>(comp, asyncGet.item) + ((num << 6) + (num >> 2)));
					}
				}
				AsyncAdd asyncAdd = (AsyncAdd)this;
				num = 0;
				num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<FSharpAsyncReplyChannel<Unit>>(comp, asyncAdd.item2) + ((num << 6) + (num >> 2)));
				item = asyncAdd.item1;
				return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<T>(comp, item) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is BlockingAgentMessage<T> blockingAgentMessage)
				{
					int num = ((this is AsyncGet) ? 2 : ((this is Add) ? 1 : 0));
					BlockingAgentMessage<T> blockingAgentMessage2 = blockingAgentMessage;
					int num2 = ((blockingAgentMessage2 is AsyncGet) ? 2 : ((blockingAgentMessage2 is Add) ? 1 : 0));
					if (num == num2)
					{
						T item;
						T item2;
						if (!(this is AsyncAdd))
						{
							if (this is Add)
							{
								Add add = (Add)this;
								Add add2 = (Add)blockingAgentMessage;
								item = add.item;
								item2 = add2.item;
								return HashCompare.GenericEqualityWithComparerIntrinsic<T>(comp, item, item2);
							}
							if (this is AsyncGet)
							{
								AsyncGet asyncGet = (AsyncGet)this;
								AsyncGet asyncGet2 = (AsyncGet)blockingAgentMessage;
								return HashCompare.GenericEqualityWithComparerIntrinsic<FSharpAsyncReplyChannel<T>>(comp, asyncGet.item, asyncGet2.item);
							}
						}
						AsyncAdd asyncAdd = (AsyncAdd)this;
						AsyncAdd asyncAdd2 = (AsyncAdd)blockingAgentMessage;
						item = asyncAdd.item1;
						item2 = asyncAdd2.item1;
						if (HashCompare.GenericEqualityWithComparerIntrinsic<T>(comp, item, item2))
						{
							return HashCompare.GenericEqualityWithComparerIntrinsic<FSharpAsyncReplyChannel<Unit>>(comp, asyncAdd.item2, asyncAdd2.item2);
						}
						return false;
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(BlockingAgentMessage<T> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is AsyncGet) ? 2 : ((this is Add) ? 1 : 0));
					int num2 = ((obj is AsyncGet) ? 2 : ((obj is Add) ? 1 : 0));
					if (num == num2)
					{
						T item;
						T item2;
						if (!(this is AsyncAdd))
						{
							if (this is Add)
							{
								Add add = (Add)this;
								Add add2 = (Add)obj;
								item = add.item;
								item2 = add2.item;
								return HashCompare.GenericEqualityERIntrinsic<T>(item, item2);
							}
							if (this is AsyncGet)
							{
								AsyncGet asyncGet = (AsyncGet)this;
								AsyncGet asyncGet2 = (AsyncGet)obj;
								return HashCompare.GenericEqualityERIntrinsic<FSharpAsyncReplyChannel<T>>(asyncGet.item, asyncGet2.item);
							}
						}
						AsyncAdd asyncAdd = (AsyncAdd)this;
						AsyncAdd asyncAdd2 = (AsyncAdd)obj;
						item = asyncAdd.item1;
						item2 = asyncAdd2.item1;
						if (HashCompare.GenericEqualityERIntrinsic<T>(item, item2))
						{
							return HashCompare.GenericEqualityERIntrinsic<FSharpAsyncReplyChannel<Unit>>(asyncAdd.item2, asyncAdd2.item2);
						}
						return false;
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is BlockingAgentMessage<T> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class BlockingQueueAgent<T> : IDisposable
	{
		[VolatileField]
		internal int count;

		internal FSharpMailboxProcessor<BlockingAgentMessage<T>> agent;

		public int Count => count;

		public BlockingQueueAgent(int maxLength)
		{
			count = 0;
			agent = FSharpMailboxProcessor<BlockingAgentMessage<BlockingAgentMessage<T>>>.Start((FSharpFunc<FSharpMailboxProcessor<BlockingAgentMessage<BlockingAgentMessage<T>>>, FSharpAsync<Unit>>)(object)new $BlockingQueueAgent.-ctor@26-1<T>(this, maxLength), (FSharpOption<CancellationToken>)null);
		}

		public FSharpAsync<Unit> AsyncAdd(T v, [OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)agent).PostAndAsyncReply<Unit>((FSharpFunc<FSharpAsyncReplyChannel<Unit>, BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)new $BlockingQueueAgent.AsyncAdd@78<T>(v), timeout);
		}

		public void Add(T v)
		{
			((FSharpMailboxProcessor<BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)agent).Post((BlockingAgentMessage<BlockingAgentMessage<T>>)(object)BlockingAgentMessage<T>.NewAdd(v));
		}

		public FSharpAsync<T> AsyncGet([OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)agent).PostAndAsyncReply<T>((FSharpFunc<FSharpAsyncReplyChannel<T>, BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)$BlockingQueueAgent.AsyncGet@90<T>.@_instance, timeout);
		}

		public T Get([OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)agent).PostAndReply<T>((FSharpFunc<FSharpAsyncReplyChannel<T>, BlockingAgentMessage<BlockingAgentMessage<T>>>)(object)$BlockingQueueAgent.Get@96<T>.@_instance, timeout);
		}

		virtual void IDisposable.Dispose()
		{
			((IDisposable)agent).Dispose();
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal abstract class CircularQueueMessage<T> : IEquatable<CircularQueueMessage<T>>, IStructuralEquatable
	{
		internal static class Tags
		{
			public const int AsyncEnqueue = 0;

			public const int Enqueue = 1;

			public const int AsyncDequeue = 2;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(CircularQueueMessage<>.AsyncEnqueue@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class AsyncEnqueue : CircularQueueMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T[] item1;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly int item2;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly int item3;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly FSharpAsyncReplyChannel<Unit> item4;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal T[] Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal int Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item2;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal int Item3
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item3;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal FSharpAsyncReplyChannel<Unit> Item4
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item4;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncEnqueue(T[] item1, int item2, int item3, FSharpAsyncReplyChannel<Unit> item4)
			{
				this.item1 = item1;
				this.item2 = item2;
				this.item3 = item3;
				this.item4 = item4;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(CircularQueueMessage<>.Enqueue@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class Enqueue : CircularQueueMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T[] item1;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly int item2;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly int item3;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal T[] Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal int Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item2;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal int Item3
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item3;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Enqueue(T[] item1, int item2, int item3)
			{
				this.item1 = item1;
				this.item2 = item2;
				this.item3 = item3;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(CircularQueueMessage<>.AsyncDequeue@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class AsyncDequeue : CircularQueueMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly int item1;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly FSharpAsyncReplyChannel<T[]> item2;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal int Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal FSharpAsyncReplyChannel<T[]> Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item2;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncDequeue(int item1, FSharpAsyncReplyChannel<T[]> item2)
			{
				this.item1 = item1;
				this.item2 = item2;
			}
		}

		[SpecialName]
		internal class AsyncEnqueue@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T[] Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public int Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item2;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public int Item3
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item3;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsyncReplyChannel<Unit> Item4
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item4;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncEnqueue@DebugTypeProxy(AsyncEnqueue obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Enqueue@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T[] Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public int Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item2;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public int Item3
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item3;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Enqueue@DebugTypeProxy(Enqueue obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class AsyncDequeue@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public int Item1
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item1;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsyncReplyChannel<T[]> Item2
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item2;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncDequeue@DebugTypeProxy(AsyncDequeue obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is AsyncDequeue) ? 2 : ((this is Enqueue) ? 1 : 0);
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsAsyncEnqueue
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncEnqueue;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsEnqueue
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Enqueue;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsAsyncDequeue
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncDequeue;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(CircularQueueMessage<>))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal CircularQueueMessage()
		{
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static CircularQueueMessage<T> NewAsyncEnqueue(T[] item1, int item2, int item3, FSharpAsyncReplyChannel<Unit> item4)
		{
			return new AsyncEnqueue(item1, item2, item3, item4);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static CircularQueueMessage<T> NewEnqueue(T[] item1, int item2, int item3)
		{
			return new Enqueue(item1, item2, item3);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static CircularQueueMessage<T> NewAsyncDequeue(int item1, FSharpAsyncReplyChannel<T[]> item2)
		{
			return new AsyncDequeue(item1, item2);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<CircularQueueMessage<CircularQueueMessage<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<CircularQueueMessage<T>, string>>((PrintfFormat<FSharpFunc<CircularQueueMessage<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<CircularQueueMessage<FSharpFunc<CircularQueueMessage<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((CircularQueueMessage<CircularQueueMessage<T>>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<CircularQueueMessage<CircularQueueMessage<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<CircularQueueMessage<T>, string>>((PrintfFormat<FSharpFunc<CircularQueueMessage<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<CircularQueueMessage<FSharpFunc<CircularQueueMessage<T>, string>>, string>, Unit, string, string, CircularQueueMessage<FSharpFunc<CircularQueueMessage<T>, string>>>("%+A"))).Invoke((CircularQueueMessage<CircularQueueMessage<T>>)(object)this);
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				return $CircularQueueAgent.GetHashCode$cont@13(comp, this, null);
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is CircularQueueMessage<T> circularQueueMessage)
				{
					int num = ((this is AsyncDequeue) ? 2 : ((this is Enqueue) ? 1 : 0));
					CircularQueueMessage<T> circularQueueMessage2 = circularQueueMessage;
					int num2 = ((circularQueueMessage2 is AsyncDequeue) ? 2 : ((circularQueueMessage2 is Enqueue) ? 1 : 0));
					if (num == num2)
					{
						return $CircularQueueAgent.Equals$cont@13(this, circularQueueMessage, comp, null);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(CircularQueueMessage<T> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is AsyncDequeue) ? 2 : ((this is Enqueue) ? 1 : 0));
					int num2 = ((obj is AsyncDequeue) ? 2 : ((obj is Enqueue) ? 1 : 0));
					if (num == num2)
					{
						return $CircularQueueAgent.Equals$cont@13-1(this, obj, null);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is CircularQueueMessage<T> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class CircularQueueAgent<T>
	{
		[VolatileField]
		internal int count;

		internal FSharpMailboxProcessor<CircularQueueMessage<T>> agent;

		public int Count => count;

		public CircularQueueAgent(int maxLength)
		{
			count = 0;
			agent = FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>.Start((FSharpFunc<FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>, FSharpAsync<Unit>>)(object)new $CircularQueueAgent.-ctor@26-2<T>(this, maxLength), (FSharpOption<CancellationToken>)null);
		}

		public FSharpAsync<Unit> AsyncEnqueue(T[] value, int offset, int count, [OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).PostAndAsyncReply<Unit>((FSharpFunc<FSharpAsyncReplyChannel<Unit>, CircularQueueMessage<CircularQueueMessage<T>>>)(object)new $CircularQueueAgent.AsyncEnqueue@80<T>(value, offset, count), timeout);
		}

		public FSharpAsync<Unit> AsyncEnqueue(ArraySegment<T> segment, [OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).PostAndAsyncReply<Unit>((FSharpFunc<FSharpAsyncReplyChannel<Unit>, CircularQueueMessage<CircularQueueMessage<T>>>)(object)new $CircularQueueAgent.AsyncEnqueue@86-1<T>(segment), timeout);
		}

		public FSharpAsync<Unit> AsyncEnqueue(T[] value, [OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).PostAndAsyncReply<Unit>((FSharpFunc<FSharpAsyncReplyChannel<Unit>, CircularQueueMessage<CircularQueueMessage<T>>>)(object)new $CircularQueueAgent.AsyncEnqueue@92-2<T>(value), timeout);
		}

		public void Enqueue(T[] value, int offset, int count)
		{
			((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).Post((CircularQueueMessage<CircularQueueMessage<T>>)(object)CircularQueueMessage<T>.NewEnqueue(value, offset, count));
		}

		public void Enqueue(ArraySegment<T> segment)
		{
			((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).Post((CircularQueueMessage<CircularQueueMessage<T>>)(object)CircularQueueMessage<T>.NewEnqueue(segment.Array, segment.Offset, segment.Count));
		}

		public void Enqueue(T[] value)
		{
			((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).Post((CircularQueueMessage<CircularQueueMessage<T>>)(object)CircularQueueMessage<T>.NewEnqueue(value, 0, value.Length));
		}

		public FSharpAsync<T[]> AsyncDequeue(int count, [OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).PostAndAsyncReply<T[]>((FSharpFunc<FSharpAsyncReplyChannel<T[]>, CircularQueueMessage<CircularQueueMessage<T>>>)(object)new $CircularQueueAgent.AsyncDequeue@115<T>(count), timeout);
		}

		public T[] Dequeue(int count, [OptionalArgument] FSharpOption<int> timeout)
		{
			return ((FSharpMailboxProcessor<CircularQueueMessage<CircularQueueMessage<T>>>)(object)agent).PostAndReply<T[]>((FSharpFunc<FSharpAsyncReplyChannel<T[]>, CircularQueueMessage<CircularQueueMessage<T>>>)(object)new $CircularQueueAgent.Dequeue@121<T>(count), timeout);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ConcurrentSetAgent<T>
	{
		internal FSharpMailboxProcessor<Tuple<object, FSharpAsyncReplyChannel<bool>>> agent;

		public ConcurrentSetAgent()
		{
			agent = FSharpMailboxProcessor<Tuple<object, FSharpAsyncReplyChannel<bool>>>.Start((FSharpFunc<FSharpMailboxProcessor<Tuple<object, FSharpAsyncReplyChannel<bool>>>, FSharpAsync<Unit>>)$ConcurrentSetAgent.-ctor@16-3.@_instance, (FSharpOption<CancellationToken>)null);
		}

		public FSharpAsync<bool> AsyncAdd(object v)
		{
			return agent.PostAndAsyncReply<bool>((FSharpFunc<FSharpAsyncReplyChannel<bool>, Tuple<object, FSharpAsyncReplyChannel<bool>>>)new $ConcurrentSetAgent.AsyncAdd@25-1(v), (FSharpOption<int>)null);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class SlidingWindowAgent<T>
	{
		internal FSharpEvent<T[]> windowEvent;

		internal FSharpMailboxProcessor<T> agent;

		[CLIEvent]
		public event FSharpHandler<T[]> WindowProduced
		{
			add
			{
				((IDelegateEvent<FSharpHandler<FSharpHandler<T[]>[]>>)(object)((FSharpEvent<T[][]>)(object)windowEvent).Publish).AddHandler((FSharpHandler<FSharpHandler<T[]>[]>)(object)value);
			}
			remove
			{
				((IDelegateEvent<FSharpHandler<FSharpHandler<T[]>[]>>)(object)((FSharpEvent<T[][]>)(object)windowEvent).Publish).RemoveHandler((FSharpHandler<FSharpHandler<T[]>[]>)(object)value);
			}
		}

		public SlidingWindowAgent(int windowSize, [OptionalArgument] FSharpOption<CancellationToken> cancelToken)
		{
			windowEvent = (FSharpEvent<T[]>)(object)new FSharpEvent<T[][]>();
			agent = FSharpMailboxProcessor<T>.Start((FSharpFunc<FSharpMailboxProcessor<T>, FSharpAsync<Unit>>)new $SlidingWindowAgent.-ctor@22-9<T>(this, windowSize), cancelToken);
		}

		public void Enqueue(T v)
		{
			agent.Post(v);
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public abstract class ObservableUpdate<T> : IEquatable<ObservableUpdate<T>>, IStructuralEquatable
	{
		public static class Tags
		{
			public const int Next = 0;

			public const int Error = 1;

			public const int Completed = 2;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(ObservableUpdate<>.Next@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class Next : ObservableUpdate<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Next(T item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(ObservableUpdate<>.Error@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class Error : ObservableUpdate<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly Exception item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Exception Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Error(Exception item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(ObservableUpdate<>._Completed@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class _Completed : ObservableUpdate<T>
		{
			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal _Completed()
			{
			}
		}

		[SpecialName]
		internal class Next@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Next@DebugTypeProxy(Next obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Error@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Exception Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Error@DebugTypeProxy(Error obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class _Completed@DebugTypeProxy
		{
			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public _Completed@DebugTypeProxy(_Completed obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is _Completed) ? 2 : ((this is Error) ? 1 : 0);
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsNext
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Next;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsError
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is Error;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public static ObservableUpdate<T> Completed
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			get
			{
				return _unique_Completed;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsCompleted
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is _Completed;
			}
		}

		static ObservableUpdate()
		{
			_unique_Completed = new _Completed();
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(ObservableUpdate<>))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal ObservableUpdate()
		{
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static ObservableUpdate<T> NewNext(T item)
		{
			return new Next(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static ObservableUpdate<T> NewError(Exception item)
		{
			return new Error(item);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<ObservableUpdate<ObservableUpdate<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ObservableUpdate<T>, string>>((PrintfFormat<FSharpFunc<ObservableUpdate<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ObservableUpdate<FSharpFunc<ObservableUpdate<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((ObservableUpdate<ObservableUpdate<T>>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<ObservableUpdate<ObservableUpdate<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<ObservableUpdate<T>, string>>((PrintfFormat<FSharpFunc<ObservableUpdate<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<ObservableUpdate<FSharpFunc<ObservableUpdate<T>, string>>, string>, Unit, string, string, ObservableUpdate<FSharpFunc<ObservableUpdate<T>, string>>>("%+A"))).Invoke((ObservableUpdate<ObservableUpdate<T>>)(object)this);
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				if (!(this is Next))
				{
					if (this is Error)
					{
						Error error = (Error)this;
						num = 1;
						return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Exception>(comp, error.item) + ((num << 6) + (num >> 2)));
					}
					return (this is _Completed) ? 2 : ((this is Error) ? 1 : 0);
				}
				Next next = (Next)this;
				num = 0;
				T item = next.item;
				return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<T>(comp, item) + ((num << 6) + (num >> 2)));
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is ObservableUpdate<T> observableUpdate)
				{
					int num = ((this is _Completed) ? 2 : ((this is Error) ? 1 : 0));
					ObservableUpdate<T> observableUpdate2 = observableUpdate;
					int num2 = ((observableUpdate2 is _Completed) ? 2 : ((observableUpdate2 is Error) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Next))
						{
							if (this is Error)
							{
								Error error = (Error)this;
								Error error2 = (Error)observableUpdate;
								return HashCompare.GenericEqualityWithComparerIntrinsic<Exception>(comp, error.item, error2.item);
							}
							return true;
						}
						Next next = (Next)this;
						Next next2 = (Next)observableUpdate;
						T item = next.item;
						T item2 = next2.item;
						return HashCompare.GenericEqualityWithComparerIntrinsic<T>(comp, item, item2);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(ObservableUpdate<T> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int num = ((this is _Completed) ? 2 : ((this is Error) ? 1 : 0));
					int num2 = ((obj is _Completed) ? 2 : ((obj is Error) ? 1 : 0));
					if (num == num2)
					{
						if (!(this is Next))
						{
							if (this is Error)
							{
								Error error = (Error)this;
								Error error2 = (Error)obj;
								return HashCompare.GenericEqualityERIntrinsic<Exception>(error.item, error2.item);
							}
							return true;
						}
						Next next = (Next)this;
						Next next2 = (Next)obj;
						T item = next.item;
						T item2 = next2.item;
						return HashCompare.GenericEqualityERIntrinsic<T>(item, item2);
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is ObservableUpdate<T> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ObservableExtensions
	{
		internal ObservableExtensions()
		{
		}

		public static IObservable<TItem> ToObservable<TItem>(this IEnumerable<TItem> source)
		{
			return Observable.ofSeq(source);
		}

		public static IDisposable Subscribe<TSource>(this IObservable<TSource> source, Action<TSource> action)
		{
			return CommonExtensions.SubscribeToObservable<TSource>(source, (FSharpFunc<TSource, Unit>)new $Observable.Subscribe@388<TSource>(action));
		}

		public static IObservable<TSource> Where<TSource>(this IObservable<TSource> source, Func<TSource, bool> predicate)
		{
			return ObservableModule.Filter<TSource>((FSharpFunc<TSource, bool>)new $Observable.Where@392<TSource>(predicate), source);
		}

		public static IObservable<TResult> Select<TSource, TResult>(this IObservable<TSource> source, Func<TSource, TResult> selector)
		{
			return ObservableModule.Map<TSource, TResult>((FSharpFunc<TSource, TResult>)new $Observable.Select@396<TSource, TResult>(selector), source);
		}

		public static IObservable<TResult> Select<TSource, TResult>(this IObservable<TSource> source, Func<TSource, int, TResult> selector)
		{
			return Observable.mapi<TSource, TResult>((FSharpFunc<int, FSharpFunc<TSource, TResult>>)(object)new $Observable.Select@400-1<TSource, TResult>(selector), source);
		}

		public static IObservable<TResult> SelectMany<TSource, TCollection, TResult>(this IObservable<TSource> source, Func<TSource, IEnumerable<TCollection>> collectionSelector, Func<TSource, TCollection, TResult> resultSelector)
		{
			return new $Observable.SelectMany@407<TSource, TCollection, TResult>(source, collectionSelector, resultSelector);
		}

		public static IObservable<TSource> TakeWhile<TSource>(this IObservable<TSource> source, Func<TSource, bool> f)
		{
			return Observable.takeWhile(new $Observable.TakeWhile@421<TSource>(f), source);
		}

		public static IObservable<TSource> Merge<TSource>(this IObservable<TSource> source, IEnumerable<IObservable<TSource>> sources)
		{
			object @_instance;
			@_instance = $Observable.merge@426-1.@_instance;
			FSharpList<IObservable<TSource>> val = SeqModule.ToList<IObservable<TSource>>(sources);
			return (($Observable.merge@426-1)@_instance).DirectInvoke<TSource, IObservable<TSource>>().Invoke(source).Invoke(val);
		}

		public static IObservable<TSource> Merge<TSource>(this IObservable<TSource> source, params IObservable<TSource>[] sources)
		{
			return Merge(source, SeqModule.OfArray<IObservable<TSource>>(sources));
		}

		public static IObservable<TAccumulate> Scan<TSource, TAccumulate>(this IObservable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> f)
		{
			return ObservableModule.Scan<TAccumulate, TSource>((FSharpFunc<TAccumulate, FSharpFunc<TSource, TAccumulate>>)(object)new $Observable.Scan@439<TSource, TAccumulate>(f), seed, source);
		}

		public static IObservable<TResult> CombineLatest<TLeft, TRight, TResult>(this IObservable<TLeft> left, IObservable<TRight> right, Func<TLeft, TRight, TResult> selector)
		{
			return ObservableModule.Map<Tuple<TLeft, TRight>, TResult>((FSharpFunc<Tuple<TLeft, TRight>, TResult>)new $Observable.CombineLatest@444<TLeft, TRight, TResult>(selector), Observable.combineLatest(left, right));
		}

		public static IObservable<TResult> Zip<TLeft, TRight, TResult>(this IObservable<TLeft> left, IObservable<TRight> right, Func<TLeft, TRight, TResult> selector)
		{
			return ObservableModule.Map<Tuple<TLeft, TRight>, TResult>((FSharpFunc<Tuple<TLeft, TRight>, TResult>)new $Observable.Zip@449<TLeft, TRight, TResult>(selector), Observable.zip(left, right));
		}

		public static IObservable<TSource> Delay<TSource>(this IObservable<TSource> source, int milliseconds)
		{
			return Observable.delay(milliseconds, source);
		}

		public static IObservable<IEnumerable<TSource>> BufferWithTimeOrCount<TSource>(this IObservable<TSource> source, TimeSpan timeSpan, int count)
		{
			return Observable.bufferWithTimeOrCount(timeSpan, count, source);
		}

		public static IObservable<TSource> Throttle<TSource>(this IObservable<TSource> source, TimeSpan dueTime)
		{
			return Observable.throttle((int)dueTime.TotalMilliseconds, source);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal class CircularBuffer<T>
	{
		internal int bufferSize;

		internal T[] buffer;

		internal int index;

		internal int total;

		public CircularBuffer(int bufferSize)
		{
			this.bufferSize = bufferSize;
			buffer = ArrayModule.ZeroCreate<T>(this.bufferSize);
			index = 0;
			total = 0;
		}

		internal void Add(T value)
		{
			if (bufferSize > 0)
			{
				buffer[index] = value;
				index = (index + 1) % bufferSize;
				int num = total + 1;
				int num2 = bufferSize;
				total = ((num >= num2) ? num2 : num);
			}
		}

		internal void Iter(FSharpFunc<T, Unit> f)
		{
			int num = ((total == bufferSize) ? index : 0);
			int num2 = 0;
			int num3 = total - 1;
			if (num3 >= num2)
			{
				do
				{
					f.Invoke(buffer[(num + num2) % bufferSize]);
					num2++;
				}
				while (num2 != num3 + 1);
			}
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	internal class BufferAgentMessage<T> : IEquatable<BufferAgentMessage<T>>, IStructuralEquatable
	{
		internal static class Tags
		{
			public const int Add = 0;

			public const int Remove = 1;

			public const int Next = 2;

			public const int Completed = 3;

			public const int Error = 4;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BufferAgentMessage<>.Add@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class Add : BufferAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly IObserver<T> item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal IObserver<T> Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Add(IObserver<T> item)
				: base(0)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BufferAgentMessage<>.Remove@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class Remove : BufferAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly IObserver<T> item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal IObserver<T> Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Remove(IObserver<T> item)
				: base(1)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BufferAgentMessage<>.Next@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class Next : BufferAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Next(T item)
				: base(2)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(BufferAgentMessage<>.Error@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		internal class Error : BufferAgentMessage<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly Exception item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Exception Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal Error(Exception item)
				: base(4)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class Add@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public IObserver<T> Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Add@DebugTypeProxy(Add obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Remove@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public IObserver<T> Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Remove@DebugTypeProxy(Remove obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Next@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Next@DebugTypeProxy(Next obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class Error@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Exception Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Error@DebugTypeProxy(Error obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal int Tag
		{
			[DebuggerNonUserCode]
			get;
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsAdd
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 0;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsRemove
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 1;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsNext
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 2;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static BufferAgentMessage<T> Completed
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			get
			{
				return _unique_Completed;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsCompleted
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 3;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal bool IsError
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return Tag == 4;
			}
		}

		static BufferAgentMessage()
		{
			_unique_Completed = new BufferAgentMessage<T>(3);
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BufferAgentMessage<>))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal BufferAgentMessage(int _tag)
		{
			this._tag = _tag;
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BufferAgentMessage<T> NewAdd(IObserver<T> item)
		{
			return new Add(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BufferAgentMessage<T> NewRemove(IObserver<T> item)
		{
			return new Remove(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BufferAgentMessage<T> NewNext(T item)
		{
			return new Next(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BufferAgentMessage<T> NewError(Exception item)
		{
			return new Error(item);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<BufferAgentMessage<BufferAgentMessage<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<BufferAgentMessage<T>, string>>((PrintfFormat<FSharpFunc<BufferAgentMessage<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<BufferAgentMessage<FSharpFunc<BufferAgentMessage<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((BufferAgentMessage<BufferAgentMessage<T>>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<BufferAgentMessage<BufferAgentMessage<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<BufferAgentMessage<T>, string>>((PrintfFormat<FSharpFunc<BufferAgentMessage<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<BufferAgentMessage<FSharpFunc<BufferAgentMessage<T>, string>>, string>, Unit, string, string, BufferAgentMessage<FSharpFunc<BufferAgentMessage<T>, string>>>("%+A"))).Invoke((BufferAgentMessage<BufferAgentMessage<T>>)(object)this);
		}

		[CompilerGenerated]
		public virtual sealed int GetHashCode(IEqualityComparer comp)
		{
			if (this != null)
			{
				int num = 0;
				switch (Tag)
				{
				case 0:
				{
					Add add = (Add)this;
					num = 0;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IObserver<T>>(comp, add.item) + ((num << 6) + (num >> 2)));
				}
				case 1:
				{
					Remove remove = (Remove)this;
					num = 1;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<IObserver<T>>(comp, remove.item) + ((num << 6) + (num >> 2)));
				}
				case 2:
				{
					Next next = (Next)this;
					num = 2;
					T item = next.item;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<T>(comp, item) + ((num << 6) + (num >> 2)));
				}
				case 4:
				{
					Error error = (Error)this;
					num = 4;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Exception>(comp, error.item) + ((num << 6) + (num >> 2)));
				}
				default:
					return _tag;
				}
			}
			return 0;
		}

		[CompilerGenerated]
		public sealed override int GetHashCode()
		{
			return GetHashCode(LanguagePrimitives.GenericEqualityComparer);
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(object obj, IEqualityComparer comp)
		{
			if (this != null)
			{
				if (obj is BufferAgentMessage<T> bufferAgentMessage)
				{
					int tag = _tag;
					int tag2 = bufferAgentMessage._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						case 0:
						{
							Add add = (Add)this;
							Add add2 = (Add)bufferAgentMessage;
							return HashCompare.GenericEqualityWithComparerIntrinsic<IObserver<T>>(comp, add.item, add2.item);
						}
						case 1:
						{
							Remove remove = (Remove)this;
							Remove remove2 = (Remove)bufferAgentMessage;
							return HashCompare.GenericEqualityWithComparerIntrinsic<IObserver<T>>(comp, remove.item, remove2.item);
						}
						case 2:
						{
							Next next = (Next)this;
							Next next2 = (Next)bufferAgentMessage;
							T item = next.item;
							T item2 = next2.item;
							return HashCompare.GenericEqualityWithComparerIntrinsic<T>(comp, item, item2);
						}
						case 4:
						{
							Error error = (Error)this;
							Error error2 = (Error)bufferAgentMessage;
							return HashCompare.GenericEqualityWithComparerIntrinsic<Exception>(comp, error.item, error2.item);
						}
						default:
							return true;
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public virtual sealed bool Equals(BufferAgentMessage<T> obj)
		{
			if (this != null)
			{
				if (obj != null)
				{
					int tag = _tag;
					int tag2 = obj._tag;
					if (tag == tag2)
					{
						switch (Tag)
						{
						case 0:
						{
							Add add = (Add)this;
							Add add2 = (Add)obj;
							return HashCompare.GenericEqualityERIntrinsic<IObserver<T>>(add.item, add2.item);
						}
						case 1:
						{
							Remove remove = (Remove)this;
							Remove remove2 = (Remove)obj;
							return HashCompare.GenericEqualityERIntrinsic<IObserver<T>>(remove.item, remove2.item);
						}
						case 2:
						{
							Next next = (Next)this;
							Next next2 = (Next)obj;
							T item = next.item;
							T item2 = next2.item;
							return HashCompare.GenericEqualityERIntrinsic<T>(item, item2);
						}
						case 4:
						{
							Error error = (Error)this;
							Error error2 = (Error)obj;
							return HashCompare.GenericEqualityERIntrinsic<Exception>(error.item, error2.item);
						}
						default:
							return true;
						}
					}
					return false;
				}
				return false;
			}
			return obj == null;
		}

		[CompilerGenerated]
		public sealed override bool Equals(object obj)
		{
			if (obj is BufferAgentMessage<T> obj2)
			{
				return Equals(obj2);
			}
			return false;
		}
	}
	[Serializable]
	[Interface]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public interface ISubject<TIn, TOut> : IObservable<TOut>, IObserver<TIn>
	{
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class ReplaySubject<T> : ISubject<T, T>
	{
		internal FSharpMailboxProcessor<BufferAgentMessage<T>> agent;

		public ReplaySubject(int bufferSize)
		{
			agent = BufferAgent.start<T>((0 < bufferSize) ? bufferSize : 0);
		}

		public void OnNext(T value)
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.NewNext(value));
		}

		public void OnError(Exception error)
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.NewError(error));
		}

		public void OnCompleted()
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.Completed);
		}

		public IDisposable Subscribe(IObserver<T> observer)
		{
			return subscribe(observer);
		}

		virtual void IObserver<T>.OnNext(T value)
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.NewNext(value));
		}

		virtual void IObserver<T>.OnError(Exception error)
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.NewError(error));
		}

		virtual void IObserver<T>.OnCompleted()
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.Completed);
		}

		virtual IDisposable IObservable<T>.Subscribe(IObserver<T> observer)
		{
			return subscribe(observer);
		}

		[CompilerGenerated]
		internal IDisposable subscribe(IObserver<T> observer)
		{
			((FSharpMailboxProcessor<BufferAgentMessage<BufferAgentMessage<T>>>)(object)agent).Post((BufferAgentMessage<BufferAgentMessage<T>>)(object)BufferAgentMessage<T>.NewAdd(observer));
			return new $Observable.clo@527-1<T>(this, observer);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Subject<T> : ReplaySubject<T>
	{
		public Subject()
			: base(0)
		{
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[NoEquality]
	[NoComparison]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public abstract class AsyncResult<T>
	{
		public static class Tags
		{
			public const int AsyncOk = 0;

			public const int AsyncException = 1;

			public const int AsyncCanceled = 2;
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(AsyncResult<>.AsyncOk@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class AsyncOk : AsyncResult<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly T item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncOk(T item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(AsyncResult<>.AsyncException@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class AsyncException : AsyncResult<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly Exception item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Exception Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncException(Exception item)
			{
				this.item = item;
			}
		}

		[Serializable]
		[SpecialName]
		[DebuggerTypeProxy(typeof(AsyncResult<>.AsyncCanceled@DebugTypeProxy))]
		[DebuggerDisplay("{__DebugDisplay(),nq}")]
		public class AsyncCanceled : AsyncResult<T>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readonly OperationCanceledException item;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public OperationCanceledException Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal AsyncCanceled(OperationCanceledException item)
			{
				this.item = item;
			}
		}

		[SpecialName]
		internal class AsyncOk@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public T Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncOk@DebugTypeProxy(AsyncOk obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class AsyncException@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Exception Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncException@DebugTypeProxy(AsyncException obj)
			{
				_obj = obj;
			}
		}

		[SpecialName]
		internal class AsyncCanceled@DebugTypeProxy
		{
			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public OperationCanceledException Item
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return _obj.item;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public AsyncCanceled@DebugTypeProxy(AsyncCanceled obj)
			{
				_obj = obj;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return (this is AsyncCanceled) ? 2 : ((this is AsyncException) ? 1 : 0);
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsAsyncOk
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncOk;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsAsyncException
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncException;
			}
		}

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public bool IsAsyncCanceled
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return this is AsyncCanceled;
			}
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncResult<>))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal AsyncResult()
		{
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static AsyncResult<T> NewAsyncOk(T item)
		{
			return new AsyncOk(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static AsyncResult<T> NewAsyncException(Exception item)
		{
			return new AsyncException(item);
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static AsyncResult<T> NewAsyncCanceled(OperationCanceledException item)
		{
			return new AsyncCanceled(item);
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<AsyncResult<AsyncResult<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<AsyncResult<T>, string>>((PrintfFormat<FSharpFunc<AsyncResult<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((AsyncResult<AsyncResult<T>>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<AsyncResult<AsyncResult<T>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<AsyncResult<T>, string>>((PrintfFormat<FSharpFunc<AsyncResult<T>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, string>>, string>, Unit, string, string, AsyncResult<FSharpFunc<AsyncResult<T>, string>>>("%+A"))).Invoke((AsyncResult<AsyncResult<T>>)(object)this);
		}

		public static FSharpAsync<T> Commit(AsyncResult<T> res)
		{
			return FSharpAsync.FromContinuations<T>((FSharpFunc<Tuple<FSharpFunc<T, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncOperations.Commit@18<T>(res));
		}
	}
	[Serializable]
	[Sealed]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public sealed class AsyncResultCell<T>
	{
		internal FSharpOption<AsyncResult<T>> result;

		internal FSharpList<FSharpFunc<AsyncResult<T>, Unit>> savedConts;

		internal object syncRoot;

		internal FSharpAsync<AsyncResult<T>> AsyncPrimitiveResult => FSharpAsync.FromContinuations<AsyncResult<T>>((FSharpFunc<Tuple<FSharpFunc<AsyncResult<T>, Unit>, FSharpFunc<Exception, Unit>, FSharpFunc<OperationCanceledException, Unit>>, Unit>)new $AsyncOperations.get_AsyncPrimitiveResult@63<T>(this));

		public FSharpAsync<T> AsyncResult => ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<T>((FSharpFunc<Unit, FSharpAsync<T>>)new $AsyncOperations.get_AsyncResult@81<T>(this));

		public AsyncResultCell()
		{
			result = null;
			savedConts = FSharpList<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, Unit>>, Unit>>.Empty;
			syncRoot = new object();
		}

		public void RegisterResult(AsyncResult<T> res, [OptionalArgument] FSharpOption<bool> reuseThread)
		{
			FSharpList<FSharpFunc<AsyncResult<T>, Unit>> val;
			lock (syncRoot)
			{
				val = $AsyncOperations.action@1-2(this, res, null);
			}
			FSharpList<FSharpFunc<AsyncResult<T>, Unit>> val2 = val;
			bool flag = Operators.DefaultArg<bool>(reuseThread, false);
			if (((FSharpList<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, Unit>>, Unit>>)(object)val2).TailOrNull == null)
			{
				return;
			}
			val = val2;
			if (((FSharpList<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, Unit>>, Unit>>)(object)((FSharpList<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, Unit>>, Unit>>)(object)val).TailOrNull).TailOrNull == null)
			{
				if (flag)
				{
					FSharpFunc<AsyncResult<T>, Unit> headOrDefault = ((FSharpList<FSharpFunc<AsyncResult<FSharpFunc<AsyncResult<T>, Unit>>, Unit>>)(object)val).HeadOrDefault;
					((FSharpFunc<AsyncResult<AsyncResult<T>>, Unit>)(object)headOrDefault).Invoke((AsyncResult<AsyncResult<T>>)(object)res);
					return;
				}
				FSharpList<FSharpFunc<AsyncResult<T>, Unit>> val3 = val2;
			}
			else
			{
				FSharpList<FSharpFunc<AsyncResult<T>, Unit>> val3 = val2;
			}
			SynchronizationContext current = SynchronizationContext.Current;
			ListModule.Iterate<FSharpFunc<AsyncResult<T>, Unit>>((FSharpFunc<FSharpFunc<AsyncResult<T>, Unit>, Unit>)((current != null) ? ((object)new $AsyncOperations.RegisterResult@58-2<T>(res, current)) : ((object)new $AsyncOperations.RegisterResult@57<T>(res))), val2);
		}
	}
	[Serializable]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class AsyncWorker<T>
	{
		internal FSharpAsync<T> p;

		internal CancellationTokenSource cts;

		internal SynchronizationContext syncContext;

		internal FSharpEvent<T> completed;

		internal FSharpEvent<Exception> error;

		internal FSharpEvent<OperationCanceledException> canceled;

		internal FSharpEvent<int> progress;

		public IEvent<FSharpHandler<int>, int> ProgressChanged => progress.Publish;

		public IEvent<FSharpHandler<T>, T> Completed => completed.Publish;

		public IEvent<FSharpHandler<OperationCanceledException>, OperationCanceledException> Canceled => canceled.Publish;

		public IEvent<FSharpHandler<Exception>, Exception> Error => error.Publish;

		public AsyncWorker(FSharpAsync<T> p, [OptionalArgument] FSharpOption<CancellationToken> cancellationToken)
		{
			this.p = p;
			CancellationTokenSource cancellationTokenSource;
			if (cancellationToken == null)
			{
				cancellationTokenSource = new CancellationTokenSource();
			}
			else
			{
				CancellationToken value = cancellationToken.Value;
				CancellationTokenSource cancellationTokenSource2 = new CancellationTokenSource();
				cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(value, cancellationTokenSource2.Token);
			}
			cts = cancellationTokenSource;
			syncContext = null;
			completed = new FSharpEvent<T>();
			error = new FSharpEvent<Exception>();
			canceled = new FSharpEvent<OperationCanceledException>();
			progress = new FSharpEvent<int>();
		}

		public void ReportProgress(int progressPercentage)
		{
			raiseEventOnGuiThread(progress, progressPercentage);
		}

		public bool RunAsync()
		{
			if (syncContext != null)
			{
				throw new InvalidOperationException("The operation is already in progress. RunAsync can't be called twice");
			}
			SynchronizationContext current = SynchronizationContext.Current;
			syncContext = ((current != null) ? current : new SynchronizationContext());
			return ThreadPool.QueueUserWorkItem(new $AsyncWorker.RunAsync@55<T>(this).Invoke);
		}

		public void CancelAsync([OptionalArgument] FSharpOption<string> message)
		{
			cts.Cancel();
		}

		[CompilationArgumentCounts(new int[] { 1, 1 })]
		[CompilerGenerated]
		internal void raiseEventOnGuiThread<b>(FSharpEvent<b> @event, b args)
		{
			syncContext.Post(new $AsyncWorker.clo@27-2<b>(@event, args).Invoke, null);
		}

		[CompilerGenerated]
		internal void doWork()
		{
			FSharpAsync.StartWithContinuations<T>(p, (FSharpFunc<T, Unit>)new $AsyncWorker.clo@38-3<T>(this), (FSharpFunc<Exception, Unit>)new $AsyncWorker.clo@39-4<T>(this), (FSharpFunc<OperationCanceledException, Unit>)new $AsyncWorker.clo@40-5<T>(this), FSharpOption<CancellationToken>.Some(cts.Token));
		}
	}
	[Serializable]
	[Sealed]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public sealed class AsyncStreamReader : IDisposable
	{
		internal static int defaultBufferSize;

		internal static int minBufferSize;

		internal Stream stream@47;

		internal Decoder decoder;

		internal Encoding encoding@49;

		internal int _maxCharsPerBuffer;

		internal byte[] byteBuffer;

		internal char[] charBuffer;

		internal byte[] preamble;

		internal int charPos;

		internal int charLen;

		internal int byteLen;

		internal int bytePos;

		internal bool _detectEncoding;

		internal bool _checkPreamble;

		internal static int init@16;

		public Encoding CurrentEncoding => encoding@49;

		public Stream BaseStream => stream@47;

		public FSharpAsync<bool> EndOfStream => ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<bool>((FSharpFunc<Unit, FSharpAsync<bool>>)new $AsyncStreamReader.get_EndOfStream@290(this));

		public AsyncStreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize)
		{
			if (HashCompare.GenericEqualityIntrinsic<Stream>(stream, (Stream)null) || HashCompare.GenericEqualityIntrinsic<Encoding>(encoding, (Encoding)null))
			{
				throw new ArgumentNullException((!HashCompare.GenericEqualityIntrinsic<Stream>(stream, (Stream)null)) ? "encoding" : "stream");
			}
			if (!stream.CanRead)
			{
				throw new ArgumentException("stream not readable", "stream");
			}
			if (stream is FileStream fileStream && !fileStream.IsAsync)
			{
				FileStream fileStream2 = fileStream;
				throw new ArgumentException("FileStream not asynchronous. AsyncStreamReader should only be used on FileStream if the IsAsync property returns true. Consider passing 'true' for the async flag in the FileStream constructor", "stream");
			}
			if (bufferSize <= 0)
			{
				ArgumentOutOfRangeException ex = new ArgumentOutOfRangeException("bufferSize");
				throw ex;
			}
			stream@47 = stream;
			decoder = encoding.GetDecoder();
			encoding@49 = encoding;
			if (init@16 < 6)
			{
				IntrinsicFunctions.FailStaticInit();
			}
			int num = minBufferSize;
			int num2 = ((bufferSize >= num) ? bufferSize : num);
			_maxCharsPerBuffer = encoding@49.GetMaxCharCount(num2);
			byteBuffer = ArrayModule.ZeroCreate<byte>(num2);
			charBuffer = ArrayModule.ZeroCreate<char>(_maxCharsPerBuffer);
			preamble = encoding@49.GetPreamble();
			charPos = 0;
			charLen = 0;
			byteLen = 0;
			bytePos = 0;
			_detectEncoding = detectEncodingFromByteOrderMarks;
			_checkPreamble = preamble.Length > 0;
		}

		public AsyncStreamReader(Stream stream)
			: this(stream, detectEncodingFromByteOrderMarks: true)
		{
		}

		public AsyncStreamReader(Stream stream, bool detectEncodingFromByteOrderMarks)
		{
			Encoding uTF = Encoding.UTF8;
			if (init@16 < 4)
			{
				IntrinsicFunctions.FailStaticInit();
			}
			this..ctor(stream, uTF, detectEncodingFromByteOrderMarks, defaultBufferSize);
		}

		public AsyncStreamReader(Stream stream, Encoding encoding)
		{
			if (init@16 < 4)
			{
				IntrinsicFunctions.FailStaticInit();
			}
			this..ctor(stream, encoding, detectEncodingFromByteOrderMarks: true, defaultBufferSize);
		}

		public AsyncStreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks)
		{
			if (init@16 < 4)
			{
				IntrinsicFunctions.FailStaticInit();
			}
			this..ctor(stream, encoding, detectEncodingFromByteOrderMarks, defaultBufferSize);
		}

		public void Close()
		{
			cleanup();
		}

		public void DiscardBufferedData()
		{
			byteLen = 0;
			charLen = 0;
			charPos = 0;
			decoder = encoding@49.GetDecoder();
		}

		public FSharpAsync<int> Peek()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<int>((FSharpFunc<Unit, FSharpAsync<int>>)new $AsyncStreamReader.Peek@302(this));
		}

		public FSharpAsync<char> Read()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<char>((FSharpFunc<Unit, FSharpAsync<char>>)new $AsyncStreamReader.Read@307(this));
		}

		public FSharpAsync<int> ReadExactly(char[] buffer, int index, int count)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<int>((FSharpFunc<Unit, FSharpAsync<int>>)new $AsyncStreamReader.ReadExactly@326(this, buffer, index, count));
		}

		public FSharpAsync<int> Read(char[] buffer, int index, int count)
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<int>((FSharpFunc<Unit, FSharpAsync<int>>)new $AsyncStreamReader.Read@339-9(this, buffer, index, count));
		}

		public FSharpAsync<string> ReadToEnd()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<string>((FSharpFunc<Unit, FSharpAsync<string>>)new $AsyncStreamReader.ReadToEnd@367(this));
		}

		public FSharpAsync<string> ReadLine()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<string>((FSharpFunc<Unit, FSharpAsync<string>>)new $AsyncStreamReader.ReadLine@394(this));
		}

		virtual void IDisposable.Dispose()
		{
			cleanup();
		}

		[CompilerGenerated]
		internal a readerClosed<a>()
		{
			throw new InvalidOperationException("reader closed");
		}

		[CompilerGenerated]
		internal void compressBuffer(int n)
		{
			Buffer.BlockCopy(byteBuffer, n, byteBuffer, 0, byteLen - n);
			byteLen -= n;
		}

		[CompilerGenerated]
		internal bool isPreamble()
		{
			if (!_checkPreamble)
			{
				return _checkPreamble;
			}
			int num = ((byteLen < preamble.Length) ? (byteLen - bytePos) : (preamble.Length - bytePos));
			bool flag = false;
			int num2 = 0;
			while (num2 < num && !flag)
			{
				if (byteBuffer[bytePos] != preamble[bytePos])
				{
					bytePos = 0;
					_checkPreamble = false;
					flag = true;
				}
				if (!flag)
				{
					num2++;
					bytePos++;
				}
			}
			if (_checkPreamble && bytePos == preamble.Length)
			{
				compressBuffer(preamble.Length);
				bytePos = 0;
				_checkPreamble = false;
				_detectEncoding = false;
			}
			return _checkPreamble;
		}

		[CompilerGenerated]
		internal void detectEncoding()
		{
			if (byteLen < 2)
			{
				return;
			}
			_detectEncoding = false;
			bool flag = false;
			if (byteBuffer[0] == 254 && byteBuffer[1] == byte.MaxValue)
			{
				encoding@49 = new UnicodeEncoding(bigEndian: true, byteOrderMark: true);
				compressBuffer(2);
				flag = true;
			}
			else if (byteBuffer[0] == byte.MaxValue && byteBuffer[1] == 254)
			{
				if (byteLen >= 4 && byteBuffer[2] == 0 && byteBuffer[3] == 0)
				{
					encoding@49 = new UTF32Encoding(bigEndian: false, byteOrderMark: true);
					compressBuffer(4);
				}
				else
				{
					encoding@49 = new UnicodeEncoding(bigEndian: false, byteOrderMark: true);
					compressBuffer(2);
				}
				flag = true;
			}
			else if (byteLen >= 3 && byteBuffer[0] == 239 && byteBuffer[1] == 187 && byteBuffer[2] == 191)
			{
				encoding@49 = Encoding.UTF8;
				compressBuffer(3);
				flag = true;
			}
			else if (byteLen >= 4 && byteBuffer[0] == 0 && byteBuffer[1] == 0 && byteBuffer[2] == 254 && byteBuffer[3] == byte.MaxValue)
			{
				encoding@49 = new UTF32Encoding(bigEndian: true, byteOrderMark: true);
				flag = true;
			}
			else if (byteLen == 2)
			{
				_detectEncoding = true;
			}
			if (flag)
			{
				decoder = encoding@49.GetDecoder();
				_maxCharsPerBuffer = encoding@49.GetMaxCharCount(byteBuffer.Length);
				charBuffer = ArrayModule.ZeroCreate<char>(_maxCharsPerBuffer);
			}
		}

		[CompilerGenerated]
		internal FSharpAsync<int> readBuffer()
		{
			return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<int>((FSharpFunc<Unit, FSharpAsync<int>>)new $AsyncStreamReader.clo@159-6(this));
		}

		[CompilerGenerated]
		internal void cleanup()
		{
			try
			{
				Stream stream = stream@47;
				if (!HashCompare.GenericEqualityIntrinsic<Stream>(stream, (Stream)null))
				{
					stream@47.Close();
				}
			}
			finally
			{
				Stream stream = stream@47;
				if (!HashCompare.GenericEqualityIntrinsic<Stream>(stream, (Stream)null))
				{
					stream@47 = null;
					encoding@49 = null;
					decoder = null;
					byteBuffer = null;
					charBuffer = null;
					charPos = 0;
					charLen = 0;
				}
			}
		}

		static AsyncStreamReader()
		{
			$AsyncStreamReader.init@ = 0;
			_ = $AsyncStreamReader.init@;
		}
	}
	[Serializable]
	[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
	[DebuggerDisplay("{__DebugDisplay(),nq}")]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public sealed class AsyncStreamNode<a>
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal readonly a item1;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal readonly FSharpAsync<AsyncStreamNode<a>> item2;

		[CompilerGenerated]
		[DebuggerNonUserCode]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public int Tag
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return 0;
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		public a Item1
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return item1;
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		public FSharpAsync<AsyncStreamNode<a>> Item2
		{
			[CompilerGenerated]
			[DebuggerNonUserCode]
			get
			{
				return item2;
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static AsyncStreamNode<a> NewASN(a item1, FSharpAsync<AsyncStreamNode<a>> item2)
		{
			return new AsyncStreamNode<a>(item1, item2);
		}

		[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(AsyncStreamNode<>))]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal AsyncStreamNode(a item1, FSharpAsync<AsyncStreamNode<a>> item2)
		{
			this.item1 = item1;
			this.item2 = item2;
		}

		[SpecialName]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal object __DebugDisplay()
		{
			return ((FSharpFunc<AsyncStreamNode<AsyncStreamNode<a>>, string>)(object)ExtraTopLevelOperators.PrintFormatToString<FSharpFunc<AsyncStreamNode<a>, string>>((PrintfFormat<FSharpFunc<AsyncStreamNode<a>, string>, Unit, string, string>)(object)new PrintfFormat<FSharpFunc<AsyncStreamNode<FSharpFunc<AsyncStreamNode<a>, string>>, string>, Unit, string, string, string>("%+0.8A"))).Invoke((AsyncStreamNode<AsyncStreamNode<a>>)(object)this);
		}

		[CompilerGenerated]
		public override string ToString()
		{
			return ((FSharpFunc<AsyncStreamNode<AsyncStreamNode<a>>, string>)(object)ExtraTopLevelOperators.Pri

BepInEx/core/NAudio.Asio.dll

Decompiled 2 days ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using Microsoft.Win32;
using NAudio.Wave.Asio;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.Asio")]
[assembly: AssemblyTitle("NAudio.Asio")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio.Wave
{
	public class AsioAudioAvailableEventArgs : EventArgs
	{
		public IntPtr[] InputBuffers { get; private set; }

		public IntPtr[] OutputBuffers { get; private set; }

		public bool WrittenToOutputBuffers { get; set; }

		public int SamplesPerBuffer { get; private set; }

		public AsioSampleType AsioSampleType { get; private set; }

		public AsioAudioAvailableEventArgs(IntPtr[] inputBuffers, IntPtr[] outputBuffers, int samplesPerBuffer, AsioSampleType asioSampleType)
		{
			InputBuffers = inputBuffers;
			OutputBuffers = outputBuffers;
			SamplesPerBuffer = samplesPerBuffer;
			AsioSampleType = asioSampleType;
		}

		public unsafe int GetAsInterleavedSamples(float[] samples)
		{
			int num = InputBuffers.Length;
			if (samples.Length < SamplesPerBuffer * num)
			{
				throw new ArgumentException("Buffer not big enough");
			}
			int num2 = 0;
			if (AsioSampleType == AsioSampleType.Int32LSB)
			{
				for (int i = 0; i < SamplesPerBuffer; i++)
				{
					for (int j = 0; j < num; j++)
					{
						samples[num2++] = (float)(*(int*)((byte*)(void*)InputBuffers[j] + (nint)i * (nint)4)) / 2.1474836E+09f;
					}
				}
			}
			else if (AsioSampleType == AsioSampleType.Int16LSB)
			{
				for (int k = 0; k < SamplesPerBuffer; k++)
				{
					for (int l = 0; l < num; l++)
					{
						samples[num2++] = (float)(*(short*)((byte*)(void*)InputBuffers[l] + (nint)k * (nint)2)) / 32767f;
					}
				}
			}
			else if (AsioSampleType == AsioSampleType.Int24LSB)
			{
				for (int m = 0; m < SamplesPerBuffer; m++)
				{
					for (int n = 0; n < num; n++)
					{
						byte* ptr = (byte*)(void*)InputBuffers[n] + m * 3;
						int num3 = *ptr | (ptr[1] << 8) | ((sbyte)ptr[2] << 16);
						samples[num2++] = (float)num3 / 8388608f;
					}
				}
			}
			else
			{
				if (AsioSampleType != AsioSampleType.Float32LSB)
				{
					throw new NotImplementedException($"ASIO Sample Type {AsioSampleType} not supported");
				}
				for (int num4 = 0; num4 < SamplesPerBuffer; num4++)
				{
					for (int num5 = 0; num5 < num; num5++)
					{
						samples[num2++] = *(float*)((byte*)(void*)InputBuffers[num5] + (nint)num4 * (nint)4);
					}
				}
			}
			return SamplesPerBuffer * num;
		}

		[Obsolete("Better performance if you use the overload that takes an array, and reuse the same one")]
		public float[] GetAsInterleavedSamples()
		{
			int num = InputBuffers.Length;
			float[] array = new float[SamplesPerBuffer * num];
			GetAsInterleavedSamples(array);
			return array;
		}
	}
	public class AsioOut : IWavePlayer, IDisposable
	{
		private AsioDriverExt driver;

		private IWaveProvider sourceStream;

		private PlaybackState playbackState;

		private int nbSamples;

		private byte[] waveBuffer;

		private AsioSampleConvertor.SampleConvertor convertor;

		private string driverName;

		private readonly SynchronizationContext syncContext;

		private bool isInitialized;

		public int PlaybackLatency
		{
			get
			{
				driver.Driver.GetLatencies(out var _, out var outputLatency);
				return outputLatency;
			}
		}

		public bool AutoStop { get; set; }

		public bool HasReachedEnd { get; private set; }

		public PlaybackState PlaybackState => playbackState;

		public string DriverName => driverName;

		public int NumberOfOutputChannels { get; private set; }

		public int NumberOfInputChannels { get; private set; }

		public int DriverInputChannelCount => driver.Capabilities.NbInputChannels;

		public int DriverOutputChannelCount => driver.Capabilities.NbOutputChannels;

		public int FramesPerBuffer
		{
			get
			{
				if (!isInitialized)
				{
					throw new Exception("Not initialized yet. Call this after calling Init");
				}
				return nbSamples;
			}
		}

		public int ChannelOffset { get; set; }

		public int InputChannelOffset { get; set; }

		[Obsolete("this function will be removed in a future NAudio as ASIO does not support setting the volume on the device")]
		public float Volume
		{
			get
			{
				return 1f;
			}
			set
			{
				if (value != 1f)
				{
					throw new InvalidOperationException("AsioOut does not support setting the device volume");
				}
			}
		}

		public WaveFormat OutputWaveFormat { get; private set; }

		public event EventHandler<StoppedEventArgs> PlaybackStopped;

		public event EventHandler<AsioAudioAvailableEventArgs> AudioAvailable;

		public event EventHandler DriverResetRequest;

		public AsioOut()
			: this(0)
		{
		}

		public AsioOut(string driverName)
		{
			syncContext = SynchronizationContext.Current;
			InitFromName(driverName);
		}

		public AsioOut(int driverIndex)
		{
			syncContext = SynchronizationContext.Current;
			string[] driverNames = GetDriverNames();
			if (driverNames.Length == 0)
			{
				throw new ArgumentException("There is no ASIO Driver installed on your system");
			}
			if (driverIndex < 0 || driverIndex > driverNames.Length)
			{
				throw new ArgumentException($"Invalid device number. Must be in the range [0,{driverNames.Length}]");
			}
			InitFromName(driverNames[driverIndex]);
		}

		~AsioOut()
		{
			Dispose();
		}

		public void Dispose()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			if (driver != null)
			{
				if ((int)playbackState != 0)
				{
					driver.Stop();
				}
				driver.ResetRequestCallback = null;
				driver.ReleaseDriver();
				driver = null;
			}
		}

		public static string[] GetDriverNames()
		{
			return AsioDriver.GetAsioDriverNames();
		}

		public static bool isSupported()
		{
			return GetDriverNames().Length != 0;
		}

		public bool IsSampleRateSupported(int sampleRate)
		{
			return driver.IsSampleRateSupported(sampleRate);
		}

		private void InitFromName(string driverName)
		{
			this.driverName = driverName;
			AsioDriver asioDriverByName = AsioDriver.GetAsioDriverByName(driverName);
			try
			{
				driver = new AsioDriverExt(asioDriverByName);
			}
			catch
			{
				ReleaseDriver(asioDriverByName);
				throw;
			}
			driver.ResetRequestCallback = OnDriverResetRequest;
			ChannelOffset = 0;
		}

		private void OnDriverResetRequest()
		{
			this.DriverResetRequest?.Invoke(this, EventArgs.Empty);
		}

		private void ReleaseDriver(AsioDriver driver)
		{
			driver.DisposeBuffers();
			driver.ReleaseComAsioDriver();
		}

		public void ShowControlPanel()
		{
			driver.ShowControlPanel();
		}

		public void Play()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState != 1)
			{
				playbackState = (PlaybackState)1;
				HasReachedEnd = false;
				driver.Start();
			}
		}

		public void Stop()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			playbackState = (PlaybackState)0;
			driver.Stop();
			HasReachedEnd = false;
			RaisePlaybackStopped(null);
		}

		public void Pause()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			playbackState = (PlaybackState)2;
			driver.Stop();
		}

		public void Init(IWaveProvider waveProvider)
		{
			InitRecordAndPlayback(waveProvider, 0, -1);
		}

		public void InitRecordAndPlayback(IWaveProvider waveProvider, int recordChannels, int recordOnlySampleRate)
		{
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Expected O, but got Unknown
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Expected O, but got Unknown
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			if (isInitialized)
			{
				throw new InvalidOperationException("Already initialised this instance of AsioOut - dispose and create a new one");
			}
			isInitialized = true;
			int num = ((waveProvider != null) ? waveProvider.WaveFormat.SampleRate : recordOnlySampleRate);
			if (waveProvider != null)
			{
				sourceStream = waveProvider;
				NumberOfOutputChannels = waveProvider.WaveFormat.Channels;
				AsioSampleType type = driver.Capabilities.OutputChannelInfos[0].type;
				convertor = AsioSampleConvertor.SelectSampleConvertor(waveProvider.WaveFormat, type);
				switch (type)
				{
				case AsioSampleType.Float32LSB:
					OutputWaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(waveProvider.WaveFormat.SampleRate, waveProvider.WaveFormat.Channels);
					break;
				case AsioSampleType.Int32LSB:
					OutputWaveFormat = new WaveFormat(waveProvider.WaveFormat.SampleRate, 32, waveProvider.WaveFormat.Channels);
					break;
				case AsioSampleType.Int16LSB:
					OutputWaveFormat = new WaveFormat(waveProvider.WaveFormat.SampleRate, 16, waveProvider.WaveFormat.Channels);
					break;
				case AsioSampleType.Int24LSB:
					OutputWaveFormat = new WaveFormat(waveProvider.WaveFormat.SampleRate, 24, waveProvider.WaveFormat.Channels);
					break;
				default:
					throw new NotSupportedException($"{type} not currently supported");
				}
			}
			else
			{
				NumberOfOutputChannels = 0;
			}
			if (!driver.IsSampleRateSupported(num))
			{
				throw new ArgumentException("SampleRate is not supported");
			}
			if (driver.Capabilities.SampleRate != (double)num)
			{
				driver.SetSampleRate(num);
			}
			driver.FillBufferCallback = driver_BufferUpdate;
			NumberOfInputChannels = recordChannels;
			nbSamples = driver.CreateBuffers(NumberOfOutputChannels, NumberOfInputChannels, useMaxBufferSize: false);
			driver.SetChannelOffset(ChannelOffset, InputChannelOffset);
			if (waveProvider != null)
			{
				waveBuffer = new byte[nbSamples * NumberOfOutputChannels * waveProvider.WaveFormat.BitsPerSample / 8];
			}
		}

		private unsafe void driver_BufferUpdate(IntPtr[] inputChannels, IntPtr[] outputChannels)
		{
			if (NumberOfInputChannels > 0)
			{
				EventHandler<AsioAudioAvailableEventArgs> audioAvailable = this.AudioAvailable;
				if (audioAvailable != null)
				{
					AsioAudioAvailableEventArgs asioAudioAvailableEventArgs = new AsioAudioAvailableEventArgs(inputChannels, outputChannels, nbSamples, driver.Capabilities.InputChannelInfos[0].type);
					audioAvailable(this, asioAudioAvailableEventArgs);
					if (asioAudioAvailableEventArgs.WrittenToOutputBuffers)
					{
						return;
					}
				}
			}
			if (NumberOfOutputChannels <= 0)
			{
				return;
			}
			int num = sourceStream.Read(waveBuffer, 0, waveBuffer.Length);
			if (num < waveBuffer.Length)
			{
				Array.Clear(waveBuffer, num, waveBuffer.Length - num);
			}
			fixed (byte* ptr = &waveBuffer[0])
			{
				void* value = ptr;
				convertor(new IntPtr(value), outputChannels, NumberOfOutputChannels, nbSamples);
			}
			if (num == 0)
			{
				if (AutoStop)
				{
					Stop();
				}
				HasReachedEnd = true;
			}
		}

		private void RaisePlaybackStopped(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.PlaybackStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}

		public string AsioInputChannelName(int channel)
		{
			if (channel <= DriverInputChannelCount)
			{
				return driver.Capabilities.InputChannelInfos[channel].name;
			}
			return "";
		}

		public string AsioOutputChannelName(int channel)
		{
			if (channel <= DriverOutputChannelCount)
			{
				return driver.Capabilities.OutputChannelInfos[channel].name;
			}
			return "";
		}
	}
}
namespace NAudio.Wave.Asio
{
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	public struct Asio64Bit
	{
		public uint hi;

		public uint lo;
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	public struct AsioCallbacks
	{
		[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
		public delegate void AsioBufferSwitchCallBack(int doubleBufferIndex, bool directProcess);

		[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
		public delegate void AsioSampleRateDidChangeCallBack(double sRate);

		[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
		public delegate int AsioAsioMessageCallBack(AsioMessageSelector selector, int value, IntPtr message, IntPtr opt);

		[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
		public delegate IntPtr AsioBufferSwitchTimeInfoCallBack(IntPtr asioTimeParam, int doubleBufferIndex, bool directProcess);

		public AsioBufferSwitchCallBack pbufferSwitch;

		public AsioSampleRateDidChangeCallBack psampleRateDidChange;

		public AsioAsioMessageCallBack pasioMessage;

		public AsioBufferSwitchTimeInfoCallBack pbufferSwitchTimeInfo;
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	public struct AsioChannelInfo
	{
		public int channel;

		public bool isInput;

		public bool isActive;

		public int channelGroup;

		[MarshalAs(UnmanagedType.U4)]
		public AsioSampleType type;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		public string name;
	}
	public class AsioDriver
	{
		[StructLayout(LayoutKind.Sequential, Pack = 2)]
		private class AsioDriverVTable
		{
			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate int ASIOInit(IntPtr _pUnknown, IntPtr sysHandle);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate void ASIOgetDriverName(IntPtr _pUnknown, StringBuilder name);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate int ASIOgetDriverVersion(IntPtr _pUnknown);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate void ASIOgetErrorMessage(IntPtr _pUnknown, StringBuilder errorMessage);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOstart(IntPtr _pUnknown);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOstop(IntPtr _pUnknown);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetChannels(IntPtr _pUnknown, out int numInputChannels, out int numOutputChannels);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetLatencies(IntPtr _pUnknown, out int inputLatency, out int outputLatency);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetBufferSize(IntPtr _pUnknown, out int minSize, out int maxSize, out int preferredSize, out int granularity);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOcanSampleRate(IntPtr _pUnknown, double sampleRate);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetSampleRate(IntPtr _pUnknown, out double sampleRate);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOsetSampleRate(IntPtr _pUnknown, double sampleRate);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetClockSources(IntPtr _pUnknown, out long clocks, int numSources);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOsetClockSource(IntPtr _pUnknown, int reference);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetSamplePosition(IntPtr _pUnknown, out long samplePos, ref Asio64Bit timeStamp);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOgetChannelInfo(IntPtr _pUnknown, ref AsioChannelInfo info);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOcreateBuffers(IntPtr _pUnknown, IntPtr bufferInfos, int numChannels, int bufferSize, IntPtr callbacks);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOdisposeBuffers(IntPtr _pUnknown);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOcontrolPanel(IntPtr _pUnknown);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOfuture(IntPtr _pUnknown, int selector, IntPtr opt);

			[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
			public delegate AsioError ASIOoutputReady(IntPtr _pUnknown);

			public ASIOInit init;

			public ASIOgetDriverName getDriverName;

			public ASIOgetDriverVersion getDriverVersion;

			public ASIOgetErrorMessage getErrorMessage;

			public ASIOstart start;

			public ASIOstop stop;

			public ASIOgetChannels getChannels;

			public ASIOgetLatencies getLatencies;

			public ASIOgetBufferSize getBufferSize;

			public ASIOcanSampleRate canSampleRate;

			public ASIOgetSampleRate getSampleRate;

			public ASIOsetSampleRate setSampleRate;

			public ASIOgetClockSources getClockSources;

			public ASIOsetClockSource setClockSource;

			public ASIOgetSamplePosition getSamplePosition;

			public ASIOgetChannelInfo getChannelInfo;

			public ASIOcreateBuffers createBuffers;

			public ASIOdisposeBuffers disposeBuffers;

			public ASIOcontrolPanel controlPanel;

			public ASIOfuture future;

			public ASIOoutputReady outputReady;
		}

		private IntPtr pAsioComObject;

		private IntPtr pinnedcallbacks;

		private AsioDriverVTable asioDriverVTable;

		private AsioDriver()
		{
		}

		public static string[] GetAsioDriverNames()
		{
			RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\ASIO");
			string[] result = new string[0];
			if (registryKey != null)
			{
				result = registryKey.GetSubKeyNames();
				registryKey.Close();
			}
			return result;
		}

		public static AsioDriver GetAsioDriverByName(string name)
		{
			return GetAsioDriverByGuid(new Guid((Registry.LocalMachine.OpenSubKey("SOFTWARE\\ASIO\\" + name) ?? throw new ArgumentException("Driver Name " + name + " doesn't exist")).GetValue("CLSID").ToString()));
		}

		public static AsioDriver GetAsioDriverByGuid(Guid guid)
		{
			AsioDriver asioDriver = new AsioDriver();
			asioDriver.InitFromGuid(guid);
			return asioDriver;
		}

		public bool Init(IntPtr sysHandle)
		{
			return asioDriverVTable.init(pAsioComObject, sysHandle) == 1;
		}

		public string GetDriverName()
		{
			StringBuilder stringBuilder = new StringBuilder(256);
			asioDriverVTable.getDriverName(pAsioComObject, stringBuilder);
			return stringBuilder.ToString();
		}

		public int GetDriverVersion()
		{
			return asioDriverVTable.getDriverVersion(pAsioComObject);
		}

		public string GetErrorMessage()
		{
			StringBuilder stringBuilder = new StringBuilder(256);
			asioDriverVTable.getErrorMessage(pAsioComObject, stringBuilder);
			return stringBuilder.ToString();
		}

		public void Start()
		{
			HandleException(asioDriverVTable.start(pAsioComObject), "start");
		}

		public AsioError Stop()
		{
			return asioDriverVTable.stop(pAsioComObject);
		}

		public void GetChannels(out int numInputChannels, out int numOutputChannels)
		{
			HandleException(asioDriverVTable.getChannels(pAsioComObject, out numInputChannels, out numOutputChannels), "getChannels");
		}

		public AsioError GetLatencies(out int inputLatency, out int outputLatency)
		{
			return asioDriverVTable.getLatencies(pAsioComObject, out inputLatency, out outputLatency);
		}

		public void GetBufferSize(out int minSize, out int maxSize, out int preferredSize, out int granularity)
		{
			HandleException(asioDriverVTable.getBufferSize(pAsioComObject, out minSize, out maxSize, out preferredSize, out granularity), "getBufferSize");
		}

		public bool CanSampleRate(double sampleRate)
		{
			AsioError asioError = asioDriverVTable.canSampleRate(pAsioComObject, sampleRate);
			switch (asioError)
			{
			case AsioError.ASE_NoClock:
				return false;
			case AsioError.ASE_OK:
				return true;
			default:
				HandleException(asioError, "canSampleRate");
				return false;
			}
		}

		public double GetSampleRate()
		{
			HandleException(asioDriverVTable.getSampleRate(pAsioComObject, out var sampleRate), "getSampleRate");
			return sampleRate;
		}

		public void SetSampleRate(double sampleRate)
		{
			HandleException(asioDriverVTable.setSampleRate(pAsioComObject, sampleRate), "setSampleRate");
		}

		public void GetClockSources(out long clocks, int numSources)
		{
			HandleException(asioDriverVTable.getClockSources(pAsioComObject, out clocks, numSources), "getClockSources");
		}

		public void SetClockSource(int reference)
		{
			HandleException(asioDriverVTable.setClockSource(pAsioComObject, reference), "setClockSources");
		}

		public void GetSamplePosition(out long samplePos, ref Asio64Bit timeStamp)
		{
			HandleException(asioDriverVTable.getSamplePosition(pAsioComObject, out samplePos, ref timeStamp), "getSamplePosition");
		}

		public AsioChannelInfo GetChannelInfo(int channelNumber, bool trueForInputInfo)
		{
			AsioChannelInfo asioChannelInfo = default(AsioChannelInfo);
			asioChannelInfo.channel = channelNumber;
			asioChannelInfo.isInput = trueForInputInfo;
			AsioChannelInfo info = asioChannelInfo;
			HandleException(asioDriverVTable.getChannelInfo(pAsioComObject, ref info), "getChannelInfo");
			return info;
		}

		public void CreateBuffers(IntPtr bufferInfos, int numChannels, int bufferSize, ref AsioCallbacks callbacks)
		{
			pinnedcallbacks = Marshal.AllocHGlobal(Marshal.SizeOf(callbacks));
			Marshal.StructureToPtr(callbacks, pinnedcallbacks, fDeleteOld: false);
			HandleException(asioDriverVTable.createBuffers(pAsioComObject, bufferInfos, numChannels, bufferSize, pinnedcallbacks), "createBuffers");
		}

		public AsioError DisposeBuffers()
		{
			AsioError result = asioDriverVTable.disposeBuffers(pAsioComObject);
			Marshal.FreeHGlobal(pinnedcallbacks);
			return result;
		}

		public void ControlPanel()
		{
			HandleException(asioDriverVTable.controlPanel(pAsioComObject), "controlPanel");
		}

		public void Future(int selector, IntPtr opt)
		{
			HandleException(asioDriverVTable.future(pAsioComObject, selector, opt), "future");
		}

		public AsioError OutputReady()
		{
			return asioDriverVTable.outputReady(pAsioComObject);
		}

		public void ReleaseComAsioDriver()
		{
			Marshal.Release(pAsioComObject);
		}

		private void HandleException(AsioError error, string methodName)
		{
			if (error != 0 && error != AsioError.ASE_SUCCESS)
			{
				throw new AsioException("Error code [" + AsioException.getErrorName(error) + "] while calling ASIO method <" + methodName + ">, " + GetErrorMessage())
				{
					Error = error
				};
			}
		}

		private void InitFromGuid(Guid asioGuid)
		{
			int num = CoCreateInstance(ref asioGuid, IntPtr.Zero, 1u, ref asioGuid, out pAsioComObject);
			if (num != 0)
			{
				throw new COMException("Unable to instantiate ASIO. Check if STAThread is set", num);
			}
			IntPtr ptr = Marshal.ReadIntPtr(pAsioComObject);
			asioDriverVTable = new AsioDriverVTable();
			FieldInfo[] fields = typeof(AsioDriverVTable).GetFields();
			for (int i = 0; i < fields.Length; i++)
			{
				FieldInfo fieldInfo = fields[i];
				object delegateForFunctionPointer = Marshal.GetDelegateForFunctionPointer(Marshal.ReadIntPtr(ptr, (i + 3) * IntPtr.Size), fieldInfo.FieldType);
				fieldInfo.SetValue(asioDriverVTable, delegateForFunctionPointer);
			}
		}

		[DllImport("ole32.Dll")]
		private static extern int CoCreateInstance(ref Guid clsid, IntPtr inner, uint context, ref Guid uuid, out IntPtr rReturnedComObject);
	}
	public class AsioDriverCapability
	{
		public string DriverName;

		public int NbInputChannels;

		public int NbOutputChannels;

		public int InputLatency;

		public int OutputLatency;

		public int BufferMinSize;

		public int BufferMaxSize;

		public int BufferPreferredSize;

		public int BufferGranularity;

		public double SampleRate;

		public AsioChannelInfo[] InputChannelInfos;

		public AsioChannelInfo[] OutputChannelInfos;
	}
	public delegate void AsioFillBufferCallback(IntPtr[] inputChannels, IntPtr[] outputChannels);
	public class AsioDriverExt
	{
		private readonly AsioDriver driver;

		private AsioCallbacks callbacks;

		private AsioDriverCapability capability;

		private AsioBufferInfo[] bufferInfos;

		private bool isOutputReadySupported;

		private IntPtr[] currentOutputBuffers;

		private IntPtr[] currentInputBuffers;

		private int numberOfOutputChannels;

		private int numberOfInputChannels;

		private AsioFillBufferCallback fillBufferCallback;

		private int bufferSize;

		private int outputChannelOffset;

		private int inputChannelOffset;

		public Action ResetRequestCallback;

		public AsioDriver Driver => driver;

		public AsioFillBufferCallback FillBufferCallback
		{
			get
			{
				return fillBufferCallback;
			}
			set
			{
				fillBufferCallback = value;
			}
		}

		public AsioDriverCapability Capabilities => capability;

		public AsioDriverExt(AsioDriver driver)
		{
			this.driver = driver;
			if (!driver.Init(IntPtr.Zero))
			{
				throw new InvalidOperationException(driver.GetErrorMessage());
			}
			callbacks = default(AsioCallbacks);
			callbacks.pasioMessage = AsioMessageCallBack;
			callbacks.pbufferSwitch = BufferSwitchCallBack;
			callbacks.pbufferSwitchTimeInfo = BufferSwitchTimeInfoCallBack;
			callbacks.psampleRateDidChange = SampleRateDidChangeCallBack;
			BuildCapabilities();
		}

		public void SetChannelOffset(int outputChannelOffset, int inputChannelOffset)
		{
			if (outputChannelOffset + numberOfOutputChannels <= Capabilities.NbOutputChannels)
			{
				this.outputChannelOffset = outputChannelOffset;
				if (inputChannelOffset + numberOfInputChannels <= Capabilities.NbInputChannels)
				{
					this.inputChannelOffset = inputChannelOffset;
					return;
				}
				throw new ArgumentException("Invalid channel offset");
			}
			throw new ArgumentException("Invalid channel offset");
		}

		public void Start()
		{
			driver.Start();
		}

		public void Stop()
		{
			driver.Stop();
		}

		public void ShowControlPanel()
		{
			driver.ControlPanel();
		}

		public void ReleaseDriver()
		{
			try
			{
				driver.DisposeBuffers();
			}
			catch (Exception ex)
			{
				Console.Out.WriteLine(ex.ToString());
			}
			driver.ReleaseComAsioDriver();
		}

		public bool IsSampleRateSupported(double sampleRate)
		{
			return driver.CanSampleRate(sampleRate);
		}

		public void SetSampleRate(double sampleRate)
		{
			driver.SetSampleRate(sampleRate);
			BuildCapabilities();
		}

		public unsafe int CreateBuffers(int numberOfOutputChannels, int numberOfInputChannels, bool useMaxBufferSize)
		{
			if (numberOfOutputChannels < 0 || numberOfOutputChannels > capability.NbOutputChannels)
			{
				throw new ArgumentException($"Invalid number of channels {numberOfOutputChannels}, must be in the range [0,{capability.NbOutputChannels}]");
			}
			if (numberOfInputChannels < 0 || numberOfInputChannels > capability.NbInputChannels)
			{
				throw new ArgumentException("numberOfInputChannels", $"Invalid number of input channels {numberOfInputChannels}, must be in the range [0,{capability.NbInputChannels}]");
			}
			this.numberOfOutputChannels = numberOfOutputChannels;
			this.numberOfInputChannels = numberOfInputChannels;
			int num = capability.NbInputChannels + capability.NbOutputChannels;
			bufferInfos = new AsioBufferInfo[num];
			currentOutputBuffers = new IntPtr[numberOfOutputChannels];
			currentInputBuffers = new IntPtr[numberOfInputChannels];
			int num2 = 0;
			int num3 = 0;
			while (num3 < capability.NbInputChannels)
			{
				bufferInfos[num2].isInput = true;
				bufferInfos[num2].channelNum = num3;
				bufferInfos[num2].pBuffer0 = IntPtr.Zero;
				bufferInfos[num2].pBuffer1 = IntPtr.Zero;
				num3++;
				num2++;
			}
			int num4 = 0;
			while (num4 < capability.NbOutputChannels)
			{
				bufferInfos[num2].isInput = false;
				bufferInfos[num2].channelNum = num4;
				bufferInfos[num2].pBuffer0 = IntPtr.Zero;
				bufferInfos[num2].pBuffer1 = IntPtr.Zero;
				num4++;
				num2++;
			}
			if (useMaxBufferSize)
			{
				bufferSize = capability.BufferMaxSize;
			}
			else
			{
				bufferSize = capability.BufferPreferredSize;
			}
			fixed (AsioBufferInfo* value = &bufferInfos[0])
			{
				IntPtr intPtr = new IntPtr(value);
				driver.CreateBuffers(intPtr, num, bufferSize, ref callbacks);
			}
			isOutputReadySupported = driver.OutputReady() == AsioError.ASE_OK;
			return bufferSize;
		}

		private void BuildCapabilities()
		{
			capability = new AsioDriverCapability();
			capability.DriverName = driver.GetDriverName();
			driver.GetChannels(out capability.NbInputChannels, out capability.NbOutputChannels);
			capability.InputChannelInfos = new AsioChannelInfo[capability.NbInputChannels];
			capability.OutputChannelInfos = new AsioChannelInfo[capability.NbOutputChannels];
			for (int i = 0; i < capability.NbInputChannels; i++)
			{
				capability.InputChannelInfos[i] = driver.GetChannelInfo(i, trueForInputInfo: true);
			}
			for (int j = 0; j < capability.NbOutputChannels; j++)
			{
				capability.OutputChannelInfos[j] = driver.GetChannelInfo(j, trueForInputInfo: false);
			}
			capability.SampleRate = driver.GetSampleRate();
			AsioError latencies = driver.GetLatencies(out capability.InputLatency, out capability.OutputLatency);
			if (latencies != 0 && latencies != AsioError.ASE_NotPresent)
			{
				throw new AsioException("ASIOgetLatencies")
				{
					Error = latencies
				};
			}
			driver.GetBufferSize(out capability.BufferMinSize, out capability.BufferMaxSize, out capability.BufferPreferredSize, out capability.BufferGranularity);
		}

		private void BufferSwitchCallBack(int doubleBufferIndex, bool directProcess)
		{
			for (int i = 0; i < numberOfInputChannels; i++)
			{
				currentInputBuffers[i] = bufferInfos[i + inputChannelOffset].Buffer(doubleBufferIndex);
			}
			for (int j = 0; j < numberOfOutputChannels; j++)
			{
				currentOutputBuffers[j] = bufferInfos[j + outputChannelOffset + capability.NbInputChannels].Buffer(doubleBufferIndex);
			}
			fillBufferCallback?.Invoke(currentInputBuffers, currentOutputBuffers);
			if (isOutputReadySupported)
			{
				driver.OutputReady();
			}
		}

		private void SampleRateDidChangeCallBack(double sRate)
		{
			capability.SampleRate = sRate;
		}

		private int AsioMessageCallBack(AsioMessageSelector selector, int value, IntPtr message, IntPtr opt)
		{
			switch (selector)
			{
			case AsioMessageSelector.kAsioSelectorSupported:
				switch ((AsioMessageSelector)Enum.ToObject(typeof(AsioMessageSelector), value))
				{
				case AsioMessageSelector.kAsioEngineVersion:
					return 1;
				case AsioMessageSelector.kAsioResetRequest:
					ResetRequestCallback?.Invoke();
					return 0;
				case AsioMessageSelector.kAsioBufferSizeChange:
					return 0;
				case AsioMessageSelector.kAsioResyncRequest:
					return 0;
				case AsioMessageSelector.kAsioLatenciesChanged:
					return 0;
				case AsioMessageSelector.kAsioSupportsTimeInfo:
					return 0;
				case AsioMessageSelector.kAsioSupportsTimeCode:
					return 0;
				}
				break;
			case AsioMessageSelector.kAsioEngineVersion:
				return 2;
			case AsioMessageSelector.kAsioResetRequest:
				ResetRequestCallback?.Invoke();
				return 1;
			case AsioMessageSelector.kAsioBufferSizeChange:
				return 0;
			case AsioMessageSelector.kAsioResyncRequest:
				return 0;
			case AsioMessageSelector.kAsioLatenciesChanged:
				return 0;
			case AsioMessageSelector.kAsioSupportsTimeInfo:
				return 0;
			case AsioMessageSelector.kAsioSupportsTimeCode:
				return 0;
			}
			return 0;
		}

		private IntPtr BufferSwitchTimeInfoCallBack(IntPtr asioTimeParam, int doubleBufferIndex, bool directProcess)
		{
			return IntPtr.Zero;
		}
	}
	public enum AsioError
	{
		ASE_OK = 0,
		ASE_SUCCESS = 1061701536,
		ASE_NotPresent = -1000,
		ASE_HWMalfunction = -999,
		ASE_InvalidParameter = -998,
		ASE_InvalidMode = -997,
		ASE_SPNotAdvancing = -996,
		ASE_NoClock = -995,
		ASE_NoMemory = -994
	}
	public enum AsioMessageSelector
	{
		kAsioSelectorSupported = 1,
		kAsioEngineVersion,
		kAsioResetRequest,
		kAsioBufferSizeChange,
		kAsioResyncRequest,
		kAsioLatenciesChanged,
		kAsioSupportsTimeInfo,
		kAsioSupportsTimeCode,
		kAsioMMCCommand,
		kAsioSupportsInputMonitor,
		kAsioSupportsInputGain,
		kAsioSupportsInputMeter,
		kAsioSupportsOutputGain,
		kAsioSupportsOutputMeter,
		kAsioOverload
	}
	internal class AsioSampleConvertor
	{
		public delegate void SampleConvertor(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples);

		public static SampleConvertor SelectSampleConvertor(WaveFormat waveFormat, AsioSampleType asioType)
		{
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Invalid comparison between Unknown and I4
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Invalid comparison between Unknown and I4
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Invalid comparison between Unknown and I4
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Invalid comparison between Unknown and I4
			SampleConvertor result = null;
			bool flag = waveFormat.Channels == 2;
			switch (asioType)
			{
			case AsioSampleType.Int32LSB:
				switch (waveFormat.BitsPerSample)
				{
				case 16:
					result = (flag ? new SampleConvertor(ConvertorShortToInt2Channels) : new SampleConvertor(ConvertorShortToIntGeneric));
					break;
				case 32:
					result = (((int)waveFormat.Encoding != 3) ? (flag ? new SampleConvertor(ConvertorIntToInt2Channels) : new SampleConvertor(ConvertorIntToIntGeneric)) : (flag ? new SampleConvertor(ConvertorFloatToInt2Channels) : new SampleConvertor(ConvertorFloatToIntGeneric)));
					break;
				}
				break;
			case AsioSampleType.Int16LSB:
				switch (waveFormat.BitsPerSample)
				{
				case 16:
					result = (flag ? new SampleConvertor(ConvertorShortToShort2Channels) : new SampleConvertor(ConvertorShortToShortGeneric));
					break;
				case 32:
					result = (((int)waveFormat.Encoding != 3) ? (flag ? new SampleConvertor(ConvertorIntToShort2Channels) : new SampleConvertor(ConvertorIntToShortGeneric)) : (flag ? new SampleConvertor(ConvertorFloatToShort2Channels) : new SampleConvertor(ConvertorFloatToShortGeneric)));
					break;
				}
				break;
			case AsioSampleType.Int24LSB:
				switch (waveFormat.BitsPerSample)
				{
				case 16:
					throw new ArgumentException("Not a supported conversion");
				case 32:
					if ((int)waveFormat.Encoding == 3)
					{
						result = ConverterFloatTo24LSBGeneric;
						break;
					}
					throw new ArgumentException("Not a supported conversion");
				}
				break;
			case AsioSampleType.Float32LSB:
				switch (waveFormat.BitsPerSample)
				{
				case 16:
					throw new ArgumentException("Not a supported conversion");
				case 32:
					result = (((int)waveFormat.Encoding != 3) ? new SampleConvertor(ConvertorIntToFloatGeneric) : new SampleConvertor(ConverterFloatToFloatGeneric));
					break;
				}
				break;
			default:
				throw new ArgumentException($"ASIO Buffer Type {Enum.GetName(typeof(AsioSampleType), asioType)} is not yet supported.");
			}
			return result;
		}

		public unsafe static void ConvertorShortToInt2Channels(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			short* ptr = (short*)(void*)inputInterleavedBuffer;
			short* ptr2 = (short*)(void*)asioOutputBuffers[0];
			short* ptr3 = (short*)(void*)asioOutputBuffers[1];
			ptr2++;
			ptr3++;
			for (int i = 0; i < nbSamples; i++)
			{
				*ptr2 = *ptr;
				*ptr3 = ptr[1];
				ptr += 2;
				ptr2 += 2;
				ptr3 += 2;
			}
		}

		public unsafe static void ConvertorShortToIntGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			short* ptr = (short*)(void*)inputInterleavedBuffer;
			short*[] array = new short*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (short*)(void*)asioOutputBuffers[i];
				int num = i;
				short* ptr2 = array[num];
				array[num] = ptr2 + 1;
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					*array[k] = *(ptr++);
					short*[] array2 = array;
					int num = k;
					array2[num] += 2;
				}
			}
		}

		public unsafe static void ConvertorFloatToInt2Channels(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			float* ptr = (float*)(void*)inputInterleavedBuffer;
			int* ptr2 = (int*)(void*)asioOutputBuffers[0];
			int* ptr3 = (int*)(void*)asioOutputBuffers[1];
			for (int i = 0; i < nbSamples; i++)
			{
				*(ptr2++) = clampToInt(*ptr);
				*(ptr3++) = clampToInt(ptr[1]);
				ptr += 2;
			}
		}

		public unsafe static void ConvertorFloatToIntGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			float* ptr = (float*)(void*)inputInterleavedBuffer;
			int*[] array = new int*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (int*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					int* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = clampToInt(*(ptr++));
				}
			}
		}

		public unsafe static void ConvertorIntToInt2Channels(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			int* ptr = (int*)(void*)inputInterleavedBuffer;
			int* ptr2 = (int*)(void*)asioOutputBuffers[0];
			int* ptr3 = (int*)(void*)asioOutputBuffers[1];
			for (int i = 0; i < nbSamples; i++)
			{
				*(ptr2++) = *ptr;
				*(ptr3++) = ptr[1];
				ptr += 2;
			}
		}

		public unsafe static void ConvertorIntToIntGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			int* ptr = (int*)(void*)inputInterleavedBuffer;
			int*[] array = new int*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (int*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					int* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = *(ptr++);
				}
			}
		}

		public unsafe static void ConvertorIntToShort2Channels(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			int* ptr = (int*)(void*)inputInterleavedBuffer;
			short* ptr2 = (short*)(void*)asioOutputBuffers[0];
			short* ptr3 = (short*)(void*)asioOutputBuffers[1];
			for (int i = 0; i < nbSamples; i++)
			{
				*(ptr2++) = (short)(*ptr / 65536);
				*(ptr3++) = (short)(ptr[1] / 65536);
				ptr += 2;
			}
		}

		public unsafe static void ConvertorIntToShortGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			int* ptr = (int*)(void*)inputInterleavedBuffer;
			int*[] array = new int*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (int*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					int* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = (short)(*(ptr++) / 65536);
				}
			}
		}

		public unsafe static void ConvertorIntToFloatGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			int* ptr = (int*)(void*)inputInterleavedBuffer;
			float*[] array = new float*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (float*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					float* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = *(ptr++) / int.MinValue;
				}
			}
		}

		public unsafe static void ConvertorShortToShort2Channels(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			short* ptr = (short*)(void*)inputInterleavedBuffer;
			short* ptr2 = (short*)(void*)asioOutputBuffers[0];
			short* ptr3 = (short*)(void*)asioOutputBuffers[1];
			for (int i = 0; i < nbSamples; i++)
			{
				*(ptr2++) = *ptr;
				*(ptr3++) = ptr[1];
				ptr += 2;
			}
		}

		public unsafe static void ConvertorShortToShortGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			short* ptr = (short*)(void*)inputInterleavedBuffer;
			short*[] array = new short*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (short*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					short* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = *(ptr++);
				}
			}
		}

		public unsafe static void ConvertorFloatToShort2Channels(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			float* ptr = (float*)(void*)inputInterleavedBuffer;
			short* ptr2 = (short*)(void*)asioOutputBuffers[0];
			short* ptr3 = (short*)(void*)asioOutputBuffers[1];
			for (int i = 0; i < nbSamples; i++)
			{
				*(ptr2++) = clampToShort(*ptr);
				*(ptr3++) = clampToShort(ptr[1]);
				ptr += 2;
			}
		}

		public unsafe static void ConvertorFloatToShortGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			float* ptr = (float*)(void*)inputInterleavedBuffer;
			short*[] array = new short*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (short*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					short* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = clampToShort(*(ptr++));
				}
			}
		}

		public unsafe static void ConverterFloatTo24LSBGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			float* ptr = (float*)(void*)inputInterleavedBuffer;
			byte*[] array = new byte*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (byte*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = clampTo24Bit(*(ptr++));
					int num2 = k;
					*(array[num2]++) = (byte)num;
					num2 = k;
					*(array[num2]++) = (byte)(num >> 8);
					num2 = k;
					*(array[num2]++) = (byte)(num >> 16);
				}
			}
		}

		public unsafe static void ConverterFloatToFloatGeneric(IntPtr inputInterleavedBuffer, IntPtr[] asioOutputBuffers, int nbChannels, int nbSamples)
		{
			float* ptr = (float*)(void*)inputInterleavedBuffer;
			float*[] array = new float*[nbChannels];
			for (int i = 0; i < nbChannels; i++)
			{
				array[i] = (float*)(void*)asioOutputBuffers[i];
			}
			for (int j = 0; j < nbSamples; j++)
			{
				for (int k = 0; k < nbChannels; k++)
				{
					int num = k;
					float* ptr2 = array[num];
					array[num] = ptr2 + 1;
					*ptr2 = *(ptr++);
				}
			}
		}

		private static int clampTo24Bit(double sampleValue)
		{
			sampleValue = ((sampleValue < -1.0) ? (-1.0) : ((sampleValue > 1.0) ? 1.0 : sampleValue));
			return (int)(sampleValue * 8388607.0);
		}

		private static int clampToInt(double sampleValue)
		{
			sampleValue = ((sampleValue < -1.0) ? (-1.0) : ((sampleValue > 1.0) ? 1.0 : sampleValue));
			return (int)(sampleValue * 2147483647.0);
		}

		private static short clampToShort(double sampleValue)
		{
			sampleValue = ((sampleValue < -1.0) ? (-1.0) : ((sampleValue > 1.0) ? 1.0 : sampleValue));
			return (short)(sampleValue * 32767.0);
		}
	}
	public enum AsioSampleType
	{
		Int16MSB = 0,
		Int24MSB = 1,
		Int32MSB = 2,
		Float32MSB = 3,
		Float64MSB = 4,
		Int32MSB16 = 8,
		Int32MSB18 = 9,
		Int32MSB20 = 10,
		Int32MSB24 = 11,
		Int16LSB = 16,
		Int24LSB = 17,
		Int32LSB = 18,
		Float32LSB = 19,
		Float64LSB = 20,
		Int32LSB16 = 24,
		Int32LSB18 = 25,
		Int32LSB20 = 26,
		Int32LSB24 = 27,
		DSDInt8LSB1 = 32,
		DSDInt8MSB1 = 33,
		DSDInt8NER8 = 40
	}
	internal class AsioException : Exception
	{
		private AsioError error;

		public AsioError Error
		{
			get
			{
				return error;
			}
			set
			{
				error = value;
				Data["ASIOError"] = error;
			}
		}

		public AsioException()
		{
		}

		public AsioException(string message)
			: base(message)
		{
		}

		public AsioException(string message, Exception innerException)
			: base(message, innerException)
		{
		}

		public static string getErrorName(AsioError error)
		{
			return Enum.GetName(typeof(AsioError), error);
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	internal struct AsioBufferInfo
	{
		public bool isInput;

		public int channelNum;

		public IntPtr pBuffer0;

		public IntPtr pBuffer1;

		public IntPtr Buffer(int bufferIndex)
		{
			if (bufferIndex != 0)
			{
				return pBuffer1;
			}
			return pBuffer0;
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	internal struct AsioTimeCode
	{
		public double speed;

		public Asio64Bit timeCodeSamples;

		public AsioTimeCodeFlags flags;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
		public string future;
	}
	[Flags]
	internal enum AsioTimeCodeFlags
	{
		kTcValid = 1,
		kTcRunning = 2,
		kTcReverse = 4,
		kTcOnspeed = 8,
		kTcStill = 0x10,
		kTcSpeedValid = 0x100
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	internal struct AsioTimeInfo
	{
		public double speed;

		public Asio64Bit systemTime;

		public Asio64Bit samplePosition;

		public double sampleRate;

		public AsioTimeInfoFlags flags;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]
		public string reserved;
	}
	[Flags]
	internal enum AsioTimeInfoFlags
	{
		kSystemTimeValid = 1,
		kSamplePositionValid = 2,
		kSampleRateValid = 4,
		kSpeedValid = 8,
		kSampleRateChanged = 0x10,
		kClockSourceChanged = 0x20
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	internal struct AsioTime
	{
		public int reserved1;

		public int reserved2;

		public int reserved3;

		public int reserved4;

		public AsioTimeInfo timeInfo;

		public AsioTimeCode timeCode;
	}
}

BepInEx/core/NAudio.Core.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using NAudio.Dmo;
using NAudio.Dsp;
using NAudio.FileFormats.Wav;
using NAudio.Utils;
using NAudio.Wave;
using NAudio.Wave.SampleProviders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.Core")]
[assembly: AssemblyTitle("NAudio.Core")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio
{
	public enum Manufacturers
	{
		Microsoft = 1,
		Creative = 2,
		Mediavision = 3,
		Fujitsu = 4,
		Artisoft = 20,
		TurtleBeach = 21,
		Ibm = 22,
		Vocaltec = 23,
		Roland = 24,
		DspSolutions = 25,
		Nec = 26,
		Ati = 27,
		Wanglabs = 28,
		Tandy = 29,
		Voyetra = 30,
		Antex = 31,
		IclPS = 32,
		Intel = 33,
		Gravis = 34,
		Val = 35,
		Interactive = 36,
		Yamaha = 37,
		Everex = 38,
		Echo = 39,
		Sierra = 40,
		Cat = 41,
		Apps = 42,
		DspGroup = 43,
		Melabs = 44,
		ComputerFriends = 45,
		Ess = 46,
		Audiofile = 47,
		Motorola = 48,
		Canopus = 49,
		Epson = 50,
		Truevision = 51,
		Aztech = 52,
		Videologic = 53,
		Scalacs = 54,
		Korg = 55,
		Apt = 56,
		Ics = 57,
		Iteratedsys = 58,
		Metheus = 59,
		Logitech = 60,
		Winnov = 61,
		Ncr = 62,
		Exan = 63,
		Ast = 64,
		Willowpond = 65,
		Sonicfoundry = 66,
		Vitec = 67,
		Moscom = 68,
		Siliconsoft = 69,
		Supermac = 73,
		Audiopt = 74,
		Speechcomp = 76,
		Ahead = 77,
		Dolby = 78,
		Oki = 79,
		Auravision = 80,
		Olivetti = 81,
		Iomagic = 82,
		Matsushita = 83,
		Controlres = 84,
		Xebec = 85,
		Newmedia = 86,
		Nms = 87,
		Lyrrus = 88,
		Compusic = 89,
		Opti = 90,
		Adlacc = 91,
		Compaq = 92,
		Dialogic = 93,
		Insoft = 94,
		Mptus = 95,
		Weitek = 96,
		LernoutAndHauspie = 97,
		Qciar = 98,
		Apple = 99,
		Digital = 100,
		Motu = 101,
		Workbit = 102,
		Ositech = 103,
		Miro = 104,
		Cirruslogic = 105,
		Isolution = 106,
		Horizons = 107,
		Concepts = 108,
		Vtg = 109,
		Radius = 110,
		Rockwell = 111,
		Xyz = 112,
		Opcode = 113,
		Voxware = 114,
		NorthernTelecom = 115,
		Apicom = 116,
		Grande = 117,
		Addx = 118,
		Wildcat = 119,
		Rhetorex = 120,
		Brooktree = 121,
		Ensoniq = 125,
		Fast = 126,
		Nvidia = 127,
		Oksori = 128,
		Diacoustics = 129,
		Gulbransen = 130,
		KayElemetrics = 131,
		Crystal = 132,
		SplashStudios = 133,
		Quarterdeck = 134,
		Tdk = 135,
		DigitalAudioLabs = 136,
		Seersys = 137,
		Picturetel = 138,
		AttMicroelectronics = 139,
		Osprey = 140,
		Mediatrix = 141,
		Soundesigns = 142,
		Aldigital = 143,
		SpectrumSignalProcessing = 144,
		Ecs = 145,
		Amd = 146,
		Coredynamics = 147,
		Canam = 148,
		Softsound = 149,
		Norris = 150,
		Ddd = 151,
		Euphonics = 152,
		Precept = 153,
		CrystalNet = 154,
		Chromatic = 155,
		Voiceinfo = 156,
		Viennasys = 157,
		Connectix = 158,
		Gadgetlabs = 159,
		Frontier = 160,
		Viona = 161,
		Casio = 162,
		Diamondmm = 163,
		S3 = 164,
		FraunhoferIis = 172
	}
	public class MmException : Exception
	{
		public MmResult Result { get; }

		public string Function { get; }

		public MmException(MmResult result, string function)
			: base(ErrorMessage(result, function))
		{
			Result = result;
			Function = function;
		}

		private static string ErrorMessage(MmResult result, string function)
		{
			return $"{result} calling {function}";
		}

		public static void Try(MmResult result, string function)
		{
			if (result != 0)
			{
				throw new MmException(result, function);
			}
		}
	}
	public enum MmResult
	{
		NoError = 0,
		UnspecifiedError = 1,
		BadDeviceId = 2,
		NotEnabled = 3,
		AlreadyAllocated = 4,
		InvalidHandle = 5,
		NoDriver = 6,
		MemoryAllocationError = 7,
		NotSupported = 8,
		BadErrorNumber = 9,
		InvalidFlag = 10,
		InvalidParameter = 11,
		HandleBusy = 12,
		InvalidAlias = 13,
		BadRegistryDatabase = 14,
		RegistryKeyNotFound = 15,
		RegistryReadError = 16,
		RegistryWriteError = 17,
		RegistryDeleteError = 18,
		RegistryValueNotFound = 19,
		NoDriverCallback = 20,
		MoreData = 21,
		WaveBadFormat = 32,
		WaveStillPlaying = 33,
		WaveHeaderUnprepared = 34,
		WaveSync = 35,
		AcmNotPossible = 512,
		AcmBusy = 513,
		AcmHeaderUnprepared = 514,
		AcmCancelled = 515,
		MixerInvalidLine = 1024,
		MixerInvalidControl = 1025,
		MixerInvalidValue = 1026
	}
}
namespace NAudio.CoreAudioApi
{
	public enum CaptureState
	{
		Stopped,
		Starting,
		Capturing,
		Stopping
	}
}
namespace NAudio.Dmo
{
	public class AudioMediaSubtypes
	{
		public static readonly Guid MEDIASUBTYPE_PCM = new Guid("00000001-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_PCMAudioObsolete = new Guid("e436eb8a-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_MPEG1Packet = new Guid("e436eb80-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_MPEG1Payload = new Guid("e436eb81-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_MPEG2_AUDIO = new Guid("e06d802b-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MEDIASUBTYPE_DVD_LPCM_AUDIO = new Guid("e06d8032-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MEDIASUBTYPE_DRM_Audio = new Guid("00000009-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_IEEE_FLOAT = new Guid("00000003-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_DOLBY_AC3 = new Guid("e06d802c-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MEDIASUBTYPE_DOLBY_AC3_SPDIF = new Guid("00000092-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_RAW_SPORT = new Guid("00000240-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_SPDIF_TAG_241h = new Guid("00000241-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_I420 = new Guid("30323449-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_IYUV = new Guid("56555949-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_RGB1 = new Guid("e436eb78-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB24 = new Guid("e436eb7d-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB32 = new Guid("e436eb7e-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB4 = new Guid("e436eb79-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB555 = new Guid("e436eb7c-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB565 = new Guid("e436eb7b-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB8 = new Guid("e436eb7a-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_UYVY = new Guid("59565955-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_VIDEOIMAGE = new Guid("1d4a45f2-e5f6-4b44-8388-f0ae5c0e0c37");

		public static readonly Guid MEDIASUBTYPE_YUY2 = new Guid("32595559-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_YV12 = new Guid("31313259-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_YVU9 = new Guid("39555659-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_YVYU = new Guid("55595659-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMFORMAT_MPEG2Video = new Guid("e06d80e3-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid WMFORMAT_Script = new Guid("5C8510F2-DEBE-4ca7-BBA5-F07A104F8DFF");

		public static readonly Guid WMFORMAT_VideoInfo = new Guid("05589f80-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid WMFORMAT_WaveFormatEx = new Guid("05589f81-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid WMFORMAT_WebStream = new Guid("da1e6b13-8359-4050-b398-388e965bf00c");

		public static readonly Guid WMMEDIASUBTYPE_ACELPnet = new Guid("00000130-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_Base = new Guid("00000000-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_DRM = new Guid("00000009-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MP3 = new Guid("00000055-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MP43 = new Guid("3334504D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MP4S = new Guid("5334504D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_M4S2 = new Guid("3253344D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_P422 = new Guid("32323450-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MPEG2_VIDEO = new Guid("e06d8026-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid WMMEDIASUBTYPE_MSS1 = new Guid("3153534D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MSS2 = new Guid("3253534D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_PCM = new Guid("00000001-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WebStream = new Guid("776257d4-c627-41cb-8f81-7ac7ff1c40cc");

		public static readonly Guid WMMEDIASUBTYPE_WMAudio_Lossless = new Guid("00000163-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV2 = new Guid("00000161-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV7 = new Guid("00000161-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV8 = new Guid("00000161-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV9 = new Guid("00000162-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMSP1 = new Guid("0000000A-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMV1 = new Guid("31564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMV2 = new Guid("32564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMV3 = new Guid("33564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMVA = new Guid("41564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMVP = new Guid("50564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WVP2 = new Guid("32505657-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIATYPE_Audio = new Guid("73647561-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIATYPE_FileTransfer = new Guid("D9E47579-930E-4427-ADFC-AD80F290E470");

		public static readonly Guid WMMEDIATYPE_Image = new Guid("34A50FD8-8AA5-4386-81FE-A0EFE0488E31");

		public static readonly Guid WMMEDIATYPE_Script = new Guid("73636d64-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIATYPE_Text = new Guid("9BBA1EA7-5AB2-4829-BA57-0940209BCF3E");

		public static readonly Guid WMMEDIATYPE_Video = new Guid("73646976-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMSCRIPTTYPE_TwoStrings = new Guid("82f38a70-c29f-11d1-97ad-00a0c95ea850");

		public static readonly Guid MEDIASUBTYPE_WAVE = new Guid("e436eb8b-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_AU = new Guid("e436eb8c-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_AIFF = new Guid("e436eb8d-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid[] AudioSubTypes = new Guid[13]
		{
			MEDIASUBTYPE_PCM, MEDIASUBTYPE_PCMAudioObsolete, MEDIASUBTYPE_MPEG1Packet, MEDIASUBTYPE_MPEG1Payload, MEDIASUBTYPE_MPEG2_AUDIO, MEDIASUBTYPE_DVD_LPCM_AUDIO, MEDIASUBTYPE_DRM_Audio, MEDIASUBTYPE_IEEE_FLOAT, MEDIASUBTYPE_DOLBY_AC3, MEDIASUBTYPE_DOLBY_AC3_SPDIF,
			MEDIASUBTYPE_RAW_SPORT, MEDIASUBTYPE_SPDIF_TAG_241h, WMMEDIASUBTYPE_MP3
		};

		public static readonly string[] AudioSubTypeNames = new string[13]
		{
			"PCM", "PCM Obsolete", "MPEG1Packet", "MPEG1Payload", "MPEG2_AUDIO", "DVD_LPCM_AUDIO", "DRM_Audio", "IEEE_FLOAT", "DOLBY_AC3", "DOLBY_AC3_SPDIF",
			"RAW_SPORT", "SPDIF_TAG_241h", "MP3"
		};

		public static string GetAudioSubtypeName(Guid subType)
		{
			for (int i = 0; i < AudioSubTypes.Length; i++)
			{
				if (subType == AudioSubTypes[i])
				{
					return AudioSubTypeNames[i];
				}
			}
			return subType.ToString();
		}
	}
}
namespace NAudio.Utils
{
	public static class BufferHelpers
	{
		public static byte[] Ensure(byte[] buffer, int bytesRequired)
		{
			if (buffer == null || buffer.Length < bytesRequired)
			{
				buffer = new byte[bytesRequired];
			}
			return buffer;
		}

		public static float[] Ensure(float[] buffer, int samplesRequired)
		{
			if (buffer == null || buffer.Length < samplesRequired)
			{
				buffer = new float[samplesRequired];
			}
			return buffer;
		}
	}
	public static class ByteArrayExtensions
	{
		public static bool IsEntirelyNull(byte[] buffer)
		{
			for (int i = 0; i < buffer.Length; i++)
			{
				if (buffer[i] != 0)
				{
					return false;
				}
			}
			return true;
		}

		public static string DescribeAsHex(byte[] buffer, string separator, int bytesPerLine)
		{
			StringBuilder stringBuilder = new StringBuilder();
			int num = 0;
			foreach (byte b in buffer)
			{
				stringBuilder.AppendFormat("{0:X2}{1}", b, separator);
				if (++num % bytesPerLine == 0)
				{
					stringBuilder.Append("\r\n");
				}
			}
			stringBuilder.Append("\r\n");
			return stringBuilder.ToString();
		}

		public static string DecodeAsString(byte[] buffer, int offset, int length, Encoding encoding)
		{
			for (int i = 0; i < length; i++)
			{
				if (buffer[offset + i] == 0)
				{
					length = i;
				}
			}
			return encoding.GetString(buffer, offset, length);
		}

		public static byte[] Concat(params byte[][] byteArrays)
		{
			int num = 0;
			byte[][] array = byteArrays;
			foreach (byte[] array2 in array)
			{
				num += array2.Length;
			}
			if (num <= 0)
			{
				return new byte[0];
			}
			byte[] array3 = new byte[num];
			int num2 = 0;
			array = byteArrays;
			foreach (byte[] array4 in array)
			{
				Array.Copy(array4, 0, array3, num2, array4.Length);
				num2 += array4.Length;
			}
			return array3;
		}
	}
	public class ByteEncoding : Encoding
	{
		public static readonly ByteEncoding Instance = new ByteEncoding();

		private ByteEncoding()
		{
		}

		public override int GetByteCount(char[] chars, int index, int count)
		{
			return count;
		}

		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
		{
			for (int i = 0; i < charCount; i++)
			{
				bytes[byteIndex + i] = (byte)chars[charIndex + i];
			}
			return charCount;
		}

		public override int GetCharCount(byte[] bytes, int index, int count)
		{
			for (int i = 0; i < count; i++)
			{
				if (bytes[index + i] == 0)
				{
					return i;
				}
			}
			return count;
		}

		public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
		{
			for (int i = 0; i < byteCount; i++)
			{
				byte b = bytes[byteIndex + i];
				if (b == 0)
				{
					return i;
				}
				chars[charIndex + i] = (char)b;
			}
			return byteCount;
		}

		public override int GetMaxCharCount(int byteCount)
		{
			return byteCount;
		}

		public override int GetMaxByteCount(int charCount)
		{
			return charCount;
		}
	}
	public class ChunkIdentifier
	{
		public static int ChunkIdentifierToInt32(string s)
		{
			if (s.Length != 4)
			{
				throw new ArgumentException("Must be a four character string");
			}
			byte[] bytes = Encoding.UTF8.GetBytes(s);
			if (bytes.Length != 4)
			{
				throw new ArgumentException("Must encode to exactly four bytes");
			}
			return BitConverter.ToInt32(bytes, 0);
		}
	}
	public class CircularBuffer
	{
		private readonly byte[] buffer;

		private readonly object lockObject;

		private int writePosition;

		private int readPosition;

		private int byteCount;

		public int MaxLength => buffer.Length;

		public int Count
		{
			get
			{
				lock (lockObject)
				{
					return byteCount;
				}
			}
		}

		public CircularBuffer(int size)
		{
			buffer = new byte[size];
			lockObject = new object();
		}

		public int Write(byte[] data, int offset, int count)
		{
			lock (lockObject)
			{
				int num = 0;
				if (count > buffer.Length - byteCount)
				{
					count = buffer.Length - byteCount;
				}
				int num2 = Math.Min(buffer.Length - writePosition, count);
				Array.Copy(data, offset, buffer, writePosition, num2);
				writePosition += num2;
				writePosition %= buffer.Length;
				num += num2;
				if (num < count)
				{
					Array.Copy(data, offset + num, buffer, writePosition, count - num);
					writePosition += count - num;
					num = count;
				}
				byteCount += num;
				return num;
			}
		}

		public int Read(byte[] data, int offset, int count)
		{
			lock (lockObject)
			{
				if (count > byteCount)
				{
					count = byteCount;
				}
				int num = 0;
				int num2 = Math.Min(buffer.Length - readPosition, count);
				Array.Copy(buffer, readPosition, data, offset, num2);
				num += num2;
				readPosition += num2;
				readPosition %= buffer.Length;
				if (num < count)
				{
					Array.Copy(buffer, readPosition, data, offset + num, count - num);
					readPosition += count - num;
					num = count;
				}
				byteCount -= num;
				return num;
			}
		}

		public void Reset()
		{
			lock (lockObject)
			{
				ResetInner();
			}
		}

		private void ResetInner()
		{
			byteCount = 0;
			readPosition = 0;
			writePosition = 0;
		}

		public void Advance(int count)
		{
			lock (lockObject)
			{
				if (count >= byteCount)
				{
					ResetInner();
					return;
				}
				byteCount -= count;
				readPosition += count;
				readPosition %= MaxLength;
			}
		}
	}
	public class Decibels
	{
		private const double LOG_2_DB = 8.685889638065037;

		private const double DB_2_LOG = 0.11512925464970228;

		public static double LinearToDecibels(double lin)
		{
			return Math.Log(lin) * 8.685889638065037;
		}

		public static double DecibelsToLinear(double dB)
		{
			return Math.Exp(dB * 0.11512925464970228);
		}
	}
	[AttributeUsage(AttributeTargets.Field)]
	public class FieldDescriptionAttribute : Attribute
	{
		public string Description { get; }

		public FieldDescriptionAttribute(string description)
		{
			Description = description;
		}

		public override string ToString()
		{
			return Description;
		}
	}
	public static class FieldDescriptionHelper
	{
		public static string Describe(Type t, Guid guid)
		{
			FieldInfo[] fields = t.GetFields(BindingFlags.Static | BindingFlags.Public);
			foreach (FieldInfo fieldInfo in fields)
			{
				if (!fieldInfo.IsPublic || !fieldInfo.IsStatic || !(fieldInfo.FieldType == typeof(Guid)) || !((Guid)fieldInfo.GetValue(null) == guid))
				{
					continue;
				}
				object[] customAttributes = fieldInfo.GetCustomAttributes(inherit: false);
				for (int j = 0; j < customAttributes.Length; j++)
				{
					if (customAttributes[j] is FieldDescriptionAttribute fieldDescriptionAttribute)
					{
						return fieldDescriptionAttribute.Description;
					}
				}
				return fieldInfo.Name;
			}
			return guid.ToString();
		}
	}
	public static class HResult
	{
		public const int S_OK = 0;

		public const int S_FALSE = 1;

		public const int E_INVALIDARG = -2147483645;

		private const int FACILITY_AAF = 18;

		private const int FACILITY_ACS = 20;

		private const int FACILITY_BACKGROUNDCOPY = 32;

		private const int FACILITY_CERT = 11;

		private const int FACILITY_COMPLUS = 17;

		private const int FACILITY_CONFIGURATION = 33;

		private const int FACILITY_CONTROL = 10;

		private const int FACILITY_DISPATCH = 2;

		private const int FACILITY_DPLAY = 21;

		private const int FACILITY_HTTP = 25;

		private const int FACILITY_INTERNET = 12;

		private const int FACILITY_ITF = 4;

		private const int FACILITY_MEDIASERVER = 13;

		private const int FACILITY_MSMQ = 14;

		private const int FACILITY_NULL = 0;

		private const int FACILITY_RPC = 1;

		private const int FACILITY_SCARD = 16;

		private const int FACILITY_SECURITY = 9;

		private const int FACILITY_SETUPAPI = 15;

		private const int FACILITY_SSPI = 9;

		private const int FACILITY_STORAGE = 3;

		private const int FACILITY_SXS = 23;

		private const int FACILITY_UMI = 22;

		private const int FACILITY_URT = 19;

		private const int FACILITY_WIN32 = 7;

		private const int FACILITY_WINDOWS = 8;

		private const int FACILITY_WINDOWS_CE = 24;

		public static int MAKE_HRESULT(int sev, int fac, int code)
		{
			return (sev << 31) | (fac << 16) | code;
		}

		public static int GetHResult(this COMException exception)
		{
			return exception.ErrorCode;
		}
	}
	public static class IEEE
	{
		private static double UnsignedToFloat(ulong u)
		{
			return (double)(long)(u - int.MaxValue - 1) + 2147483648.0;
		}

		private static double ldexp(double x, int exp)
		{
			return x * Math.Pow(2.0, exp);
		}

		private static double frexp(double x, out int exp)
		{
			exp = (int)Math.Floor(Math.Log(x) / Math.Log(2.0)) + 1;
			return 1.0 - (Math.Pow(2.0, exp) - x) / Math.Pow(2.0, exp);
		}

		private static ulong FloatToUnsigned(double f)
		{
			return (ulong)((long)(f - 2147483648.0) + int.MaxValue + 1);
		}

		public static byte[] ConvertToIeeeExtended(double num)
		{
			int num2;
			if (num < 0.0)
			{
				num2 = 32768;
				num *= -1.0;
			}
			else
			{
				num2 = 0;
			}
			ulong num4;
			ulong num5;
			int num3;
			if (num == 0.0)
			{
				num3 = 0;
				num4 = 0uL;
				num5 = 0uL;
			}
			else
			{
				double num6 = frexp(num, out num3);
				if (num3 > 16384 || !(num6 < 1.0))
				{
					num3 = num2 | 0x7FFF;
					num4 = 0uL;
					num5 = 0uL;
				}
				else
				{
					num3 += 16382;
					if (num3 < 0)
					{
						num6 = ldexp(num6, num3);
						num3 = 0;
					}
					num3 |= num2;
					num6 = ldexp(num6, 32);
					double num7 = Math.Floor(num6);
					num4 = FloatToUnsigned(num7);
					num6 = ldexp(num6 - num7, 32);
					num7 = Math.Floor(num6);
					num5 = FloatToUnsigned(num7);
				}
			}
			return new byte[10]
			{
				(byte)(num3 >> 8),
				(byte)num3,
				(byte)(num4 >> 24),
				(byte)(num4 >> 16),
				(byte)(num4 >> 8),
				(byte)num4,
				(byte)(num5 >> 24),
				(byte)(num5 >> 16),
				(byte)(num5 >> 8),
				(byte)num5
			};
		}

		public static double ConvertFromIeeeExtended(byte[] bytes)
		{
			if (bytes.Length != 10)
			{
				throw new Exception("Incorrect length for IEEE extended.");
			}
			int num = ((bytes[0] & 0x7F) << 8) | bytes[1];
			uint num2 = (uint)((bytes[2] << 24) | (bytes[3] << 16) | (bytes[4] << 8) | bytes[5]);
			uint num3 = (uint)((bytes[6] << 24) | (bytes[7] << 16) | (bytes[8] << 8) | bytes[9]);
			double num4;
			if (num == 0 && num2 == 0 && num3 == 0)
			{
				num4 = 0.0;
			}
			else if (num == 32767)
			{
				num4 = double.NaN;
			}
			else
			{
				num -= 16383;
				num4 = ldexp(UnsignedToFloat(num2), num -= 31);
				num4 += ldexp(UnsignedToFloat(num3), num -= 32);
			}
			if ((bytes[0] & 0x80) == 128)
			{
				return 0.0 - num4;
			}
			return num4;
		}
	}
	public class IgnoreDisposeStream : Stream
	{
		public Stream SourceStream { get; private set; }

		public bool IgnoreDispose { get; set; }

		public override bool CanRead => SourceStream.CanRead;

		public override bool CanSeek => SourceStream.CanSeek;

		public override bool CanWrite => SourceStream.CanWrite;

		public override long Length => SourceStream.Length;

		public override long Position
		{
			get
			{
				return SourceStream.Position;
			}
			set
			{
				SourceStream.Position = value;
			}
		}

		public IgnoreDisposeStream(Stream sourceStream)
		{
			SourceStream = sourceStream;
			IgnoreDispose = true;
		}

		public override void Flush()
		{
			SourceStream.Flush();
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			return SourceStream.Read(buffer, offset, count);
		}

		public override long Seek(long offset, SeekOrigin origin)
		{
			return SourceStream.Seek(offset, origin);
		}

		public override void SetLength(long value)
		{
			SourceStream.SetLength(value);
		}

		public override void Write(byte[] buffer, int offset, int count)
		{
			SourceStream.Write(buffer, offset, count);
		}

		protected override void Dispose(bool disposing)
		{
			if (!IgnoreDispose)
			{
				SourceStream.Dispose();
				SourceStream = null;
			}
		}
	}
	public static class NativeMethods
	{
		[DllImport("kernel32.dll")]
		public static extern IntPtr LoadLibrary(string dllToLoad);

		[DllImport("kernel32.dll")]
		public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);

		[DllImport("kernel32.dll")]
		public static extern bool FreeLibrary(IntPtr hModule);
	}
	public static class WavePositionExtensions
	{
		public static TimeSpan GetPositionTimeSpan(this IWavePosition @this)
		{
			return TimeSpan.FromMilliseconds((double)(@this.GetPosition() / (@this.OutputWaveFormat.Channels * @this.OutputWaveFormat.BitsPerSample / 8)) * 1000.0 / (double)@this.OutputWaveFormat.SampleRate);
		}
	}
}
namespace NAudio.FileFormats.Wav
{
	public class WaveFileChunkReader
	{
		private WaveFormat waveFormat;

		private long dataChunkPosition;

		private long dataChunkLength;

		private List<RiffChunk> riffChunks;

		private readonly bool strictMode;

		private bool isRf64;

		private readonly bool storeAllChunks;

		private long riffSize;

		public WaveFormat WaveFormat => waveFormat;

		public long DataChunkPosition => dataChunkPosition;

		public long DataChunkLength => dataChunkLength;

		public List<RiffChunk> RiffChunks => riffChunks;

		public WaveFileChunkReader()
		{
			storeAllChunks = true;
			strictMode = false;
		}

		public void ReadWaveHeader(Stream stream)
		{
			dataChunkPosition = -1L;
			waveFormat = null;
			riffChunks = new List<RiffChunk>();
			dataChunkLength = 0L;
			BinaryReader binaryReader = new BinaryReader(stream);
			ReadRiffHeader(binaryReader);
			riffSize = binaryReader.ReadUInt32();
			if (binaryReader.ReadInt32() != ChunkIdentifier.ChunkIdentifierToInt32("WAVE"))
			{
				throw new FormatException("Not a WAVE file - no WAVE header");
			}
			if (isRf64)
			{
				ReadDs64Chunk(binaryReader);
			}
			int num = ChunkIdentifier.ChunkIdentifierToInt32("data");
			int num2 = ChunkIdentifier.ChunkIdentifierToInt32("fmt ");
			long num3 = Math.Min(riffSize + 8, stream.Length);
			while (stream.Position <= num3 - 8)
			{
				int num4 = binaryReader.ReadInt32();
				uint num5 = binaryReader.ReadUInt32();
				if (num4 == num)
				{
					dataChunkPosition = stream.Position;
					if (!isRf64)
					{
						dataChunkLength = num5;
					}
					stream.Position += num5;
				}
				else if (num4 == num2)
				{
					if (num5 > int.MaxValue)
					{
						throw new InvalidDataException($"Format chunk length must be between 0 and {int.MaxValue}.");
					}
					waveFormat = WaveFormat.FromFormatChunk(binaryReader, (int)num5);
				}
				else
				{
					if (num5 > stream.Length - stream.Position)
					{
						if (!strictMode)
						{
						}
						break;
					}
					if (storeAllChunks)
					{
						if (num5 > int.MaxValue)
						{
							throw new InvalidDataException($"RiffChunk chunk length must be between 0 and {int.MaxValue}.");
						}
						riffChunks.Add(GetRiffChunk(stream, num4, (int)num5));
					}
					stream.Position += num5;
				}
				if (num5 % 2 != 0 && binaryReader.PeekChar() == 0)
				{
					stream.Position++;
				}
			}
			if (waveFormat == null)
			{
				throw new FormatException("Invalid WAV file - No fmt chunk found");
			}
			if (dataChunkPosition == -1)
			{
				throw new FormatException("Invalid WAV file - No data chunk found");
			}
		}

		private void ReadDs64Chunk(BinaryReader reader)
		{
			int num = ChunkIdentifier.ChunkIdentifierToInt32("ds64");
			if (reader.ReadInt32() != num)
			{
				throw new FormatException("Invalid RF64 WAV file - No ds64 chunk found");
			}
			int num2 = reader.ReadInt32();
			riffSize = reader.ReadInt64();
			dataChunkLength = reader.ReadInt64();
			reader.ReadInt64();
			reader.ReadBytes(num2 - 24);
		}

		private static RiffChunk GetRiffChunk(Stream stream, int chunkIdentifier, int chunkLength)
		{
			return new RiffChunk(chunkIdentifier, chunkLength, stream.Position);
		}

		private void ReadRiffHeader(BinaryReader br)
		{
			int num = br.ReadInt32();
			if (num == ChunkIdentifier.ChunkIdentifierToInt32("RF64"))
			{
				isRf64 = true;
			}
			else if (num != ChunkIdentifier.ChunkIdentifierToInt32("RIFF"))
			{
				throw new FormatException("Not a WAVE file - no RIFF header");
			}
		}
	}
}
namespace NAudio.SoundFont
{
	public class Generator
	{
		public GeneratorEnum GeneratorType { get; set; }

		public ushort UInt16Amount { get; set; }

		public short Int16Amount
		{
			get
			{
				return (short)UInt16Amount;
			}
			set
			{
				UInt16Amount = (ushort)value;
			}
		}

		public byte LowByteAmount
		{
			get
			{
				return (byte)(UInt16Amount & 0xFFu);
			}
			set
			{
				UInt16Amount &= 65280;
				UInt16Amount += value;
			}
		}

		public byte HighByteAmount
		{
			get
			{
				return (byte)((UInt16Amount & 0xFF00) >> 8);
			}
			set
			{
				UInt16Amount &= 255;
				UInt16Amount += (ushort)(value << 8);
			}
		}

		public Instrument Instrument { get; set; }

		public SampleHeader SampleHeader { get; set; }

		public override string ToString()
		{
			if (GeneratorType == GeneratorEnum.Instrument)
			{
				return "Generator Instrument " + Instrument.Name;
			}
			if (GeneratorType == GeneratorEnum.SampleID)
			{
				return $"Generator SampleID {SampleHeader}";
			}
			return $"Generator {GeneratorType} {UInt16Amount}";
		}
	}
	internal class GeneratorBuilder : StructureBuilder<Generator>
	{
		public override int Length => 4;

		public Generator[] Generators => data.ToArray();

		public override Generator Read(BinaryReader br)
		{
			Generator generator = new Generator();
			generator.GeneratorType = (GeneratorEnum)br.ReadUInt16();
			generator.UInt16Amount = br.ReadUInt16();
			data.Add(generator);
			return generator;
		}

		public override void Write(BinaryWriter bw, Generator o)
		{
		}

		public void Load(Instrument[] instruments)
		{
			Generator[] generators = Generators;
			foreach (Generator generator in generators)
			{
				if (generator.GeneratorType == GeneratorEnum.Instrument)
				{
					generator.Instrument = instruments[generator.UInt16Amount];
				}
			}
		}

		public void Load(SampleHeader[] sampleHeaders)
		{
			Generator[] generators = Generators;
			foreach (Generator generator in generators)
			{
				if (generator.GeneratorType == GeneratorEnum.SampleID)
				{
					generator.SampleHeader = sampleHeaders[generator.UInt16Amount];
				}
			}
		}
	}
	public enum GeneratorEnum
	{
		StartAddressOffset,
		EndAddressOffset,
		StartLoopAddressOffset,
		EndLoopAddressOffset,
		StartAddressCoarseOffset,
		ModulationLFOToPitch,
		VibratoLFOToPitch,
		ModulationEnvelopeToPitch,
		InitialFilterCutoffFrequency,
		InitialFilterQ,
		ModulationLFOToFilterCutoffFrequency,
		ModulationEnvelopeToFilterCutoffFrequency,
		EndAddressCoarseOffset,
		ModulationLFOToVolume,
		Unused1,
		ChorusEffectsSend,
		ReverbEffectsSend,
		Pan,
		Unused2,
		Unused3,
		Unused4,
		DelayModulationLFO,
		FrequencyModulationLFO,
		DelayVibratoLFO,
		FrequencyVibratoLFO,
		DelayModulationEnvelope,
		AttackModulationEnvelope,
		HoldModulationEnvelope,
		DecayModulationEnvelope,
		SustainModulationEnvelope,
		ReleaseModulationEnvelope,
		KeyNumberToModulationEnvelopeHold,
		KeyNumberToModulationEnvelopeDecay,
		DelayVolumeEnvelope,
		AttackVolumeEnvelope,
		HoldVolumeEnvelope,
		DecayVolumeEnvelope,
		SustainVolumeEnvelope,
		ReleaseVolumeEnvelope,
		KeyNumberToVolumeEnvelopeHold,
		KeyNumberToVolumeEnvelopeDecay,
		Instrument,
		Reserved1,
		KeyRange,
		VelocityRange,
		StartLoopAddressCoarseOffset,
		KeyNumber,
		Velocity,
		InitialAttenuation,
		Reserved2,
		EndLoopAddressCoarseOffset,
		CoarseTune,
		FineTune,
		SampleID,
		SampleModes,
		Reserved3,
		ScaleTuning,
		ExclusiveClass,
		OverridingRootKey,
		Unused5,
		UnusedEnd
	}
	public class InfoChunk
	{
		public SFVersion SoundFontVersion { get; }

		public string WaveTableSoundEngine { get; set; }

		public string BankName { get; set; }

		public string DataROM { get; set; }

		public string CreationDate { get; set; }

		public string Author { get; set; }

		public string TargetProduct { get; set; }

		public string Copyright { get; set; }

		public string Comments { get; set; }

		public string Tools { get; set; }

		public SFVersion ROMVersion { get; set; }

		internal InfoChunk(RiffChunk chunk)
		{
			bool flag = false;
			bool flag2 = false;
			if (chunk.ReadChunkID() != "INFO")
			{
				throw new InvalidDataException("Not an INFO chunk");
			}
			RiffChunk nextSubChunk;
			while ((nextSubChunk = chunk.GetNextSubChunk()) != null)
			{
				switch (nextSubChunk.ChunkID)
				{
				case "ifil":
					flag = true;
					SoundFontVersion = nextSubChunk.GetDataAsStructure(new SFVersionBuilder());
					break;
				case "isng":
					WaveTableSoundEngine = nextSubChunk.GetDataAsString();
					break;
				case "INAM":
					flag2 = true;
					BankName = nextSubChunk.GetDataAsString();
					break;
				case "irom":
					DataROM = nextSubChunk.GetDataAsString();
					break;
				case "iver":
					ROMVersion = nextSubChunk.GetDataAsStructure(new SFVersionBuilder());
					break;
				case "ICRD":
					CreationDate = nextSubChunk.GetDataAsString();
					break;
				case "IENG":
					Author = nextSubChunk.GetDataAsString();
					break;
				case "IPRD":
					TargetProduct = nextSubChunk.GetDataAsString();
					break;
				case "ICOP":
					Copyright = nextSubChunk.GetDataAsString();
					break;
				case "ICMT":
					Comments = nextSubChunk.GetDataAsString();
					break;
				case "ISFT":
					Tools = nextSubChunk.GetDataAsString();
					break;
				default:
					throw new InvalidDataException("Unknown chunk type " + nextSubChunk.ChunkID);
				}
			}
			if (!flag)
			{
				throw new InvalidDataException("Missing SoundFont version information");
			}
			if (!flag2)
			{
				throw new InvalidDataException("Missing SoundFont name information");
			}
		}

		public override string ToString()
		{
			return string.Format("Bank Name: {0}\r\nAuthor: {1}\r\nCopyright: {2}\r\nCreation Date: {3}\r\nTools: {4}\r\nComments: {5}\r\nSound Engine: {6}\r\nSoundFont Version: {7}\r\nTarget Product: {8}\r\nData ROM: {9}\r\nROM Version: {10}", BankName, Author, Copyright, CreationDate, Tools, "TODO-fix comments", WaveTableSoundEngine, SoundFontVersion, TargetProduct, DataROM, ROMVersion);
		}
	}
	public class Instrument
	{
		internal ushort startInstrumentZoneIndex;

		internal ushort endInstrumentZoneIndex;

		public string Name { get; set; }

		public Zone[] Zones { get; set; }

		public override string ToString()
		{
			return Name;
		}
	}
	internal class InstrumentBuilder : StructureBuilder<Instrument>
	{
		private Instrument lastInstrument;

		public override int Length => 22;

		public Instrument[] Instruments => data.ToArray();

		public override Instrument Read(BinaryReader br)
		{
			Instrument instrument = new Instrument();
			string text = Encoding.UTF8.GetString(br.ReadBytes(20), 0, 20);
			if (text.IndexOf('\0') >= 0)
			{
				text = text.Substring(0, text.IndexOf('\0'));
			}
			instrument.Name = text;
			instrument.startInstrumentZoneIndex = br.ReadUInt16();
			if (lastInstrument != null)
			{
				lastInstrument.endInstrumentZoneIndex = (ushort)(instrument.startInstrumentZoneIndex - 1);
			}
			data.Add(instrument);
			lastInstrument = instrument;
			return instrument;
		}

		public override void Write(BinaryWriter bw, Instrument instrument)
		{
		}

		public void LoadZones(Zone[] zones)
		{
			for (int i = 0; i < data.Count - 1; i++)
			{
				Instrument instrument = data[i];
				instrument.Zones = new Zone[instrument.endInstrumentZoneIndex - instrument.startInstrumentZoneIndex + 1];
				Array.Copy(zones, instrument.startInstrumentZoneIndex, instrument.Zones, 0, instrument.Zones.Length);
			}
			data.RemoveAt(data.Count - 1);
		}
	}
	public enum TransformEnum
	{
		Linear
	}
	public class Modulator
	{
		public ModulatorType SourceModulationData { get; set; }

		public GeneratorEnum DestinationGenerator { get; set; }

		public short Amount { get; set; }

		public ModulatorType SourceModulationAmount { get; set; }

		public TransformEnum SourceTransform { get; set; }

		public override string ToString()
		{
			return $"Modulator {SourceModulationData} {DestinationGenerator} {Amount} {SourceModulationAmount} {SourceTransform}";
		}
	}
	internal class ModulatorBuilder : StructureBuilder<Modulator>
	{
		public override int Length => 10;

		public Modulator[] Modulators => data.ToArray();

		public override Modulator Read(BinaryReader br)
		{
			Modulator modulator = new Modulator();
			modulator.SourceModulationData = new ModulatorType(br.ReadUInt16());
			modulator.DestinationGenerator = (GeneratorEnum)br.ReadUInt16();
			modulator.Amount = br.ReadInt16();
			modulator.SourceModulationAmount = new ModulatorType(br.ReadUInt16());
			modulator.SourceTransform = (TransformEnum)br.ReadUInt16();
			data.Add(modulator);
			return modulator;
		}

		public override void Write(BinaryWriter bw, Modulator o)
		{
		}
	}
	public enum ControllerSourceEnum
	{
		NoController = 0,
		NoteOnVelocity = 2,
		NoteOnKeyNumber = 3,
		PolyPressure = 10,
		ChannelPressure = 13,
		PitchWheel = 14,
		PitchWheelSensitivity = 16
	}
	public enum SourceTypeEnum
	{
		Linear,
		Concave,
		Convex,
		Switch
	}
	public class ModulatorType
	{
		private bool polarity;

		private bool direction;

		private bool midiContinuousController;

		private ControllerSourceEnum controllerSource;

		private SourceTypeEnum sourceType;

		private ushort midiContinuousControllerNumber;

		internal ModulatorType(ushort raw)
		{
			polarity = (raw & 0x200) == 512;
			direction = (raw & 0x100) == 256;
			midiContinuousController = (raw & 0x80) == 128;
			sourceType = (SourceTypeEnum)((raw & 0xFC00) >> 10);
			controllerSource = (ControllerSourceEnum)(raw & 0x7F);
			midiContinuousControllerNumber = (ushort)(raw & 0x7Fu);
		}

		public override string ToString()
		{
			if (midiContinuousController)
			{
				return $"{sourceType} CC{midiContinuousControllerNumber}";
			}
			return $"{sourceType} {controllerSource}";
		}
	}
	public class Preset
	{
		internal ushort startPresetZoneIndex;

		internal ushort endPresetZoneIndex;

		internal uint library;

		internal uint genre;

		internal uint morphology;

		public string Name { get; set; }

		public ushort PatchNumber { get; set; }

		public ushort Bank { get; set; }

		public Zone[] Zones { get; set; }

		public override string ToString()
		{
			return $"{Bank}-{PatchNumber} {Name}";
		}
	}
	internal class PresetBuilder : StructureBuilder<Preset>
	{
		private Preset lastPreset;

		public override int Length => 38;

		public Preset[] Presets => data.ToArray();

		public override Preset Read(BinaryReader br)
		{
			Preset preset = new Preset();
			string text = Encoding.UTF8.GetString(br.ReadBytes(20), 0, 20);
			if (text.IndexOf('\0') >= 0)
			{
				text = text.Substring(0, text.IndexOf('\0'));
			}
			preset.Name = text;
			preset.PatchNumber = br.ReadUInt16();
			preset.Bank = br.ReadUInt16();
			preset.startPresetZoneIndex = br.ReadUInt16();
			preset.library = br.ReadUInt32();
			preset.genre = br.ReadUInt32();
			preset.morphology = br.ReadUInt32();
			if (lastPreset != null)
			{
				lastPreset.endPresetZoneIndex = (ushort)(preset.startPresetZoneIndex - 1);
			}
			data.Add(preset);
			lastPreset = preset;
			return preset;
		}

		public override void Write(BinaryWriter bw, Preset preset)
		{
		}

		public void LoadZones(Zone[] presetZones)
		{
			for (int i = 0; i < data.Count - 1; i++)
			{
				Preset preset = data[i];
				preset.Zones = new Zone[preset.endPresetZoneIndex - preset.startPresetZoneIndex + 1];
				Array.Copy(presetZones, preset.startPresetZoneIndex, preset.Zones, 0, preset.Zones.Length);
			}
			data.RemoveAt(data.Count - 1);
		}
	}
	public class PresetsChunk
	{
		private PresetBuilder presetHeaders = new PresetBuilder();

		private ZoneBuilder presetZones = new ZoneBuilder();

		private ModulatorBuilder presetZoneModulators = new ModulatorBuilder();

		private GeneratorBuilder presetZoneGenerators = new GeneratorBuilder();

		private InstrumentBuilder instruments = new InstrumentBuilder();

		private ZoneBuilder instrumentZones = new ZoneBuilder();

		private ModulatorBuilder instrumentZoneModulators = new ModulatorBuilder();

		private GeneratorBuilder instrumentZoneGenerators = new GeneratorBuilder();

		private SampleHeaderBuilder sampleHeaders = new SampleHeaderBuilder();

		public Preset[] Presets => presetHeaders.Presets;

		public Instrument[] Instruments => instruments.Instruments;

		public SampleHeader[] SampleHeaders => sampleHeaders.SampleHeaders;

		internal PresetsChunk(RiffChunk chunk)
		{
			string text = chunk.ReadChunkID();
			if (text != "pdta")
			{
				throw new InvalidDataException($"Not a presets data chunk ({text})");
			}
			RiffChunk nextSubChunk;
			while ((nextSubChunk = chunk.GetNextSubChunk()) != null)
			{
				switch (nextSubChunk.ChunkID)
				{
				case "phdr":
				case "PHDR":
					nextSubChunk.GetDataAsStructureArray(presetHeaders);
					break;
				case "pbag":
				case "PBAG":
					nextSubChunk.GetDataAsStructureArray(presetZones);
					break;
				case "pmod":
				case "PMOD":
					nextSubChunk.GetDataAsStructureArray(presetZoneModulators);
					break;
				case "pgen":
				case "PGEN":
					nextSubChunk.GetDataAsStructureArray(presetZoneGenerators);
					break;
				case "inst":
				case "INST":
					nextSubChunk.GetDataAsStructureArray(instruments);
					break;
				case "ibag":
				case "IBAG":
					nextSubChunk.GetDataAsStructureArray(instrumentZones);
					break;
				case "imod":
				case "IMOD":
					nextSubChunk.GetDataAsStructureArray(instrumentZoneModulators);
					break;
				case "igen":
				case "IGEN":
					nextSubChunk.GetDataAsStructureArray(instrumentZoneGenerators);
					break;
				case "shdr":
				case "SHDR":
					nextSubChunk.GetDataAsStructureArray(sampleHeaders);
					break;
				default:
					throw new InvalidDataException($"Unknown chunk type {nextSubChunk.ChunkID}");
				}
			}
			instrumentZoneGenerators.Load(sampleHeaders.SampleHeaders);
			instrumentZones.Load(instrumentZoneModulators.Modulators, instrumentZoneGenerators.Generators);
			instruments.LoadZones(instrumentZones.Zones);
			presetZoneGenerators.Load(instruments.Instruments);
			presetZones.Load(presetZoneModulators.Modulators, presetZoneGenerators.Generators);
			presetHeaders.LoadZones(presetZones.Zones);
			sampleHeaders.RemoveEOS();
		}

		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append("Preset Headers:\r\n");
			Preset[] presets = presetHeaders.Presets;
			foreach (Preset arg in presets)
			{
				stringBuilder.AppendFormat("{0}\r\n", arg);
			}
			stringBuilder.Append("Instruments:\r\n");
			Instrument[] array = instruments.Instruments;
			foreach (Instrument arg2 in array)
			{
				stringBuilder.AppendFormat("{0}\r\n", arg2);
			}
			return stringBuilder.ToString();
		}
	}
	internal class RiffChunk
	{
		private string chunkID;

		private BinaryReader riffFile;

		public string ChunkID
		{
			get
			{
				return chunkID;
			}
			set
			{
				if (value == null)
				{
					throw new ArgumentNullException("ChunkID may not be null");
				}
				if (value.Length != 4)
				{
					throw new ArgumentException("ChunkID must be four characters");
				}
				chunkID = value;
			}
		}

		public uint ChunkSize { get; private set; }

		public long DataOffset { get; private set; }

		public static RiffChunk GetTopLevelChunk(BinaryReader file)
		{
			RiffChunk riffChunk = new RiffChunk(file);
			riffChunk.ReadChunk();
			return riffChunk;
		}

		private RiffChunk(BinaryReader file)
		{
			riffFile = file;
			chunkID = "????";
			ChunkSize = 0u;
			DataOffset = 0L;
		}

		public string ReadChunkID()
		{
			byte[] array = riffFile.ReadBytes(4);
			if (array.Length != 4)
			{
				throw new InvalidDataException("Couldn't read Chunk ID");
			}
			return ByteEncoding.Instance.GetString(array, 0, array.Length);
		}

		private void ReadChunk()
		{
			chunkID = ReadChunkID();
			ChunkSize = riffFile.ReadUInt32();
			DataOffset = riffFile.BaseStream.Position;
		}

		public RiffChunk GetNextSubChunk()
		{
			if (riffFile.BaseStream.Position + 8 < DataOffset + ChunkSize)
			{
				RiffChunk riffChunk = new RiffChunk(riffFile);
				riffChunk.ReadChunk();
				return riffChunk;
			}
			return null;
		}

		public byte[] GetData()
		{
			riffFile.BaseStream.Position = DataOffset;
			byte[] array = riffFile.ReadBytes((int)ChunkSize);
			if (array.Length != ChunkSize)
			{
				throw new InvalidDataException($"Couldn't read chunk's data Chunk: {this}, read {array.Length} bytes");
			}
			return array;
		}

		public string GetDataAsString()
		{
			byte[] data = GetData();
			if (data == null)
			{
				return null;
			}
			return ByteEncoding.Instance.GetString(data, 0, data.Length);
		}

		public T GetDataAsStructure<T>(StructureBuilder<T> s)
		{
			riffFile.BaseStream.Position = DataOffset;
			if (s.Length != ChunkSize)
			{
				throw new InvalidDataException($"Chunk size is: {ChunkSize} so can't read structure of: {s.Length}");
			}
			return s.Read(riffFile);
		}

		public T[] GetDataAsStructureArray<T>(StructureBuilder<T> s)
		{
			riffFile.BaseStream.Position = DataOffset;
			if (ChunkSize % s.Length != 0L)
			{
				throw new InvalidDataException($"Chunk size is: {ChunkSize} not a multiple of structure size: {s.Length}");
			}
			int num = (int)(ChunkSize / s.Length);
			T[] array = new T[num];
			for (int i = 0; i < num; i++)
			{
				array[i] = s.Read(riffFile);
			}
			return array;
		}

		public override string ToString()
		{
			return $"RiffChunk ID: {ChunkID} Size: {ChunkSize} Data Offset: {DataOffset}";
		}
	}
	internal class SampleDataChunk
	{
		public byte[] SampleData { get; private set; }

		public SampleDataChunk(RiffChunk chunk)
		{
			string text = chunk.ReadChunkID();
			if (text != "sdta")
			{
				throw new InvalidDataException("Not a sample data chunk (" + text + ")");
			}
			SampleData = chunk.GetData();
		}
	}
	public class SampleHeader
	{
		public string SampleName;

		public uint Start;

		public uint End;

		public uint StartLoop;

		public uint EndLoop;

		public uint SampleRate;

		public byte OriginalPitch;

		public sbyte PitchCorrection;

		public ushort SampleLink;

		public SFSampleLink SFSampleLink;

		public override string ToString()
		{
			return SampleName;
		}
	}
	internal class SampleHeaderBuilder : StructureBuilder<SampleHeader>
	{
		public override int Length => 46;

		public SampleHeader[] SampleHeaders => data.ToArray();

		public override SampleHeader Read(BinaryReader br)
		{
			SampleHeader sampleHeader = new SampleHeader();
			byte[] array = br.ReadBytes(20);
			sampleHeader.SampleName = ByteEncoding.Instance.GetString(array, 0, array.Length);
			sampleHeader.Start = br.ReadUInt32();
			sampleHeader.End = br.ReadUInt32();
			sampleHeader.StartLoop = br.ReadUInt32();
			sampleHeader.EndLoop = br.ReadUInt32();
			sampleHeader.SampleRate = br.ReadUInt32();
			sampleHeader.OriginalPitch = br.ReadByte();
			sampleHeader.PitchCorrection = br.ReadSByte();
			sampleHeader.SampleLink = br.ReadUInt16();
			sampleHeader.SFSampleLink = (SFSampleLink)br.ReadUInt16();
			data.Add(sampleHeader);
			return sampleHeader;
		}

		public override void Write(BinaryWriter bw, SampleHeader sampleHeader)
		{
		}

		internal void RemoveEOS()
		{
			data.RemoveAt(data.Count - 1);
		}
	}
	public enum SampleMode
	{
		NoLoop,
		LoopContinuously,
		ReservedNoLoop,
		LoopAndContinue
	}
	public enum SFSampleLink : ushort
	{
		MonoSample = 1,
		RightSample = 2,
		LeftSample = 4,
		LinkedSample = 8,
		RomMonoSample = 32769,
		RomRightSample = 32770,
		RomLeftSample = 32772,
		RomLinkedSample = 32776
	}
	public class SFVersion
	{
		public short Major { get; set; }

		public short Minor { get; set; }
	}
	internal class SFVersionBuilder : StructureBuilder<SFVersion>
	{
		public override int Length => 4;

		public override SFVersion Read(BinaryReader br)
		{
			SFVersion sFVersion = new SFVersion();
			sFVersion.Major = br.ReadInt16();
			sFVersion.Minor = br.ReadInt16();
			data.Add(sFVersion);
			return sFVersion;
		}

		public override void Write(BinaryWriter bw, SFVersion v)
		{
			bw.Write(v.Major);
			bw.Write(v.Minor);
		}
	}
	public class SoundFont
	{
		private InfoChunk info;

		private PresetsChunk presetsChunk;

		private SampleDataChunk sampleData;

		public InfoChunk FileInfo => info;

		public Preset[] Presets => presetsChunk.Presets;

		public Instrument[] Instruments => presetsChunk.Instruments;

		public SampleHeader[] SampleHeaders => presetsChunk.SampleHeaders;

		public byte[] SampleData => sampleData.SampleData;

		public SoundFont(string fileName)
			: this(new FileStream(fileName, FileMode.Open, FileAccess.Read))
		{
		}

		public SoundFont(Stream sfFile)
		{
			using (sfFile)
			{
				RiffChunk topLevelChunk = RiffChunk.GetTopLevelChunk(new BinaryReader(sfFile));
				if (topLevelChunk.ChunkID == "RIFF")
				{
					string text = topLevelChunk.ReadChunkID();
					if (text != "sfbk")
					{
						throw new InvalidDataException($"Not a SoundFont ({text})");
					}
					RiffChunk nextSubChunk = topLevelChunk.GetNextSubChunk();
					if (nextSubChunk.ChunkID == "LIST")
					{
						info = new InfoChunk(nextSubChunk);
						RiffChunk nextSubChunk2 = topLevelChunk.GetNextSubChunk();
						sampleData = new SampleDataChunk(nextSubChunk2);
						nextSubChunk2 = topLevelChunk.GetNextSubChunk();
						presetsChunk = new PresetsChunk(nextSubChunk2);
						return;
					}
					throw new InvalidDataException($"Not info list found ({nextSubChunk.ChunkID})");
				}
				throw new InvalidDataException("Not a RIFF file");
			}
		}

		public override string ToString()
		{
			return $"Info Chunk:\r\n{info}\r\nPresets Chunk:\r\n{presetsChunk}";
		}
	}
	internal abstract class StructureBuilder<T>
	{
		protected List<T> data;

		public abstract int Length { get; }

		public T[] Data => data.ToArray();

		public StructureBuilder()
		{
			Reset();
		}

		public abstract T Read(BinaryReader br);

		public abstract void Write(BinaryWriter bw, T o);

		public void Reset()
		{
			data = new List<T>();
		}
	}
	public class Zone
	{
		internal ushort generatorIndex;

		internal ushort modulatorIndex;

		internal ushort generatorCount;

		internal ushort modulatorCount;

		public Modulator[] Modulators { get; set; }

		public Generator[] Generators { get; set; }

		public override string ToString()
		{
			return $"Zone {generatorCount} Gens:{generatorIndex} {modulatorCount} Mods:{modulatorIndex}";
		}
	}
	internal class ZoneBuilder : StructureBuilder<Zone>
	{
		private Zone lastZone;

		public Zone[] Zones => data.ToArray();

		public override int Length => 4;

		public override Zone Read(BinaryReader br)
		{
			Zone zone = new Zone();
			zone.generatorIndex = br.ReadUInt16();
			zone.modulatorIndex = br.ReadUInt16();
			if (lastZone != null)
			{
				lastZone.generatorCount = (ushort)(zone.generatorIndex - lastZone.generatorIndex);
				lastZone.modulatorCount = (ushort)(zone.modulatorIndex - lastZone.modulatorIndex);
			}
			data.Add(zone);
			lastZone = zone;
			return zone;
		}

		public override void Write(BinaryWriter bw, Zone zone)
		{
		}

		public void Load(Modulator[] modulators, Generator[] generators)
		{
			for (int i = 0; i < data.Count - 1; i++)
			{
				Zone zone = data[i];
				zone.Generators = new Generator[zone.generatorCount];
				Array.Copy(generators, zone.generatorIndex, zone.Generators, 0, zone.generatorCount);
				zone.Modulators = new Modulator[zone.modulatorCount];
				Array.Copy(modulators, zone.modulatorIndex, zone.Modulators, 0, zone.modulatorCount);
			}
			data.RemoveAt(data.Count - 1);
		}
	}
}
namespace NAudio.Wave
{
	public enum ChannelMode
	{
		Stereo,
		JointStereo,
		DualChannel,
		Mono
	}
	public class Id3v2Tag
	{
		private long tagStartPosition;

		private long tagEndPosition;

		private byte[] rawData;

		public byte[] RawData => rawData;

		public static Id3v2Tag ReadTag(Stream input)
		{
			try
			{
				return new Id3v2Tag(input);
			}
			catch (FormatException)
			{
				return null;
			}
		}

		public static Id3v2Tag Create(IEnumerable<KeyValuePair<string, string>> tags)
		{
			return ReadTag(CreateId3v2TagStream(tags));
		}

		private static byte[] FrameSizeToBytes(int n)
		{
			byte[] bytes = BitConverter.GetBytes(n);
			Array.Reverse((Array)bytes);
			return bytes;
		}

		private static byte[] CreateId3v2Frame(string key, string value)
		{
			if (string.IsNullOrEmpty(key))
			{
				throw new ArgumentNullException("key");
			}
			if (string.IsNullOrEmpty(value))
			{
				throw new ArgumentNullException("value");
			}
			if (key.Length != 4)
			{
				throw new ArgumentOutOfRangeException("key", "key " + key + " must be 4 characters long");
			}
			byte[] array = new byte[2] { 255, 254 };
			byte[] array2 = new byte[3];
			byte[] array3 = new byte[2];
			byte[] array4 = ((!(key == "COMM")) ? ByteArrayExtensions.Concat(new byte[1] { 1 }, array, Encoding.Unicode.GetBytes(value)) : ByteArrayExtensions.Concat(new byte[1] { 1 }, array2, array3, array, Encoding.Unicode.GetBytes(value)));
			return ByteArrayExtensions.Concat(Encoding.UTF8.GetBytes(key), FrameSizeToBytes(array4.Length), new byte[2], array4);
		}

		private static byte[] GetId3TagHeaderSize(int size)
		{
			byte[] array = new byte[4];
			for (int num = array.Length - 1; num >= 0; num--)
			{
				array[num] = (byte)(size % 128);
				size /= 128;
			}
			return array;
		}

		private static byte[] CreateId3v2TagHeader(IEnumerable<byte[]> frames)
		{
			int num = 0;
			foreach (byte[] frame in frames)
			{
				num += frame.Length;
			}
			return ByteArrayExtensions.Concat(Encoding.UTF8.GetBytes("ID3"), new byte[2] { 3, 0 }, new byte[1], GetId3TagHeaderSize(num));
		}

		private static Stream CreateId3v2TagStream(IEnumerable<KeyValuePair<string, string>> tags)
		{
			List<byte[]> list = new List<byte[]>();
			foreach (KeyValuePair<string, string> tag in tags)
			{
				list.Add(CreateId3v2Frame(tag.Key, tag.Value));
			}
			byte[] array = CreateId3v2TagHeader(list);
			MemoryStream memoryStream = new MemoryStream();
			memoryStream.Write(array, 0, array.Length);
			foreach (byte[] item in list)
			{
				memoryStream.Write(item, 0, item.Length);
			}
			memoryStream.Position = 0L;
			return memoryStream;
		}

		private Id3v2Tag(Stream input)
		{
			tagStartPosition = input.Position;
			BinaryReader binaryReader = new BinaryReader(input);
			byte[] array = binaryReader.ReadBytes(10);
			if (array.Length >= 3 && array[0] == 73 && array[1] == 68 && array[2] == 51)
			{
				if ((array[5] & 0x40) == 64)
				{
					byte[] array2 = binaryReader.ReadBytes(4);
					_ = array2[0] * 2097152 + array2[1] * 16384 + array2[2] * 128;
					_ = array2[3];
				}
				int num = array[6] * 2097152;
				num += array[7] * 16384;
				num += array[8] * 128;
				num += array[9];
				binaryReader.ReadBytes(num);
				if ((array[5] & 0x10) == 16)
				{
					binaryReader.ReadBytes(10);
				}
				tagEndPosition = input.Position;
				input.Position = tagStartPosition;
				rawData = binaryReader.ReadBytes((int)(tagEndPosition - tagStartPosition));
				return;
			}
			input.Position = tagStartPosition;
			throw new FormatException("Not an ID3v2 tag");
		}
	}
	public interface IMp3FrameDecompressor : IDisposable
	{
		WaveFormat OutputFormat { get; }

		int DecompressFrame(Mp3Frame frame, byte[] dest, int destOffset);

		void Reset();
	}
	public class Mp3Frame
	{
		private static readonly int[,,] bitRates = new int[2, 3, 15]
		{
			{
				{
					0, 32, 64, 96, 128, 160, 192, 224, 256, 288,
					320, 352, 384, 416, 448
				},
				{
					0, 32, 48, 56, 64, 80, 96, 112, 128, 160,
					192, 224, 256, 320, 384
				},
				{
					0, 32, 40, 48, 56, 64, 80, 96, 112, 128,
					160, 192, 224, 256, 320
				}
			},
			{
				{
					0, 32, 48, 56, 64, 80, 96, 112, 128, 144,
					160, 176, 192, 224, 256
				},
				{
					0, 8, 16, 24, 32, 40, 48, 56, 64, 80,
					96, 112, 128, 144, 160
				},
				{
					0, 8, 16, 24, 32, 40, 48, 56, 64, 80,
					96, 112, 128, 144, 160
				}
			}
		};

		private static readonly int[,] samplesPerFrame = new int[2, 3]
		{
			{ 384, 1152, 1152 },
			{ 384, 1152, 576 }
		};

		private static readonly int[] sampleRatesVersion1 = new int[3] { 44100, 48000, 32000 };

		private static readonly int[] sampleRatesVersion2 = new int[3] { 22050, 24000, 16000 };

		private static readonly int[] sampleRatesVersion25 = new int[3] { 11025, 12000, 8000 };

		private const int MaxFrameLength = 16384;

		public int SampleRate { get; private set; }

		public int FrameLength { get; private set; }

		public int BitRate { get; private set; }

		public byte[] RawData { get; private set; }

		public MpegVersion MpegVersion { get; private set; }

		public MpegLayer MpegLayer { get; private set; }

		public ChannelMode ChannelMode { get; private set; }

		public int SampleCount { get; private set; }

		public int ChannelExtension { get; private set; }

		public int BitRateIndex { get; private set; }

		public bool Copyright { get; private set; }

		public bool CrcPresent { get; private set; }

		public long FileOffset { get; private set; }

		public static Mp3Frame LoadFromStream(Stream input)
		{
			return LoadFromStream(input, readData: true);
		}

		public static Mp3Frame LoadFromStream(Stream input, bool readData)
		{
			Mp3Frame mp3Frame = new Mp3Frame();
			mp3Frame.FileOffset = input.Position;
			byte[] array = new byte[4];
			if (input.Read(array, 0, array.Length) < array.Length)
			{
				return null;
			}
			while (!IsValidHeader(array, mp3Frame))
			{
				array[0] = array[1];
				array[1] = array[2];
				array[2] = array[3];
				if (input.Read(array, 3, 1) < 1)
				{
					return null;
				}
				mp3Frame.FileOffset++;
			}
			int num = mp3Frame.FrameLength - 4;
			if (readData)
			{
				mp3Frame.RawData = new byte[mp3Frame.FrameLength];
				Array.Copy(array, mp3Frame.RawData, 4);
				if (input.Read(mp3Frame.RawData, 4, num) < num)
				{
					throw new EndOfStreamException("Unexpected end of stream before frame complete");
				}
			}
			else
			{
				input.Position += num;
			}
			return mp3Frame;
		}

		private Mp3Frame()
		{
		}

		private static bool IsValidHeader(byte[] headerBytes, Mp3Frame frame)
		{
			if (headerBytes[0] == byte.MaxValue && (headerBytes[1] & 0xE0) == 224)
			{
				frame.MpegVersion = (MpegVersion)((headerBytes[1] & 0x18) >> 3);
				if (frame.MpegVersion == MpegVersion.Reserved)
				{
					return false;
				}
				frame.MpegLayer = (MpegLayer)((headerBytes[1] & 6) >> 1);
				if (frame.MpegLayer == MpegLayer.Reserved)
				{
					return false;
				}
				int num = ((frame.MpegLayer != MpegLayer.Layer1) ? ((frame.MpegLayer == MpegLayer.Layer2) ? 1 : 2) : 0);
				frame.CrcPresent = (headerBytes[1] & 1) == 0;
				frame.BitRateIndex = (headerBytes[2] & 0xF0) >> 4;
				if (frame.BitRateIndex == 15)
				{
					return false;
				}
				int num2 = ((frame.MpegVersion != MpegVersion.Version1) ? 1 : 0);
				frame.BitRate = bitRates[num2, num, frame.BitRateIndex] * 1000;
				if (frame.BitRate == 0)
				{
					return false;
				}
				int num3 = (headerBytes[2] & 0xC) >> 2;
				if (num3 == 3)
				{
					return false;
				}
				if (frame.MpegVersion == MpegVersion.Version1)
				{
					frame.SampleRate = sampleRatesVersion1[num3];
				}
				else if (frame.MpegVersion == MpegVersion.Version2)
				{
					frame.SampleRate = sampleRatesVersion2[num3];
				}
				else
				{
					frame.SampleRate = sampleRatesVersion25[num3];
				}
				bool flag = (headerBytes[2] & 2) == 2;
				_ = headerBytes[2];
				frame.ChannelMode = (ChannelMode)((headerBytes[3] & 0xC0) >> 6);
				frame.ChannelExtension = (headerBytes[3] & 0x30) >> 4;
				if (frame.ChannelExtension != 0 && frame.ChannelMode != ChannelMode.JointStereo)
				{
					return false;
				}
				frame.Copyright = (headerBytes[3] & 8) == 8;
				_ = headerBytes[3];
				_ = headerBytes[3];
				int num4 = (flag ? 1 : 0);
				frame.SampleCount = samplesPerFrame[num2, num];
				int num5 = frame.SampleCount / 8;
				if (frame.MpegLayer == MpegLayer.Layer1)
				{
					frame.FrameLength = (num5 * frame.BitRate / frame.SampleRate + num4) * 4;
				}
				else
				{
					frame.FrameLength = num5 * frame.BitRate / frame.SampleRate + num4;
				}
				if (frame.FrameLength > 16384)
				{
					return false;
				}
				return true;
			}
			return false;
		}
	}
	public enum MpegLayer
	{
		Reserved,
		Layer3,
		Layer2,
		Layer1
	}
	public enum MpegVersion
	{
		Version25,
		Reserved,
		Version2,
		Version1
	}
	public class XingHeader
	{
		[Flags]
		private enum XingHeaderOptions
		{
			Frames = 1,
			Bytes = 2,
			Toc = 4,
			VbrScale = 8
		}

		private static int[] sr_table = new int[4] { 44100, 48000, 32000, 99999 };

		private int vbrScale = -1;

		private int startOffset;

		private int endOffset;

		private int tocOffset = -1;

		private int framesOffset = -1;

		private int bytesOffset = -1;

		private Mp3Frame frame;

		public int Frames
		{
			get
			{
				if (framesOffset == -1)
				{
					return -1;
				}
				return ReadBigEndian(frame.RawData, framesOffset);
			}
			set
			{
				if (framesOffset == -1)
				{
					throw new InvalidOperationException("Frames flag is not set");
				}
				WriteBigEndian(frame.RawData, framesOffset, value);
			}
		}

		public int Bytes
		{
			get
			{
				if (bytesOffset == -1)
				{
					return -1;
				}
				return ReadBigEndian(frame.RawData, bytesOffset);
			}
			set
			{
				if (framesOffset == -1)
				{
					throw new InvalidOperationException("Bytes flag is not set");
				}
				WriteBigEndian(frame.RawData, bytesOffset, value);
			}
		}

		public int VbrScale => vbrScale;

		public Mp3Frame Mp3Frame => frame;

		private static int ReadBigEndian(byte[] buffer, int offset)
		{
			return (((((buffer[offset] << 8) | buffer[offset + 1]) << 8) | buffer[offset + 2]) << 8) | buffer[offset + 3];
		}

		private void WriteBigEndian(byte[] buffer, int offset, int value)
		{
			byte[] bytes = BitConverter.GetBytes(value);
			for (int i = 0; i < 4; i++)
			{
				buffer[offset + 3 - i] = bytes[i];
			}
		}

		public static XingHeader LoadXingHeader(Mp3Frame frame)
		{
			XingHeader xingHeader = new XingHeader();
			xingHeader.frame = frame;
			int num = 0;
			if (frame.MpegVersion == MpegVersion.Version1)
			{
				num = ((frame.ChannelMode == ChannelMode.Mono) ? 21 : 36);
			}
			else
			{
				if (frame.MpegVersion != MpegVersion.Version2)
				{
					return null;
				}
				num = ((frame.ChannelMode == ChannelMode.Mono) ? 13 : 21);
			}
			if (frame.RawData[num] == 88 && frame.RawData[num + 1] == 105 && frame.RawData[num + 2] == 110 && frame.RawData[num + 3] == 103)
			{
				xingHeader.startOffset = num;
				num += 4;
			}
			else
			{
				if (frame.RawData[num] != 73 || frame.RawData[num + 1] != 110 || frame.RawData[num + 2] != 102 || frame.RawData[num + 3] != 111)
				{
					return null;
				}
				xingHeader.startOffset = num;
				num += 4;
			}
			int num2 = ReadBigEndian(frame.RawData, num);
			num += 4;
			if (((uint)num2 & (true ? 1u : 0u)) != 0)
			{
				xingHeader.framesOffset = num;
				num += 4;
			}
			if (((uint)num2 & 2u) != 0)
			{
				xingHeader.bytesOffset = num;
				num += 4;
			}
			if (((uint)num2 & 4u) != 0)
			{
				xingHeader.tocOffset = num;
				num += 100;
			}
			if (((uint)num2 & 8u) != 0)
			{
				xingHeader.vbrScale = ReadBigEndian(frame.RawData, num);
				num += 4;
			}
			xingHeader.endOffset = num;
			return xingHeader;
		}

		private XingHeader()
		{
		}
	}
	public static class WaveExtensionMethods
	{
		public static ISampleProvider ToSampleProvider(this IWaveProvider waveProvider)
		{
			return SampleProviderConverters.ConvertWaveProviderIntoSampleProvider(waveProvider);
		}

		public static void Init(this IWavePlayer wavePlayer, ISampleProvider sampleProvider, bool convertTo16Bit = false)
		{
			IWaveProvider waveProvider2;
			if (!convertTo16Bit)
			{
				IWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider);
				waveProvider2 = waveProvider;
			}
			else
			{
				IWaveProvider waveProvider = new SampleToWaveProvider16(sampleProvider);
				waveProvider2 = waveProvider;
			}
			IWaveProvider waveProvider3 = waveProvider2;
			wavePlayer.Init(waveProvider3);
		}

		public static WaveFormat AsStandardWaveFormat(this WaveFormat waveFormat)
		{
			if (!(waveFormat is WaveFormatExtensible waveFormatExtensible))
			{
				return waveFormat;
			}
			return waveFormatExtensible.ToStandardWaveFormat();
		}

		public static IWaveProvider ToWaveProvider(this ISampleProvider sampleProvider)
		{
			return new SampleToWaveProvider(sampleProvider);
		}

		public static IWaveProvider ToWaveProvider16(this ISampleProvider sampleProvider)
		{
			return new SampleToWaveProvider16(sampleProvider);
		}

		public static ISampleProvider FollowedBy(this ISampleProvider sampleProvider, ISampleProvider next)
		{
			return new ConcatenatingSampleProvider(new ISampleProvider[2] { sampleProvider, next });
		}

		public static ISampleProvider FollowedBy(this ISampleProvider sampleProvider, TimeSpan silenceDuration, ISampleProvider next)
		{
			OffsetSampleProvider offsetSampleProvider = new OffsetSampleProvider(sampleProvider)
			{
				LeadOut = silenceDuration
			};
			return new ConcatenatingSampleProvider(new ISampleProvider[2] { offsetSampleProvider, next });
		}

		public static ISampleProvider Skip(this ISampleProvider sampleProvider, TimeSpan skipDuration)
		{
			return new OffsetSampleProvider(sampleProvider)
			{
				SkipOver = skipDuration
			};
		}

		public static ISampleProvider Take(this ISampleProvider sampleProvider, TimeSpan takeDuration)
		{
			return new OffsetSampleProvider(sampleProvider)
			{
				Take = takeDuration
			};
		}

		public static ISampleProvider ToMono(this ISampleProvider sourceProvider, float leftVol = 0.5f, float rightVol = 0.5f)
		{
			if (sourceProvider.WaveFormat.Channels == 1)
			{
				return sourceProvider;
			}
			return new StereoToMonoSampleProvider(sourceProvider)
			{
				LeftVolume = leftVol,
				RightVolume = rightVol
			};
		}

		public static ISampleProvider ToStereo(this ISampleProvider sourceProvider, float leftVol = 1f, float rightVol = 1f)
		{
			if (sourceProvider.WaveFormat.Channels == 2)
			{
				return sourceProvider;
			}
			return new MonoToStereoSampleProvider(sourceProvider)
			{
				LeftVolume = leftVol,
				RightVolume = rightVol
			};
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class AdpcmWaveFormat : WaveFormat
	{
		private short samplesPerBlock;

		private short numCoeff;

		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 14)]
		private short[] coefficients;

		public int SamplesPerBlock => samplesPerBlock;

		public int NumCoefficients => numCoeff;

		public short[] Coefficients => coefficients;

		private AdpcmWaveFormat()
			: this(8000, 1)
		{
		}

		public AdpcmWaveFormat(int sampleRate, int channels)
			: base(sampleRate, 0, channels)
		{
			waveFormatTag = WaveFormatEncoding.Adpcm;
			extraSize = 32;
			switch (base.sampleRate)
			{
			case 8000:
			case 11025:
				blockAlign = 256;
				break;
			case 22050:
				blockAlign = 512;
				break;
			default:
				blockAlign = 1024;
				break;
			}
			bitsPerSample = 4;
			samplesPerBlock = (short)((blockAlign - 7 * channels) * 8 / (bitsPerSample * channels) + 2);
			averageBytesPerSecond = base.SampleRate * blockAlign / samplesPerBlock;
			numCoeff = 7;
			coefficients = new short[14]
			{
				256, 0, 512, -256, 0, 0, 192, 64, 240, 0,
				460, -208, 392, -232
			};
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			writer.Write(samplesPerBlock);
			writer.Write(numCoeff);
			short[] array = coefficients;
			foreach (short value in array)
			{
				writer.Write(value);
			}
		}

		public override string ToString()
		{
			return $"Microsoft ADPCM {base.SampleRate} Hz {channels} channels {bitsPerSample} bits per sample {samplesPerBlock} samples per block";
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class Gsm610WaveFormat : WaveFormat
	{
		private readonly short samplesPerBlock;

		public short SamplesPerBlock => samplesPerBlock;

		public Gsm610WaveFormat()
		{
			waveFormatTag = WaveFormatEncoding.Gsm610;
			channels = 1;
			averageBytesPerSecond = 1625;
			bitsPerSample = 0;
			blockAlign = 65;
			sampleRate = 8000;
			extraSize = 2;
			samplesPerBlock = 320;
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			writer.Write(samplesPerBlock);
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class ImaAdpcmWaveFormat : WaveFormat
	{
		private short samplesPerBlock;

		private ImaAdpcmWaveFormat()
		{
		}

		public ImaAdpcmWaveFormat(int sampleRate, int channels, int bitsPerSample)
		{
			waveFormatTag = WaveFormatEncoding.DviAdpcm;
			base.sampleRate = sampleRate;
			base.channels = (short)channels;
			base.bitsPerSample = (short)bitsPerSample;
			extraSize = 2;
			blockAlign = 0;
			averageBytesPerSecond = 0;
			samplesPerBlock = 0;
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class Mp3WaveFormat : WaveFormat
	{
		public Mp3WaveFormatId id;

		public Mp3WaveFormatFlags flags;

		public ushort blockSize;

		public ushort framesPerBlock;

		public ushort codecDelay;

		private const short Mp3WaveFormatExtraBytes = 12;

		public Mp3WaveFormat(int sampleRate, int channels, int blockSize, int bitRate)
		{
			waveFormatTag = WaveFormatEncoding.MpegLayer3;
			base.channels = (short)channels;
			averageBytesPerSecond = bitRate / 8;
			bitsPerSample = 0;
			blockAlign = 1;
			base.sampleRate = sampleRate;
			extraSize = 12;
			id = Mp3WaveFormatId.Mpeg;
			flags = Mp3WaveFormatFlags.PaddingIso;
			this.blockSize = (ushort)blockSize;
			framesPerBlock = 1;
			codecDelay = 0;
		}
	}
	[Flags]
	public enum Mp3WaveFormatFlags
	{
		PaddingIso = 0,
		PaddingOn = 1,
		PaddingOff = 2
	}
	public enum Mp3WaveFormatId : ushort
	{
		Unknown,
		Mpeg,
		ConstantFrameSize
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	internal class OggWaveFormat : WaveFormat
	{
		public uint dwVorbisACMVersion;

		public uint dwLibVorbisVersion;
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class TrueSpeechWaveFormat : WaveFormat
	{
		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
		private short[] unknown;

		public TrueSpeechWaveFormat()
		{
			waveFormatTag = WaveFormatEncoding.DspGroupTrueSpeech;
			channels = 1;
			averageBytesPerSecond = 1067;
			bitsPerSample = 1;
			blockAlign = 32;
			sampleRate = 8000;
			extraSize = 32;
			unknown = new short[16];
			unknown[0] = 1;
			unknown[1] = 240;
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			short[] array = unknown;
			foreach (short value in array)
			{
				writer.Write(value);
			}
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class WaveFormat
	{
		protected WaveFormatEncoding waveFormatTag;

		protected short channels;

		protected int sampleRate;

		protected int averageBytesPerSecond;

		protected short blockAlign;

		protected short bitsPerSample;

		protected short extraSize;

		public WaveFormatEncoding Encoding => waveFormatTag;

		public int Channels => channels;

		public int SampleRate => sampleRate;

		public int AverageBytesPerSecond => averageBytesPerSecond;

		public virtual int BlockAlign => blockAlign;

		public int BitsPerSample => bitsPerSample;

		public int ExtraSize => extraSize;

		public WaveFormat()
			: this(44100, 16, 2)
		{
		}

		public WaveFormat(int sampleRate, int channels)
			: this(sampleRate, 16, channels)
		{
		}

		public int ConvertLatencyToByteSize(int milliseconds)
		{
			int num = (int)((double)AverageBytesPerSecond / 1000.0 * (double)milliseconds);
			if (num % BlockAlign != 0)
			{
				num = num + BlockAlign - num % BlockAlign;
			}
			return num;
		}

		public static WaveFormat CreateCustomFormat(WaveFormatEncoding tag, int sampleRate, int channels, int averageBytesPerSecond, int blockAlign, int bitsPerSample)
		{
			return new WaveFormat
			{
				waveFormatTag = tag,
				channels = (short)channels,
				sampleRate = sampleRate,
				averageBytesPerSecond = averageBytesPerSecond,
				blockAlign = (short)blockAlign,
				bitsPerSample = (short)bitsPerSample,
				extraSize = 0
			};
		}

		public static WaveFormat CreateALawFormat(int sampleRate, int channels)
		{
			return CreateCustomFormat(WaveFormatEncoding.ALaw, sampleRate, channels, sampleRate * channels, channels, 8);
		}

		public static WaveFormat CreateMuLawFormat(int sampleRate, int channels)
		{
			return CreateCustomFormat(WaveFormatEncoding.MuLaw, sampleRate, channels, sampleRate * channels, channels, 8);
		}

		public WaveFormat(int rate, int bits, int channels)
		{
			if (channels < 1)
			{
				throw new ArgumentOutOfRangeException("channels", "Channels must be 1 or greater");
			}
			waveFormatTag = WaveFormatEncoding.Pcm;
			this.channels = (short)channels;
			sampleRate = rate;
			bitsPerSample = (short)bits;
			extraSize = 0;
			blockAlign = (short)(channels * (bits / 8));
			averageBytesPerSecond = sampleRate * blockAlign;
		}

		public static WaveFormat CreateIeeeFloatWaveFormat(int sampleRate, int channels)
		{
			WaveFormat waveFormat = new WaveFormat();
			waveFormat.waveFormatTag = WaveFormatEncoding.IeeeFloat;
			waveFormat.channels = (short)channels;
			waveFormat.bitsPerSample = 32;
			waveFormat.sampleRate = sampleRate;
			waveFormat.blockAlign = (short)(4 * channels);
			waveFormat.averageBytesPerSecond = sampleRate * waveFormat.blockAlign;
			waveFormat.extraSize = 0;
			return waveFormat;
		}

		public static WaveFormat MarshalFromPtr(IntPtr pointer)
		{
			WaveFormat waveFormat = Marshal.PtrToStructure<WaveFormat>(pointer);
			switch (waveFormat.Encoding)
			{
			case WaveFormatEncoding.Pcm:
				waveFormat.extraSize = 0;
				break;
			case WaveFormatEncoding.Extensible:
				waveFormat = Marshal.PtrToStructure<WaveFormatExtensible>(pointer);
				break;
			case WaveFormatEncoding.Adpcm:
				waveFormat = Marshal.PtrToStructure<AdpcmWaveFormat>(pointer);
				break;
			case WaveFormatEncoding.Gsm610:
				waveFormat = Marshal.PtrToStructure<Gsm610WaveFormat>(pointer);
				break;
			default:
				if (waveFormat.ExtraSize > 0)
				{
					waveFormat = Marshal.PtrToStructure<WaveFormatExtraData>(pointer);
				}
				break;
			}
			return waveFormat;
		}

		public static IntPtr MarshalToPtr(WaveFormat format)
		{
			IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(format));
			Marshal.StructureToPtr(format, intPtr, fDeleteOld: false);
			return intPtr;
		}

		public static WaveFormat FromFormatChunk(BinaryReader br, int formatChunkLength)
		{
			WaveFormatExtraData waveFormatExtraData = new WaveFormatExtraData();
			waveFormatExtraData.ReadWaveFormat(br, formatChunkLength);
			waveFormatExtraData.ReadExtraData(br);
			return waveFormatExtraData;
		}

		private void ReadWaveFormat(BinaryReader br, int formatChunkLength)
		{
			if (formatChunkLength < 16)
			{
				throw new InvalidDataException("Invalid WaveFormat Structure");
			}
			waveFormatTag = (WaveFormatEncoding)br.ReadUInt16();
			channels = br.ReadInt16();
			sampleRate = br.ReadInt32();
			averageBytesPerSecond = br.ReadInt32();
			blockAlign = br.ReadInt16();
			bitsPerSample = br.ReadInt16();
			if (formatChunkLength > 16)
			{
				extraSize = br.ReadInt16();
				if (extraSize != formatChunkLength - 18)
				{
					extraSize = (short)(formatChunkLength - 18);
				}
			}
		}

		public WaveFormat(BinaryReader br)
		{
			int formatChunkLength = br.ReadInt32();
			ReadWaveFormat(br, formatChunkLength);
		}

		public override string ToString()
		{
			switch (waveFormatTag)
			{
			case WaveFormatEncoding.Pcm:
			case WaveFormatEncoding.Extensible:
				return $"{bitsPerSample} bit PCM: {sampleRate}Hz {channels} channels";
			case WaveFormatEncoding.IeeeFloat:
				return $"{bitsPerSample} bit IEEFloat: {sampleRate}Hz {channels} channels";
			default:
				return waveFormatTag.ToString();
			}
		}

		public override bool Equals(object obj)
		{
			if (obj is WaveFormat waveFormat)
			{
				if (waveFormatTag == waveFormat.waveFormatTag && channels == waveFormat.channels && sampleRate == waveFormat.sampleRate && averageBytesPerSecond == waveFormat.averageBytesPerSecond && blockAlign == waveFormat.blockAlign)
				{
					return bitsPerSample == waveFormat.bitsPerSample;
				}
				return false;
			}
			return false;
		}

		public override int GetHashCode()
		{
			return (int)waveFormatTag ^ (int)channels ^ sampleRate ^ averageBytesPerSecond ^ blockAlign ^ bitsPerSample;
		}

		public virtual void Serialize(BinaryWriter writer)
		{
			writer.Write(18 + extraSize);
			writer.Write((short)Encoding);
			writer.Write((short)Channels);
			writer.Write(SampleRate);
			writer.Write(AverageBytesPerSecond);
			writer.Write((short)BlockAlign);
			writer.Write((short)BitsPerSample);
			writer.Write(extraSize);
		}
	}
	public sealed class WaveFormatCustomMarshaler : ICustomMarshaler
	{
		private static WaveFormatCustomMarshaler marshaler;

		public static ICustomMarshaler GetInstance(string cookie)
		{
			if (marshaler == null)
			{
				marshaler = new WaveFormatCustomMarshaler();
			}
			return marshaler;
		}

		public void CleanUpManagedData(object ManagedObj)
		{
		}

		public void CleanUpNativeData(IntPtr pNativeData)
		{
			Marshal.FreeHGlobal(pNativeData);
		}

		public int GetNativeDataSize()
		{
			throw new NotImplementedException();
		}

		public IntPtr MarshalManagedToNative(object ManagedObj)
		{
			return WaveFormat.MarshalToPtr((WaveFormat)ManagedObj);
		}

		public object MarshalNativeToManaged(IntPtr pNativeData)
		{
			return WaveFormat.MarshalFromPtr(pNativeData);
		}
	}
	public enum WaveFormatEncoding : ushort
	{
		Unknown = 0,
		Pcm = 1,
		Adpcm = 2,
		IeeeFloat = 3,
		Vselp = 4,
		IbmCvsd = 5,
		ALaw = 6,
		MuLaw = 7,
		Dts = 8,
		Drm = 9,
		WmaVoice9 = 10,
		OkiAdpcm = 16,
		DviAdpcm = 17,
		ImaAdpcm = 17,
		MediaspaceAdpcm = 18,
		SierraAdpcm = 19,
		G723Adpcm = 20,
		DigiStd = 21,
		DigiFix = 22,
		DialogicOkiAdpcm = 23,
		MediaVisionAdpcm = 24,
		CUCodec = 25,
		YamahaAdpcm = 32,
		SonarC = 33,
		DspGroupTrueSpeech = 34,
		EchoSpeechCorporation1 = 35,
		AudioFileAf36 = 36,
		Aptx = 37,
		AudioFileAf10 = 38,
		Prosody1612 = 39,
		Lrc = 40,
		DolbyAc2 = 48,
		Gsm610 = 49,
		MsnAudio = 50,
		AntexAdpcme = 51,
		ControlResVqlpc = 52,
		DigiReal = 53,
		DigiAdpcm = 54,
		ControlResCr10 = 55,
		WAVE_FORMAT_NMS_VBXADPCM = 56,
		WAVE_FORMAT_CS_IMAADPCM = 57,
		WAVE_FORMAT_ECHOSC3 = 58,
		WAVE_FORMAT_ROCKWELL_ADPCM = 59,
		WAVE_FORMAT_ROCKWELL_DIGITALK = 60,
		WAVE_FORMAT_XEBEC = 61,
		WAVE_FORMAT_G721_ADPCM = 64,
		WAVE_FORMAT_G728_CELP = 65,
		WAVE_FORMAT_MSG723 = 66,
		Mpeg = 80,
		WAVE_FORMAT_RT24 = 82,
		WAVE_FORMAT_PAC = 83,
		MpegLayer3 = 85,
		WAVE_FORMAT_LUCENT_G723 = 89,
		WAVE_FORMAT_CIRRUS = 96,
		WAVE_FORMAT_ESPCM = 97,
		WAVE_FORMAT_VOXWARE = 98,
		WAVE_FORMAT_CANOPUS_ATRAC = 99,
		WAVE_FORMAT_G726_ADPCM = 100,
		WAVE_FORMAT_G722_ADPCM = 101,
		WAVE_FORMAT_DSAT_DISPLAY = 103,
		WAVE_FORMAT_VOXWARE_BYTE_ALIGNED = 105,
		WAVE_FORMAT_VOXWARE_AC8 = 112,
		WAVE_FORMAT_VOXWARE_AC10 = 113,
		WAVE_FORMAT_VOXWARE_AC16 = 114,
		WAVE_FORMAT_VOXWARE_AC20 = 115,
		WAVE_FORMAT_VOXWARE_RT24 = 116,
		WAVE_FORMAT_VOXWARE_RT29 = 117,
		WAVE_FORMAT_VOXWARE_RT29HW = 118,
		WAVE_FORMAT_VOXWARE_VR12 = 119,
		WAVE_FORMAT_VOXWARE_VR18 = 120,
		WAVE_FORMAT_VOXWARE_TQ40 = 121,
		WAVE_FORMAT_SOFTSOUND = 128,
		WAVE_FORMAT_VOXWARE_TQ60 = 129,
		WAVE_FORMAT_MSRT24 = 130,
		WAVE_FORMAT_G729A = 131,
		WAVE_FORMAT_MVI_MVI2 = 132,
		WAVE_FORMAT_DF_G726 = 133,
		WAVE_FORMAT_DF_GSM610 = 134,
		WAVE_FORMAT_ISIAUDIO = 136,
		WAVE_FORMAT_ONLIVE = 137,
		WAVE_FORMAT_SBC24 = 145,
		WAVE_FORMAT_DOLBY_AC3_SPDIF = 146,
		WAVE_FORMAT_MEDIASONIC_G723 = 147,
		WAVE_FORMAT_PROSODY_8KBPS = 148,
		WAVE_FORMAT_ZYXEL_ADPCM = 151,
		WAVE_FORMAT_PHILIPS_LPCBB = 152,
		WAVE_FORMAT_PACKED = 153,
		WAVE_FORMAT_MALDEN_PHONYTALK = 160,
		Gsm = 161,
		G729 = 162,
		G723 = 163,
		Acelp = 164,
		RawAac = 255,
		WAVE_FORMAT_RHETOREX_ADPCM = 256,
		WAVE_FORMAT_IRAT = 257,
		WAVE_FORMAT_VIVO_G723 = 273,
		WAVE_FORMAT_VIVO_SIREN = 274,
		WAVE_FORMAT_DIGITAL_G723 = 291,
		WAVE_FORMAT_SANYO_LD_ADPCM = 293,
		WAVE_FORMAT_SIPROLAB_ACEPLNET = 304,
		WAVE_FORMAT_SIPROLAB_ACELP4800 = 305,
		WAVE_FORMAT_SIPROLAB_ACELP8V3 = 306,
		WAVE_FORMAT_SIPROLAB_G729 = 307,
		WAVE_FORMAT_SIPROLAB_G729A = 308,
		WAVE_FORMAT_SIPROLAB_KELVIN = 309,
		WAVE_FORMAT_G726ADPCM = 320,
		WAVE_FORMAT_QUALCOMM_PUREVOICE = 336,
		WAVE_FORMAT_QUALCOMM_HALFRATE = 337,
		WAVE_FORMAT_TUBGSM = 341,
		WAVE_FORMAT_MSAUDIO1 = 352,
		WindowsMediaAudio = 353,
		WindowsMediaAudioProfessional = 354,
		WindowsMediaAudioLosseless = 355,
		WindowsMediaAudioSpdif = 356,
		WAVE_FORMAT_UNISYS_NAP_ADPCM = 368,
		WAVE_FORMAT_UNISYS_NAP_ULAW = 369,
		WAVE_FORMAT_UNISYS_NAP_ALAW = 370,
		WAVE_FORMAT_UNISYS_NAP_16K = 371,
		WAVE_FORMAT_CREATIVE_ADPCM = 512,
		WAVE_FORMAT_CREATIVE_FASTSPEECH8 = 514,
		WAVE_FORMAT_CREATIVE_FASTSPEECH10 = 515,
		WAVE_FORMAT_UHER_ADPCM = 528,
		WAVE_FORMAT_QUARTERDECK = 544,
		WAVE_FORMAT_ILINK_VC = 560,
		WAVE_FORMAT_RAW_SPORT = 576,
		WAVE_FORMAT_ESST_AC3 = 577,
		WAVE_FORMAT_IPI_HSX = 592,
		WAVE_FORMAT_IPI_RPELP = 593,
		WAVE_FORMAT_CS2 = 608,
		WAVE_FORMAT_SONY_SCX = 624,
		WAVE_FORMAT_FM_TOWNS_SND = 768,
		WAVE_FORMAT_BTV_DIGITAL = 1024,
		WAVE_FORMAT_QDESIGN_MUSIC = 1104,
		WAVE_FORMAT_VME_VMPCM = 1664,
		WAVE_FORMAT_TPC = 1665,
		WAVE_FORMAT_OLIGSM = 4096,
		WAVE_FORMAT_OLIADPCM = 4097,
		WAVE_FORMAT_OLICELP = 4098,
		WAVE_FORMAT_OLISBC = 4099,
		WAVE_FORMAT_OLIOPR = 4100,
		WAVE_FORMAT_LH_CODEC = 4352,
		WAVE_FORMAT_NORRIS = 5120,
		WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS = 5376,
		MPEG_ADTS_AAC = 5632,
		MPEG_RAW_AAC = 5633,
		MPEG_LOAS = 5634,
		NOKIA_MPEG_ADTS_AAC = 5640,
		NOKIA_MPEG_RAW_AAC = 5641,
		VODAFONE_MPEG_ADTS_AAC = 5642,
		VODAFONE_MPEG_RAW_AAC = 5643,
		MPEG_HEAAC = 5648,
		WAVE_FORMAT_DVM = 8192,
		Vorbis1 = 26447,
		Vorbis2 = 26448,
		Vorbis3 = 26449,
		Vorbis1P = 26479,
		Vorbis2P = 26480,
		Vorbis3P = 26481,
		Extensible = 65534,
		WAVE_FORMAT_DEVELOPMENT = ushort.MaxValue
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class WaveFormatExtensible : WaveFormat
	{
		private short wValidBitsPerSample;

		private int dwChannelMask;

		private Guid subFormat;

		public Guid SubFormat => subFormat;

		private WaveFormatExtensible()
		{
		}

		public WaveFormatExtensible(int rate, int bits, int channels)
			: base(rate, bits, channels)
		{
			waveFormatTag = WaveFormatEncoding.Extensible;
			extraSize = 22;
			wValidBitsPerSample = (short)bits;
			for (int i = 0; i < channels; i++)
			{
				dwChannelMask |= 1 << i;
			}
			if (bits == 32)
			{
				subFormat = AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT;
			}
			else
			{
				subFormat = AudioMediaSubtypes.MEDIASUBTYPE_PCM;
			}
		}

		public WaveFormat ToStandardWaveFormat()
		{
			if (subFormat == AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT && bitsPerSample == 32)
			{
				return WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels);
			}
			if (subFormat == AudioMediaSubtypes.MEDIASUBTYPE_PCM)
			{
				return new WaveFormat(sampleRate, bitsPerSample, channels);
			}
			return this;
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			writer.Write(wValidBitsPerSample);
			writer.Write(dwChannelMask);
			byte[] array = subFormat.ToByteArray();
			writer.Write(array, 0, array.Length);
		}

		public override string ToString()
		{
			return "WAVE_FORMAT_EXTENSIBLE " + AudioMediaSubtypes.GetAudioSubtypeName(subFormat) + " " + $"{base.SampleRate}Hz {base.Channels} channels {base.BitsPerSample} bit";
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class WaveFormatExtraData : WaveFormat
	{
		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
		private byte[] extraData = new byte[100];

		public byte[] ExtraData => extraData;

		internal WaveFormatExtraData()
		{
		}

		public WaveFormatExtraData(BinaryReader reader)
			: base(reader)
		{
			ReadExtraData(reader);
		}

		internal void ReadExtraData(BinaryReader reader)
		{
			if (extraSize > 0)
			{
				reader.Read(extraData, 0, extraSize);
			}
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			if (extraSize > 0)
			{
				writer.Write(extraData, 0, extraSize);
			}
		}
	}
	public interface IWaveIn : IDisposable
	{
		WaveFormat WaveFormat { get; set; }

		event EventHandler<WaveInEventArgs> DataAvailable;

		event EventHandler<StoppedEventArgs> RecordingStopped;

		void StartRecording();

		void StopRecording();
	}
	public class WaveInEventArgs : EventArgs
	{
		private byte[] buffer;

		private int bytes;

		public byte[] Buffer => buffer;

		public int BytesRecorded => bytes;

		public WaveInEventArgs(byte[] buffer, int bytes)
		{
			this.buffer = buffer;
			this.bytes = bytes;
		}
	}
	public class AiffFileWriter : Stream
	{
		private Stream outStream;

		private BinaryWriter writer;

		private long dataSizePos;

		private long commSampleCountPos;

		private long dataChunkSize = 8L;

		private WaveFormat format;

		private string filename;

		private byte[] value24 = new byte[3];

		public string Filename => filename;

		public override long Length => dataChunkSize;

		public WaveFormat WaveFormat => format;

		public override bool CanRead => false;

		public override bool CanWrite => true;

		public override bool CanSeek => false;

		public override long Position
		{
			get
			{
				return dataChunkSize;
			}
			set
			{
				throw new InvalidOperationException("Repositioning an AiffFileWriter is not supported");
			}
		}

		public static void CreateAiffFile(string filename, WaveStream sourceProvider)
		{
			using AiffFileWriter aiffFileWriter = new AiffFileWriter(filename, sourceProvider.WaveFormat);
			byte[] array = new byte[16384];
			while (sourceProvider.Position < sourceProvider.Length)
			{
				int count = Math.Min((int)(sourceProvider.Length - sourceProvider.Position), array.Length);
				int num = sourceProvider.Read(array, 0, count);
				if (num == 0)
				{
					break;
				}
				aiffFileWriter.Write(array, 0, num);
			}
		}

		public AiffFileWriter(Stream outStream, WaveFormat format)
		{
			this.outStream = outStream;
			this.format = format;
			writer = new BinaryWriter(outStream, Encoding.UTF8);
			writer.Write(Encoding.UTF8.GetBytes("FORM"));
			writer.Write(0);
			writer.Write(Encoding.UTF8.GetBytes("AIFF"));
			CreateCommChunk();
			WriteSsndChunkHeader();
		}

		public AiffFileWriter(string filename, WaveFormat format)
			: this(new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Read), format)
		{
			this.filename = filename;
		}

		private void WriteSsndChunkHeader()
		{
			writer.Write(Encoding.UTF8.GetBytes("SSND"));
			dataSizePos = outStream.Position;
			writer.Write(0);
			writer.Write(0);
			writer.Write(SwapEndian(format.BlockAlign));
		}

		private byte[] SwapEndian(short n)
		{
			return new byte[2]
			{
				(byte)(n >> 8),
				(byte)((uint)n & 0xFFu)
			};
		}

		private byte[] SwapEndian(int n)
		{
			return new byte[4]
			{
				(byte)((uint)(n >> 24) & 0xFFu),
				(byte)((uint)(n >> 16) & 0xFFu),
				(byte)((uint)(n >> 8) & 0xFFu),
				(byte)((uint)n & 0xFFu)
			};
		}

		private void CreateCommChunk()
		{
			writer.Write(Encoding.UTF8.GetBytes("COMM"));
			writer.Write(SwapEndian(18));
			writer.Write(SwapEndian((short)format.Channels));
			commSampleCountPos = outStream.Position;
			writer.Write(0);
			writer.Write(SwapEndian((short)format.BitsPerSample));
			writer.Write(IEEE.ConvertToIeeeExtended(format.SampleRate));
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			throw new InvalidOperationException("Cannot read from an AiffFileWriter");
		}

		public override long Seek(long offset, SeekOrigin origin)
		{
			throw new InvalidOperationException("Cannot seek within an AiffFileWriter");
		}

		public override void SetLength(long value)
		{
			throw new InvalidOperationException("Cannot set length of an AiffFileWriter");
		}

		public override void Write(byte[] data, int offset, int count)
		{
			byte[] array = new byte[data.Length];
			int num = format.BitsPerSample / 8;
			for (int i = 0; i < data.Length; i++)
			{
				int num2 = (int)Math.Floor((double)i / (double)num) * num + (num - i % num - 1);
				array[i] = data[num2];
			}
			outStream.Write(array, offset, count);
			dataChunkSize += count;
		}

		public void WriteSample(float sample)
		{
			if (WaveFormat.BitsPerSample == 16)
			{
				writer.Write(SwapEndian((short)(32767f * sample)));
				dataChunkSize += 2L;
			}
			else if (WaveFormat.BitsPerSample == 24)
			{
				byte[] bytes = BitConverter.GetBytes((int)(2.1474836E+09f * sample));
				value24[2] = bytes[1];
				value24[1] = bytes[2];
				value24[0] = bytes[3];
				writer.Write(value24);
				dataChunkSize += 3L;
			}
			else
			{
				if (WaveFormat.BitsPerSample != 32 || WaveFormat.Encoding != WaveFormatEncoding.Extensible)
				{
					throw new InvalidOperationException("Only 16, 24 or 32 bit PCM or IEEE float audio data supported");
				}
				writer.Write(SwapEndian(65535 * (int)sample));
				dataChunkSize += 4L;
			}
		}

		public void WriteSamples(float[] samples, int offset, int count)
		{
			for (int i = 0; i < count; i++)
			{
				WriteSample(samples[offset + i]);
			}
		}

		public void WriteSamples(short[] samples, int offset, int count)
		{
			if (WaveFormat.BitsPerSample == 16)
			{
				for (int i = 0; i < count; i++)
				{
					writer.Write(SwapEndian(samples[i + offset]));
				}
				dataChunkSize += count * 2;
			}
			else if (WaveFormat.BitsPerSample == 24)
			{
				for (int j = 0; j < count; j++)
				{
					byte[] bytes = BitConverter.GetBytes(65535 * samples[j + offset]);
					value24[2] = bytes[1];
					value24[1] = bytes[2];
					value24[0] = bytes[3];
					writer.Write(value24);
				}
				dataChunkSize += count * 3;
			}
			else
			{
				if (WaveFormat.BitsPerSample != 32 || WaveFormat.Encoding != WaveFormatEncoding.Extensible)
				{
					throw new InvalidOperationException("Only 16, 24 or 32 bit PCM audio data supported");
				}
				for (int k = 0; k < count; k++)
				{
					writer.Write(SwapEndian(65535 * samples[k + offset]));
				}
				dataChunkSize += count * 4;
			}
		}

		public override void Flush()
		{
			writer.Flush();
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && outStream != null)
			{
				try
				{
					UpdateHeader(writer);
				}
				finally
				{
					outStream.Dispose();
					outStream = null;
				}
			}
		}

		protected virtual void UpdateHeader(BinaryWriter writer)
		{
			Flush();
			writer.Seek(4, SeekOrigin.Begin);
			writer.Write(SwapEndian((int)(outStream.Length - 8)));
			UpdateCommChunk(writer);
			UpdateSsndChunk(writer);
		}

		private void UpdateCommChunk(BinaryWriter writer)
		{
			writer.Seek((int)commSampleCountPos, SeekOrigin.Begin);
			writer.Write(SwapEndian((int)(dataChunkSize * 8 / format.BitsPerSample / format.Channels)));
		}

		private void UpdateSsndChunk(BinaryWriter writer)
		{
			writer.Seek((int)dataSizePos, SeekOrigin.Begin);
			writer.Write(SwapEndian((int)dataChunkSize));
		}

		~AiffFileWriter()
		{
			Dispose(disposing: false);
		}
	}
	public class BextChunkInfo
	{
		public string Description { get; set; }

		public string Originator { get; set; }

		public string OriginatorReference { get; set; }

		public DateTime OriginationDateTime { get; set; }

		public string OriginationDate => OriginationDateTime.ToString("yyyy-MM-dd");

		public string OriginationTime => OriginationDateTime.ToString("HH:mm:ss");

		public long TimeReference { get; set; }

		public ushort Version => 1;

		public string UniqueMaterialIdentifier { get; set; }

		public byte[] Reserved { get; }

		public string CodingHistory { get; set; }

		public BextChunkInfo()
		{
			Reserved = new byte[190];
		}
	}
	public class BwfWriter : IDisposable
	{
		private readonly WaveFormat format;

		private readonly BinaryWriter writer;

		private readonly long dataChunkSizePosition;

		private long dataLength;

		private bool isDisposed;

		public BwfWriter(string filename, WaveFormat format, BextChunkInfo bextChunkInfo)
		{
			this.format = format;
			writer = new BinaryWriter(File.OpenWrite(filename));
			writer.Write(Encoding.UTF8.GetBytes("RIFF"));
			writer.Write(0);
			writer.Write(Encoding.UTF8.GetBytes("WAVE"));
			writer.Write(Encoding.UTF8.GetBytes("JUNK"));
			writer.Write(28);
			writer.Write(0L);
			writer.Write(0L);
			writer.Write(0L);
			writer.Write(0);
			writer.Write(Encoding.UTF8.GetBytes("bext"));
			byte[] bytes = Encoding.ASCII.GetBytes(bextChunkInfo.CodingHistory ?? "");
			int num = 602 + bytes.Length;
			if (num % 2 != 0)
			{
				num++;
			}
			writer.Write(num);
			_ = writer.BaseStream.Position;
			writer.Write(GetAsBytes(bextChunkInfo.Description, 256));
			writer.Write(GetAsBytes(bextChunkInfo.Originator, 32));
			writer.Write(GetAsBytes(bextChunkInfo.OriginatorReference, 32));
			writer.Write(GetAsBytes(bextChunkInfo.OriginationDate, 10));
			writer.Write(GetAsBytes(bextChunkInfo.OriginationTime, 8));
			writer.Write(bextChunkInfo.TimeReference);
			writer.Write(bextChunkInfo.Version);
			writer.Write(GetAsBytes(bextChunkInfo.UniqueMaterialIdentifier, 64));
			writer.Write(bextChunkInfo.Reserved);
			writer.Write(bytes);
			if (bytes.Length % 2 != 0)
			{
				writer.Write((byte)0);
			}
			writer.Write(Encoding.UTF8.GetBytes("fmt "));
			format.Serialize(writer);
			writer.Write(Encoding.UTF8.GetBytes("data"));
			dataChunkSizePosition = writer.BaseStream.Position;
			writer.Write(-1);
		}

		public void Write(byte[] buffer, int offset, int count)
		{
			if (isDisposed)
			{
				throw new ObjectDisposedException("This BWF Writer already disposed");
			}
			writer.Write(buffer, offset, count);
			dataLength += count;
		}

		public void Flush()
		{
			if (isDisposed)
			{
				throw new ObjectDisposedException("This BWF Writer already disposed");
			}
			writer.Flush();
			FixUpChunkSizes(restorePosition: true);
		}

		private void FixUpChunkSizes(bool restorePosition)
		{
			long position = writer.BaseStream.Position;
			bool num = dataLength > int.MaxValue;
			long num2 = writer.BaseStream.Length - 8;
			if (num)
			{
				int num3 = format.BitsPerSample / 8 * format.Channels;
				writer.BaseStream.Position = 0L;
				writer.Write(Encoding.UTF8.GetBytes("RF64"));
				writer.Write(-1);
				writer.BaseStream.Position += 4L;
				writer.Write(Encoding.UTF8.GetBytes("ds64"));
				writer.BaseStream.Position += 4L;
				writer.Write(num2);
				writer.Write(dataLength);
				writer.Write(dataLength / num3);
			}
			else
			{
				writer.BaseStream.Position = 4L;
				writer.Write((uint)num2);
				writer.BaseStream.Position = dataChunkSizePosition;
				writer.Write((uint)dataLength);
			}
			if (restorePosition)
			{
				writer.BaseStream.Position = position;
			}
		}

		public void Dispose()
		{
			if (!isDisposed)
			{
				FixUpChunkSizes(restorePosition: false);
				writer.Dispose();
				isDisposed = true;
			}
		}

		private static byte[] GetAsBytes(string message, int byteSize)
		{
			byte[] array = new byte[byteSize];
			byte[] bytes = Encoding.ASCII.GetBytes(message ?? "");
			Array.Copy(bytes, array, Math.Min(bytes.Length, byteSize));
			return array;
		}
	}
	public class CueWaveFileWriter : WaveFileWriter
	{
		private CueList cues;

		public CueWaveFileWriter(string fileName, WaveFormat waveFormat)
			: base(fileName, waveFormat)
		{
		}

		public void AddCue(int position, string label)
		{
			if (cues == null)
			{
				cues = new CueList();
			}
			cues.Add(new Cue(position, label));
		}

		private void WriteCues(BinaryWriter w)
		{
			if (cues != null)
			{
				int count = cues.GetRiffChunks().Length;
				w.Seek(0, SeekOrigin.End);
				if (w.BaseStream.Length % 2 == 1)
				{
					w.Write((byte)0);
				}
				w.Write(cues.GetRiffChunks(), 0, count);
				w.Seek(4, SeekOrigin.Begin);
				w.Write((int)(w.BaseStream.Length - 8));
			}
		}

		protected override void UpdateHeader(BinaryWriter writer)
		{
			base.UpdateHeader(writer);
			WriteCues(writer);
		}
	}
	public class DirectSoundOut : IWavePlayer, IDisposable
	{
		[StructLayout(LayoutKind.Sequential, Pack = 2)]
		internal class BufferDescription
		{
			public int dwSize;

			[MarshalAs(UnmanagedType.U4)]
			public DirectSoundBufferCaps dwFlags;

			public uint dwBufferBytes;

			public int dwReserved;

			public IntPtr lpwfxFormat;

			public Guid guidAlgo;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 2)]
		internal class BufferCaps
		{
			public int dwSize;

			public int dwFlags;

			public int dwBufferBytes;

			public int dwUnlockTransferRate;

			public int dwPlayCpuOverhead;
		}

		internal enum DirectSoundCooperativeLevel : uint
		{
			DSSCL_NORMAL = 1u,
			DSSCL_PRIORITY,
			DSSCL_EXCLUSIVE,
			DSSCL_WRITEPRIMARY
		}

		[Flags]
		internal enum DirectSoundPlayFlags : uint
		{
			DSBPLAY_LOOPING = 1u,
			DSBPLAY_LOCHARDWARE = 2u,
			DSBPLAY_LOCSOFTWARE = 4u,
			DSBPLAY_TERMINATEBY_TIME = 8u,
			DSBPLAY_TERMINATEBY_DISTANCE = 0x10u,
			DSBPLAY_TERMINATEBY_PRIORITY = 0x20u
		}

		internal enum DirectSoundBufferLockFlag : uint
		{
			None,
			FromWriteCursor,
			EntireBuffer
		}

		[Flags]
		internal enum DirectSoundBufferStatus : uint
		{
			DSBSTATUS_PLAYING = 1u,
			DSBSTATUS_BUFFERLOST = 2u,
			DSBSTATUS_LOOPING = 4u,
			DSBSTATUS_LOCHARDWARE = 8u,
			DSBSTATUS_LOCSOFTWARE = 0x10u,
			DSBSTATUS_TERMINATED = 0x20u
		}

		[Flags]
		internal enum DirectSoundBufferCaps : uint
		{
			DSBCAPS_PRIMARYBUFFER = 1u,
			DSBCAPS_STATIC = 2u,
			DSBCAPS_LOCHARDWARE = 4u,
			DSBCAPS_LOCSOFTWARE = 8u,
			DSBCAPS_CTRL3D = 0x10u,
			DSBCAPS_CTRLFREQUENCY = 0x20u,
			DSBCAPS_CTRLPAN = 0x40u,
			DSBCAPS_CTRLVOLUME = 0x80u,
			DSBCAPS_CTRLPOSITIONNOTIFY = 0x100u,
			DSBCAPS_CTRLFX = 0x200u,
			DSBCAPS_STICKYFOCUS = 0x4000u,
			DSBCAPS_GLOBALFOCUS = 0x8000u,
			DSBCAPS_GETCURRENTPOSITION2 = 0x10000u,
			DSBCAPS_MUTE3DATMAXDISTANCE = 0x20000u,
			DSBCAPS_LOCDEFER = 0x40000u
		}

		internal struct DirectSoundBufferPositionNotify
		{
			public uint dwOffset;

			public IntPtr hEventNotify;
		}

		[ComImport]
		[Guid("279AFA83-4981-11CE-A521-0020AF0BE560")]
		[SuppressUnmanagedCodeSecurity]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IDirectSound
		{
			void CreateSoundBuffer([In] BufferDescription desc, [MarshalAs(UnmanagedType.Interface)] out object dsDSoundBuffer, IntPtr pUnkOuter);

			void GetCaps(IntPtr caps);

			void DuplicateSoundBuffer([In][MarshalAs(UnmanagedType.Interface)] IDirectSoundBuffer bufferOriginal, [In][MarshalAs(UnmanagedType.Interface)] IDirectSoundBuffer bufferDuplicate);

			void SetCooperativeLevel(IntPtr HWND, [In][MarshalAs(UnmanagedType.U4)] DirectSoundCooperativeLevel dwLevel);

			void Compact();

			void GetSpeakerConfig(IntPtr pdwSpeakerConfig);

			void SetSpeakerConfig(uint pdwSpeakerConfig);

			void Initialize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guid);
		}

		[ComImport]
		[Guid("279AFA85-4981-11CE-A521-0020AF0BE560")]
		[SuppressUnmanagedCodeSecurity]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IDirectSoundBuffer
		{
			void GetCaps([MarshalAs(UnmanagedType.LPStruct)] BufferCaps pBufferCaps);

			void GetCurrentPosition(out uint currentPlayCursor, out uint currentWriteCursor);

			void GetFormat();

			[return: MarshalAs(UnmanagedType.I4)]
			int GetVolume();

			void GetPan(out uint pan);

			[return: MarshalAs(UnmanagedType.I4)]
			int GetFrequency();

			[return: MarshalAs(UnmanagedType.U4)]
			DirectSoundBufferStatus GetStatus();

			void Initialize([In][MarshalAs(UnmanagedType.Interface)] IDirectSound directSound, [In] BufferDescription desc);

			void Lock(int dwOffset, uint dwBytes, out IntPtr audioPtr1, out int audioBytes1, out IntPtr audioPtr2, out int audioBytes2, [MarshalAs(UnmanagedType.U4)] DirectSoundBufferLockFlag dwFlags);

			void Play(uint dwReserved1, uint dwPriority, [In][MarshalAs(UnmanagedType.U4)] DirectSoundPlayFlags dwFlags);

			void SetCurrentPosition(uint dwNewPosition);

			void SetFormat([In] WaveFormat pcfxFormat);

			void SetVolume(int volume);

			void SetPan(uint pan);

			void SetFrequency(uint frequency);

			void Stop();

			void Unlock(IntPtr pvAudioPtr1, int dwAudioBytes1, IntPtr pvAudioPtr2, int dwAudioBytes2);

			void Restore();
		}

		[ComImport]
		[Guid("b0210783-89cd-11d0-af08-00a0c925cd16")]
		[SuppressUnmanagedCodeSecurity]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IDirectSoundNotify
		{
			void SetNotificationPositions(uint dwPositionNotifies, [In][MarshalAs(UnmanagedType.LPArray)] DirectSoundBufferPositionNotify[] pcPositionNotifies);
		}

		private delegate bool DSEnumCallback(IntPtr lpGuid, IntPtr lpcstrDescription, IntPtr lpcstrModule, IntPtr lpContext);

		private PlaybackState playbackState;

		private WaveFormat waveFormat;

		private int samplesTotalSize;

		private int samplesFrameSize;

		private int nextSamplesWriteIndex;

		private int desiredLatency;

		private Guid device;

		private byte[] samples;

		private IWaveProvider waveStream;

		private IDirectSound directSound;

		private IDirectSoundBuffer primarySoundBuffer;

		private IDirectSoundBuffer sec

BepInEx/core/NAudio.dll

Decompiled 2 days ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using NAudio.Wave.SampleProviders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("Mark Heath & Contributors")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyDescription("NAudio, an audio library for .NET")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio")]
[assembly: AssemblyTitle("NAudio")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio.Wave;

public class AudioFileReader : WaveStream, ISampleProvider
{
	private WaveStream readerStream;

	private readonly SampleChannel sampleChannel;

	private readonly int destBytesPerSample;

	private readonly int sourceBytesPerSample;

	private readonly long length;

	private readonly object lockObject;

	public string FileName { get; }

	public override WaveFormat WaveFormat => sampleChannel.WaveFormat;

	public override long Length => length;

	public override long Position
	{
		get
		{
			return SourceToDest(((Stream)(object)readerStream).Position);
		}
		set
		{
			lock (lockObject)
			{
				((Stream)(object)readerStream).Position = DestToSource(value);
			}
		}
	}

	public float Volume
	{
		get
		{
			return sampleChannel.Volume;
		}
		set
		{
			sampleChannel.Volume = value;
		}
	}

	public AudioFileReader(string fileName)
	{
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Expected O, but got Unknown
		lockObject = new object();
		FileName = fileName;
		CreateReaderStream(fileName);
		sourceBytesPerSample = readerStream.WaveFormat.BitsPerSample / 8 * readerStream.WaveFormat.Channels;
		sampleChannel = new SampleChannel((IWaveProvider)(object)readerStream, false);
		destBytesPerSample = 4 * sampleChannel.WaveFormat.Channels;
		length = SourceToDest(((Stream)(object)readerStream).Length);
	}

	private void CreateReaderStream(string fileName)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Invalid comparison between Unknown and I4
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Invalid comparison between Unknown and I4
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Expected O, but got Unknown
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Expected O, but got Unknown
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Expected O, but got Unknown
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Expected O, but got Unknown
		if (fileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
		{
			readerStream = (WaveStream)new WaveFileReader(fileName);
			if ((int)readerStream.WaveFormat.Encoding != 1 && (int)readerStream.WaveFormat.Encoding != 3)
			{
				readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
				readerStream = (WaveStream)new BlockAlignReductionStream(readerStream);
			}
		}
		else if (fileName.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase))
		{
			if (Environment.OSVersion.Version.Major < 6)
			{
				readerStream = (WaveStream)(object)new Mp3FileReader(fileName);
			}
			else
			{
				readerStream = (WaveStream)new MediaFoundationReader(fileName);
			}
		}
		else if (fileName.EndsWith(".aiff", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".aif", StringComparison.OrdinalIgnoreCase))
		{
			readerStream = (WaveStream)new AiffFileReader(fileName);
		}
		else
		{
			readerStream = (WaveStream)new MediaFoundationReader(fileName);
		}
	}

	public override int Read(byte[] buffer, int offset, int count)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		WaveBuffer val = new WaveBuffer(buffer);
		int count2 = count / 4;
		return Read(val.FloatBuffer, offset / 4, count2) * 4;
	}

	public int Read(float[] buffer, int offset, int count)
	{
		lock (lockObject)
		{
			return sampleChannel.Read(buffer, offset, count);
		}
	}

	private long SourceToDest(long sourceBytes)
	{
		return destBytesPerSample * (sourceBytes / sourceBytesPerSample);
	}

	private long DestToSource(long destBytes)
	{
		return sourceBytesPerSample * (destBytes / destBytesPerSample);
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && readerStream != null)
		{
			((Stream)(object)readerStream).Dispose();
			readerStream = null;
		}
		((Stream)this).Dispose(disposing);
	}
}
public class Mp3FileReader : Mp3FileReaderBase
{
	public Mp3FileReader(string mp3FileName)
		: base((Stream)File.OpenRead(mp3FileName), new FrameDecompressorBuilder(CreateAcmFrameDecompressor), true)
	{
	}//IL_000e: Unknown result type (might be due to invalid IL or missing references)
	//IL_0019: Expected O, but got Unknown


	public Mp3FileReader(Stream inputStream)
		: base(inputStream, new FrameDecompressorBuilder(CreateAcmFrameDecompressor), false)
	{
	}//IL_0009: Unknown result type (might be due to invalid IL or missing references)
	//IL_0014: Expected O, but got Unknown


	public static IMp3FrameDecompressor CreateAcmFrameDecompressor(WaveFormat mp3Format)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		return (IMp3FrameDecompressor)new AcmMp3FrameDecompressor(mp3Format);
	}
}

BepInEx/core/NAudio.Lame.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using LameDLLWrap;
using NAudio.Lame;
using NAudio.Wave;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Corey Murtagh")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright © 2013-2023 Corey Murtagh")]
[assembly: AssemblyDescription("Uses libmp3lame.dll from the Lame project to provide MP3 encoding support to NAudio.  Both 64-bit and 32-bit versions of libmp3lame.dll are provided, with platform detection to determine which to use.")]
[assembly: AssemblyFileVersion("2.1.0.0")]
[assembly: AssemblyInformationalVersion("2.1.0+5b5bb009d8c63ef8ab95cb36ca9105c8acc1c5fc")]
[assembly: AssemblyProduct("NAudio.Lame")]
[assembly: AssemblyTitle("NAudio.Lame")]
[assembly: AssemblyVersion("2.1.0.0")]
internal class <Module>
{
	static <Module>()
	{
		ModuleInitializer.Initialize();
	}
}
namespace NAudio.Lame;

public static class ID3Decoder
{
	private class ID3FrameData
	{
		private delegate string delGetString(byte[] buffer, ref int offset, bool requireTeminator);

		public class APICData
		{
			public string MIMEType;

			public byte ImageType;

			public string Description;

			public byte[] ImageBytes;
		}

		public readonly string FrameID;

		public readonly int Size;

		public readonly short Flags;

		public readonly byte[] Data;

		private ID3FrameData(string frameID, int size, short flags, byte[] data)
		{
			FrameID = frameID;
			Size = size;
			Flags = flags;
			Data = data;
		}

		public static ID3FrameData ReadFrame(byte[] buffer, int offset, out int size)
		{
			size = -1;
			if (buffer.Length - offset <= 10)
			{
				return null;
			}
			string @string = Encoding.ASCII.GetString(buffer, offset, 4);
			int num = DecodeBEInt32(buffer, offset + 4);
			short num2 = DecodeBEInt16(buffer, offset + 8);
			byte[] array = new byte[num];
			Array.Copy(buffer, offset + 10, array, 0, num);
			if (((uint)num2 & 0x80u) != 0)
			{
				using MemoryStream memoryStream = new MemoryStream();
				using DeflateStream deflateStream = new DeflateStream(new MemoryStream(array), CompressionMode.Decompress);
				deflateStream.CopyTo(memoryStream);
				array = memoryStream.ToArray();
			}
			size = 10 + num;
			return new ID3FrameData(@string, num, num2, array);
		}

		private static string GetASCIIString(byte[] buffer, ref int offset, bool requireTerminator)
		{
			int num = offset;
			int i;
			for (i = offset; i < buffer.Length && buffer[i] != 0; i++)
			{
			}
			if (requireTerminator && i >= buffer.Length)
			{
				return null;
			}
			int num2 = i - num;
			offset = i + 1;
			if (num2 >= 1)
			{
				return Encoding.ASCII.GetString(buffer, num, num2);
			}
			return string.Empty;
		}

		private static string GetUnicodeString(byte[] buffer, ref int offset, bool requireTerminator = true)
		{
			int num = offset;
			int i;
			for (i = offset; i < buffer.Length - 1 && (buffer[i] != 0 || buffer[i + 1] != 0); i += 2)
			{
			}
			if (requireTerminator && i >= buffer.Length)
			{
				return null;
			}
			int num2 = i - num;
			offset = i + 2;
			return UCS2.GetString(buffer, num, num2);
		}

		private delGetString GetGetString()
		{
			byte b = Data[0];
			return b switch
			{
				0 => GetASCIIString, 
				1 => GetUnicodeString, 
				_ => throw new InvalidDataException($"Invalid string encoding: {b}"), 
			};
		}

		public string ParseString()
		{
			int offset = 1;
			return GetGetString()(Data, ref offset, requireTeminator: false);
		}

		public string ParseCommentText()
		{
			delGetString getString = GetGetString();
			int num = 1;
			Encoding.ASCII.GetString(Data, num, 3);
			num += 3;
			getString(Data, ref num, requireTeminator: true);
			return getString(Data, ref num, requireTeminator: false);
		}

		public KeyValuePair<string, string> ParseUserDefinedText()
		{
			byte b = Data[0];
			delGetString delGetString = b switch
			{
				0 => GetASCIIString, 
				1 => GetUnicodeString, 
				_ => throw new InvalidDataException($"Unknown string encoding: {b}"), 
			};
			int offset = 1;
			string key = delGetString(Data, ref offset, requireTeminator: true);
			string value = delGetString(Data, ref offset, requireTeminator: false);
			return new KeyValuePair<string, string>(key, value);
		}

		public APICData ParseAPIC()
		{
			if (FrameID != "APIC")
			{
				return null;
			}
			delGetString getString = GetGetString();
			int offset = 1;
			string mIMEType = getString(Data, ref offset, requireTeminator: true);
			byte imageType = Data[offset++];
			string description = getString(Data, ref offset, requireTeminator: true);
			int num = Data.Length - offset;
			byte[] array = new byte[num];
			Array.Copy(Data, offset, array, 0, num);
			return new APICData
			{
				MIMEType = mIMEType,
				ImageType = imageType,
				Description = description,
				ImageBytes = array
			};
		}
	}

	public static ID3TagData Decode(Stream stream)
	{
		byte[] array = new byte[10];
		if (stream.Read(array, 0, 10) != 10 || !ValidateTagHeader(array))
		{
			throw new InvalidDataException("Bad ID3 Tag Header");
		}
		int num = DecodeHeaderSize(array, 6);
		if (num < 10 || num >= 268435456)
		{
			throw new InvalidDataException($"ID3 header size '{num:#,0}' out of range.");
		}
		byte[] array2 = new byte[10 + num];
		stream.Read(array2, 0, array2.Length);
		return InternalDecode(array2, 0, num, array[5]);
	}

	public static ID3TagData Decode(byte[] buffer)
	{
		if (!ValidateTagHeader(buffer))
		{
			throw new InvalidDataException("Bad ID3 Tag Header");
		}
		int num = DecodeHeaderSize(buffer, 6);
		if (num < 10 || num > buffer.Length - 10)
		{
			throw new InvalidDataException($"ID3 header size '{num:#,0}' out of range.");
		}
		return InternalDecode(buffer, 10, num, buffer[5]);
	}

	private static ID3TagData InternalDecode(byte[] buffer, int offset, int size, byte flags)
	{
		byte[] array = new byte[size];
		Array.Copy(buffer, offset, array, 0, size);
		if ((flags & 0x80u) != 0)
		{
			array = UnsyncBytes(array);
		}
		ID3TagData iD3TagData = new ID3TagData();
		int num = 0;
		if ((flags & 0x40u) != 0)
		{
			int num2 = DecodeBEInt32(array, num);
			num += num2 + 4;
		}
		int size2;
		ID3FrameData iD3FrameData = ID3FrameData.ReadFrame(array, num, out size2);
		while (size2 > 0 && iD3FrameData != null)
		{
			switch (iD3FrameData.FrameID)
			{
			case "TIT2":
				iD3TagData.Title = iD3FrameData.ParseString();
				break;
			case "TPE1":
				iD3TagData.Artist = iD3FrameData.ParseString();
				break;
			case "TALB":
				iD3TagData.Album = iD3FrameData.ParseString();
				break;
			case "TYER":
				iD3TagData.Year = iD3FrameData.ParseString();
				break;
			case "COMM":
				iD3TagData.Comment = iD3FrameData.ParseCommentText();
				break;
			case "TCON":
				iD3TagData.Genre = iD3FrameData.ParseString();
				break;
			case "TRCK":
				iD3TagData.Track = iD3FrameData.ParseString();
				break;
			case "TIT3":
				iD3TagData.Subtitle = iD3FrameData.ParseString();
				break;
			case "TPE2":
				iD3TagData.AlbumArtist = iD3FrameData.ParseString();
				break;
			case "TXXX":
			{
				KeyValuePair<string, string> keyValuePair = iD3FrameData.ParseUserDefinedText();
				iD3TagData.UserDefinedText[keyValuePair.Key] = keyValuePair.Value;
				break;
			}
			case "APIC":
				iD3TagData.AlbumArt = iD3FrameData.ParseAPIC()?.ImageBytes;
				break;
			}
			num += size2;
			iD3FrameData = ID3FrameData.ReadFrame(array, num, out size2);
		}
		return iD3TagData;
	}

	private static bool ValidateTagHeader(byte[] buffer)
	{
		if (buffer != null && buffer.Length >= 4 && buffer[0] == 73 && buffer[1] == 68 && buffer[2] == 51 && buffer[3] == 3)
		{
			return buffer[4] == 0;
		}
		return false;
	}

	private static int DecodeHeaderSize(byte[] buffer, int offset)
	{
		return (buffer[offset] << 21) | (buffer[offset + 1] << 14) | (buffer[offset + 2] << 7) | buffer[offset + 3];
	}

	private static short DecodeBEInt16(byte[] buffer, int offset)
	{
		return (short)((buffer[offset] << 8) | buffer[offset + 1]);
	}

	private static int DecodeBEInt32(byte[] buffer, int offset)
	{
		return (buffer[offset] << 24) | (buffer[offset + 1] << 16) | (buffer[offset + 2] << 8) | buffer[offset + 3];
	}

	private static byte[] UnsyncBytes(IEnumerable<byte> buffer)
	{
		return ProcessBuffer().ToArray();
		IEnumerable<byte> ProcessBuffer()
		{
			byte b2 = 0;
			foreach (byte b in buffer)
			{
				if (b != 0 || b2 != byte.MaxValue)
				{
					yield return b;
				}
				b2 = b;
			}
		}
	}
}
public class ID3TagData
{
	public string Title;

	public string Artist;

	public string Album;

	public string Year;

	public string Comment;

	public string Genre;

	public string Track;

	public string Subtitle;

	public string AlbumArtist;

	public byte[] AlbumArt;

	[Obsolete("Use the UserDefinedText property instead.", false)]
	public string[] UserDefinedTags
	{
		get
		{
			return UserDefinedText.Select((KeyValuePair<string, string> kv) => kv.Key + "=" + kv.Value).ToArray();
		}
		set
		{
			SetUDT(value);
		}
	}

	public bool V2Only { get; set; } = true;


	public Dictionary<string, string> CustomFields { get; } = new Dictionary<string, string>();


	public Dictionary<string, string> UserDefinedText { get; } = new Dictionary<string, string>();


	public void SetUDT(IEnumerable<string> data)
	{
		UserDefinedText.Clear();
		foreach (string datum in data)
		{
			string text = datum.Split(new char[1] { '=' }).First();
			int num = text.Length + 1;
			string value = ((num > datum.Length) ? string.Empty : datum.Substring(num));
			UserDefinedText[text] = value;
		}
	}
}
public class LameConfig
{
	private LAMEPreset? _preset;

	private int? _bitrate;

	private int? _vbrquality;

	public LAMEPreset? Preset
	{
		get
		{
			return _preset;
		}
		set
		{
			_preset = value;
			if (value.HasValue)
			{
				_bitrate = null;
			}
		}
	}

	public int? BitRate
	{
		get
		{
			return _bitrate;
		}
		set
		{
			_bitrate = value;
			if (value.HasValue)
			{
				_preset = null;
			}
		}
	}

	public int? OutputSampleRate { get; set; }

	public VBRMode? VBR { get; set; }

	public int? ABRRateKbps { get; set; }

	public int? VBRMinimumRateKbps { get; set; }

	public int? VBRMaximumRateKbps { get; set; }

	public bool? VBREnforceMinimum { get; set; }

	public int? VBRQuality
	{
		get
		{
			return _vbrquality;
		}
		set
		{
			if (!value.HasValue)
			{
				_vbrquality = null;
			}
			else
			{
				_vbrquality = Math.Max(0, Math.Min(9, value.Value));
			}
		}
	}

	public float? Scale { get; set; }

	public float? ScaleLeft { get; set; }

	public float? ScaleRight { get; set; }

	public int? LowPassFreq { get; set; }

	public int? LowPassWidth { get; set; }

	public int? HighPassFreq { get; set; }

	public int? HighPassWidth { get; set; }

	public bool? Analysis { get; set; }

	public bool? WriteVBRTag { get; set; }

	public MPEGMode? Mode { get; set; }

	public bool? ForceMS { get; set; }

	public bool? UseFreeFormat { get; set; }

	public bool? Copyright { get; set; }

	public bool? Original { get; set; }

	public bool? ErrorProtection { get; set; }

	public bool? StrictISO { get; set; }

	public ID3TagData ID3 { get; set; }

	public LibMp3Lame ConfigureDLL(WaveFormat format)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Expected O, but got Unknown
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		LibMp3Lame val = new LibMp3Lame
		{
			InputSampleRate = format.SampleRate,
			NumChannels = format.Channels
		};
		if (_bitrate.HasValue)
		{
			val.BitRate = _bitrate.Value;
		}
		else
		{
			if (_preset >= LAMEPreset.V9 && _preset <= LAMEPreset.V0 && (int)val.VBR == 0 && !VBR.HasValue)
			{
				val.VBR = (VBRMode)4;
			}
			val.SetPreset((int)_preset.GetValueOrDefault(LAMEPreset.STANDARD));
		}
		if (OutputSampleRate.HasValue)
		{
			val.OutputSampleRate = OutputSampleRate.Value;
		}
		if (VBR.HasValue)
		{
			val.VBR = (VBRMode)VBR.Value;
			if (VBR == VBRMode.ABR && ABRRateKbps.HasValue)
			{
				val.VBRMeanBitrateKbps = ABRRateKbps.Value;
			}
			if (VBRMinimumRateKbps.HasValue)
			{
				val.VBRMinBitrateKbps = VBRMinimumRateKbps.Value;
			}
			if (VBRMaximumRateKbps.HasValue)
			{
				val.VBRMaxBitrateKbps = VBRMaximumRateKbps.Value;
			}
			if (VBREnforceMinimum.HasValue)
			{
				val.VBRHardMin = VBREnforceMinimum.Value;
			}
			if (VBRQuality.HasValue)
			{
				val.VBRQualityLevel = VBRQuality.Value;
			}
		}
		if (Scale.HasValue)
		{
			val.Scale = Scale.Value;
		}
		if (ScaleLeft.HasValue)
		{
			val.ScaleLeft = ScaleLeft.Value;
		}
		if (ScaleRight.HasValue)
		{
			val.ScaleRight = ScaleRight.Value;
		}
		if (LowPassFreq.HasValue)
		{
			val.LowPassFreq = LowPassFreq.Value;
		}
		if (LowPassWidth.HasValue)
		{
			val.LowPassWidth = LowPassWidth.Value;
		}
		if (HighPassFreq.HasValue)
		{
			val.HighPassFreq = HighPassFreq.Value;
		}
		if (HighPassWidth.HasValue)
		{
			val.HighPassWidth = HighPassWidth.Value;
		}
		if (Analysis.HasValue)
		{
			val.Analysis = Analysis.Value;
		}
		if (WriteVBRTag.HasValue)
		{
			val.WriteVBRTag = WriteVBRTag.Value;
		}
		if (Mode.HasValue)
		{
			val.Mode = (MPEGMode)Mode.Value;
		}
		if (ForceMS.HasValue)
		{
			val.ForceMS = ForceMS.Value;
		}
		if (UseFreeFormat.HasValue)
		{
			val.UseFreeFormat = UseFreeFormat.Value;
		}
		if (Copyright.HasValue)
		{
			val.Copyright = Copyright.Value;
		}
		if (Original.HasValue)
		{
			val.Original = Original.Value;
		}
		if (ErrorProtection.HasValue)
		{
			val.ErrorProtection = ErrorProtection.Value;
		}
		if (StrictISO.HasValue)
		{
			val.StrictISO = StrictISO.Value;
		}
		return val;
	}
}
public static class LameDLL
{
	public static string LameVersion => LameDLLImpl.LameVersion;

	public static string LameShortVersion => LameDLLImpl.LameShortVersion;

	public static string LameVeryShortVersion => LameDLLImpl.LameVeryShortVersion;

	public static string LamePsychoacousticVersion => LameDLLImpl.LamePsychoacousticVersion;

	public static string LameURL => LameDLLImpl.LameURL;

	public static string LameOSBitness => LameDLLImpl.LameOSBitness;

	public static bool LoadNativeDLL(params string[] rootPaths)
	{
		return LameDLLImpl.Native.LoadNativeDLL(rootPaths);
	}

	public static LAMEVersion GetLameVersion()
	{
		return LameDLLImpl.GetLameVersion();
	}
}
internal static class LameDLLImpl
{
	internal static class Native
	{
		private static IntPtr _hLameDll = IntPtr.Zero;

		[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
		private static extern IntPtr LoadLibraryW([MarshalAs(UnmanagedType.LPWStr)] string lpFilename);

		private static bool TryLoadLameDLL(FileInfo file)
		{
			if (file == null || !file.Exists)
			{
				return false;
			}
			IntPtr intPtr = LoadLibraryW(file.FullName);
			if (intPtr == IntPtr.Zero)
			{
				return false;
			}
			_hLameDll = intPtr;
			return true;
		}

		internal static bool LoadNativeDLL(params string[] rootPaths)
		{
			if (_hLameDll != IntPtr.Zero)
			{
				return true;
			}
			if (!IsWindowsOS)
			{
				return false;
			}
			string text = null;
			try
			{
				text = Path.GetDirectoryName(typeof(LameDLL).Assembly.Location);
			}
			catch
			{
			}
			string[] array = (from p in rootPaths.Concat(new string[2]
				{
					AppDomain.CurrentDomain.BaseDirectory,
					text
				})
				where !string.IsNullOrEmpty(p)
				select p).Distinct().ToArray();
			string searchPattern = "libmp3lame." + (Environment.Is64BitProcess ? "64" : "32") + ".dll";
			string[] array2 = array;
			for (int i = 0; i < array2.Length; i++)
			{
				if (TryLoadLameDLL(new DirectoryInfo(array2[i]).GetFiles(searchPattern, SearchOption.AllDirectories).FirstOrDefault()))
				{
					return true;
				}
			}
			return false;
		}
	}

	internal static string LameVersion => LibMp3Lame.LameVersion;

	internal static string LameShortVersion => LibMp3Lame.LameShortVersion;

	internal static string LameVeryShortVersion => LibMp3Lame.LameVeryShortVersion;

	internal static string LamePsychoacousticVersion => LibMp3Lame.LamePsychoacousticVersion;

	internal static string LameURL => LibMp3Lame.LameURL;

	internal static string LameOSBitness => LibMp3Lame.LameOSBitness;

	internal static bool IsWindowsOS => Environment.OSVersion.Platform == PlatformID.Win32NT;

	internal static LAMEVersion GetLameVersion()
	{
		return new LAMEVersion(LibMp3Lame.GetLameVersion());
	}
}
public delegate void OutputHandler(string text);
public delegate void ProgressHandler(object writer, long inputBytes, long outputBytes, bool finished);
public class LameMP3FileWriter : Stream
{
	private delegate int delEncode();

	[StructLayout(LayoutKind.Explicit)]
	private class ArrayUnion
	{
		[FieldOffset(0)]
		public readonly int nBytes;

		[FieldOffset(16)]
		public readonly byte[] bytes;

		[FieldOffset(16)]
		public readonly short[] shorts;

		[FieldOffset(16)]
		public readonly int[] ints;

		[FieldOffset(16)]
		public readonly long[] longs;

		[FieldOffset(16)]
		public readonly float[] floats;

		[FieldOffset(16)]
		public readonly double[] doubles;

		public int nShorts => nBytes / 2;

		public int nInts => nBytes / 4;

		public int nLongs => nBytes / 8;

		public int nFloats => nBytes / 4;

		public int nDoubles => doubles.Length;

		public ArrayUnion(int reqBytes)
		{
			int num = (reqBytes + 7) / 8;
			doubles = new double[num];
			nBytes = num * 8;
		}

		private ArrayUnion()
		{
			throw new Exception("Default constructor cannot be called for ArrayUnion");
		}
	}

	private LibMp3Lame _lame;

	private readonly WaveFormat _inputFormat;

	private Stream _outStream;

	private readonly bool _disposeOutput;

	private readonly ArrayUnion _inBuffer;

	private int inPosition;

	protected byte[] _outBuffer;

	private long _inputByteCount;

	private long _outputByteCount;

	private readonly delEncode _encode;

	private int _minProgressTime = 100;

	private DateTime _lastProgress = DateTime.Now;

	private static Dictionary<int, string> _genres;

	public int LastLameResult => _lame.LastLameError;

	public int MinProgressTime
	{
		get
		{
			return _minProgressTime;
		}
		set
		{
			_minProgressTime = Math.Max(0, value);
		}
	}

	public override bool CanRead => false;

	public override bool CanSeek => false;

	public override bool CanWrite
	{
		get
		{
			if (_outStream != null)
			{
				return _lame != null;
			}
			return false;
		}
	}

	public override long Position
	{
		get
		{
			return 0L;
		}
		set
		{
			throw new NotImplementedException();
		}
	}

	public override long Length => 0L;

	public static Dictionary<int, string> Genres
	{
		get
		{
			if (_genres == null)
			{
				_genres = LibMp3Lame.ID3GenreList();
			}
			return _genres;
		}
	}

	public event ProgressHandler OnProgress;

	public LameMP3FileWriter(string outFileName, WaveFormat format, LAMEPreset quality, ID3TagData id3 = null)
		: this(File.Create(outFileName), format, quality, id3)
	{
		_disposeOutput = true;
	}

	public LameMP3FileWriter(Stream outStream, WaveFormat format, LAMEPreset quality, ID3TagData id3 = null)
		: this(outStream, format, new LameConfig
		{
			Preset = quality,
			ID3 = id3
		})
	{
	}

	public LameMP3FileWriter(string outFileName, WaveFormat format, int bitRate, ID3TagData id3 = null)
		: this(File.Create(outFileName), format, bitRate, id3)
	{
		_disposeOutput = true;
	}

	public LameMP3FileWriter(Stream outStream, WaveFormat format, int bitRate, ID3TagData id3 = null)
		: this(outStream, format, new LameConfig
		{
			BitRate = bitRate,
			ID3 = id3
		})
	{
	}

	public LameMP3FileWriter(string outFileName, WaveFormat format, LameConfig config)
		: this(File.Create(outFileName), format, config)
	{
		_disposeOutput = true;
	}

	public LameMP3FileWriter(Stream outStream, WaveFormat format, LameConfig config)
	{
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Invalid comparison between Unknown and I4
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Invalid comparison between Unknown and I4
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Invalid comparison between Unknown and I4
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Invalid comparison between Unknown and I4
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0132: Invalid comparison between Unknown and I4
		if (format == null)
		{
			throw new ArgumentNullException("format");
		}
		if (format.Channels != 1 && format.Channels != 2)
		{
			throw new ArgumentException($"Unsupported number of channels {format.Channels}", "format");
		}
		if ((int)format.Encoding != 1 && (int)format.Encoding != 3)
		{
			throw new ArgumentException($"Unsupported encoding format {format.Encoding}", "format");
		}
		if ((int)format.Encoding == 1 && format.BitsPerSample != 16)
		{
			throw new ArgumentException($"Unsupported PCM sample size {format.BitsPerSample}", "format");
		}
		if ((int)format.Encoding == 3 && format.BitsPerSample != 32)
		{
			throw new ArgumentException($"Unsupported Float sample size {format.BitsPerSample}", "format");
		}
		if (format.SampleRate < 8000 || format.SampleRate > 48000)
		{
			throw new ArgumentException($"Unsupported Sample Rate {format.SampleRate}", "format");
		}
		if ((int)format.Encoding == 1)
		{
			if (format.Channels == 1)
			{
				_encode = Encode_pcm_16_mono;
			}
			else
			{
				_encode = Encode_pcm_16_stereo;
			}
		}
		else if (format.Channels == 1)
		{
			_encode = Encode_float_mono;
		}
		else
		{
			_encode = Encode_float_stereo;
		}
		_inputFormat = format;
		_outStream = outStream ?? throw new ArgumentNullException("outStream");
		_disposeOutput = false;
		_inBuffer = new ArrayUnion(format.AverageBytesPerSecond);
		_outBuffer = new byte[format.SampleRate * 5 / 4 + 7200];
		_lame = config.ConfigureDLL(format);
		if (config.ID3 != null)
		{
			ApplyID3Tag(config.ID3);
		}
		_lame.InitParams();
	}

	protected override void Dispose(bool disposing)
	{
		if (_lame != null && _outStream != null)
		{
			Flush();
		}
		LibMp3Lame lame = _lame;
		if (lame != null)
		{
			lame.Dispose();
		}
		_lame = null;
		if (_disposeOutput)
		{
			_outStream?.Dispose();
			_outStream = null;
		}
		base.Dispose(disposing);
	}

	private int Encode_pcm_16_mono()
	{
		return _lame.Write(_inBuffer.shorts, inPosition / 2, _outBuffer, _outBuffer.Length, true);
	}

	private int Encode_pcm_16_stereo()
	{
		return _lame.Write(_inBuffer.shorts, inPosition / 2, _outBuffer, _outBuffer.Length, false);
	}

	private int Encode_float_mono()
	{
		return _lame.Write(_inBuffer.floats, inPosition / 4, _outBuffer, _outBuffer.Length, true);
	}

	private int Encode_float_stereo()
	{
		return _lame.Write(_inBuffer.floats, inPosition / 4, _outBuffer, _outBuffer.Length, false);
	}

	private void Encode()
	{
		if (_outStream == null || _lame == null)
		{
			throw new InvalidOperationException("Output stream closed.");
		}
		if (inPosition >= _inputFormat.Channels * 2)
		{
			int num = _encode();
			if (num > 0)
			{
				_outStream.Write(_outBuffer, 0, num);
				_outputByteCount += num;
			}
			_inputByteCount += inPosition;
			inPosition = 0;
			RaiseProgress(finished: false);
		}
	}

	public override void Write(byte[] buffer, int offset, int count)
	{
		while (count > 0)
		{
			int num = Math.Min(_inBuffer.nBytes - inPosition, count);
			Buffer.BlockCopy(buffer, offset, _inBuffer.bytes, inPosition, num);
			inPosition += num;
			count -= num;
			offset += num;
			if (inPosition >= _inBuffer.nBytes)
			{
				Encode();
			}
		}
	}

	public override void Flush()
	{
		if (inPosition > 0)
		{
			Encode();
		}
		int num = _lame.Flush(_outBuffer, _outBuffer.Length);
		if (num > 0)
		{
			_outStream.Write(_outBuffer, 0, num);
			_outputByteCount += num;
		}
		RaiseProgress(finished: true);
		if (_lame.WriteVBRTag)
		{
			UpdateLameTagFrame();
		}
		if (_disposeOutput)
		{
			_outStream.Dispose();
		}
		_outStream = null;
	}

	private bool UpdateLameTagFrame()
	{
		if (_outStream == null || !_outStream.CanSeek || !_outStream.CanRead || !_outStream.CanWrite)
		{
			return false;
		}
		long position = _outStream.Position;
		try
		{
			byte[] lAMETagFrame = _lame.GetLAMETagFrame();
			if (lAMETagFrame == null || lAMETagFrame.Length < 4)
			{
				return false;
			}
			if (SkipId3v2(lAMETagFrame.Length) != 0)
			{
				return false;
			}
			_outStream.Write(lAMETagFrame, 0, lAMETagFrame.Length);
			return true;
		}
		finally
		{
			_outStream.Position = position;
		}
	}

	private int SkipId3v2(int framesize)
	{
		try
		{
			_outStream.Position = 0L;
		}
		catch
		{
			return -2;
		}
		byte[] array = new byte[10];
		if (_outStream.Read(array, 0, 10) != 10)
		{
			return -3;
		}
		int num = 0;
		if (array[0] == 73 || array[1] == 68 || array[2] == 51)
		{
			num = (((array[6] & 0x7F) << 21) | ((array[7] & 0x7F) << 14) | ((array[8] & 0x7F) << 7) | (array[9] & 0x7F)) + 10;
		}
		_outStream.Position = num;
		if (_outStream.Read(array, 0, 4) != 4 || array[0] != byte.MaxValue || (array[1] & 0xE0) != 224)
		{
			return -1;
		}
		_outStream.Position = num + framesize;
		if (_outStream.Read(array, 0, 4) != 4 || array[0] != byte.MaxValue || (array[1] & 0xE0) != 224)
		{
			return -1;
		}
		_outStream.Position = num;
		return 0;
	}

	public override int Read(byte[] buffer, int offset, int count)
	{
		throw new NotImplementedException();
	}

	public override void SetLength(long value)
	{
		throw new NotImplementedException();
	}

	public override long Seek(long offset, SeekOrigin origin)
	{
		throw new NotImplementedException();
	}

	private void ApplyID3Tag(ID3TagData tag)
	{
		if (tag == null)
		{
			return;
		}
		_lame.ID3Init();
		if (tag.V2Only)
		{
			_lame.ID3V2Only();
		}
		foreach (KeyValuePair<string, string> customField in tag.CustomFields)
		{
			_lame.ID3SetFieldValue(customField.Key + "=" + customField.Value);
		}
		if (!string.IsNullOrEmpty(tag.Title))
		{
			_lame.ID3SetTitle(tag.Title);
		}
		if (!string.IsNullOrEmpty(tag.Artist))
		{
			_lame.ID3SetArtist(tag.Artist);
		}
		if (!string.IsNullOrEmpty(tag.Album))
		{
			_lame.ID3SetAlbum(tag.Album);
		}
		if (!string.IsNullOrEmpty(tag.Year))
		{
			_lame.ID3SetYear(tag.Year);
		}
		if (!string.IsNullOrEmpty(tag.Comment))
		{
			_lame.ID3SetComment(tag.Comment);
		}
		if (!string.IsNullOrEmpty(tag.Genre))
		{
			_lame.ID3SetGenre(tag.Genre);
		}
		if (!string.IsNullOrEmpty(tag.Track))
		{
			_lame.ID3SetTrack(tag.Track);
		}
		if (!string.IsNullOrEmpty(tag.Subtitle))
		{
			_lame.ID3SetFieldValue("TIT3=" + tag.Subtitle);
		}
		if (!string.IsNullOrEmpty(tag.AlbumArtist))
		{
			_lame.ID3SetFieldValue("TPE2=" + tag.AlbumArtist);
		}
		foreach (KeyValuePair<string, string> item in tag.UserDefinedText)
		{
			_lame.ID3SetFieldValue("TXXX=" + item.Key + "=" + item.Value);
		}
		byte[] albumArt = tag.AlbumArt;
		if (albumArt != null && albumArt.Length != 0)
		{
			_lame.ID3SetAlbumArt(tag.AlbumArt);
		}
		byte[] array = _lame.ID3GetID3v2Tag();
		if (array != null && array.Length >= 32768)
		{
			_lame.ID3WriteTagAutomatic = false;
			_outStream.Write(array, 0, array.Length);
		}
	}

	public byte[] GetID3v1TagBytes()
	{
		return _lame.ID3GetID3v1Tag();
	}

	public byte[] GetID3v2TagBytes()
	{
		return _lame.ID3GetID3v2Tag();
	}

	public void SetErrorFunction(OutputHandler fn)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected O, but got Unknown
		_lame.SetErrorFunc((ReportFunction)delegate(string t)
		{
			fn(t);
		});
	}

	public void SetDebugFunction(OutputHandler fn)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected O, but got Unknown
		_lame.SetMsgFunc((ReportFunction)delegate(string t)
		{
			fn(t);
		});
	}

	public void SetMessageFunction(OutputHandler fn)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected O, but got Unknown
		_lame.SetMsgFunc((ReportFunction)delegate(string t)
		{
			fn(t);
		});
	}

	public void PrintLAMEConfig()
	{
		_lame.PrintConfig();
	}

	public void PrintLAMEInternals()
	{
		_lame.PrintInternals();
	}

	protected void RaiseProgress(bool finished)
	{
		TimeSpan timeSpan = DateTime.Now - _lastProgress;
		if (finished || timeSpan.TotalMilliseconds >= (double)_minProgressTime)
		{
			_lastProgress = DateTime.Now;
			this.OnProgress?.Invoke(this, _inputByteCount, _outputByteCount, finished);
		}
	}
}
public enum LAMEPreset
{
	ABR_8 = 8,
	ABR_16 = 16,
	ABR_32 = 32,
	ABR_48 = 48,
	ABR_64 = 64,
	ABR_96 = 96,
	ABR_128 = 128,
	ABR_160 = 160,
	ABR_256 = 256,
	ABR_320 = 320,
	V9 = 410,
	VBR_10 = 410,
	V8 = 420,
	VBR_20 = 420,
	V7 = 430,
	VBR_30 = 430,
	V6 = 440,
	VBR_40 = 440,
	V5 = 450,
	VBR_50 = 450,
	V4 = 460,
	VBR_60 = 460,
	V3 = 470,
	VBR_70 = 470,
	V2 = 480,
	VBR_80 = 480,
	V1 = 490,
	VBR_90 = 490,
	V0 = 500,
	VBR_100 = 500,
	R3MIX = 1000,
	STANDARD = 1001,
	EXTREME = 1002,
	INSANE = 1003,
	STANDARD_FAST = 1004,
	EXTREME_FAST = 1005,
	MEDIUM = 1006,
	MEDIUM_FAST = 1007
}
public class LAMEVersion
{
	public int Major { get; private set; }

	public int Minor { get; private set; }

	public bool Alpha { get; private set; }

	public bool Beta { get; private set; }

	public int PsychoAcoustic_Major { get; private set; }

	public int PsychoAcoustic_Minor { get; private set; }

	public bool PsychoAcoustic_Alpha { get; private set; }

	public bool PsychoAcoustic_Beta { get; private set; }

	public string Features { get; private set; }

	internal LAMEVersion(LAMEVersion source)
	{
		Major = source.major;
		Minor = source.minor;
		Alpha = source.alpha;
		Beta = source.beta;
		PsychoAcoustic_Major = source.psy_major;
		PsychoAcoustic_Minor = source.psy_minor;
		PsychoAcoustic_Alpha = source.psy_alpha;
		PsychoAcoustic_Beta = source.psy_beta;
		Features = source.features;
	}

	private LAMEVersion()
	{
	}
}
public static class ModuleInitializer
{
	public static void Initialize()
	{
		ResourceAssemblyLoader.Init();
	}
}
public enum MPEGMode : uint
{
	Stereo = 0u,
	JointStereo = 1u,
	Mono = 3u,
	NotSet = 4u
}
internal static class ResourceAssemblyLoader
{
	internal static bool Initialized;

	internal static string LoadedName;

	public static void Init()
	{
		lock (typeof(ResourceAssemblyLoader))
		{
			if (!Initialized)
			{
				AppDomain.CurrentDomain.AssemblyResolve += LoadLameWrapper;
				Initialized = true;
			}
		}
	}

	private static Assembly LoadLameWrapper(object sender, ResolveEventArgs args)
	{
		string value = new AssemblyName(args.Name).Name + ".dll";
		Assembly assembly = typeof(ResourceAssemblyLoader).Assembly;
		byte[] array = null;
		string[] manifestResourceNames = assembly.GetManifestResourceNames();
		foreach (string text in manifestResourceNames)
		{
			int num = text.IndexOf(Environment.Is64BitProcess ? "x64" : "x86");
			int num2 = text.IndexOf(value);
			if (num >= 0 && num2 >= 0)
			{
				LoadedName = text;
				using (Stream stream = assembly.GetManifestResourceStream(text))
				{
					array = new byte[stream.Length];
					stream.Read(array, 0, (int)stream.Length);
				}
				break;
			}
		}
		if (array == null)
		{
			return null;
		}
		LameDLL.LoadNativeDLL();
		return Assembly.Load(array);
	}
}
public enum VBRMode : uint
{
	Off = 0u,
	MT = 1u,
	RH = 2u,
	ABR = 3u,
	MTRH = 4u,
	Default = 4u
}
internal class NAudioLame_ProcessedByFody
{
	internal const string FodyVersion = "6.3.0.0";

	internal const string ModuleInit = "2.1.1.0";
}

BepInEx/core/NAudio.Midi.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using NAudio.Utils;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.Midi")]
[assembly: AssemblyTitle("NAudio.Midi")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: AssemblyVersion("2.2.1.0")]
namespace NAudio.Midi
{
	public class ChannelAfterTouchEvent : MidiEvent
	{
		private byte afterTouchPressure;

		public int AfterTouchPressure
		{
			get
			{
				return afterTouchPressure;
			}
			set
			{
				if (value < 0 || value > 127)
				{
					throw new ArgumentOutOfRangeException("value", "After touch pressure must be in the range 0-127");
				}
				afterTouchPressure = (byte)value;
			}
		}

		public ChannelAfterTouchEvent(BinaryReader br)
		{
			afterTouchPressure = br.ReadByte();
			if ((afterTouchPressure & 0x80u) != 0)
			{
				throw new FormatException("Invalid afterTouchPressure");
			}
		}

		public ChannelAfterTouchEvent(long absoluteTime, int channel, int afterTouchPressure)
			: base(absoluteTime, channel, MidiCommandCode.ChannelAfterTouch)
		{
			AfterTouchPressure = afterTouchPressure;
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(afterTouchPressure);
		}

		public override int GetAsShortMessage()
		{
			return base.GetAsShortMessage() + (afterTouchPressure << 8);
		}

		public override string ToString()
		{
			return $"{base.ToString()} {afterTouchPressure}";
		}
	}
	public class ControlChangeEvent : MidiEvent
	{
		private MidiController controller;

		private byte controllerValue;

		public MidiController Controller
		{
			get
			{
				return controller;
			}
			set
			{
				if ((int)value < 0 || (int)value > 127)
				{
					throw new ArgumentOutOfRangeException("value", "Controller number must be in the range 0-127");
				}
				controller = value;
			}
		}

		public int ControllerValue
		{
			get
			{
				return controllerValue;
			}
			set
			{
				if (value < 0 || value > 127)
				{
					throw new ArgumentOutOfRangeException("value", "Controller Value must be in the range 0-127");
				}
				controllerValue = (byte)value;
			}
		}

		public ControlChangeEvent(BinaryReader br)
		{
			byte b = br.ReadByte();
			controllerValue = br.ReadByte();
			if ((b & 0x80u) != 0)
			{
				throw new InvalidDataException("Invalid controller");
			}
			controller = (MidiController)b;
			if ((controllerValue & 0x80u) != 0)
			{
				throw new InvalidDataException($"Invalid controllerValue {controllerValue} for controller {controller}, Pos 0x{br.BaseStream.Position:X}");
			}
		}

		public ControlChangeEvent(long absoluteTime, int channel, MidiController controller, int controllerValue)
			: base(absoluteTime, channel, MidiCommandCode.ControlChange)
		{
			Controller = controller;
			ControllerValue = controllerValue;
		}

		public override string ToString()
		{
			return $"{base.ToString()} Controller {controller} Value {controllerValue}";
		}

		public override int GetAsShortMessage()
		{
			byte b = (byte)controller;
			return base.GetAsShortMessage() + (b << 8) + (controllerValue << 16);
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write((byte)controller);
			writer.Write(controllerValue);
		}
	}
	public class KeySignatureEvent : MetaEvent
	{
		private readonly byte sharpsFlats;

		private readonly byte majorMinor;

		public int SharpsFlats => (sbyte)sharpsFlats;

		public int MajorMinor => majorMinor;

		public KeySignatureEvent(BinaryReader br, int length)
		{
			if (length != 2)
			{
				throw new FormatException("Invalid key signature length");
			}
			sharpsFlats = br.ReadByte();
			majorMinor = br.ReadByte();
		}

		public KeySignatureEvent(int sharpsFlats, int majorMinor, long absoluteTime)
			: base(MetaEventType.KeySignature, 2, absoluteTime)
		{
			this.sharpsFlats = (byte)sharpsFlats;
			this.majorMinor = (byte)majorMinor;
		}

		public override MidiEvent Clone()
		{
			return (KeySignatureEvent)MemberwiseClone();
		}

		public override string ToString()
		{
			return $"{base.ToString()} {SharpsFlats} {majorMinor}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(sharpsFlats);
			writer.Write(majorMinor);
		}
	}
	public class MetaEvent : MidiEvent
	{
		private MetaEventType metaEvent;

		internal int metaDataLength;

		public MetaEventType MetaEventType => metaEvent;

		protected MetaEvent()
		{
		}

		public MetaEvent(MetaEventType metaEventType, int metaDataLength, long absoluteTime)
			: base(absoluteTime, 1, MidiCommandCode.MetaEvent)
		{
			metaEvent = metaEventType;
			this.metaDataLength = metaDataLength;
		}

		public override MidiEvent Clone()
		{
			return new MetaEvent(metaEvent, metaDataLength, base.AbsoluteTime);
		}

		public static MetaEvent ReadMetaEvent(BinaryReader br)
		{
			MetaEventType metaEventType = (MetaEventType)br.ReadByte();
			int num = MidiEvent.ReadVarInt(br);
			MetaEvent metaEvent = new MetaEvent();
			if (metaEventType <= MetaEventType.SetTempo)
			{
				if (metaEventType <= MetaEventType.DeviceName)
				{
					if (metaEventType != 0)
					{
						if (metaEventType - 1 > MetaEventType.ProgramName)
						{
							goto IL_00a6;
						}
						metaEvent = new TextEvent(br, num);
					}
					else
					{
						metaEvent = new TrackSequenceNumberEvent(br, num);
					}
				}
				else if (metaEventType != MetaEventType.EndTrack)
				{
					if (metaEventType != MetaEventType.SetTempo)
					{
						goto IL_00a6;
					}
					metaEvent = new TempoEvent(br, num);
				}
				else if (num != 0)
				{
					throw new FormatException("End track length");
				}
			}
			else if (metaEventType <= MetaEventType.TimeSignature)
			{
				if (metaEventType != MetaEventType.SmpteOffset)
				{
					if (metaEventType != MetaEventType.TimeSignature)
					{
						goto IL_00a6;
					}
					metaEvent = new TimeSignatureEvent(br, num);
				}
				else
				{
					metaEvent = new SmpteOffsetEvent(br, num);
				}
			}
			else if (metaEventType != MetaEventType.KeySignature)
			{
				if (metaEventType != MetaEventType.SequencerSpecific)
				{
					goto IL_00a6;
				}
				metaEvent = new SequencerSpecificEvent(br, num);
			}
			else
			{
				metaEvent = new KeySignatureEvent(br, num);
			}
			metaEvent.metaEvent = metaEventType;
			metaEvent.metaDataLength = num;
			return metaEvent;
			IL_00a6:
			byte[] array = br.ReadBytes(num);
			if (array.Length != num)
			{
				throw new FormatException("Failed to read metaevent's data fully");
			}
			return new RawMetaEvent(metaEventType, 0L, array);
		}

		public override string ToString()
		{
			return $"{base.AbsoluteTime} {metaEvent}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write((byte)metaEvent);
			MidiEvent.WriteVarInt(writer, metaDataLength);
		}
	}
	public enum MetaEventType : byte
	{
		TrackSequenceNumber = 0,
		TextEvent = 1,
		Copyright = 2,
		SequenceTrackName = 3,
		TrackInstrumentName = 4,
		Lyric = 5,
		Marker = 6,
		CuePoint = 7,
		ProgramName = 8,
		DeviceName = 9,
		MidiChannel = 32,
		MidiPort = 33,
		EndTrack = 47,
		SetTempo = 81,
		SmpteOffset = 84,
		TimeSignature = 88,
		KeySignature = 89,
		SequencerSpecific = 127
	}
	public enum MidiCommandCode : byte
	{
		NoteOff = 128,
		NoteOn = 144,
		KeyAfterTouch = 160,
		ControlChange = 176,
		PatchChange = 192,
		ChannelAfterTouch = 208,
		PitchWheelChange = 224,
		Sysex = 240,
		Eox = 247,
		TimingClock = 248,
		StartSequence = 250,
		ContinueSequence = 251,
		StopSequence = 252,
		AutoSensing = 254,
		MetaEvent = byte.MaxValue
	}
	public enum MidiController : byte
	{
		BankSelect = 0,
		Modulation = 1,
		BreathController = 2,
		FootController = 4,
		MainVolume = 7,
		Pan = 10,
		Expression = 11,
		BankSelectLsb = 32,
		Sustain = 64,
		Portamento = 65,
		Sostenuto = 66,
		SoftPedal = 67,
		LegatoFootswitch = 68,
		ResetAllControllers = 121,
		AllNotesOff = 123
	}
	public class MidiEvent : ICloneable
	{
		private MidiCommandCode commandCode;

		private int channel;

		private int deltaTime;

		private long absoluteTime;

		public virtual int Channel
		{
			get
			{
				return channel;
			}
			set
			{
				if (value < 1 || value > 16)
				{
					throw new ArgumentOutOfRangeException("value", value, $"Channel must be 1-16 (Got {value})");
				}
				channel = value;
			}
		}

		public int DeltaTime => deltaTime;

		public long AbsoluteTime
		{
			get
			{
				return absoluteTime;
			}
			set
			{
				absoluteTime = value;
			}
		}

		public MidiCommandCode CommandCode => commandCode;

		public static MidiEvent FromRawMessage(int rawMessage)
		{
			long num = 0L;
			int num2 = rawMessage & 0xFF;
			int num3 = (rawMessage >> 8) & 0xFF;
			int num4 = (rawMessage >> 16) & 0xFF;
			int num5 = 1;
			MidiCommandCode midiCommandCode;
			if ((num2 & 0xF0) == 240)
			{
				midiCommandCode = (MidiCommandCode)num2;
			}
			else
			{
				midiCommandCode = (MidiCommandCode)((uint)num2 & 0xF0u);
				num5 = (num2 & 0xF) + 1;
			}
			switch (midiCommandCode)
			{
			case MidiCommandCode.NoteOff:
			case MidiCommandCode.NoteOn:
			case MidiCommandCode.KeyAfterTouch:
				if (num4 > 0 && midiCommandCode == MidiCommandCode.NoteOn)
				{
					return new NoteOnEvent(num, num5, num3, num4, 0);
				}
				return new NoteEvent(num, num5, midiCommandCode, num3, num4);
			case MidiCommandCode.ControlChange:
				return new ControlChangeEvent(num, num5, (MidiController)num3, num4);
			case MidiCommandCode.PatchChange:
				return new PatchChangeEvent(num, num5, num3);
			case MidiCommandCode.ChannelAfterTouch:
				return new ChannelAfterTouchEvent(num, num5, num3);
			case MidiCommandCode.PitchWheelChange:
				return new PitchWheelChangeEvent(num, num5, num3 + (num4 << 7));
			case MidiCommandCode.TimingClock:
			case MidiCommandCode.StartSequence:
			case MidiCommandCode.ContinueSequence:
			case MidiCommandCode.StopSequence:
			case MidiCommandCode.AutoSensing:
				return new MidiEvent(num, num5, midiCommandCode);
			default:
				throw new FormatException($"Unsupported MIDI Command Code for Raw Message {midiCommandCode}");
			}
		}

		public static MidiEvent ReadNextEvent(BinaryReader br, MidiEvent previous)
		{
			int num = ReadVarInt(br);
			int num2 = 1;
			byte b = br.ReadByte();
			MidiCommandCode midiCommandCode;
			if ((b & 0x80) == 0)
			{
				midiCommandCode = previous.CommandCode;
				num2 = previous.Channel;
				br.BaseStream.Position--;
			}
			else if ((b & 0xF0) == 240)
			{
				midiCommandCode = (MidiCommandCode)b;
			}
			else
			{
				midiCommandCode = (MidiCommandCode)(b & 0xF0u);
				num2 = (b & 0xF) + 1;
			}
			MidiEvent midiEvent;
			switch (midiCommandCode)
			{
			case MidiCommandCode.NoteOn:
				midiEvent = new NoteOnEvent(br);
				break;
			case MidiCommandCode.NoteOff:
			case MidiCommandCode.KeyAfterTouch:
				midiEvent = new NoteEvent(br);
				break;
			case MidiCommandCode.ControlChange:
				midiEvent = new ControlChangeEvent(br);
				break;
			case MidiCommandCode.PatchChange:
				midiEvent = new PatchChangeEvent(br);
				break;
			case MidiCommandCode.ChannelAfterTouch:
				midiEvent = new ChannelAfterTouchEvent(br);
				break;
			case MidiCommandCode.PitchWheelChange:
				midiEvent = new PitchWheelChangeEvent(br);
				break;
			case MidiCommandCode.TimingClock:
			case MidiCommandCode.StartSequence:
			case MidiCommandCode.ContinueSequence:
			case MidiCommandCode.StopSequence:
				midiEvent = new MidiEvent();
				break;
			case MidiCommandCode.Sysex:
				midiEvent = SysexEvent.ReadSysexEvent(br);
				break;
			case MidiCommandCode.MetaEvent:
				midiEvent = MetaEvent.ReadMetaEvent(br);
				break;
			default:
				throw new FormatException($"Unsupported MIDI Command Code {(byte)midiCommandCode:X2}");
			}
			midiEvent.channel = num2;
			midiEvent.deltaTime = num;
			midiEvent.commandCode = midiCommandCode;
			return midiEvent;
		}

		public virtual int GetAsShortMessage()
		{
			return channel - 1 + (int)commandCode;
		}

		protected MidiEvent()
		{
		}

		public MidiEvent(long absoluteTime, int channel, MidiCommandCode commandCode)
		{
			this.absoluteTime = absoluteTime;
			Channel = channel;
			this.commandCode = commandCode;
		}

		public virtual MidiEvent Clone()
		{
			return (MidiEvent)MemberwiseClone();
		}

		object ICloneable.Clone()
		{
			return Clone();
		}

		public static bool IsNoteOff(MidiEvent midiEvent)
		{
			if (midiEvent != null)
			{
				if (midiEvent.CommandCode == MidiCommandCode.NoteOn)
				{
					return ((NoteEvent)midiEvent).Velocity == 0;
				}
				return midiEvent.CommandCode == MidiCommandCode.NoteOff;
			}
			return false;
		}

		public static bool IsNoteOn(MidiEvent midiEvent)
		{
			if (midiEvent != null && midiEvent.CommandCode == MidiCommandCode.NoteOn)
			{
				return ((NoteEvent)midiEvent).Velocity > 0;
			}
			return false;
		}

		public static bool IsEndTrack(MidiEvent midiEvent)
		{
			if (midiEvent != null && midiEvent is MetaEvent metaEvent)
			{
				return metaEvent.MetaEventType == MetaEventType.EndTrack;
			}
			return false;
		}

		public override string ToString()
		{
			if ((int)commandCode >= 240)
			{
				return $"{absoluteTime} {commandCode}";
			}
			return $"{absoluteTime} {commandCode} Ch: {channel}";
		}

		public static int ReadVarInt(BinaryReader br)
		{
			int num = 0;
			for (int i = 0; i < 4; i++)
			{
				byte b = br.ReadByte();
				num <<= 7;
				num += b & 0x7F;
				if ((b & 0x80) == 0)
				{
					return num;
				}
			}
			throw new FormatException("Invalid Var Int");
		}

		public static void WriteVarInt(BinaryWriter writer, int value)
		{
			if (value < 0)
			{
				throw new ArgumentOutOfRangeException("value", value, "Cannot write a negative Var Int");
			}
			if (value > 268435455)
			{
				throw new ArgumentOutOfRangeException("value", value, "Maximum allowed Var Int is 0x0FFFFFFF");
			}
			int num = 0;
			byte[] array = new byte[4];
			do
			{
				array[num++] = (byte)((uint)value & 0x7Fu);
				value >>= 7;
			}
			while (value > 0);
			while (num > 0)
			{
				num--;
				if (num > 0)
				{
					writer.Write((byte)(array[num] | 0x80u));
				}
				else
				{
					writer.Write(array[num]);
				}
			}
		}

		public virtual void Export(ref long absoluteTime, BinaryWriter writer)
		{
			if (this.absoluteTime < absoluteTime)
			{
				throw new FormatException("Can't export unsorted MIDI events");
			}
			WriteVarInt(writer, (int)(this.absoluteTime - absoluteTime));
			absoluteTime = this.absoluteTime;
			int num = (int)commandCode;
			if (commandCode != MidiCommandCode.MetaEvent)
			{
				num += channel - 1;
			}
			writer.Write((byte)num);
		}
	}
	public class MidiEventCollection : IEnumerable<IList<MidiEvent>>, IEnumerable
	{
		private int midiFileType;

		private readonly List<IList<MidiEvent>> trackEvents;

		public int Tracks => trackEvents.Count;

		public long StartAbsoluteTime { get; set; }

		public int DeltaTicksPerQuarterNote { get; }

		public IList<MidiEvent> this[int trackNumber] => trackEvents[trackNumber];

		public int MidiFileType
		{
			get
			{
				return midiFileType;
			}
			set
			{
				if (midiFileType != value)
				{
					midiFileType = value;
					if (value == 0)
					{
						FlattenToOneTrack();
					}
					else
					{
						ExplodeToManyTracks();
					}
				}
			}
		}

		public MidiEventCollection(int midiFileType, int deltaTicksPerQuarterNote)
		{
			this.midiFileType = midiFileType;
			DeltaTicksPerQuarterNote = deltaTicksPerQuarterNote;
			StartAbsoluteTime = 0L;
			trackEvents = new List<IList<MidiEvent>>();
		}

		public IList<MidiEvent> GetTrackEvents(int trackNumber)
		{
			return trackEvents[trackNumber];
		}

		public IList<MidiEvent> AddTrack()
		{
			return AddTrack(null);
		}

		public IList<MidiEvent> AddTrack(IList<MidiEvent> initialEvents)
		{
			List<MidiEvent> list = new List<MidiEvent>();
			if (initialEvents != null)
			{
				list.AddRange(initialEvents);
			}
			trackEvents.Add(list);
			return list;
		}

		public void RemoveTrack(int track)
		{
			trackEvents.RemoveAt(track);
		}

		public void Clear()
		{
			trackEvents.Clear();
		}

		public void AddEvent(MidiEvent midiEvent, int originalTrack)
		{
			if (midiFileType == 0)
			{
				EnsureTracks(1);
				trackEvents[0].Add(midiEvent);
			}
			else if (originalTrack == 0)
			{
				switch (midiEvent.CommandCode)
				{
				case MidiCommandCode.NoteOff:
				case MidiCommandCode.NoteOn:
				case MidiCommandCode.KeyAfterTouch:
				case MidiCommandCode.ControlChange:
				case MidiCommandCode.PatchChange:
				case MidiCommandCode.ChannelAfterTouch:
				case MidiCommandCode.PitchWheelChange:
					EnsureTracks(midiEvent.Channel + 1);
					trackEvents[midiEvent.Channel].Add(midiEvent);
					break;
				default:
					EnsureTracks(1);
					trackEvents[0].Add(midiEvent);
					break;
				}
			}
			else
			{
				EnsureTracks(originalTrack + 1);
				trackEvents[originalTrack].Add(midiEvent);
			}
		}

		private void EnsureTracks(int count)
		{
			for (int i = trackEvents.Count; i < count; i++)
			{
				trackEvents.Add(new List<MidiEvent>());
			}
		}

		private void ExplodeToManyTracks()
		{
			IList<MidiEvent> list = trackEvents[0];
			Clear();
			foreach (MidiEvent item in list)
			{
				AddEvent(item, 0);
			}
			PrepareForExport();
		}

		private void FlattenToOneTrack()
		{
			bool flag = false;
			for (int i = 1; i < trackEvents.Count; i++)
			{
				foreach (MidiEvent item in trackEvents[i])
				{
					if (!MidiEvent.IsEndTrack(item))
					{
						trackEvents[0].Add(item);
						flag = true;
					}
				}
			}
			for (int num = trackEvents.Count - 1; num > 0; num--)
			{
				RemoveTrack(num);
			}
			if (flag)
			{
				PrepareForExport();
			}
		}

		public void PrepareForExport()
		{
			MidiEventComparer comparer = new MidiEventComparer();
			foreach (IList<MidiEvent> trackEvent in trackEvents)
			{
				MergeSort.Sort(trackEvent, comparer);
				int num = 0;
				while (num < trackEvent.Count - 1)
				{
					if (MidiEvent.IsEndTrack(trackEvent[num]))
					{
						trackEvent.RemoveAt(num);
					}
					else
					{
						num++;
					}
				}
			}
			int num2 = 0;
			while (num2 < trackEvents.Count)
			{
				IList<MidiEvent> list = trackEvents[num2];
				if (list.Count == 0)
				{
					RemoveTrack(num2);
					continue;
				}
				if (list.Count == 1 && MidiEvent.IsEndTrack(list[0]))
				{
					RemoveTrack(num2);
					continue;
				}
				if (!MidiEvent.IsEndTrack(list[list.Count - 1]))
				{
					list.Add(new MetaEvent(MetaEventType.EndTrack, 0, list[list.Count - 1].AbsoluteTime));
				}
				num2++;
			}
		}

		public IEnumerator<IList<MidiEvent>> GetEnumerator()
		{
			return trackEvents.GetEnumerator();
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return trackEvents.GetEnumerator();
		}
	}
	public class MidiEventComparer : IComparer<MidiEvent>
	{
		public int Compare(MidiEvent x, MidiEvent y)
		{
			long num = x.AbsoluteTime;
			long num2 = y.AbsoluteTime;
			if (num == num2)
			{
				MetaEvent metaEvent = x as MetaEvent;
				MetaEvent metaEvent2 = y as MetaEvent;
				if (metaEvent != null)
				{
					num = ((metaEvent.MetaEventType != MetaEventType.EndTrack) ? long.MinValue : long.MaxValue);
				}
				if (metaEvent2 != null)
				{
					num2 = ((metaEvent2.MetaEventType != MetaEventType.EndTrack) ? long.MinValue : long.MaxValue);
				}
			}
			return num.CompareTo(num2);
		}
	}
	public class MidiFile
	{
		private readonly MidiEventCollection events;

		private readonly ushort fileFormat;

		private readonly ushort deltaTicksPerQuarterNote;

		private readonly bool strictChecking;

		public int FileFormat => fileFormat;

		public MidiEventCollection Events => events;

		public int Tracks => events.Tracks;

		public int DeltaTicksPerQuarterNote => deltaTicksPerQuarterNote;

		public MidiFile(string filename)
			: this(filename, strictChecking: true)
		{
		}

		public MidiFile(string filename, bool strictChecking)
			: this(File.OpenRead(filename), strictChecking, ownInputStream: true)
		{
		}

		public MidiFile(Stream inputStream, bool strictChecking)
			: this(inputStream, strictChecking, ownInputStream: false)
		{
		}

		private MidiFile(Stream inputStream, bool strictChecking, bool ownInputStream)
		{
			this.strictChecking = strictChecking;
			BinaryReader binaryReader = new BinaryReader(inputStream);
			try
			{
				if (Encoding.UTF8.GetString(binaryReader.ReadBytes(4)) != "MThd")
				{
					throw new FormatException("Not a MIDI file - header chunk missing");
				}
				uint num = SwapUInt32(binaryReader.ReadUInt32());
				if (num != 6)
				{
					throw new FormatException("Unexpected header chunk length");
				}
				fileFormat = SwapUInt16(binaryReader.ReadUInt16());
				int num2 = SwapUInt16(binaryReader.ReadUInt16());
				deltaTicksPerQuarterNote = SwapUInt16(binaryReader.ReadUInt16());
				events = new MidiEventCollection((fileFormat != 0) ? 1 : 0, deltaTicksPerQuarterNote);
				for (int i = 0; i < num2; i++)
				{
					events.AddTrack();
				}
				long num3 = 0L;
				for (int j = 0; j < num2; j++)
				{
					if (fileFormat == 1)
					{
						num3 = 0L;
					}
					if (Encoding.UTF8.GetString(binaryReader.ReadBytes(4)) != "MTrk")
					{
						throw new FormatException("Invalid chunk header");
					}
					num = SwapUInt32(binaryReader.ReadUInt32());
					long position = binaryReader.BaseStream.Position;
					MidiEvent midiEvent = null;
					List<NoteOnEvent> list = new List<NoteOnEvent>();
					while (binaryReader.BaseStream.Position < position + num)
					{
						try
						{
							midiEvent = MidiEvent.ReadNextEvent(binaryReader, midiEvent);
						}
						catch (InvalidDataException)
						{
							if (strictChecking)
							{
								throw;
							}
							continue;
						}
						catch (FormatException)
						{
							if (strictChecking)
							{
								throw;
							}
							continue;
						}
						num3 = (midiEvent.AbsoluteTime = num3 + midiEvent.DeltaTime);
						events[j].Add(midiEvent);
						if (midiEvent.CommandCode == MidiCommandCode.NoteOn)
						{
							NoteEvent noteEvent = (NoteEvent)midiEvent;
							if (noteEvent.Velocity > 0)
							{
								list.Add((NoteOnEvent)noteEvent);
							}
							else
							{
								FindNoteOn(noteEvent, list);
							}
						}
						else if (midiEvent.CommandCode == MidiCommandCode.NoteOff)
						{
							FindNoteOn((NoteEvent)midiEvent, list);
						}
						else if (midiEvent.CommandCode == MidiCommandCode.MetaEvent && ((MetaEvent)midiEvent).MetaEventType == MetaEventType.EndTrack && strictChecking && binaryReader.BaseStream.Position < position + num)
						{
							throw new FormatException($"End Track event was not the last MIDI event on track {j}");
						}
					}
					if (list.Count > 0 && strictChecking)
					{
						throw new FormatException($"Note ons without note offs {list.Count} (file format {fileFormat})");
					}
					if (binaryReader.BaseStream.Position != position + num)
					{
						throw new FormatException($"Read too far {num}+{position}!={binaryReader.BaseStream.Position}");
					}
				}
			}
			finally
			{
				if (ownInputStream)
				{
					binaryReader.Dispose();
				}
			}
		}

		private void FindNoteOn(NoteEvent offEvent, List<NoteOnEvent> outstandingNoteOns)
		{
			bool flag = false;
			foreach (NoteOnEvent outstandingNoteOn in outstandingNoteOns)
			{
				if (outstandingNoteOn.Channel == offEvent.Channel && outstandingNoteOn.NoteNumber == offEvent.NoteNumber)
				{
					outstandingNoteOn.OffEvent = offEvent;
					outstandingNoteOns.Remove(outstandingNoteOn);
					flag = true;
					break;
				}
			}
			if (!flag && strictChecking)
			{
				throw new FormatException($"Got an off without an on {offEvent}");
			}
		}

		private static uint SwapUInt32(uint i)
		{
			return ((i & 0xFF000000u) >> 24) | ((i & 0xFF0000) >> 8) | ((i & 0xFF00) << 8) | ((i & 0xFF) << 24);
		}

		private static ushort SwapUInt16(ushort i)
		{
			return (ushort)(((i & 0xFF00) >> 8) | ((i & 0xFF) << 8));
		}

		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.AppendFormat("Format {0}, Tracks {1}, Delta Ticks Per Quarter Note {2}\r\n", fileFormat, Tracks, deltaTicksPerQuarterNote);
			for (int i = 0; i < Tracks; i++)
			{
				foreach (MidiEvent item in events[i])
				{
					stringBuilder.AppendFormat("{0}\r\n", item);
				}
			}
			return stringBuilder.ToString();
		}

		public static void Export(string filename, MidiEventCollection events)
		{
			if (events.MidiFileType == 0 && events.Tracks > 1)
			{
				throw new ArgumentException("Can't export more than one track to a type 0 file");
			}
			using BinaryWriter binaryWriter = new BinaryWriter(File.Create(filename));
			binaryWriter.Write(Encoding.UTF8.GetBytes("MThd"));
			binaryWriter.Write(SwapUInt32(6u));
			binaryWriter.Write(SwapUInt16((ushort)events.MidiFileType));
			binaryWriter.Write(SwapUInt16((ushort)events.Tracks));
			binaryWriter.Write(SwapUInt16((ushort)events.DeltaTicksPerQuarterNote));
			for (int i = 0; i < events.Tracks; i++)
			{
				IList<MidiEvent> list = events[i];
				binaryWriter.Write(Encoding.UTF8.GetBytes("MTrk"));
				long position = binaryWriter.BaseStream.Position;
				binaryWriter.Write(SwapUInt32(0u));
				long absoluteTime = events.StartAbsoluteTime;
				MergeSort.Sort(list, new MidiEventComparer());
				_ = list.Count;
				_ = 0;
				foreach (MidiEvent item in list)
				{
					item.Export(ref absoluteTime, binaryWriter);
				}
				uint num = (uint)((int)(binaryWriter.BaseStream.Position - position) - 4);
				binaryWriter.BaseStream.Position = position;
				binaryWriter.Write(SwapUInt32(num));
				binaryWriter.BaseStream.Position += num;
			}
		}
	}
	public class MidiIn : IDisposable
	{
		private IntPtr hMidiIn = IntPtr.Zero;

		private bool disposeIsRunning;

		private bool disposed;

		private MidiInterop.MidiInCallback callback;

		private IntPtr[] SysexBufferHeaders = new IntPtr[0];

		public static int NumberOfDevices => MidiInterop.midiInGetNumDevs();

		public event EventHandler<MidiInMessageEventArgs> MessageReceived;

		public event EventHandler<MidiInMessageEventArgs> ErrorReceived;

		public event EventHandler<MidiInSysexMessageEventArgs> SysexMessageReceived;

		public MidiIn(int deviceNo)
		{
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			callback = Callback;
			MmException.Try(MidiInterop.midiInOpen(out hMidiIn, (IntPtr)deviceNo, callback, IntPtr.Zero, 196608), "midiInOpen");
		}

		public void Close()
		{
			Dispose();
		}

		public void Dispose()
		{
			GC.KeepAlive(callback);
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}

		public void Start()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(MidiInterop.midiInStart(hMidiIn), "midiInStart");
		}

		public void Stop()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(MidiInterop.midiInStop(hMidiIn), "midiInStop");
		}

		public void Reset()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(MidiInterop.midiInReset(hMidiIn), "midiInReset");
		}

		public void CreateSysexBuffers(int bufferSize, int numberOfBuffers)
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			SysexBufferHeaders = new IntPtr[numberOfBuffers];
			int cb = Marshal.SizeOf(typeof(MidiInterop.MIDIHDR));
			for (int i = 0; i < numberOfBuffers; i++)
			{
				MidiInterop.MIDIHDR structure = default(MidiInterop.MIDIHDR);
				structure.dwBufferLength = bufferSize;
				structure.dwBytesRecorded = 0;
				structure.lpData = Marshal.AllocHGlobal(bufferSize);
				structure.dwFlags = 0;
				IntPtr intPtr = Marshal.AllocHGlobal(cb);
				Marshal.StructureToPtr(structure, intPtr, fDeleteOld: false);
				MmException.Try(MidiInterop.midiInPrepareHeader(hMidiIn, intPtr, Marshal.SizeOf(typeof(MidiInterop.MIDIHDR))), "midiInPrepareHeader");
				MmException.Try(MidiInterop.midiInAddBuffer(hMidiIn, intPtr, Marshal.SizeOf(typeof(MidiInterop.MIDIHDR))), "midiInAddBuffer");
				SysexBufferHeaders[i] = intPtr;
			}
		}

		private void Callback(IntPtr midiInHandle, MidiInterop.MidiInMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2)
		{
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			switch (message)
			{
			case MidiInterop.MidiInMessage.Data:
				if (this.MessageReceived != null)
				{
					this.MessageReceived(this, new MidiInMessageEventArgs(messageParameter1.ToInt32(), messageParameter2.ToInt32()));
				}
				break;
			case MidiInterop.MidiInMessage.Error:
				if (this.ErrorReceived != null)
				{
					this.ErrorReceived(this, new MidiInMessageEventArgs(messageParameter1.ToInt32(), messageParameter2.ToInt32()));
				}
				break;
			case MidiInterop.MidiInMessage.LongData:
				if (this.SysexMessageReceived != null)
				{
					MidiInterop.MIDIHDR mIDIHDR = (MidiInterop.MIDIHDR)Marshal.PtrToStructure(messageParameter1, typeof(MidiInterop.MIDIHDR));
					byte[] array = new byte[mIDIHDR.dwBytesRecorded];
					Marshal.Copy(mIDIHDR.lpData, array, 0, mIDIHDR.dwBytesRecorded);
					if (array.Length != 0)
					{
						this.SysexMessageReceived(this, new MidiInSysexMessageEventArgs(array, messageParameter2.ToInt32()));
					}
					if (!disposeIsRunning)
					{
						MidiInterop.midiInAddBuffer(hMidiIn, messageParameter1, Marshal.SizeOf(typeof(MidiInterop.MIDIHDR)));
					}
				}
				break;
			case MidiInterop.MidiInMessage.Open:
			case MidiInterop.MidiInMessage.Close:
			case MidiInterop.MidiInMessage.LongError:
			case (MidiInterop.MidiInMessage)967:
			case (MidiInterop.MidiInMessage)968:
			case (MidiInterop.MidiInMessage)969:
			case (MidiInterop.MidiInMessage)970:
			case (MidiInterop.MidiInMessage)971:
			case MidiInterop.MidiInMessage.MoreData:
				break;
			}
		}

		public static MidiInCapabilities DeviceInfo(int midiInDeviceNumber)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			MidiInCapabilities capabilities = default(MidiInCapabilities);
			int size = Marshal.SizeOf(capabilities);
			MmException.Try(MidiInterop.midiInGetDevCaps((IntPtr)midiInDeviceNumber, out capabilities, size), "midiInGetDevCaps");
			return capabilities;
		}

		protected virtual void Dispose(bool disposing)
		{
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			if (!disposed)
			{
				disposeIsRunning = true;
				if (SysexBufferHeaders.Length != 0)
				{
					MmException.Try(MidiInterop.midiInReset(hMidiIn), "midiInReset");
					IntPtr[] sysexBufferHeaders = SysexBufferHeaders;
					foreach (IntPtr intPtr in sysexBufferHeaders)
					{
						MidiInterop.MIDIHDR obj = (MidiInterop.MIDIHDR)Marshal.PtrToStructure(intPtr, typeof(MidiInterop.MIDIHDR));
						MmException.Try(MidiInterop.midiInUnprepareHeader(hMidiIn, intPtr, Marshal.SizeOf(typeof(MidiInterop.MIDIHDR))), "midiInPrepareHeader");
						Marshal.FreeHGlobal(obj.lpData);
						Marshal.FreeHGlobal(intPtr);
					}
					SysexBufferHeaders = new IntPtr[0];
				}
				MidiInterop.midiInClose(hMidiIn);
			}
			disposed = true;
			disposeIsRunning = false;
		}

		~MidiIn()
		{
			Dispose(disposing: false);
		}
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
	public struct MidiInCapabilities
	{
		private ushort manufacturerId;

		private ushort productId;

		private uint driverVersion;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		private string productName;

		private int support;

		private const int MaxProductNameLength = 32;

		public Manufacturers Manufacturer => (Manufacturers)manufacturerId;

		public int ProductId => productId;

		public string ProductName => productName;
	}
	public class MidiInMessageEventArgs : EventArgs
	{
		public int RawMessage { get; private set; }

		public MidiEvent MidiEvent { get; private set; }

		public int Timestamp { get; private set; }

		public MidiInMessageEventArgs(int message, int timestamp)
		{
			RawMessage = message;
			Timestamp = timestamp;
			try
			{
				MidiEvent = MidiEvent.FromRawMessage(message);
			}
			catch (Exception)
			{
			}
		}
	}
	public class MidiInSysexMessageEventArgs : EventArgs
	{
		public byte[] SysexBytes { get; private set; }

		public int Timestamp { get; private set; }

		public MidiInSysexMessageEventArgs(byte[] sysexBytes, int timestamp)
		{
			SysexBytes = sysexBytes;
			Timestamp = timestamp;
		}
	}
	internal class MidiInterop
	{
		public enum MidiInMessage
		{
			Open = 961,
			Close = 962,
			Data = 963,
			LongData = 964,
			Error = 965,
			LongError = 966,
			MoreData = 972
		}

		public enum MidiOutMessage
		{
			Open = 967,
			Close,
			Done
		}

		public delegate void MidiInCallback(IntPtr midiInHandle, MidiInMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2);

		public delegate void MidiOutCallback(IntPtr midiInHandle, MidiOutMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2);

		public struct MMTIME
		{
			public int wType;

			public int u;
		}

		public struct MIDIEVENT
		{
			public int dwDeltaTime;

			public int dwStreamID;

			public int dwEvent;

			[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
			public int dwParms;
		}

		public struct MIDIHDR
		{
			public IntPtr lpData;

			public int dwBufferLength;

			public int dwBytesRecorded;

			public IntPtr dwUser;

			public int dwFlags;

			public IntPtr lpNext;

			public IntPtr reserved;

			public int dwOffset;

			[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
			public IntPtr[] dwReserved;
		}

		public struct MIDIPROPTEMPO
		{
			public int cbStruct;

			public int dwTempo;
		}

		public const int CALLBACK_FUNCTION = 196608;

		public const int CALLBACK_NULL = 0;

		[DllImport("winmm.dll")]
		public static extern MmResult midiConnect(IntPtr hMidiIn, IntPtr hMidiOut, IntPtr pReserved);

		[DllImport("winmm.dll")]
		public static extern MmResult midiDisconnect(IntPtr hMidiIn, IntPtr hMidiOut, IntPtr pReserved);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInAddBuffer(IntPtr hMidiIn, IntPtr lpMidiInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInClose(IntPtr hMidiIn);

		[DllImport("winmm.dll", CharSet = CharSet.Auto)]
		public static extern MmResult midiInGetDevCaps(IntPtr deviceId, out MidiInCapabilities capabilities, int size);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInGetErrorText(int err, string lpText, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInGetID(IntPtr hMidiIn, out int lpuDeviceId);

		[DllImport("winmm.dll")]
		public static extern int midiInGetNumDevs();

		[DllImport("winmm.dll")]
		public static extern MmResult midiInMessage(IntPtr hMidiIn, int msg, IntPtr dw1, IntPtr dw2);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInOpen(out IntPtr hMidiIn, IntPtr uDeviceID, MidiInCallback callback, IntPtr dwInstance, int dwFlags);

		[DllImport("winmm.dll", EntryPoint = "midiInOpen")]
		public static extern MmResult midiInOpenWindow(out IntPtr hMidiIn, IntPtr uDeviceID, IntPtr callbackWindowHandle, IntPtr dwInstance, int dwFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInPrepareHeader(IntPtr hMidiIn, IntPtr lpMidiInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInReset(IntPtr hMidiIn);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInStart(IntPtr hMidiIn);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInStop(IntPtr hMidiIn);

		[DllImport("winmm.dll")]
		public static extern MmResult midiInUnprepareHeader(IntPtr hMidiIn, IntPtr lpMidiInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutCacheDrumPatches(IntPtr hMidiOut, int uPatch, IntPtr lpKeyArray, int uFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutCachePatches(IntPtr hMidiOut, int uBank, IntPtr lpPatchArray, int uFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutClose(IntPtr hMidiOut);

		[DllImport("winmm.dll", CharSet = CharSet.Auto)]
		public static extern MmResult midiOutGetDevCaps(IntPtr deviceNumber, out MidiOutCapabilities caps, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutGetErrorText(IntPtr err, string lpText, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutGetID(IntPtr hMidiOut, out int lpuDeviceID);

		[DllImport("winmm.dll")]
		public static extern int midiOutGetNumDevs();

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutGetVolume(IntPtr uDeviceID, ref int lpdwVolume);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutLongMsg(IntPtr hMidiOut, ref MIDIHDR lpMidiOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutMessage(IntPtr hMidiOut, int msg, IntPtr dw1, IntPtr dw2);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutOpen(out IntPtr lphMidiOut, IntPtr uDeviceID, MidiOutCallback dwCallback, IntPtr dwInstance, int dwFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutPrepareHeader(IntPtr hMidiOut, ref MIDIHDR lpMidiOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutReset(IntPtr hMidiOut);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutSetVolume(IntPtr hMidiOut, int dwVolume);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutShortMsg(IntPtr hMidiOut, int dwMsg);

		[DllImport("winmm.dll")]
		public static extern MmResult midiOutUnprepareHeader(IntPtr hMidiOut, ref MIDIHDR lpMidiOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamClose(IntPtr hMidiStream);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamOpen(out IntPtr hMidiStream, IntPtr puDeviceID, int cMidi, IntPtr dwCallback, IntPtr dwInstance, int fdwOpen);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamOut(IntPtr hMidiStream, ref MIDIHDR pmh, int cbmh);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamPause(IntPtr hMidiStream);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamPosition(IntPtr hMidiStream, ref MMTIME lpmmt, int cbmmt);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamProperty(IntPtr hMidiStream, IntPtr lppropdata, int dwProperty);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamRestart(IntPtr hMidiStream);

		[DllImport("winmm.dll")]
		public static extern MmResult midiStreamStop(IntPtr hMidiStream);
	}
	public class MidiMessage
	{
		private int rawData;

		public int RawData => rawData;

		public MidiMessage(int status, int data1, int data2)
		{
			rawData = status + (data1 << 8) + (data2 << 16);
		}

		public MidiMessage(int rawData)
		{
			this.rawData = rawData;
		}

		public static MidiMessage StartNote(int note, int volume, int channel)
		{
			ValidateNoteParameters(note, volume, channel);
			return new MidiMessage(144 + channel - 1, note, volume);
		}

		private static void ValidateNoteParameters(int note, int volume, int channel)
		{
			ValidateChannel(channel);
			if (note < 0 || note > 127)
			{
				throw new ArgumentOutOfRangeException("note", "Note number must be in the range 0-127");
			}
			if (volume < 0 || volume > 127)
			{
				throw new ArgumentOutOfRangeException("volume", "Velocity must be in the range 0-127");
			}
		}

		private static void ValidateChannel(int channel)
		{
			if (channel < 1 || channel > 16)
			{
				throw new ArgumentOutOfRangeException("channel", channel, $"Channel must be 1-16 (Got {channel})");
			}
		}

		public static MidiMessage StopNote(int note, int volume, int channel)
		{
			ValidateNoteParameters(note, volume, channel);
			return new MidiMessage(128 + channel - 1, note, volume);
		}

		public static MidiMessage ChangePatch(int patch, int channel)
		{
			ValidateChannel(channel);
			return new MidiMessage(192 + channel - 1, patch, 0);
		}

		public static MidiMessage ChangeControl(int controller, int value, int channel)
		{
			ValidateChannel(channel);
			return new MidiMessage(176 + channel - 1, controller, value);
		}
	}
	public class MidiOut : IDisposable
	{
		private IntPtr hMidiOut = IntPtr.Zero;

		private bool disposed;

		private MidiInterop.MidiOutCallback callback;

		public static int NumberOfDevices => MidiInterop.midiOutGetNumDevs();

		public int Volume
		{
			get
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				int lpdwVolume = 0;
				MmException.Try(MidiInterop.midiOutGetVolume(hMidiOut, ref lpdwVolume), "midiOutGetVolume");
				return lpdwVolume;
			}
			set
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				MmException.Try(MidiInterop.midiOutSetVolume(hMidiOut, value), "midiOutSetVolume");
			}
		}

		public static MidiOutCapabilities DeviceInfo(int midiOutDeviceNumber)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			MidiOutCapabilities caps = default(MidiOutCapabilities);
			int uSize = Marshal.SizeOf(caps);
			MmException.Try(MidiInterop.midiOutGetDevCaps((IntPtr)midiOutDeviceNumber, out caps, uSize), "midiOutGetDevCaps");
			return caps;
		}

		public MidiOut(int deviceNo)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			callback = Callback;
			MmException.Try(MidiInterop.midiOutOpen(out hMidiOut, (IntPtr)deviceNo, callback, IntPtr.Zero, 196608), "midiOutOpen");
		}

		public void Close()
		{
			Dispose();
		}

		public void Dispose()
		{
			GC.KeepAlive(callback);
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}

		public void Reset()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(MidiInterop.midiOutReset(hMidiOut), "midiOutReset");
		}

		public void SendDriverMessage(int message, int param1, int param2)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(MidiInterop.midiOutMessage(hMidiOut, message, (IntPtr)param1, (IntPtr)param2), "midiOutMessage");
		}

		public void Send(int message)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(MidiInterop.midiOutShortMsg(hMidiOut, message), "midiOutShortMsg");
		}

		protected virtual void Dispose(bool disposing)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			if (!disposed)
			{
				MidiInterop.midiOutClose(hMidiOut);
			}
			disposed = true;
		}

		private void Callback(IntPtr midiInHandle, MidiInterop.MidiOutMessage message, IntPtr userData, IntPtr messageParameter1, IntPtr messageParameter2)
		{
		}

		public void SendBuffer(byte[] byteBuffer)
		{
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			MidiInterop.MIDIHDR lpMidiOutHdr = default(MidiInterop.MIDIHDR);
			lpMidiOutHdr.lpData = Marshal.AllocHGlobal(byteBuffer.Length);
			Marshal.Copy(byteBuffer, 0, lpMidiOutHdr.lpData, byteBuffer.Length);
			lpMidiOutHdr.dwBufferLength = byteBuffer.Length;
			lpMidiOutHdr.dwBytesRecorded = byteBuffer.Length;
			int uSize = Marshal.SizeOf(lpMidiOutHdr);
			MidiInterop.midiOutPrepareHeader(hMidiOut, ref lpMidiOutHdr, uSize);
			if ((int)MidiInterop.midiOutLongMsg(hMidiOut, ref lpMidiOutHdr, uSize) != 0)
			{
				MidiInterop.midiOutUnprepareHeader(hMidiOut, ref lpMidiOutHdr, uSize);
			}
			Marshal.FreeHGlobal(lpMidiOutHdr.lpData);
		}

		~MidiOut()
		{
			Dispose(disposing: false);
		}
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
	public struct MidiOutCapabilities
	{
		[Flags]
		private enum MidiOutCapabilityFlags
		{
			Volume = 1,
			LeftRightVolume = 2,
			PatchCaching = 4,
			Stream = 8
		}

		private short manufacturerId;

		private short productId;

		private int driverVersion;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		private string productName;

		private short wTechnology;

		private short wVoices;

		private short wNotes;

		private ushort wChannelMask;

		private MidiOutCapabilityFlags dwSupport;

		private const int MaxProductNameLength = 32;

		public Manufacturers Manufacturer => (Manufacturers)manufacturerId;

		public short ProductId => productId;

		public string ProductName => productName;

		public int Voices => wVoices;

		public int Notes => wNotes;

		public bool SupportsAllChannels => wChannelMask == ushort.MaxValue;

		public bool SupportsPatchCaching => (dwSupport & MidiOutCapabilityFlags.PatchCaching) != 0;

		public bool SupportsSeparateLeftAndRightVolume => (dwSupport & MidiOutCapabilityFlags.LeftRightVolume) != 0;

		public bool SupportsMidiStreamOut => (dwSupport & MidiOutCapabilityFlags.Stream) != 0;

		public bool SupportsVolumeControl => (dwSupport & MidiOutCapabilityFlags.Volume) != 0;

		public MidiOutTechnology Technology => (MidiOutTechnology)wTechnology;

		public bool SupportsChannel(int channel)
		{
			return (wChannelMask & (1 << channel - 1)) > 0;
		}
	}
	public enum MidiOutTechnology
	{
		MidiPort = 1,
		Synth,
		SquareWaveSynth,
		FMSynth,
		MidiMapper,
		WaveTableSynth,
		SoftwareSynth
	}
	public class NoteEvent : MidiEvent
	{
		private int noteNumber;

		private int velocity;

		private static readonly string[] NoteNames = new string[12]
		{
			"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A",
			"A#", "B"
		};

		public virtual int NoteNumber
		{
			get
			{
				return noteNumber;
			}
			set
			{
				if (value < 0 || value > 127)
				{
					throw new ArgumentOutOfRangeException("value", "Note number must be in the range 0-127");
				}
				noteNumber = value;
			}
		}

		public int Velocity
		{
			get
			{
				return velocity;
			}
			set
			{
				if (value < 0 || value > 127)
				{
					throw new ArgumentOutOfRangeException("value", "Velocity must be in the range 0-127");
				}
				velocity = value;
			}
		}

		public string NoteName
		{
			get
			{
				if (Channel == 16 || Channel == 10)
				{
					return noteNumber switch
					{
						35 => "Acoustic Bass Drum", 
						36 => "Bass Drum 1", 
						37 => "Side Stick", 
						38 => "Acoustic Snare", 
						39 => "Hand Clap", 
						40 => "Electric Snare", 
						41 => "Low Floor Tom", 
						42 => "Closed Hi-Hat", 
						43 => "High Floor Tom", 
						44 => "Pedal Hi-Hat", 
						45 => "Low Tom", 
						46 => "Open Hi-Hat", 
						47 => "Low-Mid Tom", 
						48 => "Hi-Mid Tom", 
						49 => "Crash Cymbal 1", 
						50 => "High Tom", 
						51 => "Ride Cymbal 1", 
						52 => "Chinese Cymbal", 
						53 => "Ride Bell", 
						54 => "Tambourine", 
						55 => "Splash Cymbal", 
						56 => "Cowbell", 
						57 => "Crash Cymbal 2", 
						58 => "Vibraslap", 
						59 => "Ride Cymbal 2", 
						60 => "Hi Bongo", 
						61 => "Low Bongo", 
						62 => "Mute Hi Conga", 
						63 => "Open Hi Conga", 
						64 => "Low Conga", 
						65 => "High Timbale", 
						66 => "Low Timbale", 
						67 => "High Agogo", 
						68 => "Low Agogo", 
						69 => "Cabasa", 
						70 => "Maracas", 
						71 => "Short Whistle", 
						72 => "Long Whistle", 
						73 => "Short Guiro", 
						74 => "Long Guiro", 
						75 => "Claves", 
						76 => "Hi Wood Block", 
						77 => "Low Wood Block", 
						78 => "Mute Cuica", 
						79 => "Open Cuica", 
						80 => "Mute Triangle", 
						81 => "Open Triangle", 
						_ => $"Drum {noteNumber}", 
					};
				}
				int num = noteNumber / 12;
				return $"{NoteNames[noteNumber % 12]}{num}";
			}
		}

		public NoteEvent(BinaryReader br)
		{
			NoteNumber = br.ReadByte();
			velocity = br.ReadByte();
			if (velocity > 127)
			{
				velocity = 127;
			}
		}

		public NoteEvent(long absoluteTime, int channel, MidiCommandCode commandCode, int noteNumber, int velocity)
			: base(absoluteTime, channel, commandCode)
		{
			NoteNumber = noteNumber;
			Velocity = velocity;
		}

		public override int GetAsShortMessage()
		{
			return base.GetAsShortMessage() + (noteNumber << 8) + (velocity << 16);
		}

		public override string ToString()
		{
			return $"{base.ToString()} {NoteName} Vel:{Velocity}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write((byte)noteNumber);
			writer.Write((byte)velocity);
		}
	}
	public class NoteOnEvent : NoteEvent
	{
		private NoteEvent offEvent;

		public NoteEvent OffEvent
		{
			get
			{
				return offEvent;
			}
			set
			{
				if (!MidiEvent.IsNoteOff(value))
				{
					throw new ArgumentException("OffEvent must be a valid MIDI note off event");
				}
				if (value.NoteNumber != NoteNumber)
				{
					throw new ArgumentException("Note Off Event must be for the same note number");
				}
				if (value.Channel != Channel)
				{
					throw new ArgumentException("Note Off Event must be for the same channel");
				}
				offEvent = value;
			}
		}

		public override int NoteNumber
		{
			get
			{
				return base.NoteNumber;
			}
			set
			{
				base.NoteNumber = value;
				if (OffEvent != null)
				{
					OffEvent.NoteNumber = NoteNumber;
				}
			}
		}

		public override int Channel
		{
			get
			{
				return base.Channel;
			}
			set
			{
				base.Channel = value;
				if (OffEvent != null)
				{
					OffEvent.Channel = Channel;
				}
			}
		}

		public int NoteLength
		{
			get
			{
				return (int)(offEvent.AbsoluteTime - base.AbsoluteTime);
			}
			set
			{
				if (value < 0)
				{
					throw new ArgumentException("NoteLength must be 0 or greater");
				}
				offEvent.AbsoluteTime = base.AbsoluteTime + value;
			}
		}

		public NoteOnEvent(BinaryReader br)
			: base(br)
		{
		}

		public NoteOnEvent(long absoluteTime, int channel, int noteNumber, int velocity, int duration)
			: base(absoluteTime, channel, MidiCommandCode.NoteOn, noteNumber, velocity)
		{
			OffEvent = new NoteEvent(absoluteTime, channel, MidiCommandCode.NoteOff, noteNumber, 0);
			NoteLength = duration;
		}

		public override MidiEvent Clone()
		{
			return new NoteOnEvent(base.AbsoluteTime, Channel, NoteNumber, base.Velocity, NoteLength);
		}

		public override string ToString()
		{
			if (base.Velocity == 0 && OffEvent == null)
			{
				return $"{base.ToString()} (Note Off)";
			}
			return string.Format("{0} Len: {1}", base.ToString(), (OffEvent == null) ? "?" : NoteLength.ToString());
		}
	}
	public class PatchChangeEvent : MidiEvent
	{
		private byte patch;

		private static readonly string[] patchNames = new string[128]
		{
			"Acoustic Grand", "Bright Acoustic", "Electric Grand", "Honky-Tonk", "Electric Piano 1", "Electric Piano 2", "Harpsichord", "Clav", "Celesta", "Glockenspiel",
			"Music Box", "Vibraphone", "Marimba", "Xylophone", "Tubular Bells", "Dulcimer", "Drawbar Organ", "Percussive Organ", "Rock Organ", "Church Organ",
			"Reed Organ", "Accoridan", "Harmonica", "Tango Accordian", "Acoustic Guitar(nylon)", "Acoustic Guitar(steel)", "Electric Guitar(jazz)", "Electric Guitar(clean)", "Electric Guitar(muted)", "Overdriven Guitar",
			"Distortion Guitar", "Guitar Harmonics", "Acoustic Bass", "Electric Bass(finger)", "Electric Bass(pick)", "Fretless Bass", "Slap Bass 1", "Slap Bass 2", "Synth Bass 1", "Synth Bass 2",
			"Violin", "Viola", "Cello", "Contrabass", "Tremolo Strings", "Pizzicato Strings", "Orchestral Strings", "Timpani", "String Ensemble 1", "String Ensemble 2",
			"SynthStrings 1", "SynthStrings 2", "Choir Aahs", "Voice Oohs", "Synth Voice", "Orchestra Hit", "Trumpet", "Trombone", "Tuba", "Muted Trumpet",
			"French Horn", "Brass Section", "SynthBrass 1", "SynthBrass 2", "Soprano Sax", "Alto Sax", "Tenor Sax", "Baritone Sax", "Oboe", "English Horn",
			"Bassoon", "Clarinet", "Piccolo", "Flute", "Recorder", "Pan Flute", "Blown Bottle", "Skakuhachi", "Whistle", "Ocarina",
			"Lead 1 (square)", "Lead 2 (sawtooth)", "Lead 3 (calliope)", "Lead 4 (chiff)", "Lead 5 (charang)", "Lead 6 (voice)", "Lead 7 (fifths)", "Lead 8 (bass+lead)", "Pad 1 (new age)", "Pad 2 (warm)",
			"Pad 3 (polysynth)", "Pad 4 (choir)", "Pad 5 (bowed)", "Pad 6 (metallic)", "Pad 7 (halo)", "Pad 8 (sweep)", "FX 1 (rain)", "FX 2 (soundtrack)", "FX 3 (crystal)", "FX 4 (atmosphere)",
			"FX 5 (brightness)", "FX 6 (goblins)", "FX 7 (echoes)", "FX 8 (sci-fi)", "Sitar", "Banjo", "Shamisen", "Koto", "Kalimba", "Bagpipe",
			"Fiddle", "Shanai", "Tinkle Bell", "Agogo", "Steel Drums", "Woodblock", "Taiko Drum", "Melodic Tom", "Synth Drum", "Reverse Cymbal",
			"Guitar Fret Noise", "Breath Noise", "Seashore", "Bird Tweet", "Telephone Ring", "Helicopter", "Applause", "Gunshot"
		};

		public int Patch
		{
			get
			{
				return patch;
			}
			set
			{
				if (value < 0 || value > 127)
				{
					throw new ArgumentOutOfRangeException("value", "Patch number must be in the range 0-127");
				}
				patch = (byte)value;
			}
		}

		public static string GetPatchName(int patchNumber)
		{
			return patchNames[patchNumber];
		}

		public PatchChangeEvent(BinaryReader br)
		{
			patch = br.ReadByte();
			if ((patch & 0x80u) != 0)
			{
				throw new FormatException("Invalid patch");
			}
		}

		public PatchChangeEvent(long absoluteTime, int channel, int patchNumber)
			: base(absoluteTime, channel, MidiCommandCode.PatchChange)
		{
			Patch = patchNumber;
		}

		public override string ToString()
		{
			return $"{base.ToString()} {GetPatchName(patch)}";
		}

		public override int GetAsShortMessage()
		{
			return base.GetAsShortMessage() + (patch << 8);
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(patch);
		}
	}
	public class PitchWheelChangeEvent : MidiEvent
	{
		private int pitch;

		public int Pitch
		{
			get
			{
				return pitch;
			}
			set
			{
				if (value < 0 || value >= 16384)
				{
					throw new ArgumentOutOfRangeException("value", "Pitch value must be in the range 0 - 0x3FFF");
				}
				pitch = value;
			}
		}

		public PitchWheelChangeEvent(BinaryReader br)
		{
			byte b = br.ReadByte();
			byte b2 = br.ReadByte();
			if ((b & 0x80u) != 0)
			{
				throw new FormatException("Invalid pitchwheelchange byte 1");
			}
			if ((b2 & 0x80u) != 0)
			{
				throw new FormatException("Invalid pitchwheelchange byte 2");
			}
			pitch = b + (b2 << 7);
		}

		public PitchWheelChangeEvent(long absoluteTime, int channel, int pitchWheel)
			: base(absoluteTime, channel, MidiCommandCode.PitchWheelChange)
		{
			Pitch = pitchWheel;
		}

		public override string ToString()
		{
			return $"{base.ToString()} Pitch {pitch} ({pitch - 8192})";
		}

		public override int GetAsShortMessage()
		{
			return base.GetAsShortMessage() + ((pitch & 0x7F) << 8) + (((pitch >> 7) & 0x7F) << 16);
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write((byte)((uint)pitch & 0x7Fu));
			writer.Write((byte)((uint)(pitch >> 7) & 0x7Fu));
		}
	}
	public class RawMetaEvent : MetaEvent
	{
		public byte[] Data { get; set; }

		public RawMetaEvent(MetaEventType metaEventType, long absoluteTime, byte[] data)
			: base(metaEventType, (data != null) ? data.Length : 0, absoluteTime)
		{
			Data = data;
		}

		public override MidiEvent Clone()
		{
			return new RawMetaEvent(base.MetaEventType, base.AbsoluteTime, (byte[])Data?.Clone());
		}

		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder().Append(base.ToString());
			byte[] data = Data;
			foreach (byte b in data)
			{
				stringBuilder.AppendFormat(" {0:X2}", b);
			}
			return stringBuilder.ToString();
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			if (Data != null)
			{
				writer.Write(Data, 0, Data.Length);
			}
		}
	}
	public class SequencerSpecificEvent : MetaEvent
	{
		private byte[] data;

		public byte[] Data
		{
			get
			{
				return data;
			}
			set
			{
				data = value;
				metaDataLength = data.Length;
			}
		}

		public SequencerSpecificEvent(BinaryReader br, int length)
		{
			data = br.ReadBytes(length);
		}

		public SequencerSpecificEvent(byte[] data, long absoluteTime)
			: base(MetaEventType.SequencerSpecific, data.Length, absoluteTime)
		{
			this.data = data;
		}

		public override MidiEvent Clone()
		{
			return new SequencerSpecificEvent((byte[])data.Clone(), base.AbsoluteTime);
		}

		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append(base.ToString());
			stringBuilder.Append(" ");
			byte[] array = data;
			foreach (byte b in array)
			{
				stringBuilder.AppendFormat("{0:X2} ", b);
			}
			stringBuilder.Length--;
			return stringBuilder.ToString();
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(data);
		}
	}
	public class SmpteOffsetEvent : MetaEvent
	{
		private readonly byte hours;

		private readonly byte minutes;

		private readonly byte seconds;

		private readonly byte frames;

		private readonly byte subFrames;

		public int Hours => hours;

		public int Minutes => minutes;

		public int Seconds => seconds;

		public int Frames => frames;

		public int SubFrames => subFrames;

		public SmpteOffsetEvent(byte hours, byte minutes, byte seconds, byte frames, byte subFrames)
		{
			this.hours = hours;
			this.minutes = minutes;
			this.seconds = seconds;
			this.frames = frames;
			this.subFrames = subFrames;
		}

		public SmpteOffsetEvent(BinaryReader br, int length)
		{
			if (length != 5)
			{
				throw new FormatException($"Invalid SMPTE Offset length: Got {length}, expected 5");
			}
			hours = br.ReadByte();
			minutes = br.ReadByte();
			seconds = br.ReadByte();
			frames = br.ReadByte();
			subFrames = br.ReadByte();
		}

		public override MidiEvent Clone()
		{
			return (SmpteOffsetEvent)MemberwiseClone();
		}

		public override string ToString()
		{
			return $"{base.ToString()} {hours}:{minutes}:{seconds}:{frames}:{subFrames}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(hours);
			writer.Write(minutes);
			writer.Write(seconds);
			writer.Write(frames);
			writer.Write(subFrames);
		}
	}
	public class SysexEvent : MidiEvent
	{
		private byte[] data;

		public static SysexEvent ReadSysexEvent(BinaryReader br)
		{
			SysexEvent sysexEvent = new SysexEvent();
			List<byte> list = new List<byte>();
			bool flag = true;
			while (flag)
			{
				byte b = br.ReadByte();
				if (b == 247)
				{
					flag = false;
				}
				else
				{
					list.Add(b);
				}
			}
			sysexEvent.data = list.ToArray();
			return sysexEvent;
		}

		public override MidiEvent Clone()
		{
			return new SysexEvent
			{
				data = (byte[])data?.Clone()
			};
		}

		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder();
			byte[] array = data;
			foreach (byte b in array)
			{
				stringBuilder.AppendFormat("{0:X2} ", b);
			}
			return $"{base.AbsoluteTime} Sysex: {data.Length} bytes\r\n{stringBuilder.ToString()}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(data, 0, data.Length);
			writer.Write((byte)247);
		}
	}
	public class TempoEvent : MetaEvent
	{
		private int microsecondsPerQuarterNote;

		public int MicrosecondsPerQuarterNote
		{
			get
			{
				return microsecondsPerQuarterNote;
			}
			set
			{
				microsecondsPerQuarterNote = value;
			}
		}

		public double Tempo
		{
			get
			{
				return 60000000.0 / (double)microsecondsPerQuarterNote;
			}
			set
			{
				microsecondsPerQuarterNote = (int)(60000000.0 / value);
			}
		}

		public TempoEvent(BinaryReader br, int length)
		{
			if (length != 3)
			{
				throw new FormatException("Invalid tempo length");
			}
			microsecondsPerQuarterNote = (br.ReadByte() << 16) + (br.ReadByte() << 8) + br.ReadByte();
		}

		public TempoEvent(int microsecondsPerQuarterNote, long absoluteTime)
			: base(MetaEventType.SetTempo, 3, absoluteTime)
		{
			this.microsecondsPerQuarterNote = microsecondsPerQuarterNote;
		}

		public override MidiEvent Clone()
		{
			return (TempoEvent)MemberwiseClone();
		}

		public override string ToString()
		{
			return string.Format("{0} {2}bpm ({1})", base.ToString(), microsecondsPerQuarterNote, 60000000 / microsecondsPerQuarterNote);
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write((byte)((uint)(microsecondsPerQuarterNote >> 16) & 0xFFu));
			writer.Write((byte)((uint)(microsecondsPerQuarterNote >> 8) & 0xFFu));
			writer.Write((byte)((uint)microsecondsPerQuarterNote & 0xFFu));
		}
	}
	public class TextEvent : MetaEvent
	{
		private byte[] data;

		public string Text
		{
			get
			{
				return ((Encoding)(object)ByteEncoding.Instance).GetString(data);
			}
			set
			{
				Encoding instance = (Encoding)(object)ByteEncoding.Instance;
				data = instance.GetBytes(value);
				metaDataLength = data.Length;
			}
		}

		public byte[] Data
		{
			get
			{
				return data;
			}
			set
			{
				data = value;
				metaDataLength = data.Length;
			}
		}

		public TextEvent(BinaryReader br, int length)
		{
			data = br.ReadBytes(length);
		}

		public TextEvent(string text, MetaEventType metaEventType, long absoluteTime)
			: base(metaEventType, text.Length, absoluteTime)
		{
			Text = text;
		}

		public override MidiEvent Clone()
		{
			return (TextEvent)MemberwiseClone();
		}

		public override string ToString()
		{
			return $"{base.ToString()} {Text}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(data);
		}
	}
	public class TimeSignatureEvent : MetaEvent
	{
		private byte numerator;

		private byte denominator;

		private byte ticksInMetronomeClick;

		private byte no32ndNotesInQuarterNote;

		public int Numerator => numerator;

		public int Denominator => denominator;

		public int TicksInMetronomeClick => ticksInMetronomeClick;

		public int No32ndNotesInQuarterNote => no32ndNotesInQuarterNote;

		public string TimeSignature
		{
			get
			{
				string arg = $"Unknown ({denominator})";
				switch (denominator)
				{
				case 1:
					arg = "2";
					break;
				case 2:
					arg = "4";
					break;
				case 3:
					arg = "8";
					break;
				case 4:
					arg = "16";
					break;
				case 5:
					arg = "32";
					break;
				}
				return $"{numerator}/{arg}";
			}
		}

		public TimeSignatureEvent(BinaryReader br, int length)
		{
			if (length != 4)
			{
				throw new FormatException($"Invalid time signature length: Got {length}, expected 4");
			}
			numerator = br.ReadByte();
			denominator = br.ReadByte();
			ticksInMetronomeClick = br.ReadByte();
			no32ndNotesInQuarterNote = br.ReadByte();
		}

		public TimeSignatureEvent(long absoluteTime, int numerator, int denominator, int ticksInMetronomeClick, int no32ndNotesInQuarterNote)
			: base(MetaEventType.TimeSignature, 4, absoluteTime)
		{
			this.numerator = (byte)numerator;
			this.denominator = (byte)denominator;
			this.ticksInMetronomeClick = (byte)ticksInMetronomeClick;
			this.no32ndNotesInQuarterNote = (byte)no32ndNotesInQuarterNote;
		}

		public override MidiEvent Clone()
		{
			return (TimeSignatureEvent)MemberwiseClone();
		}

		public override string ToString()
		{
			return $"{base.ToString()} {TimeSignature} TicksInClick:{ticksInMetronomeClick} 32ndsInQuarterNote:{no32ndNotesInQuarterNote}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write(numerator);
			writer.Write(denominator);
			writer.Write(ticksInMetronomeClick);
			writer.Write(no32ndNotesInQuarterNote);
		}
	}
	public class TrackSequenceNumberEvent : MetaEvent
	{
		private ushort sequenceNumber;

		public TrackSequenceNumberEvent(ushort sequenceNumber)
		{
			this.sequenceNumber = sequenceNumber;
		}

		public TrackSequenceNumberEvent(BinaryReader br, int length)
		{
			if (length != 2)
			{
				throw new FormatException("Invalid sequence number length");
			}
			sequenceNumber = (ushort)((br.ReadByte() << 8) + br.ReadByte());
		}

		public override MidiEvent Clone()
		{
			return (TrackSequenceNumberEvent)MemberwiseClone();
		}

		public override string ToString()
		{
			return $"{base.ToString()} {sequenceNumber}";
		}

		public override void Export(ref long absoluteTime, BinaryWriter writer)
		{
			base.Export(ref absoluteTime, writer);
			writer.Write((byte)((uint)(sequenceNumber >> 8) & 0xFFu));
			writer.Write((byte)(sequenceNumber & 0xFFu));
		}
	}
}
namespace NAudio.Utils
{
	internal class MergeSort
	{
		private static void Sort<T>(IList<T> list, int lowIndex, int highIndex, IComparer<T> comparer)
		{
			if (lowIndex >= highIndex)
			{
				return;
			}
			int num = (lowIndex + highIndex) / 2;
			Sort(list, lowIndex, num, comparer);
			Sort(list, num + 1, highIndex, comparer);
			int num2 = num;
			int num3 = num + 1;
			while (lowIndex <= num2 && num3 <= highIndex)
			{
				if (comparer.Compare(list[lowIndex], list[num3]) <= 0)
				{
					lowIndex++;
					continue;
				}
				T value = list[num3];
				for (int num4 = num3 - 1; num4 >= lowIndex; num4--)
				{
					list[num4 + 1] = list[num4];
				}
				list[lowIndex] = value;
				lowIndex++;
				num2++;
				num3++;
			}
		}

		public static void Sort<T>(IList<T> list) where T : IComparable<T>
		{
			Sort(list, 0, list.Count - 1, Comparer<T>.Default);
		}

		public static void Sort<T>(IList<T> list, IComparer<T> comparer)
		{
			Sort(list, 0, list.Count - 1, comparer);
		}
	}
}

BepInEx/core/NAudio.Wasapi.dll

Decompiled 2 days ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NAudio.CoreAudioApi;
using NAudio.CoreAudioApi.Interfaces;
using NAudio.Dmo;
using NAudio.Dmo.Effect;
using NAudio.MediaFoundation;
using NAudio.Utils;
using NAudio.Wasapi.CoreAudioApi;
using NAudio.Wasapi.CoreAudioApi.Interfaces;
using NAudio.Wave;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.Wasapi")]
[assembly: AssemblyTitle("NAudio.Wasapi")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio.MediaFoundation
{
	public static class AudioSubtypes
	{
		[FieldDescription("AAC")]
		public static readonly Guid MFAudioFormat_AAC = new Guid("00001610-0000-0010-8000-00aa00389b71");

		[FieldDescription("ADTS")]
		public static readonly Guid MFAudioFormat_ADTS = new Guid("00001600-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby AC3 SPDIF")]
		public static readonly Guid MFAudioFormat_Dolby_AC3_SPDIF = new Guid("00000092-0000-0010-8000-00aa00389b71");

		[FieldDescription("DRM")]
		public static readonly Guid MFAudioFormat_DRM = new Guid("00000009-0000-0010-8000-00aa00389b71");

		[FieldDescription("DTS")]
		public static readonly Guid MFAudioFormat_DTS = new Guid("00000008-0000-0010-8000-00aa00389b71");

		[FieldDescription("IEEE floating-point")]
		public static readonly Guid MFAudioFormat_Float = new Guid("00000003-0000-0010-8000-00aa00389b71");

		[FieldDescription("MP3")]
		public static readonly Guid MFAudioFormat_MP3 = new Guid("00000055-0000-0010-8000-00aa00389b71");

		[FieldDescription("MPEG")]
		public static readonly Guid MFAudioFormat_MPEG = new Guid("00000050-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMA 9 Voice codec")]
		public static readonly Guid MFAudioFormat_MSP1 = new Guid("0000000a-0000-0010-8000-00aa00389b71");

		[FieldDescription("PCM")]
		public static readonly Guid MFAudioFormat_PCM = new Guid("00000001-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMA SPDIF")]
		public static readonly Guid MFAudioFormat_WMASPDIF = new Guid("00000164-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMAudio Lossless")]
		public static readonly Guid MFAudioFormat_WMAudio_Lossless = new Guid("00000163-0000-0010-8000-00aa00389b71");

		[FieldDescription("Windows Media Audio")]
		public static readonly Guid MFAudioFormat_WMAudioV8 = new Guid("00000161-0000-0010-8000-00aa00389b71");

		[FieldDescription("Windows Media Audio Professional")]
		public static readonly Guid MFAudioFormat_WMAudioV9 = new Guid("00000162-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby AC3")]
		public static readonly Guid MFAudioFormat_Dolby_AC3 = new Guid("e06d802c-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MFAudioFormat_FLAC = new Guid("0000f1ac-0000-0010-8000-00aa00389b71");

		public static readonly Guid MFAudioFormat_ALAC = new Guid("63616c61-0000-0010-8000-00aa00389b71");

		[FieldDescription("MPEG-4 and AAC Audio Types")]
		public static readonly Guid MEDIASUBTYPE_RAW_AAC1 = new Guid("000000ff-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby Audio Types")]
		public static readonly Guid MEDIASUBTYPE_DVM = new Guid("00002000-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby Audio Types")]
		public static readonly Guid MEDIASUBTYPE_DOLBY_DDPLUS = new Guid("a7fb87af-2d02-42fb-a4d4-05cd93843bdd");

		[FieldDescription("μ-law")]
		public static readonly Guid KSDATAFORMAT_SUBTYPE_MULAW = new Guid("00000007-0000-0010-8000-00aa00389b71");

		[FieldDescription("ADPCM")]
		public static readonly Guid KSDATAFORMAT_SUBTYPE_ADPCM = new Guid("00000002-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby Digital Plus for HDMI")]
		public static readonly Guid KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS = new Guid("0000000a-0cea-0010-8000-00aa00389b71");

		[FieldDescription("MSAudio1")]
		public static readonly Guid MEDIASUBTYPE_MSAUDIO1 = new Guid("00000160-0000-0010-8000-00aa00389b71");

		[FieldDescription("IMA ADPCM")]
		public static readonly Guid ImaAdpcm = new Guid("00000011-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMSP2")]
		public static readonly Guid WMMEDIASUBTYPE_WMSP2 = new Guid("0000000b-0000-0010-8000-00aa00389b71");
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("7FEE9E9A-4A89-47a6-899C-B6A53A70FB67")]
	public interface IMFActivate : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void ActivateObject([In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppv);

		void ShutdownObject();

		void DetachObject();
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("2CD2D921-C447-44A7-A13C-4ADABFC247E3")]
	public interface IMFAttributes
	{
		void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr Value);

		void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		void DeleteAllItems();

		void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		void LockStore();

		void UnlockStore();

		void GetCount(out int pcItems);

		void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("ad4c1b00-4bf7-422f-9175-756693d9130d")]
	public interface IMFByteStream
	{
		void GetCapabilities(ref int pdwCapabiities);

		void GetLength(ref long pqwLength);

		void SetLength(long qwLength);

		void GetCurrentPosition(ref long pqwPosition);

		void SetCurrentPosition(long qwPosition);

		void IsEndOfStream([MarshalAs(UnmanagedType.Bool)] ref bool pfEndOfStream);

		void Read(IntPtr pb, int cb, ref int pcbRead);

		void BeginRead(IntPtr pb, int cb, IntPtr pCallback, IntPtr punkState);

		void EndRead(IntPtr pResult, ref int pcbRead);

		void Write(IntPtr pb, int cb, ref int pcbWritten);

		void BeginWrite(IntPtr pb, int cb, IntPtr pCallback, IntPtr punkState);

		void EndWrite(IntPtr pResult, ref int pcbWritten);

		void Seek(int SeekOrigin, long llSeekOffset, int dwSeekFlags, ref long pqwCurrentPosition);

		void Flush();

		void Close();
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("5BC8A76B-869A-46A3-9B03-FA218A66AEBE")]
	public interface IMFCollection
	{
		void GetElementCount(out int pcElements);

		void GetElement([In] int dwElementIndex, [MarshalAs(UnmanagedType.IUnknown)] out object ppUnkElement);

		void AddElement([In][MarshalAs(UnmanagedType.IUnknown)] object pUnkElement);

		void RemoveElement([In] int dwElementIndex, [MarshalAs(UnmanagedType.IUnknown)] out object ppUnkElement);

		void InsertElementAt([In] int dwIndex, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		void RemoveAllElements();
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("045FA593-8799-42b8-BC8D-8968C6453507")]
	public interface IMFMediaBuffer
	{
		void Lock(out IntPtr ppbBuffer, out int pcbMaxLength, out int pcbCurrentLength);

		void Unlock();

		void GetCurrentLength(out int pcbCurrentLength);

		void SetCurrentLength(int cbCurrentLength);

		void GetMaxLength(out int pcbMaxLength);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("DF598932-F10C-4E39-BBA2-C308F101DAA3")]
	public interface IMFMediaEvent : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void GetType(out MediaEventType pmet);

		void GetExtendedType(out Guid pguidExtendedType);

		void GetStatus([MarshalAs(UnmanagedType.Error)] out int phrStatus);

		void GetValue([Out] IntPtr pvValue);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("44AE0FA8-EA31-4109-8D2E-4CAE4997C555")]
	public interface IMFMediaType : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void GetMajorType(out Guid pguidMajorType);

		void IsCompressedFormat([MarshalAs(UnmanagedType.Bool)] out bool pfCompressed);

		[PreserveSig]
		int IsEqual([In][MarshalAs(UnmanagedType.Interface)] IMFMediaType pIMediaType, ref int pdwFlags);

		void GetRepresentation([In] Guid guidRepresentation, ref IntPtr ppvRepresentation);

		void FreeRepresentation([In] Guid guidRepresentation, [In] IntPtr pvRepresentation);
	}
	[ComImport]
	[Guid("E7FE2E12-661C-40DA-92F9-4F002AB67627")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	public interface IMFReadWriteClassFactory
	{
		void CreateInstanceFromURL([In][MarshalAs(UnmanagedType.LPStruct)] Guid clsid, [In][MarshalAs(UnmanagedType.LPWStr)] string pwszURL, [In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pAttributes, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject);

		void CreateInstanceFromObject([In][MarshalAs(UnmanagedType.LPStruct)] Guid clsid, [In][MarshalAs(UnmanagedType.IUnknown)] object punkObject, [In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pAttributes, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
	}
	[ComImport]
	[Guid("48e2ed0f-98c2-4a37-bed5-166312ddd83f")]
	public class MFReadWriteClassFactory
	{
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("c40a00f2-b93a-4d80-ae8c-5a1c634f58e4")]
	public interface IMFSample : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void GetSampleFlags(out int pdwSampleFlags);

		void SetSampleFlags(int dwSampleFlags);

		void GetSampleTime(out long phnsSampletime);

		void SetSampleTime(long hnsSampleTime);

		void GetSampleDuration(out long phnsSampleDuration);

		void SetSampleDuration(long hnsSampleDuration);

		void GetBufferCount(out int pdwBufferCount);

		void GetBufferByIndex(int dwIndex, out IMFMediaBuffer ppBuffer);

		void ConvertToContiguousBuffer(out IMFMediaBuffer ppBuffer);

		void AddBuffer(IMFMediaBuffer pBuffer);

		void RemoveBufferByIndex(int dwIndex);

		void RemoveAllBuffers();

		void GetTotalLength(out int pcbTotalLength);

		void CopyToBuffer(IMFMediaBuffer pBuffer);
	}
	[ComImport]
	[Guid("3137f1cd-fe5e-4805-a5d8-fb477448cb3d")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	public interface IMFSinkWriter
	{
		void AddStream([In][MarshalAs(UnmanagedType.Interface)] IMFMediaType pTargetMediaType, out int pdwStreamIndex);

		void SetInputMediaType([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.Interface)] IMFMediaType pInputMediaType, [In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pEncodingParameters);

		void BeginWriting();

		void WriteSample([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.Interface)] IMFSample pSample);

		void SendStreamTick([In] int dwStreamIndex, [In] long llTimestamp);

		void PlaceMarker([In] int dwStreamIndex, [In] IntPtr pvContext);

		void NotifyEndOfSegment([In] int dwStreamIndex);

		void Flush([In] int dwStreamIndex);

		void DoFinalize();

		void GetServiceForStream([In] int dwStreamIndex, [In] ref Guid guidService, [In] ref Guid riid, out IntPtr ppvObject);

		void GetStatistics([In] int dwStreamIndex, [In][Out] MF_SINK_WRITER_STATISTICS pStats);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("70ae66f2-c809-4e4f-8915-bdcb406b7993")]
	public interface IMFSourceReader
	{
		void GetStreamSelection([In] int dwStreamIndex, [MarshalAs(UnmanagedType.Bool)] out bool pSelected);

		void SetStreamSelection([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.Bool)] bool pSelected);

		void GetNativeMediaType([In] int dwStreamIndex, [In] int dwMediaTypeIndex, out IMFMediaType ppMediaType);

		void GetCurrentMediaType([In] int dwStreamIndex, out IMFMediaType ppMediaType);

		void SetCurrentMediaType([In] int dwStreamIndex, IntPtr pdwReserved, [In] IMFMediaType pMediaType);

		void SetCurrentPosition([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidTimeFormat, [In] IntPtr varPosition);

		void ReadSample([In] int dwStreamIndex, [In] int dwControlFlags, out int pdwActualStreamIndex, out MF_SOURCE_READER_FLAG pdwStreamFlags, out ulong pllTimestamp, out IMFSample ppSample);

		void Flush([In] int dwStreamIndex);

		void GetServiceForStream([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidService, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr ppvObject);

		[PreserveSig]
		int GetPresentationAttribute([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidAttribute, [Out] IntPtr pvarAttribute);
	}
	[Flags]
	public enum MF_SOURCE_READER_FLAG
	{
		None = 0,
		MF_SOURCE_READERF_ERROR = 1,
		MF_SOURCE_READERF_ENDOFSTREAM = 2,
		MF_SOURCE_READERF_NEWSTREAM = 4,
		MF_SOURCE_READERF_NATIVEMEDIATYPECHANGED = 0x10,
		MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED = 0x20,
		MF_SOURCE_READERF_STREAMTICK = 0x100,
		MF_SOURCE_READERF_ALLEFFECTSREMOVED = 0x200
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("bf94c121-5b05-4e6f-8000-ba598961414d")]
	public interface IMFTransform
	{
		void GetStreamLimits(out int pdwInputMinimum, out int pdwInputMaximum, out int pdwOutputMinimum, out int pdwOutputMaximum);

		void GetStreamCount(out int pcInputStreams, out int pcOutputStreams);

		void GetStreamIds([In] int dwInputIdArraySize, [In][Out] IntPtr pdwInputIDs, [In] int dwOutputIdArraySize, [In][Out] IntPtr pdwOutputIDs);

		void GetInputStreamInfo([In] int dwInputStreamId, out MFT_INPUT_STREAM_INFO pStreamInfo);

		void GetOutputStreamInfo([In] int dwOutputStreamId, out MFT_OUTPUT_STREAM_INFO pStreamInfo);

		void GetAttributes(out IMFAttributes pAttributes);

		void GetInputStreamAttributes([In] int dwInputStreamId, out IMFAttributes pAttributes);

		void GetOutputStreamAttributes([In] int dwOutputStreamId, out IMFAttributes pAttributes);

		void DeleteInputStream([In] int dwOutputStreamId);

		void AddInputStreams([In] int cStreams, [In] IntPtr adwStreamIDs);

		void GetInputAvailableType([In] int dwInputStreamId, [In] int dwTypeIndex, out IMFMediaType ppType);

		void GetOutputAvailableType([In] int dwOutputStreamId, [In] int dwTypeIndex, out IMFMediaType ppType);

		void SetInputType([In] int dwInputStreamId, [In] IMFMediaType pType, [In] _MFT_SET_TYPE_FLAGS dwFlags);

		void SetOutputType([In] int dwOutputStreamId, [In] IMFMediaType pType, [In] _MFT_SET_TYPE_FLAGS dwFlags);

		void GetInputCurrentType([In] int dwInputStreamId, out IMFMediaType ppType);

		void GetOutputCurrentType([In] int dwOutputStreamId, out IMFMediaType ppType);

		void GetInputStatus([In] int dwInputStreamId, out _MFT_INPUT_STATUS_FLAGS pdwFlags);

		void GetOutputStatus([In] int dwInputStreamId, out _MFT_OUTPUT_STATUS_FLAGS pdwFlags);

		void SetOutputBounds([In] long hnsLowerBound, [In] long hnsUpperBound);

		void ProcessEvent([In] int dwInputStreamId, [In] IMFMediaEvent pEvent);

		void ProcessMessage([In] MFT_MESSAGE_TYPE eMessage, [In] IntPtr ulParam);

		void ProcessInput([In] int dwInputStreamId, [In] IMFSample pSample, int dwFlags);

		[PreserveSig]
		int ProcessOutput([In] _MFT_PROCESS_OUTPUT_FLAGS dwFlags, [In] int cOutputBufferCount, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] MFT_OUTPUT_DATA_BUFFER[] pOutputSamples, out _MFT_PROCESS_OUTPUT_STATUS pdwStatus);
	}
	public enum MediaEventType
	{
		MEUnknown = 0,
		MEError = 1,
		MEExtendedType = 2,
		MENonFatalError = 3,
		MESessionUnknown = 100,
		MESessionTopologySet = 101,
		MESessionTopologiesCleared = 102,
		MESessionStarted = 103,
		MESessionPaused = 104,
		MESessionStopped = 105,
		MESessionClosed = 106,
		MESessionEnded = 107,
		MESessionRateChanged = 108,
		MESessionScrubSampleComplete = 109,
		MESessionCapabilitiesChanged = 110,
		MESessionTopologyStatus = 111,
		MESessionNotifyPresentationTime = 112,
		MENewPresentation = 113,
		MELicenseAcquisitionStart = 114,
		MELicenseAcquisitionCompleted = 115,
		MEIndividualizationStart = 116,
		MEIndividualizationCompleted = 117,
		MEEnablerProgress = 118,
		MEEnablerCompleted = 119,
		MEPolicyError = 120,
		MEPolicyReport = 121,
		MEBufferingStarted = 122,
		MEBufferingStopped = 123,
		MEConnectStart = 124,
		MEConnectEnd = 125,
		MEReconnectStart = 126,
		MEReconnectEnd = 127,
		MERendererEvent = 128,
		MESessionStreamSinkFormatChanged = 129,
		MESourceUnknown = 200,
		MESourceStarted = 201,
		MEStreamStarted = 202,
		MESourceSeeked = 203,
		MEStreamSeeked = 204,
		MENewStream = 205,
		MEUpdatedStream = 206,
		MESourceStopped = 207,
		MEStreamStopped = 208,
		MESourcePaused = 209,
		MEStreamPaused = 210,
		MEEndOfPresentation = 211,
		MEEndOfStream = 212,
		MEMediaSample = 213,
		MEStreamTick = 214,
		MEStreamThinMode = 215,
		MEStreamFormatChanged = 216,
		MESourceRateChanged = 217,
		MEEndOfPresentationSegment = 218,
		MESourceCharacteristicsChanged = 219,
		MESourceRateChangeRequested = 220,
		MESourceMetadataChanged = 221,
		MESequencerSourceTopologyUpdated = 222,
		MESinkUnknown = 300,
		MEStreamSinkStarted = 301,
		MEStreamSinkStopped = 302,
		MEStreamSinkPaused = 303,
		MEStreamSinkRateChanged = 304,
		MEStreamSinkRequestSample = 305,
		MEStreamSinkMarker = 306,
		MEStreamSinkPrerolled = 307,
		MEStreamSinkScrubSampleComplete = 308,
		MEStreamSinkFormatChanged = 309,
		MEStreamSinkDeviceChanged = 310,
		MEQualityNotify = 311,
		MESinkInvalidated = 312,
		MEAudioSessionNameChanged = 313,
		MEAudioSessionVolumeChanged = 314,
		MEAudioSessionDeviceRemoved = 315,
		MEAudioSessionServerShutdown = 316,
		MEAudioSessionGroupingParamChanged = 317,
		MEAudioSessionIconChanged = 318,
		MEAudioSessionFormatChanged = 319,
		MEAudioSessionDisconnected = 320,
		MEAudioSessionExclusiveModeOverride = 321,
		METrustUnknown = 400,
		MEPolicyChanged = 401,
		MEContentProtectionMessage = 402,
		MEPolicySet = 403,
		MEWMDRMLicenseBackupCompleted = 500,
		MEWMDRMLicenseBackupProgress = 501,
		MEWMDRMLicenseRestoreCompleted = 502,
		MEWMDRMLicenseRestoreProgress = 503,
		MEWMDRMLicenseAcquisitionCompleted = 506,
		MEWMDRMIndividualizationCompleted = 508,
		MEWMDRMIndividualizationProgress = 513,
		MEWMDRMProximityCompleted = 514,
		MEWMDRMLicenseStoreCleaned = 515,
		MEWMDRMRevocationDownloadCompleted = 516,
		METransformUnknown = 600,
		METransformNeedInput = 601,
		METransformHaveOutput = 602,
		METransformDrainComplete = 603,
		METransformMarker = 604
	}
	public static class MediaFoundationAttributes
	{
		public static readonly Guid MF_TRANSFORM_ASYNC = new Guid("f81a699a-649a-497d-8c73-29f8fed6ad7a");

		public static readonly Guid MF_TRANSFORM_ASYNC_UNLOCK = new Guid("e5666d6b-3422-4eb6-a421-da7db1f8e207");

		[FieldDescription("Transform Flags")]
		public static readonly Guid MF_TRANSFORM_FLAGS_Attribute = new Guid("9359bb7e-6275-46c4-a025-1c01e45f1a86");

		[FieldDescription("Transform Category")]
		public static readonly Guid MF_TRANSFORM_CATEGORY_Attribute = new Guid("ceabba49-506d-4757-a6ff-66c184987e4e");

		[FieldDescription("Class identifier")]
		public static readonly Guid MFT_TRANSFORM_CLSID_Attribute = new Guid("6821c42b-65a4-4e82-99bc-9a88205ecd0c");

		[FieldDescription("Container type")]
		public static readonly Guid MF_TRANSCODE_CONTAINERTYPE = new Guid(353366591, 19132, 18315, 172, 79, 225, 145, 111, 186, 28, 202);

		[FieldDescription("Input Types")]
		public static readonly Guid MFT_INPUT_TYPES_Attributes = new Guid("4276c9b1-759d-4bf3-9cd0-0d723d138f96");

		[FieldDescription("Output Types")]
		public static readonly Guid MFT_OUTPUT_TYPES_Attributes = new Guid("8eae8cf3-a44f-4306-ba5c-bf5dda242818");

		public static readonly Guid MFT_ENUM_HARDWARE_URL_Attribute = new Guid("2fb866ac-b078-4942-ab6c-003d05cda674");

		[FieldDescription("Name")]
		public static readonly Guid MFT_FRIENDLY_NAME_Attribute = new Guid("314ffbae-5b41-4c95-9c19-4e7d586face3");

		public static readonly Guid MFT_CONNECTED_STREAM_ATTRIBUTE = new Guid("71eeb820-a59f-4de2-bcec-38db1dd611a4");

		public static readonly Guid MFT_CONNECTED_TO_HW_STREAM = new Guid("34e6e728-06d6-4491-a553-4795650db912");

		[FieldDescription("Preferred Output Format")]
		public static readonly Guid MFT_PREFERRED_OUTPUTTYPE_Attribute = new Guid("7e700499-396a-49ee-b1b4-f628021e8c9d");

		public static readonly Guid MFT_PROCESS_LOCAL_Attribute = new Guid("543186e4-4649-4e65-b588-4aa352aff379");

		public static readonly Guid MFT_PREFERRED_ENCODER_PROFILE = new Guid("53004909-1ef5-46d7-a18e-5a75f8b5905f");

		public static readonly Guid MFT_HW_TIMESTAMP_WITH_QPC_Attribute = new Guid("8d030fb8-cc43-4258-a22e-9210bef89be4");

		public static readonly Guid MFT_FIELDOFUSE_UNLOCK_Attribute = new Guid("8ec2e9fd-9148-410d-831e-702439461a8e");

		public static readonly Guid MFT_CODEC_MERIT_Attribute = new Guid("88a7cb15-7b07-4a34-9128-e64c6703c4d3");

		public static readonly Guid MFT_ENUM_TRANSCODE_ONLY_ATTRIBUTE = new Guid("111ea8cd-b62a-4bdb-89f6-67ffcdc2458b");

		[FieldDescription("PMP Host Context")]
		public static readonly Guid MF_PD_PMPHOST_CONTEXT = new Guid("6c990d31-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("App Context")]
		public static readonly Guid MF_PD_APP_CONTEXT = new Guid("6c990d32-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Duration")]
		public static readonly Guid MF_PD_DURATION = new Guid("6c990d33-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Total File Size")]
		public static readonly Guid MF_PD_TOTAL_FILE_SIZE = new Guid("6c990d34-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Audio encoding bitrate")]
		public static readonly Guid MF_PD_AUDIO_ENCODING_BITRATE = new Guid("6c990d35-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Video Encoding Bitrate")]
		public static readonly Guid MF_PD_VIDEO_ENCODING_BITRATE = new Guid("6c990d36-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("MIME Type")]
		public static readonly Guid MF_PD_MIME_TYPE = new Guid("6c990d37-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Last Modified Time")]
		public static readonly Guid MF_PD_LAST_MODIFIED_TIME = new Guid("6c990d38-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Element ID")]
		public static readonly Guid MF_PD_PLAYBACK_ELEMENT_ID = new Guid("6c990d39-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Preferred Language")]
		public static readonly Guid MF_PD_PREFERRED_LANGUAGE = new Guid("6c990d3a-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Playback boundary time")]
		public static readonly Guid MF_PD_PLAYBACK_BOUNDARY_TIME = new Guid("6c990d3b-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Audio is variable bitrate")]
		public static readonly Guid MF_PD_AUDIO_ISVARIABLEBITRATE = new Guid("33026ee0-e387-4582-ae0a-34a2ad3baa18");

		[FieldDescription("Major Media Type")]
		public static readonly Guid MF_MT_MAJOR_TYPE = new Guid("48eba18e-f8c9-4687-bf11-0a74c9f96a8f");

		[FieldDescription("Media Subtype")]
		public static readonly Guid MF_MT_SUBTYPE = new Guid("f7e34c9a-42e8-4714-b74b-cb29d72c35e5");

		[FieldDescription("Audio block alignment")]
		public static readonly Guid MF_MT_AUDIO_BLOCK_ALIGNMENT = new Guid("322de230-9eeb-43bd-ab7a-ff412251541d");

		[FieldDescription("Audio average bytes per second")]
		public static readonly Guid MF_MT_AUDIO_AVG_BYTES_PER_SECOND = new Guid("1aab75c8-cfef-451c-ab95-ac034b8e1731");

		[FieldDescription("Audio number of channels")]
		public static readonly Guid MF_MT_AUDIO_NUM_CHANNELS = new Guid("37e48bf5-645e-4c5b-89de-ada9e29b696a");

		[FieldDescription("Audio samples per second")]
		public static readonly Guid MF_MT_AUDIO_SAMPLES_PER_SECOND = new Guid("5faeeae7-0290-4c31-9e8a-c534f68d9dba");

		[FieldDescription("Audio bits per sample")]
		public static readonly Guid MF_MT_AUDIO_BITS_PER_SAMPLE = new Guid("f2deb57f-40fa-4764-aa33-ed4f2d1ff669");

		[FieldDescription("Enable Hardware Transforms")]
		public static readonly Guid MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS = new Guid("a634a91c-822b-41b9-a494-4de4643612b0");

		[FieldDescription("Disable Sink Writer Throttling")]
		public static readonly Guid MF_SINK_WRITER_DISABLE_THROTTLING = new Guid("08b845d8-2b74-4afe-9d53-be16d2d5ae4f");

		[FieldDescription("User data")]
		public static readonly Guid MF_MT_USER_DATA = new Guid("b6bc765f-4c3b-40a4-bd51-2535b66fe09d");

		[FieldDescription("All samples independent")]
		public static readonly Guid MF_MT_ALL_SAMPLES_INDEPENDENT = new Guid("c9173739-5e56-461c-b713-46fb995cb95f");

		[FieldDescription("Fixed size samples")]
		public static readonly Guid MF_MT_FIXED_SIZE_SAMPLES = new Guid("b8ebefaf-b718-4e04-b0a9-116775e3321b");

		[FieldDescription("DirectShow Format Guid")]
		public static readonly Guid MF_MT_AM_FORMAT_TYPE = new Guid("73d1072d-1870-4174-a063-29ff4ff6c11e");

		[FieldDescription("Preferred legacy format structure")]
		public static readonly Guid MF_MT_AUDIO_PREFER_WAVEFORMATEX = new Guid("a901aaba-e037-458a-bdf6-545be2074042");

		[FieldDescription("Is Compressed")]
		public static readonly Guid MF_MT_COMPRESSED = new Guid("3afd0cee-18f2-4ba5-a110-8bea502e1f92");

		[FieldDescription("Average bitrate")]
		public static readonly Guid MF_MT_AVG_BITRATE = new Guid("20332624-fb0d-4d9e-bd0d-cbf6786c102e");

		[FieldDescription("AAC payload type")]
		public static readonly Guid MF_MT_AAC_PAYLOAD_TYPE = new Guid("bfbabe79-7434-4d1c-94f0-72a3b9e17188");

		[FieldDescription("AAC Audio Profile Level Indication")]
		public static readonly Guid MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION = new Guid("7632f0e6-9538-4d61-acda-ea29c8c14456");
	}
	public static class MediaFoundationErrors
	{
		public const int MF_E_PLATFORM_NOT_INITIALIZED = -1072875856;

		public const int MF_E_BUFFERTOOSMALL = -1072875855;

		public const int MF_E_INVALIDREQUEST = -1072875854;

		public const int MF_E_INVALIDSTREAMNUMBER = -1072875853;

		public const int MF_E_INVALIDMEDIATYPE = -1072875852;

		public const int MF_E_NOTACCEPTING = -1072875851;

		public const int MF_E_NOT_INITIALIZED = -1072875850;

		public const int MF_E_UNSUPPORTED_REPRESENTATION = -1072875849;

		public const int MF_E_NO_MORE_TYPES = -1072875847;

		public const int MF_E_UNSUPPORTED_SERVICE = -1072875846;

		public const int MF_E_UNEXPECTED = -1072875845;

		public const int MF_E_INVALIDNAME = -1072875844;

		public const int MF_E_INVALIDTYPE = -1072875843;

		public const int MF_E_INVALID_FILE_FORMAT = -1072875842;

		public const int MF_E_INVALIDINDEX = -1072875841;

		public const int MF_E_INVALID_TIMESTAMP = -1072875840;

		public const int MF_E_UNSUPPORTED_SCHEME = -1072875837;

		public const int MF_E_UNSUPPORTED_BYTESTREAM_TYPE = -1072875836;

		public const int MF_E_UNSUPPORTED_TIME_FORMAT = -1072875835;

		public const int MF_E_NO_SAMPLE_TIMESTAMP = -1072875832;

		public const int MF_E_NO_SAMPLE_DURATION = -1072875831;

		public const int MF_E_INVALID_STREAM_DATA = -1072875829;

		public const int MF_E_RT_UNAVAILABLE = -1072875825;

		public const int MF_E_UNSUPPORTED_RATE = -1072875824;

		public const int MF_E_THINNING_UNSUPPORTED = -1072875823;

		public const int MF_E_REVERSE_UNSUPPORTED = -1072875822;

		public const int MF_E_UNSUPPORTED_RATE_TRANSITION = -1072875821;

		public const int MF_E_RATE_CHANGE_PREEMPTED = -1072875820;

		public const int MF_E_NOT_FOUND = -1072875819;

		public const int MF_E_NOT_AVAILABLE = -1072875818;

		public const int MF_E_NO_CLOCK = -1072875817;

		public const int MF_S_MULTIPLE_BEGIN = 866008;

		public const int MF_E_MULTIPLE_BEGIN = -1072875815;

		public const int MF_E_MULTIPLE_SUBSCRIBERS = -1072875814;

		public const int MF_E_TIMER_ORPHANED = -1072875813;

		public const int MF_E_STATE_TRANSITION_PENDING = -1072875812;

		public const int MF_E_UNSUPPORTED_STATE_TRANSITION = -1072875811;

		public const int MF_E_UNRECOVERABLE_ERROR_OCCURRED = -1072875810;

		public const int MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS = -1072875809;

		public const int MF_E_SAMPLE_NOT_WRITABLE = -1072875808;

		public const int MF_E_INVALID_KEY = -1072875806;

		public const int MF_E_BAD_STARTUP_VERSION = -1072875805;

		public const int MF_E_UNSUPPORTED_CAPTION = -1072875804;

		public const int MF_E_INVALID_POSITION = -1072875803;

		public const int MF_E_ATTRIBUTENOTFOUND = -1072875802;

		public const int MF_E_PROPERTY_TYPE_NOT_ALLOWED = -1072875801;

		public const int MF_E_PROPERTY_TYPE_NOT_SUPPORTED = -1072875800;

		public const int MF_E_PROPERTY_EMPTY = -1072875799;

		public const int MF_E_PROPERTY_NOT_EMPTY = -1072875798;

		public const int MF_E_PROPERTY_VECTOR_NOT_ALLOWED = -1072875797;

		public const int MF_E_PROPERTY_VECTOR_REQUIRED = -1072875796;

		public const int MF_E_OPERATION_CANCELLED = -1072875795;

		public const int MF_E_BYTESTREAM_NOT_SEEKABLE = -1072875794;

		public const int MF_E_DISABLED_IN_SAFEMODE = -1072875793;

		public const int MF_E_CANNOT_PARSE_BYTESTREAM = -1072875792;

		public const int MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS = -1072875791;

		public const int MF_E_MEDIAPROC_WRONGSTATE = -1072875790;

		public const int MF_E_RT_THROUGHPUT_NOT_AVAILABLE = -1072875789;

		public const int MF_E_RT_TOO_MANY_CLASSES = -1072875788;

		public const int MF_E_RT_WOULDBLOCK = -1072875787;

		public const int MF_E_NO_BITPUMP = -1072875786;

		public const int MF_E_RT_OUTOFMEMORY = -1072875785;

		public const int MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED = -1072875784;

		public const int MF_E_INSUFFICIENT_BUFFER = -1072860816;

		public const int MF_E_CANNOT_CREATE_SINK = -1072875782;

		public const int MF_E_BYTESTREAM_UNKNOWN_LENGTH = -1072875781;

		public const int MF_E_SESSION_PAUSEWHILESTOPPED = -1072875780;

		public const int MF_S_ACTIVATE_REPLACED = 866045;

		public const int MF_E_FORMAT_CHANGE_NOT_SUPPORTED = -1072875778;

		public const int MF_E_INVALID_WORKQUEUE = -1072875777;

		public const int MF_E_DRM_UNSUPPORTED = -1072875776;

		public const int MF_E_UNAUTHORIZED = -1072875775;

		public const int MF_E_OUT_OF_RANGE = -1072875774;

		public const int MF_E_INVALID_CODEC_MERIT = -1072875773;

		public const int MF_E_HW_MFT_FAILED_START_STREAMING = -1072875772;

		public const int MF_S_ASF_PARSEINPROGRESS = 1074608792;

		public const int MF_E_ASF_PARSINGINCOMPLETE = -1072874856;

		public const int MF_E_ASF_MISSINGDATA = -1072874855;

		public const int MF_E_ASF_INVALIDDATA = -1072874854;

		public const int MF_E_ASF_OPAQUEPACKET = -1072874853;

		public const int MF_E_ASF_NOINDEX = -1072874852;

		public const int MF_E_ASF_OUTOFRANGE = -1072874851;

		public const int MF_E_ASF_INDEXNOTLOADED = -1072874850;

		public const int MF_E_ASF_TOO_MANY_PAYLOADS = -1072874849;

		public const int MF_E_ASF_UNSUPPORTED_STREAM_TYPE = -1072874848;

		public const int MF_E_ASF_DROPPED_PACKET = -1072874847;

		public const int MF_E_NO_EVENTS_AVAILABLE = -1072873856;

		public const int MF_E_INVALID_STATE_TRANSITION = -1072873854;

		public const int MF_E_END_OF_STREAM = -1072873852;

		public const int MF_E_SHUTDOWN = -1072873851;

		public const int MF_E_MP3_NOTFOUND = -1072873850;

		public const int MF_E_MP3_OUTOFDATA = -1072873849;

		public const int MF_E_MP3_NOTMP3 = -1072873848;

		public const int MF_E_MP3_NOTSUPPORTED = -1072873847;

		public const int MF_E_NO_DURATION = -1072873846;

		public const int MF_E_INVALID_FORMAT = -1072873844;

		public const int MF_E_PROPERTY_NOT_FOUND = -1072873843;

		public const int MF_E_PROPERTY_READ_ONLY = -1072873842;

		public const int MF_E_PROPERTY_NOT_ALLOWED = -1072873841;

		public const int MF_E_MEDIA_SOURCE_NOT_STARTED = -1072873839;

		public const int MF_E_UNSUPPORTED_FORMAT = -1072873832;

		public const int MF_E_MP3_BAD_CRC = -1072873831;

		public const int MF_E_NOT_PROTECTED = -1072873830;

		public const int MF_E_MEDIA_SOURCE_WRONGSTATE = -1072873829;

		public const int MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED = -1072873828;

		public const int MF_E_CANNOT_FIND_KEYFRAME_SAMPLE = -1072873827;

		public const int MF_E_NETWORK_RESOURCE_FAILURE = -1072872856;

		public const int MF_E_NET_WRITE = -1072872855;

		public const int MF_E_NET_READ = -1072872854;

		public const int MF_E_NET_REQUIRE_NETWORK = -1072872853;

		public const int MF_E_NET_REQUIRE_ASYNC = -1072872852;

		public const int MF_E_NET_BWLEVEL_NOT_SUPPORTED = -1072872851;

		public const int MF_E_NET_STREAMGROUPS_NOT_SUPPORTED = -1072872850;

		public const int MF_E_NET_MANUALSS_NOT_SUPPORTED = -1072872849;

		public const int MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR = -1072872848;

		public const int MF_E_NET_CACHESTREAM_NOT_FOUND = -1072872847;

		public const int MF_I_MANUAL_PROXY = 1074610802;

		public const int MF_E_NET_REQUIRE_INPUT = -1072872844;

		public const int MF_E_NET_REDIRECT = -1072872843;

		public const int MF_E_NET_REDIRECT_TO_PROXY = -1072872842;

		public const int MF_E_NET_TOO_MANY_REDIRECTS = -1072872841;

		public const int MF_E_NET_TIMEOUT = -1072872840;

		public const int MF_E_NET_CLIENT_CLOSE = -1072872839;

		public const int MF_E_NET_BAD_CONTROL_DATA = -1072872838;

		public const int MF_E_NET_INCOMPATIBLE_SERVER = -1072872837;

		public const int MF_E_NET_UNSAFE_URL = -1072872836;

		public const int MF_E_NET_CACHE_NO_DATA = -1072872835;

		public const int MF_E_NET_EOL = -1072872834;

		public const int MF_E_NET_BAD_REQUEST = -1072872833;

		public const int MF_E_NET_INTERNAL_SERVER_ERROR = -1072872832;

		public const int MF_E_NET_SESSION_NOT_FOUND = -1072872831;

		public const int MF_E_NET_NOCONNECTION = -1072872830;

		public const int MF_E_NET_CONNECTION_FAILURE = -1072872829;

		public const int MF_E_NET_INCOMPATIBLE_PUSHSERVER = -1072872828;

		public const int MF_E_NET_SERVER_ACCESSDENIED = -1072872827;

		public const int MF_E_NET_PROXY_ACCESSDENIED = -1072872826;

		public const int MF_E_NET_CANNOTCONNECT = -1072872825;

		public const int MF_E_NET_INVALID_PUSH_TEMPLATE = -1072872824;

		public const int MF_E_NET_INVALID_PUSH_PUBLISHING_POINT = -1072872823;

		public const int MF_E_NET_BUSY = -1072872822;

		public const int MF_E_NET_RESOURCE_GONE = -1072872821;

		public const int MF_E_NET_ERROR_FROM_PROXY = -1072872820;

		public const int MF_E_NET_PROXY_TIMEOUT = -1072872819;

		public const int MF_E_NET_SERVER_UNAVAILABLE = -1072872818;

		public const int MF_E_NET_TOO_MUCH_DATA = -1072872817;

		public const int MF_E_NET_SESSION_INVALID = -1072872816;

		public const int MF_E_OFFLINE_MODE = -1072872815;

		public const int MF_E_NET_UDP_BLOCKED = -1072872814;

		public const int MF_E_NET_UNSUPPORTED_CONFIGURATION = -1072872813;

		public const int MF_E_NET_PROTOCOL_DISABLED = -1072872812;

		public const int MF_E_ALREADY_INITIALIZED = -1072871856;

		public const int MF_E_BANDWIDTH_OVERRUN = -1072871855;

		public const int MF_E_LATE_SAMPLE = -1072871854;

		public const int MF_E_FLUSH_NEEDED = -1072871853;

		public const int MF_E_INVALID_PROFILE = -1072871852;

		public const int MF_E_INDEX_NOT_COMMITTED = -1072871851;

		public const int MF_E_NO_INDEX = -1072871850;

		public const int MF_E_CANNOT_INDEX_IN_PLACE = -1072871849;

		public const int MF_E_MISSING_ASF_LEAKYBUCKET = -1072871848;

		public const int MF_E_INVALID_ASF_STREAMID = -1072871847;

		public const int MF_E_STREAMSINK_REMOVED = -1072870856;

		public const int MF_E_STREAMSINKS_OUT_OF_SYNC = -1072870854;

		public const int MF_E_STREAMSINKS_FIXED = -1072870853;

		public const int MF_E_STREAMSINK_EXISTS = -1072870852;

		public const int MF_E_SAMPLEALLOCATOR_CANCELED = -1072870851;

		public const int MF_E_SAMPLEALLOCATOR_EMPTY = -1072870850;

		public const int MF_E_SINK_ALREADYSTOPPED = -1072870849;

		public const int MF_E_ASF_FILESINK_BITRATE_UNKNOWN = -1072870848;

		public const int MF_E_SINK_NO_STREAMS = -1072870847;

		public const int MF_S_SINK_NOT_FINALIZED = 870978;

		public const int MF_E_METADATA_TOO_LONG = -1072870845;

		public const int MF_E_SINK_NO_SAMPLES_PROCESSED = -1072870844;

		public const int MF_E_VIDEO_REN_NO_PROCAMP_HW = -1072869856;

		public const int MF_E_VIDEO_REN_NO_DEINTERLACE_HW = -1072869855;

		public const int MF_E_VIDEO_REN_COPYPROT_FAILED = -1072869854;

		public const int MF_E_VIDEO_REN_SURFACE_NOT_SHARED = -1072869853;

		public const int MF_E_VIDEO_DEVICE_LOCKED = -1072869852;

		public const int MF_E_NEW_VIDEO_DEVICE = -1072869851;

		public const int MF_E_NO_VIDEO_SAMPLE_AVAILABLE = -1072869850;

		public const int MF_E_NO_AUDIO_PLAYBACK_DEVICE = -1072869756;

		public const int MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE = -1072869755;

		public const int MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED = -1072869754;

		public const int MF_E_AUDIO_SERVICE_NOT_RUNNING = -1072869753;

		public const int MF_E_TOPO_INVALID_OPTIONAL_NODE = -1072868850;

		public const int MF_E_TOPO_CANNOT_FIND_DECRYPTOR = -1072868847;

		public const int MF_E_TOPO_CODEC_NOT_FOUND = -1072868846;

		public const int MF_E_TOPO_CANNOT_CONNECT = -1072868845;

		public const int MF_E_TOPO_UNSUPPORTED = -1072868844;

		public const int MF_E_TOPO_INVALID_TIME_ATTRIBUTES = -1072868843;

		public const int MF_E_TOPO_LOOPS_IN_TOPOLOGY = -1072868842;

		public const int MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR = -1072868841;

		public const int MF_E_TOPO_MISSING_STREAM_DESCRIPTOR = -1072868840;

		public const int MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED = -1072868839;

		public const int MF_E_TOPO_MISSING_SOURCE = -1072868838;

		public const int MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED = -1072868837;

		public const int MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID = -1072864852;

		public const int MF_S_SEQUENCER_CONTEXT_CANCELED = 876973;

		public const int MF_E_NO_SOURCE_IN_CACHE = -1072864850;

		public const int MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM = 876975;

		public const int MF_E_TRANSFORM_TYPE_NOT_SET = -1072861856;

		public const int MF_E_TRANSFORM_STREAM_CHANGE = -1072861855;

		public const int MF_E_TRANSFORM_INPUT_REMAINING = -1072861854;

		public const int MF_E_TRANSFORM_PROFILE_MISSING = -1072861853;

		public const int MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT = -1072861852;

		public const int MF_E_TRANSFORM_PROFILE_TRUNCATED = -1072861851;

		public const int MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED = -1072861850;

		public const int MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG = -1072861849;

		public const int MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE = -1072861848;

		public const int MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM = -1072861847;

		public const int MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG = -1072861846;

		public const int MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE = -1072861845;

		public const int MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE = -1072861844;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE = -1072861843;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE = -1072861842;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION = -1072861841;

		public const int MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES = -1072861840;

		public const int MF_E_TRANSFORM_NEED_MORE_INPUT = -1072861838;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG = -1072861837;

		public const int MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING = -1072861836;

		public const int MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT = 879989;

		public const int MF_E_UNSUPPORTED_D3D_TYPE = -1072861834;

		public const int MF_E_TRANSFORM_ASYNC_LOCKED = -1072861833;

		public const int MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER = -1072861832;

		public const int MF_E_LICENSE_INCORRECT_RIGHTS = -1072860856;

		public const int MF_E_LICENSE_OUTOFDATE = -1072860855;

		public const int MF_E_LICENSE_REQUIRED = -1072860854;

		public const int MF_E_DRM_HARDWARE_INCONSISTENT = -1072860853;

		public const int MF_E_NO_CONTENT_PROTECTION_MANAGER = -1072860852;

		public const int MF_E_LICENSE_RESTORE_NO_RIGHTS = -1072860851;

		public const int MF_E_BACKUP_RESTRICTED_LICENSE = -1072860850;

		public const int MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION = -1072860849;

		public const int MF_S_PROTECTION_NOT_REQUIRED = 880976;

		public const int MF_E_COMPONENT_REVOKED = -1072860847;

		public const int MF_E_TRUST_DISABLED = -1072860846;

		public const int MF_E_WMDRMOTA_NO_ACTION = -1072860845;

		public const int MF_E_WMDRMOTA_ACTION_ALREADY_SET = -1072860844;

		public const int MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE = -1072860843;

		public const int MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED = -1072860842;

		public const int MF_E_WMDRMOTA_ACTION_MISMATCH = -1072860841;

		public const int MF_E_WMDRMOTA_INVALID_POLICY = -1072860840;

		public const int MF_E_POLICY_UNSUPPORTED = -1072860839;

		public const int MF_E_OPL_NOT_SUPPORTED = -1072860838;

		public const int MF_E_TOPOLOGY_VERIFICATION_FAILED = -1072860837;

		public const int MF_E_SIGNATURE_VERIFICATION_FAILED = -1072860836;

		public const int MF_E_DEBUGGING_NOT_ALLOWED = -1072860835;

		public const int MF_E_CODE_EXPIRED = -1072860834;

		public const int MF_E_GRL_VERSION_TOO_LOW = -1072860833;

		public const int MF_E_GRL_RENEWAL_NOT_FOUND = -1072860832;

		public const int MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND = -1072860831;

		public const int MF_E_KERNEL_UNTRUSTED = -1072860830;

		public const int MF_E_PEAUTH_UNTRUSTED = -1072860829;

		public const int MF_E_NON_PE_PROCESS = -1072860827;

		public const int MF_E_REBOOT_REQUIRED = -1072860825;

		public const int MF_S_WAIT_FOR_POLICY_SET = 881000;

		public const int MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT = 881001;

		public const int MF_E_GRL_INVALID_FORMAT = -1072860822;

		public const int MF_E_GRL_UNRECOGNIZED_FORMAT = -1072860821;

		public const int MF_E_ALL_PROCESS_RESTART_REQUIRED = -1072860820;

		public const int MF_E_PROCESS_RESTART_REQUIRED = -1072860819;

		public const int MF_E_USERMODE_UNTRUSTED = -1072860818;

		public const int MF_E_PEAUTH_SESSION_NOT_STARTED = -1072860817;

		public const int MF_E_PEAUTH_PUBLICKEY_REVOKED = -1072860815;

		public const int MF_E_GRL_ABSENT = -1072860814;

		public const int MF_S_PE_TRUSTED = 881011;

		public const int MF_E_PE_UNTRUSTED = -1072860812;

		public const int MF_E_PEAUTH_NOT_STARTED = -1072860811;

		public const int MF_E_INCOMPATIBLE_SAMPLE_PROTECTION = -1072860810;

		public const int MF_E_PE_SESSIONS_MAXED = -1072860809;

		public const int MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED = -1072860808;

		public const int MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED = -1072860807;

		public const int MF_E_ITA_UNSUPPORTED_ACTION = -1072860806;

		public const int MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS = -1072860805;

		public const int MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS = -1072860804;

		public const int MF_E_BAD_OPL_STRUCTURE_FORMAT = -1072860803;

		public const int MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID = -1072860802;

		public const int MF_E_NO_PMP_HOST = -1072860801;

		public const int MF_E_ITA_OPL_DATA_NOT_INITIALIZED = -1072860800;

		public const int MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT = -1072860799;

		public const int MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT = -1072860798;

		public const int MF_E_CLOCK_INVALID_CONTINUITY_KEY = -1072849856;

		public const int MF_E_CLOCK_NO_TIME_SOURCE = -1072849855;

		public const int MF_E_CLOCK_STATE_ALREADY_SET = -1072849854;

		public const int MF_E_CLOCK_NOT_SIMPLE = -1072849853;

		public const int MF_S_CLOCK_STOPPED = 891972;

		public const int MF_E_NO_MORE_DROP_MODES = -1072848856;

		public const int MF_E_NO_MORE_QUALITY_LEVELS = -1072848855;

		public const int MF_E_DROPTIME_NOT_SUPPORTED = -1072848854;

		public const int MF_E_QUALITYKNOB_WAIT_LONGER = -1072848853;

		public const int MF_E_QM_INVALIDSTATE = -1072848852;

		public const int MF_E_TRANSCODE_NO_CONTAINERTYPE = -1072847856;

		public const int MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS = -1072847855;

		public const int MF_E_TRANSCODE_NO_MATCHING_ENCODER = -1072847854;

		public const int MF_E_ALLOCATOR_NOT_INITIALIZED = -1072846856;

		public const int MF_E_ALLOCATOR_NOT_COMMITED = -1072846855;

		public const int MF_E_ALLOCATOR_ALREADY_COMMITED = -1072846854;

		public const int MF_E_STREAM_ERROR = -1072846853;

		public const int MF_E_INVALID_STREAM_STATE = -1072846852;

		public const int MF_E_HW_STREAM_NOT_CONNECTED = -1072846851;
	}
	public static class MediaFoundationApi
	{
		private static bool initialized;

		public static void Startup()
		{
			if (!initialized)
			{
				int num = 2;
				OperatingSystem oSVersion = Environment.OSVersion;
				if (oSVersion.Version.Major == 6 && oSVersion.Version.Minor == 0)
				{
					num = 1;
				}
				MediaFoundationInterop.MFStartup((num << 16) | 0x70);
				initialized = true;
			}
		}

		public static IEnumerable<IMFActivate> EnumerateTransforms(Guid category)
		{
			MediaFoundationInterop.MFTEnumEx(category, _MFT_ENUM_FLAG.MFT_ENUM_FLAG_ALL, null, null, out var interfacesPointer, out var pcMFTActivate);
			IMFActivate[] array = new IMFActivate[pcMFTActivate];
			for (int i = 0; i < pcMFTActivate; i++)
			{
				IntPtr pUnk = Marshal.ReadIntPtr(new IntPtr(interfacesPointer.ToInt64() + i * Marshal.SizeOf(interfacesPointer)));
				array[i] = (IMFActivate)Marshal.GetObjectForIUnknown(pUnk);
			}
			IMFActivate[] array2 = array;
			for (int j = 0; j < array2.Length; j++)
			{
				yield return array2[j];
			}
			Marshal.FreeCoTaskMem(interfacesPointer);
		}

		public static void Shutdown()
		{
			if (initialized)
			{
				MediaFoundationInterop.MFShutdown();
				initialized = false;
			}
		}

		public static IMFMediaType CreateMediaType()
		{
			MediaFoundationInterop.MFCreateMediaType(out var ppMFType);
			return ppMFType;
		}

		public static IMFMediaType CreateMediaTypeFromWaveFormat(WaveFormat waveFormat)
		{
			IMFMediaType iMFMediaType = CreateMediaType();
			try
			{
				MediaFoundationInterop.MFInitMediaTypeFromWaveFormatEx(iMFMediaType, waveFormat, Marshal.SizeOf<WaveFormat>(waveFormat));
				return iMFMediaType;
			}
			catch (Exception)
			{
				Marshal.ReleaseComObject(iMFMediaType);
				throw;
			}
		}

		public static IMFMediaBuffer CreateMemoryBuffer(int bufferSize)
		{
			MediaFoundationInterop.MFCreateMemoryBuffer(bufferSize, out var ppBuffer);
			return ppBuffer;
		}

		public static IMFSample CreateSample()
		{
			MediaFoundationInterop.MFCreateSample(out var ppIMFSample);
			return ppIMFSample;
		}

		public static IMFAttributes CreateAttributes(int initialSize)
		{
			MediaFoundationInterop.MFCreateAttributes(out var ppMFAttributes, initialSize);
			return ppMFAttributes;
		}

		public static IMFByteStream CreateByteStream(object stream)
		{
			if (stream is IStream)
			{
				MediaFoundationInterop.MFCreateMFByteStreamOnStream(stream as IStream, out var ppByteStream);
				return ppByteStream;
			}
			throw new ArgumentException("Stream must be IStream in desktop apps");
		}

		public static IMFSourceReader CreateSourceReaderFromByteStream(IMFByteStream byteStream)
		{
			MediaFoundationInterop.MFCreateSourceReaderFromByteStream(byteStream, null, out var ppSourceReader);
			return ppSourceReader;
		}
	}
	public static class MediaFoundationInterop
	{
		public const int MF_SOURCE_READER_ALL_STREAMS = -2;

		public const int MF_SOURCE_READER_FIRST_AUDIO_STREAM = -3;

		public const int MF_SOURCE_READER_FIRST_VIDEO_STREAM = -4;

		public const int MF_SOURCE_READER_MEDIASOURCE = -1;

		public const int MF_SDK_VERSION = 2;

		public const int MF_API_VERSION = 112;

		public const int MF_VERSION = 131184;

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFStartup(int version, int dwFlags = 0);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFShutdown();

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateMediaType(out IMFMediaType ppMFType);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFInitMediaTypeFromWaveFormatEx([In] IMFMediaType pMFType, [In] WaveFormat pWaveFormat, [In] int cbBufSize);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateWaveFormatExFromMFMediaType(IMFMediaType pMFType, ref IntPtr ppWF, ref int pcbSize, int flags = 0);

		[DllImport("mfreadwrite.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateSourceReaderFromURL([In][MarshalAs(UnmanagedType.LPWStr)] string pwszURL, [In] IMFAttributes pAttributes, [MarshalAs(UnmanagedType.Interface)] out IMFSourceReader ppSourceReader);

		[DllImport("mfreadwrite.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateSourceReaderFromByteStream([In] IMFByteStream pByteStream, [In] IMFAttributes pAttributes, [MarshalAs(UnmanagedType.Interface)] out IMFSourceReader ppSourceReader);

		[DllImport("mfreadwrite.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateSinkWriterFromURL([In][MarshalAs(UnmanagedType.LPWStr)] string pwszOutputURL, [In] IMFByteStream pByteStream, [In] IMFAttributes pAttributes, out IMFSinkWriter ppSinkWriter);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateMFByteStreamOnStreamEx([MarshalAs(UnmanagedType.IUnknown)] object punkStream, out IMFByteStream ppByteStream);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateMFByteStreamOnStream([In] IStream punkStream, out IMFByteStream ppByteStream);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFTEnumEx([In] Guid guidCategory, [In] _MFT_ENUM_FLAG flags, [In] MFT_REGISTER_TYPE_INFO pInputType, [In] MFT_REGISTER_TYPE_INFO pOutputType, out IntPtr pppMFTActivate, out int pcMFTActivate);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateSample(out IMFSample ppIMFSample);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateMemoryBuffer(int cbMaxLength, out IMFMediaBuffer ppBuffer);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateAttributes([MarshalAs(UnmanagedType.Interface)] out IMFAttributes ppMFAttributes, [In] int cInitialSize);

		[DllImport("mf.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFTranscodeGetAudioOutputAvailableTypes([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidSubType, [In] _MFT_ENUM_FLAG dwMFTFlags, [In] IMFAttributes pCodecConfig, [MarshalAs(UnmanagedType.Interface)] out IMFCollection ppAvailableTypes);
	}
	public abstract class MediaFoundationTransform : IWaveProvider, IDisposable
	{
		protected readonly IWaveProvider sourceProvider;

		protected readonly WaveFormat outputWaveFormat;

		private readonly byte[] sourceBuffer;

		private byte[] outputBuffer;

		private int outputBufferOffset;

		private int outputBufferCount;

		private IMFTransform transform;

		private bool disposed;

		private long inputPosition;

		private long outputPosition;

		private bool initializedForStreaming;

		public WaveFormat WaveFormat => outputWaveFormat;

		public MediaFoundationTransform(IWaveProvider sourceProvider, WaveFormat outputFormat)
		{
			outputWaveFormat = outputFormat;
			this.sourceProvider = sourceProvider;
			sourceBuffer = new byte[sourceProvider.WaveFormat.AverageBytesPerSecond];
			outputBuffer = new byte[outputWaveFormat.AverageBytesPerSecond + outputWaveFormat.BlockAlign];
		}

		private void InitializeTransformForStreaming()
		{
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_COMMAND_FLUSH, IntPtr.Zero);
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_BEGIN_STREAMING, IntPtr.Zero);
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_START_OF_STREAM, IntPtr.Zero);
			initializedForStreaming = true;
		}

		protected abstract IMFTransform CreateTransform();

		protected virtual void Dispose(bool disposing)
		{
			if (transform != null)
			{
				Marshal.ReleaseComObject(transform);
			}
		}

		public void Dispose()
		{
			if (!disposed)
			{
				disposed = true;
				Dispose(disposing: true);
				GC.SuppressFinalize(this);
			}
		}

		~MediaFoundationTransform()
		{
			Dispose(disposing: false);
		}

		public int Read(byte[] buffer, int offset, int count)
		{
			if (transform == null)
			{
				transform = CreateTransform();
				InitializeTransformForStreaming();
			}
			int i = 0;
			if (outputBufferCount > 0)
			{
				i += ReadFromOutputBuffer(buffer, offset, count - i);
			}
			for (; i < count; i += ReadFromOutputBuffer(buffer, offset + i, count - i))
			{
				IMFSample iMFSample = ReadFromSource();
				if (iMFSample == null)
				{
					EndStreamAndDrain();
					i += ReadFromOutputBuffer(buffer, offset + i, count - i);
					ClearOutputBuffer();
					break;
				}
				if (!initializedForStreaming)
				{
					InitializeTransformForStreaming();
				}
				transform.ProcessInput(0, iMFSample, 0);
				Marshal.ReleaseComObject(iMFSample);
				ReadFromTransform();
			}
			return i;
		}

		private void EndStreamAndDrain()
		{
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_END_OF_STREAM, IntPtr.Zero);
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_COMMAND_DRAIN, IntPtr.Zero);
			int num;
			do
			{
				num = ReadFromTransform();
			}
			while (num > 0);
			inputPosition = 0L;
			outputPosition = 0L;
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_END_STREAMING, IntPtr.Zero);
			initializedForStreaming = false;
		}

		private void ClearOutputBuffer()
		{
			outputBufferCount = 0;
			outputBufferOffset = 0;
		}

		private int ReadFromTransform()
		{
			MFT_OUTPUT_DATA_BUFFER[] array = new MFT_OUTPUT_DATA_BUFFER[1];
			IMFSample iMFSample = MediaFoundationApi.CreateSample();
			IMFMediaBuffer iMFMediaBuffer = MediaFoundationApi.CreateMemoryBuffer(outputBuffer.Length);
			iMFSample.AddBuffer(iMFMediaBuffer);
			iMFSample.SetSampleTime(outputPosition);
			array[0].pSample = iMFSample;
			_MFT_PROCESS_OUTPUT_STATUS pdwStatus;
			int num = transform.ProcessOutput(_MFT_PROCESS_OUTPUT_FLAGS.None, 1, array, out pdwStatus);
			switch (num)
			{
			case -1072861838:
				Marshal.ReleaseComObject(iMFMediaBuffer);
				Marshal.ReleaseComObject(iMFSample);
				return 0;
			default:
				Marshal.ThrowExceptionForHR(num);
				break;
			case 0:
				break;
			}
			array[0].pSample.ConvertToContiguousBuffer(out var ppBuffer);
			ppBuffer.Lock(out var ppbBuffer, out var _, out var pcbCurrentLength);
			outputBuffer = BufferHelpers.Ensure(outputBuffer, pcbCurrentLength);
			Marshal.Copy(ppbBuffer, outputBuffer, 0, pcbCurrentLength);
			outputBufferOffset = 0;
			outputBufferCount = pcbCurrentLength;
			ppBuffer.Unlock();
			outputPosition += BytesToNsPosition(outputBufferCount, WaveFormat);
			Marshal.ReleaseComObject(iMFMediaBuffer);
			iMFSample.RemoveAllBuffers();
			Marshal.ReleaseComObject(iMFSample);
			Marshal.ReleaseComObject(ppBuffer);
			return pcbCurrentLength;
		}

		private static long BytesToNsPosition(int bytes, WaveFormat waveFormat)
		{
			return 10000000L * (long)bytes / waveFormat.AverageBytesPerSecond;
		}

		private IMFSample ReadFromSource()
		{
			int num = sourceProvider.Read(sourceBuffer, 0, sourceBuffer.Length);
			if (num == 0)
			{
				return null;
			}
			IMFMediaBuffer iMFMediaBuffer = MediaFoundationApi.CreateMemoryBuffer(num);
			iMFMediaBuffer.Lock(out var ppbBuffer, out var _, out var _);
			Marshal.Copy(sourceBuffer, 0, ppbBuffer, num);
			iMFMediaBuffer.Unlock();
			iMFMediaBuffer.SetCurrentLength(num);
			IMFSample iMFSample = MediaFoundationApi.CreateSample();
			iMFSample.AddBuffer(iMFMediaBuffer);
			iMFSample.SetSampleTime(inputPosition);
			long num2 = BytesToNsPosition(num, sourceProvider.WaveFormat);
			iMFSample.SetSampleDuration(num2);
			inputPosition += num2;
			Marshal.ReleaseComObject(iMFMediaBuffer);
			return iMFSample;
		}

		private int ReadFromOutputBuffer(byte[] buffer, int offset, int needed)
		{
			int num = Math.Min(needed, outputBufferCount);
			Array.Copy(outputBuffer, outputBufferOffset, buffer, offset, num);
			outputBufferOffset += num;
			outputBufferCount -= num;
			if (outputBufferCount == 0)
			{
				outputBufferOffset = 0;
			}
			return num;
		}

		public void Reposition()
		{
			if (initializedForStreaming)
			{
				EndStreamAndDrain();
				ClearOutputBuffer();
				InitializeTransformForStreaming();
			}
		}
	}
	public static class MediaFoundationTransformCategories
	{
		[FieldDescription("Video Decoder")]
		public static readonly Guid VideoDecoder = new Guid("{d6c02d4b-6833-45b4-971a-05a4b04bab91}");

		[FieldDescription("Video Encoder")]
		public static readonly Guid VideoEncoder = new Guid("{f79eac7d-e545-4387-bdee-d647d7bde42a}");

		[FieldDescription("Video Effect")]
		public static readonly Guid VideoEffect = new Guid("{12e17c21-532c-4a6e-8a1c-40825a736397}");

		[FieldDescription("Multiplexer")]
		public static readonly Guid Multiplexer = new Guid("{059c561e-05ae-4b61-b69d-55b61ee54a7b}");

		[FieldDescription("Demultiplexer")]
		public static readonly Guid Demultiplexer = new Guid("{a8700a7a-939b-44c5-99d7-76226b23b3f1}");

		[FieldDescription("Audio Decoder")]
		public static readonly Guid AudioDecoder = new Guid("{9ea73fb4-ef7a-4559-8d5d-719d8f0426c7}");

		[FieldDescription("Audio Encoder")]
		public static readonly Guid AudioEncoder = new Guid("{91c64bd0-f91e-4d8c-9276-db248279d975}");

		[FieldDescription("Audio Effect")]
		public static readonly Guid AudioEffect = new Guid("{11064c48-3648-4ed0-932e-05ce8ac811b7}");

		[FieldDescription("Video Processor")]
		public static readonly Guid VideoProcessor = new Guid("{302EA3FC-AA5F-47f9-9F7A-C2188BB16302}");

		[FieldDescription("Other")]
		public static readonly Guid Other = new Guid("{90175d57-b7ea-4901-aeb3-933a8747756f}");
	}
	public class MediaType
	{
		private readonly IMFMediaType mediaType;

		public int SampleRate
		{
			get
			{
				return GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_SAMPLES_PER_SECOND);
			}
			set
			{
				mediaType.SetUINT32(MediaFoundationAttributes.MF_MT_AUDIO_SAMPLES_PER_SECOND, value);
			}
		}

		public int ChannelCount
		{
			get
			{
				return GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_NUM_CHANNELS);
			}
			set
			{
				mediaType.SetUINT32(MediaFoundationAttributes.MF_MT_AUDIO_NUM_CHANNELS, value);
			}
		}

		public int BitsPerSample
		{
			get
			{
				return GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_BITS_PER_SAMPLE);
			}
			set
			{
				mediaType.SetUINT32(MediaFoundationAttributes.MF_MT_AUDIO_BITS_PER_SAMPLE, value);
			}
		}

		public int AverageBytesPerSecond => GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_AVG_BYTES_PER_SECOND);

		public Guid SubType
		{
			get
			{
				return GetGuid(MediaFoundationAttributes.MF_MT_SUBTYPE);
			}
			set
			{
				mediaType.SetGUID(MediaFoundationAttributes.MF_MT_SUBTYPE, value);
			}
		}

		public Guid MajorType
		{
			get
			{
				return GetGuid(MediaFoundationAttributes.MF_MT_MAJOR_TYPE);
			}
			set
			{
				mediaType.SetGUID(MediaFoundationAttributes.MF_MT_MAJOR_TYPE, value);
			}
		}

		public IMFMediaType MediaFoundationObject => mediaType;

		public MediaType(IMFMediaType mediaType)
		{
			this.mediaType = mediaType;
		}

		public MediaType()
		{
			mediaType = MediaFoundationApi.CreateMediaType();
		}

		public MediaType(WaveFormat waveFormat)
		{
			mediaType = MediaFoundationApi.CreateMediaTypeFromWaveFormat(waveFormat);
		}

		private int GetUInt32(Guid key)
		{
			mediaType.GetUINT32(key, out var punValue);
			return punValue;
		}

		private Guid GetGuid(Guid key)
		{
			mediaType.GetGUID(key, out var pguidValue);
			return pguidValue;
		}

		public int TryGetUInt32(Guid key, int defaultValue = -1)
		{
			int punValue = defaultValue;
			try
			{
				mediaType.GetUINT32(key, out punValue);
			}
			catch (COMException ex)
			{
				if (HResult.GetHResult(ex) != -1072875802)
				{
					if (HResult.GetHResult(ex) == -1072875843)
					{
						throw new ArgumentException("Not a UINT32 parameter");
					}
					throw;
				}
			}
			return punValue;
		}

		public void SetUInt32(Guid key, int value)
		{
			mediaType.SetUINT32(key, value);
		}
	}
	public static class MediaTypes
	{
		public static readonly Guid MFMediaType_Default = new Guid("81A412E6-8103-4B06-857F-1862781024AC");

		[FieldDescription("Audio")]
		public static readonly Guid MFMediaType_Audio = new Guid("73647561-0000-0010-8000-00aa00389b71");

		[FieldDescription("Video")]
		public static readonly Guid MFMediaType_Video = new Guid("73646976-0000-0010-8000-00aa00389b71");

		[FieldDescription("Protected Media")]
		public static readonly Guid MFMediaType_Protected = new Guid("7b4b6fe6-9d04-4494-be14-7e0bd076c8e4");

		[FieldDescription("SAMI captions")]
		public static readonly Guid MFMediaType_SAMI = new Guid("e69669a0-3dcd-40cb-9e2e-3708387c0616");

		[FieldDescription("Script stream")]
		public static readonly Guid MFMediaType_Script = new Guid("72178c22-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("Still image stream")]
		public static readonly Guid MFMediaType_Image = new Guid("72178c23-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("HTML stream")]
		public static readonly Guid MFMediaType_HTML = new Guid("72178c24-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("Binary stream")]
		public static readonly Guid MFMediaType_Binary = new Guid("72178c25-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("File transfer")]
		public static readonly Guid MFMediaType_FileTransfer = new Guid("72178c26-e45b-11d5-bc2a-00b0d0f3f4ab");
	}
	public struct MFT_INPUT_STREAM_INFO
	{
		public long hnsMaxLatency;

		public _MFT_INPUT_STREAM_INFO_FLAGS dwFlags;

		public int cbSize;

		public int cbMaxLookahead;

		public int cbAlignment;
	}
	public enum MFT_MESSAGE_TYPE
	{
		MFT_MESSAGE_COMMAND_FLUSH = 0,
		MFT_MESSAGE_COMMAND_DRAIN = 1,
		MFT_MESSAGE_SET_D3D_MANAGER = 2,
		MFT_MESSAGE_DROP_SAMPLES = 3,
		MFT_MESSAGE_COMMAND_TICK = 4,
		MFT_MESSAGE_NOTIFY_BEGIN_STREAMING = 268435456,
		MFT_MESSAGE_NOTIFY_END_STREAMING = 268435457,
		MFT_MESSAGE_NOTIFY_END_OF_STREAM = 268435458,
		MFT_MESSAGE_NOTIFY_START_OF_STREAM = 268435459,
		MFT_MESSAGE_COMMAND_MARKER = 536870912
	}
	public struct MFT_OUTPUT_DATA_BUFFER
	{
		public int dwStreamID;

		public IMFSample pSample;

		public _MFT_OUTPUT_DATA_BUFFER_FLAGS dwStatus;

		public IMFCollection pEvents;
	}
	public struct MFT_OUTPUT_STREAM_INFO
	{
		public _MFT_OUTPUT_STREAM_INFO_FLAGS dwFlags;

		public int cbSize;

		public int cbAlignment;
	}
	[StructLayout(LayoutKind.Sequential)]
	public class MFT_REGISTER_TYPE_INFO
	{
		public Guid guidMajorType;

		public Guid guidSubtype;
	}
	[StructLayout(LayoutKind.Sequential)]
	public class MF_SINK_WRITER_STATISTICS
	{
		public int cb;

		public long llLastTimestampReceived;

		public long llLastTimestampEncoded;

		public long llLastTimestampProcessed;

		public long llLastStreamTickReceived;

		public long llLastSinkSampleRequest;

		public long qwNumSamplesReceived;

		public long qwNumSamplesEncoded;

		public long qwNumSamplesProcessed;

		public long qwNumStreamTicksReceived;

		public int dwByteCountQueued;

		public long qwByteCountProcessed;

		public int dwNumOutstandingSinkSampleRequests;

		public int dwAverageSampleRateReceived;

		public int dwAverageSampleRateEncoded;

		public int dwAverageSampleRateProcessed;
	}
	public static class TranscodeContainerTypes
	{
		public static readonly Guid MFTranscodeContainerType_ASF = new Guid(1125085038u, 46783, 20417, 160, 189, 158, 228, 110, 238, 42, 251);

		public static readonly Guid MFTranscodeContainerType_MPEG4 = new Guid(3698118749u, 47568, 16623, 189, 53, 250, 98, 44, 26, 178, 138);

		public static readonly Guid MFTranscodeContainerType_MP3 = new Guid(3828922642u, 33777, 19942, 158, 58, 159, 251, 198, 221, 36, 209);

		public static readonly Guid MFTranscodeContainerType_3GP = new Guid(885326183, 17522, 20276, 158, 160, 196, 159, 186, 207, 3, 125);

		public static readonly Guid MFTranscodeContainerType_AC3 = new Guid(1837994435u, 35985, 20177, 135, 66, 140, 52, 125, 91, 68, 208);

		public static readonly Guid MFTranscodeContainerType_ADTS = new Guid(321901181, 3842, 17374, 163, 1, 56, 251, 187, 179, 131, 78);

		public static readonly Guid MFTranscodeContainerType_MPEG2 = new Guid(3217218553u, 31668, 20367, 175, 222, 225, 18, 196, 75, 168, 130);

		public static readonly Guid MFTranscodeContainerType_FMPEG4 = new Guid(2611508977u, 16799, 19319, 161, 224, 53, 149, 157, 157, 64, 4);

		public static readonly Guid MFTranscodeContainerType_WAVE = new Guid(1690518844, 3878, 18241, 190, 99, 135, 189, 248, 187, 147, 91);

		public static readonly Guid MFTranscodeContainerType_AVI = new Guid(2128603311, 16431, 19830, 163, 60, 97, 159, 209, 87, 208, 241);

		public static readonly Guid MFTranscodeContainerType_AMR = new Guid(39672531, 25114, 18267, 150, 77, 102, 177, 200, 36, 240, 121);
	}
	[Flags]
	public enum _MFT_ENUM_FLAG
	{
		None = 0,
		MFT_ENUM_FLAG_SYNCMFT = 1,
		MFT_ENUM_FLAG_ASYNCMFT = 2,
		MFT_ENUM_FLAG_HARDWARE = 4,
		MFT_ENUM_FLAG_FIELDOFUSE = 8,
		MFT_ENUM_FLAG_LOCALMFT = 0x10,
		MFT_ENUM_FLAG_TRANSCODE_ONLY = 0x20,
		MFT_ENUM_FLAG_SORTANDFILTER = 0x40,
		MFT_ENUM_FLAG_ALL = 0x3F
	}
	[Flags]
	public enum _MFT_INPUT_STATUS_FLAGS
	{
		None = 0,
		MFT_INPUT_STATUS_ACCEPT_DATA = 1
	}
	[Flags]
	public enum _MFT_INPUT_STREAM_INFO_FLAGS
	{
		None = 0,
		MFT_INPUT_STREAM_WHOLE_SAMPLES = 1,
		MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 2,
		MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE = 4,
		MFT_INPUT_STREAM_HOLDS_BUFFERS = 8,
		MFT_INPUT_STREAM_DOES_NOT_ADDREF = 0x100,
		MFT_INPUT_STREAM_REMOVABLE = 0x200,
		MFT_INPUT_STREAM_OPTIONAL = 0x400,
		MFT_INPUT_STREAM_PROCESSES_IN_PLACE = 0x800
	}
	[Flags]
	public enum _MFT_OUTPUT_DATA_BUFFER_FLAGS
	{
		None = 0,
		MFT_OUTPUT_DATA_BUFFER_INCOMPLETE = 0x1000000,
		MFT_OUTPUT_DATA_BUFFER_FORMAT_CHANGE = 0x100,
		MFT_OUTPUT_DATA_BUFFER_STREAM_END = 0x200,
		MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE = 0x300
	}
	[Flags]
	public enum _MFT_OUTPUT_STATUS_FLAGS
	{
		None = 0,
		MFT_OUTPUT_STATUS_SAMPLE_READY = 1
	}
	[Flags]
	public enum _MFT_OUTPUT_STREAM_INFO_FLAGS
	{
		None = 0,
		MFT_OUTPUT_STREAM_WHOLE_SAMPLES = 1,
		MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 2,
		MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE = 4,
		MFT_OUTPUT_STREAM_DISCARDABLE = 8,
		MFT_OUTPUT_STREAM_OPTIONAL = 0x10,
		MFT_OUTPUT_STREAM_PROVIDES_SAMPLES = 0x100,
		MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES = 0x200,
		MFT_OUTPUT_STREAM_LAZY_READ = 0x400,
		MFT_OUTPUT_STREAM_REMOVABLE = 0x800
	}
	[Flags]
	public enum _MFT_PROCESS_OUTPUT_FLAGS
	{
		None = 0,
		MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = 1,
		MFT_PROCESS_OUTPUT_REGENERATE_LAST_OUTPUT = 2
	}
	[Flags]
	public enum _MFT_PROCESS_OUTPUT_STATUS
	{
		None = 0,
		MFT_PROCESS_OUTPUT_STATUS_NEW_STREAMS = 0x100
	}
	[Flags]
	public enum _MFT_SET_TYPE_FLAGS
	{
		None = 0,
		MFT_SET_TYPE_TEST_ONLY = 1
	}
}
namespace NAudio.Dmo
{
	public class DmoDescriptor
	{
		public string Name { get; private set; }

		public Guid Clsid { get; private set; }

		public DmoDescriptor(string name, Guid clsid)
		{
			Name = name;
			Clsid = clsid;
		}
	}
	public class DmoEnumerator
	{
		public static IEnumerable<DmoDescriptor> GetAudioEffectNames()
		{
			return GetDmos(DmoGuids.DMOCATEGORY_AUDIO_EFFECT);
		}

		public static IEnumerable<DmoDescriptor> GetAudioEncoderNames()
		{
			return GetDmos(DmoGuids.DMOCATEGORY_AUDIO_ENCODER);
		}

		public static IEnumerable<DmoDescriptor> GetAudioDecoderNames()
		{
			return GetDmos(DmoGuids.DMOCATEGORY_AUDIO_DECODER);
		}

		private static IEnumerable<DmoDescriptor> GetDmos(Guid category)
		{
			Marshal.ThrowExceptionForHR(DmoInterop.DMOEnum(ref category, DmoEnumFlags.None, 0, null, 0, null, out var enumDmo));
			int itemsFetched;
			do
			{
				enumDmo.Next(1, out var clsid, out var name, out itemsFetched);
				if (itemsFetched == 1)
				{
					string name2 = Marshal.PtrToStringUni(name);
					Marshal.FreeCoTaskMem(name);
					yield return new DmoDescriptor(name2, clsid);
				}
			}
			while (itemsFetched > 0);
		}
	}
	[Flags]
	internal enum DmoEnumFlags
	{
		None = 0,
		DMO_ENUMF_INCLUDE_KEYED = 1
	}
	internal static class DmoGuids
	{
		public static readonly Guid DMOCATEGORY_AUDIO_DECODER = new Guid("57f2db8b-e6bb-4513-9d43-dcd2a6593125");

		public static readonly Guid DMOCATEGORY_AUDIO_ENCODER = new Guid("33D9A761-90C8-11d0-BD43-00A0C911CE86");

		public static readonly Guid DMOCATEGORY_VIDEO_DECODER = new Guid("4a69b442-28be-4991-969c-b500adf5d8a8");

		public static readonly Guid DMOCATEGORY_VIDEO_ENCODER = new Guid("33D9A760-90C8-11d0-BD43-00A0C911CE86");

		public static readonly Guid DMOCATEGORY_AUDIO_EFFECT = new Guid("f3602b3f-0592-48df-a4cd-674721e7ebeb");

		public static readonly Guid DMOCATEGORY_VIDEO_EFFECT = new Guid("d990ee14-776c-4723-be46-3da2f56f10b9");

		public static readonly Guid DMOCATEGORY_AUDIO_CAPTURE_EFFECT = new Guid("f665aaba-3e09-4920-aa5f-219811148f09");
	}
	internal static class DmoMediaTypeGuids
	{
		public static readonly Guid FORMAT_None = new Guid("0F6417D6-C318-11D0-A43F-00A0C9223196");

		public static readonly Guid FORMAT_VideoInfo = new Guid("05589f80-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_VideoInfo2 = new Guid("F72A76A0-EB0A-11d0-ACE4-0000C0CC16BA");

		public static readonly Guid FORMAT_WaveFormatEx = new Guid("05589f81-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_MPEGVideo = new Guid("05589f82-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_MPEGStreams = new Guid("05589f83-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_DvInfo = new Guid("05589f84-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_525WSS = new Guid("C7ECF04D-4582-4869-9ABB-BFB523B62EDF");
	}
	internal enum DmoHResults
	{
		DMO_E_INVALIDSTREAMINDEX = -2147220991,
		DMO_E_INVALIDTYPE,
		DMO_E_TYPE_NOT_SET,
		DMO_E_NOTACCEPTING,
		DMO_E_TYPE_NOT_ACCEPTED,
		DMO_E_NO_MORE_ITEMS
	}
	[Flags]
	public enum DmoInPlaceProcessFlags
	{
		Normal = 0,
		Zero = 1
	}
	public enum DmoInPlaceProcessReturn
	{
		Normal,
		HasEffectTail
	}
	[Flags]
	public enum DmoInputDataBufferFlags
	{
		None = 0,
		SyncPoint = 1,
		Time = 2,
		TimeLength = 4
	}
	[Flags]
	internal enum DmoInputStatusFlags
	{
		None = 0,
		DMO_INPUT_STATUSF_ACCEPT_DATA = 1
	}
	internal static class DmoInterop
	{
		[DllImport("msdmo.dll")]
		public static extern int DMOEnum([In] ref Guid guidCategory, DmoEnumFlags flags, int inTypes, [In] DmoPartialMediaType[] inTypesArray, int outTypes, [In] DmoPartialMediaType[] outTypesArray, out IEnumDmo enumDmo);

		[DllImport("msdmo.dll")]
		public static extern int MoFreeMediaType([In] ref DmoMediaType mediaType);

		[DllImport("msdmo.dll")]
		public static extern int MoInitMediaType([In][Out] ref DmoMediaType mediaType, int formatBlockBytes);

		[DllImport("msdmo.dll")]
		public static extern int DMOGetName([In] ref Guid clsidDMO, [Out] StringBuilder name);
	}
	public struct DmoMediaType
	{
		private Guid majortype;

		private Guid subtype;

		private bool bFixedSizeSamples;

		private bool bTemporalCompression;

		private int lSampleSize;

		private Guid formattype;

		private IntPtr pUnk;

		private int cbFormat;

		private IntPtr pbFormat;

		public Guid MajorType => majortype;

		public string MajorTypeName => MediaTypes.GetMediaTypeName(majortype);

		public Guid SubType => subtype;

		public string SubTypeName
		{
			get
			{
				if (majortype == MediaTypes.MEDIATYPE_Audio)
				{
					return AudioMediaSubtypes.GetAudioSubtypeName(subtype);
				}
				return subtype.ToString();
			}
		}

		public bool FixedSizeSamples => bFixedSizeSamples;

		public int SampleSize => lSampleSize;

		public Guid FormatType => formattype;

		public string FormatTypeName
		{
			get
			{
				if (formattype == DmoMediaTypeGuids.FORMAT_None)
				{
					return "None";
				}
				if (formattype == Guid.Empty)
				{
					return "Null";
				}
				if (formattype == DmoMediaTypeGuids.FORMAT_WaveFormatEx)
				{
					return "WaveFormatEx";
				}
				return FormatType.ToString();
			}
		}

		public WaveFormat GetWaveFormat()
		{
			if (formattype == DmoMediaTypeGuids.FORMAT_WaveFormatEx)
			{
				return WaveFormat.MarshalFromPtr(pbFormat);
			}
			throw new InvalidOperationException("Not a WaveFormat type");
		}

		public void SetWaveFormat(WaveFormat waveFormat)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Invalid comparison between Unknown and I4
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Invalid comparison between Unknown and I4
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			majortype = MediaTypes.MEDIATYPE_Audio;
			WaveFormatExtensible val = (WaveFormatExtensible)(object)((waveFormat is WaveFormatExtensible) ? waveFormat : null);
			if (val != null)
			{
				subtype = val.SubFormat;
			}
			else
			{
				WaveFormatEncoding encoding = waveFormat.Encoding;
				if ((int)encoding != 1)
				{
					if ((int)encoding != 3)
					{
						if ((int)encoding != 85)
						{
							throw new ArgumentException($"Not a supported encoding {waveFormat.Encoding}");
						}
						subtype = AudioMediaSubtypes.WMMEDIASUBTYPE_MP3;
					}
					else
					{
						subtype = AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT;
					}
				}
				else
				{
					subtype = AudioMediaSubtypes.MEDIASUBTYPE_PCM;
				}
			}
			bFixedSizeSamples = SubType == AudioMediaSubtypes.MEDIASUBTYPE_PCM || SubType == AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT;
			formattype = DmoMediaTypeGuids.FORMAT_WaveFormatEx;
			if (cbFormat < Marshal.SizeOf<WaveFormat>(waveFormat))
			{
				throw new InvalidOperationException("Not enough memory assigned for a WaveFormat structure");
			}
			Marshal.StructureToPtr<WaveFormat>(waveFormat, pbFormat, fDeleteOld: false);
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 8)]
	public struct DmoOutputDataBuffer : IDisposable
	{
		[MarshalAs(UnmanagedType.Interface)]
		private IMediaBuffer pBuffer;

		private DmoOutputDataBufferFlags dwStatus;

		private long rtTimestamp;

		private long referenceTimeDuration;

		public IMediaBuffer MediaBuffer
		{
			get
			{
				return pBuffer;
			}
			internal set
			{
				pBuffer = value;
			}
		}

		public int Length => ((MediaBuffer)pBuffer).Length;

		public DmoOutputDataBufferFlags StatusFlags
		{
			get
			{
				return dwStatus;
			}
			internal set
			{
				dwStatus = value;
			}
		}

		public long Timestamp
		{
			get
			{
				return rtTimestamp;
			}
			internal set
			{
				rtTimestamp = value;
			}
		}

		public long Duration
		{
			get
			{
				return referenceTimeDuration;
			}
			internal set
			{
				referenceTimeDuration = value;
			}
		}

		public bool MoreDataAvailable => (StatusFlags & DmoOutputDataBufferFlags.Incomplete) == DmoOutputDataBufferFlags.Incomplete;

		public DmoOutputDataBuffer(int maxBufferSize)
		{
			pBuffer = new MediaBuffer(maxBufferSize);
			dwStatus = DmoOutputDataBufferFlags.None;
			rtTimestamp = 0L;
			referenceTimeDuration = 0L;
		}

		public void Dispose()
		{
			if (pBuffer != null)
			{
				((MediaBuffer)pBuffer).Dispose();
				pBuffer = null;
				GC.SuppressFinalize(this);
			}
		}

		public void RetrieveData(byte[] data, int offset)
		{
			((MediaBuffer)pBuffer).RetrieveData(data, offset);
		}
	}
	[Flags]
	public enum DmoOutputDataBufferFlags
	{
		None = 0,
		SyncPoint = 1,
		Time = 2,
		TimeLength = 4,
		Incomplete = 0x1000000
	}
	internal struct DmoPartialMediaType
	{
		private Guid type;

		private Guid subtype;

		public Guid Type
		{
			get
			{
				return type;
			}
			internal set
			{
				type = value;
			}
		}

		public Guid Subtype
		{
			get
			{
				return subtype;
			}
			internal set
			{
				subtype = value;
			}
		}
	}
	[Flags]
	public enum DmoProcessOutputFlags
	{
		None = 0,
		DiscardWhenNoBuffer = 1
	}
	[Flags]
	internal enum DmoSetTypeFlags
	{
		None = 0,
		DMO_SET_TYPEF_TEST_ONLY = 1,
		DMO_SET_TYPEF_CLEAR = 2
	}
	[ComImport]
	[Guid("2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IEnumDmo
	{
		int Next(int itemsToFetch, out Guid clsid, out IntPtr name, out int itemsFetched);

		int Skip(int itemsToSkip);

		int Reset();

		int Clone(out IEnumDmo enumPointer);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[Guid("59eff8b9-938c-4a26-82f2-95cb84cdc837")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	public interface IMediaBuffer
	{
		[PreserveSig]
		int SetLength(int length);

		[PreserveSig]
		int GetMaxLength(out int maxLength);

		[PreserveSig]
		int GetBufferAndLength(IntPtr bufferPointerPointer, IntPtr validDataLengthPointer);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[Guid("d8ad0f58-5494-4102-97c5-ec798e59bcf4")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IMediaObject
	{
		[PreserveSig]
		int GetStreamCount(out int inputStreams, out int outputStreams);

		[PreserveSig]
		int GetInputStreamInfo(int inputStreamIndex, out InputStreamInfoFlags flags);

		[PreserveSig]
		int GetOutputStreamInfo(int outputStreamIndex, out OutputStreamInfoFlags flags);

		[PreserveSig]
		int GetInputType(int inputStreamIndex, int typeIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int GetOutputType(int outputStreamIndex, int typeIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int SetInputType(int inputStreamIndex, [In] ref DmoMediaType mediaType, DmoSetTypeFlags flags);

		[PreserveSig]
		int SetOutputType(int outputStreamIndex, [In] ref DmoMediaType mediaType, DmoSetTypeFlags flags);

		[PreserveSig]
		int GetInputCurrentType(int inputStreamIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int GetOutputCurrentType(int outputStreamIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int GetInputSizeInfo(int inputStreamIndex, out int size, out int maxLookahead, out int alignment);

		[PreserveSig]
		int GetOutputSizeInfo(int outputStreamIndex, out int size, out int alignment);

		[PreserveSig]
		int GetInputMaxLatency(int inputStreamIndex, out long referenceTimeMaxLatency);

		[PreserveSig]
		int SetInputMaxLatency(int inputStreamIndex, long referenceTimeMaxLatency);

		[PreserveSig]
		int Flush();

		[PreserveSig]
		int Discontinuity(int inputStreamIndex);

		[PreserveSig]
		int AllocateStreamingResources();

		[PreserveSig]
		int FreeStreamingResources();

		[PreserveSig]
		int GetInputStatus(int inputStreamIndex, out DmoInputStatusFlags flags);

		[PreserveSig]
		int ProcessInput(int inputStreamIndex, [In] IMediaBuffer mediaBuffer, DmoInputDataBufferFlags flags, long referenceTimeTimestamp, long referenceTimeDuration);

		[PreserveSig]
		int ProcessOutput(DmoProcessOutputFlags flags, int outputBufferCount, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] DmoOutputDataBuffer[] outputBuffers, out int statusReserved);

		[PreserveSig]
		int Lock(bool acquireLock);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("651B9AD0-0FC7-4AA9-9538-D89931010741")]
	internal interface IMediaObjectInPlace
	{
		[PreserveSig]
		int Process([In] int size, [In] IntPtr data, [In] long refTimeStart, [In] DmoInPlaceProcessFlags dwFlags);

		[PreserveSig]
		int Clone([MarshalAs(UnmanagedType.Interface)] out IMediaObjectInPlace mediaObjectInPlace);

		[PreserveSig]
		int GetLatency(out long latencyTime);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[Guid("6d6cbb60-a223-44aa-842f-a2f06750be6d")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IMediaParamInfo
	{
		[PreserveSig]
		int GetParamCount(out int paramCount);

		[PreserveSig]
		int GetParamInfo(int paramIndex, ref MediaParamInfo paramInfo);

		[PreserveSig]
		int GetParamText(int paramIndex, out IntPtr paramText);

		[PreserveSig]
		int GetNumTimeFormats(out int numTimeFormats);

		[PreserveSig]
		int GetSupportedTimeFormat(int formatIndex, out Guid guidTimeFormat);

		[PreserveSig]
		int GetCurrentTimeFormat(out Guid guidTimeFormat, out int mediaTimeData);
	}
	[Flags]
	internal enum InputStreamInfoFlags
	{
		None = 0,
		DMO_INPUT_STREAMF_WHOLE_SAMPLES = 1,
		DMO_INPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = 2,
		DMO_INPUT_STREAMF_FIXED_SAMPLE_SIZE = 4,
		DMO_INPUT_STREAMF_HOLDS_BUFFERS = 8
	}
	[ComImport]
	[Guid("E7E9984F-F09F-4da4-903F-6E2E0EFE56B5")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IWMResamplerProps
	{
		int SetHalfFilterLength(int outputQuality);

		int SetUserChannelMtx([In] float[] channelConversionMatrix);
	}
	public class MediaBuffer : IMediaBuffer, IDisposable
	{
		private IntPtr buffer;

		private int length;

		private readonly int maxLength;

		public int Length
		{
			get
			{
				return length;
			}
			set
			{
				if (length > maxLength)
				{
					throw new ArgumentException("Cannot be greater than maximum buffer size");
				}
				length = value;
			}
		}

		public MediaBuffer(int maxLength)
		{
			buffer = Marshal.AllocCoTaskMem(maxLength);
			this.maxLength = maxLength;
		}

		public void Dispose()
		{
			if (buffer != IntPtr.Zero)
			{
				Marshal.FreeCoTaskMem(buffer);
				buffer = IntPtr.Zero;
				GC.SuppressFinalize(this);
			}
		}

		~MediaBuffer()
		{
			Dispose();
		}

		int IMediaBuffer.SetLength(int length)
		{
			if (length > maxLength)
			{
				return -2147483645;
			}
			this.length = length;
			return 0;
		}

		int IMediaBuffer.GetMaxLength(out int maxLength)
		{
			maxLength = this.maxLength;
			return 0;
		}

		int IMediaBuffer.GetBufferAndLength(IntPtr bufferPointerPointer, IntPtr validDataLengthPointer)
		{
			if (bufferPointerPointer != IntPtr.Zero)
			{
				Marshal.WriteIntPtr(bufferPointerPointer, buffer);
			}
			if (validDataLengthPointer != IntPtr.Zero)
			{
				Marshal.WriteInt32(validDataLengthPointer, length);
			}
			return 0;
		}

		public void LoadData(byte[] data, int bytes)
		{
			Length = bytes;
			Marshal.Copy(data, 0, buffer, bytes);
		}

		public void RetrieveData(byte[] data, int offset)
		{
			Marshal.Copy(buffer, data, offset, Length);
		}
	}
	public class MediaObject : IDisposable
	{
		private IMediaObject mediaObject;

		private readonly int inputStreams;

		private readonly int outputStreams;

		public int InputStreamCount => inputStreams;

		public int OutputStreamCount => outputStreams;

		internal MediaObject(IMediaObject mediaObject)
		{
			this.mediaObject = mediaObject;
			mediaObject.GetStreamCount(out inputStreams, out outputStreams);
		}

		public DmoMediaType? GetInputType(int inputStream, int inputTypeIndex)
		{
			try
			{
				if (mediaObject.GetInputType(inputStream, inputTypeIndex, out var mediaType) == 0)
				{
					DmoInterop.MoFreeMediaType(ref mediaType);
					return mediaType;
				}
			}
			catch (COMException ex)
			{
				if (HResult.GetHResult(ex) != -2147220986)
				{
					throw;
				}
			}
			return null;
		}

		public DmoMediaType? GetOutputType(int outputStream, int outputTypeIndex)
		{
			try
			{
				if (mediaObject.GetOutputType(outputStream, outputTypeIndex, out var mediaType) == 0)
				{
					DmoInterop.MoFreeMediaType(ref mediaType);
					return mediaType;
				}
			}
			catch (COMException ex)
			{
				if (HResult.GetHResult(ex) != -2147220986)
				{
					throw;
				}
			}
			return null;
		}

		public DmoMediaType GetOutputCurrentType(int outputStreamIndex)
		{
			DmoMediaType mediaType;
			int outputCurrentType = mediaObject.GetOutputCurrentType(outputStreamIndex, out mediaType);
			switch (outputCurrentType)
			{
			case 0:
				DmoInterop.MoFreeMediaType(ref mediaType);
				return mediaType;
			case -2147220989:
				throw new InvalidOperationException("Media type was not set.");
			default:
				throw Marshal.GetExceptionForHR(outputCurrentType);
			}
		}

		public IEnumerable<DmoMediaType> GetInputTypes(int inputStreamIndex)
		{
			int typeIndex = 0;
			while (true)
			{
				DmoMediaType? inputType;
				DmoMediaType? dmoMediaType = (inputType = GetInputType(inputStreamIndex, typeIndex));
				if (dmoMediaType.HasValue)
				{
					yield return inputType.Value;
					typeIndex++;
					continue;
				}
				break;
			}
		}

		public IEnumerable<DmoMediaType> GetOutputTypes(int outputStreamIndex)
		{
			int typeIndex = 0;
			while (true)
			{
				DmoMediaType? outputType;
				DmoMediaType? dmoMediaType = (outputType = GetOutputType(outputStreamIndex, typeIndex));
				if (dmoMediaType.HasValue)
				{
					yield return outputType.Value;
					typeIndex++;
					continue;
				}
				break;
			}
		}

		public bool SupportsInputType(int inputStreamIndex, DmoMediaType mediaType)
		{
			return SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.DMO_SET_TYPEF_TEST_ONLY);
		}

		private bool SetInputType(int inputStreamIndex, DmoMediaType mediaType, DmoSetTypeFlags flags)
		{
			switch (mediaObject.SetInputType(inputStreamIndex, ref mediaType, flags))
			{
			case -2147220991:
				throw new ArgumentException("Invalid stream index");
			default:
				_ = -2147220987;
				return false;
			case 0:
				return true;
			}
		}

		public void SetInputType(int inputStreamIndex, DmoMediaType mediaType)
		{
			if (!SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.None))
			{
				throw new ArgumentException("Media Type not supported");
			}
		}

		public void SetInputWaveFormat(int inputStreamIndex, WaveFormat waveFormat)
		{
			DmoMediaType mediaType = CreateDmoMediaTypeForWaveFormat(waveFormat);
			bool num = SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.None);
			DmoInterop.MoFreeMediaType(ref mediaType);
			if (!num)
			{
				throw new ArgumentException("Media Type not supported");
			}
		}

		public bool SupportsInputWaveFormat(int inputStreamIndex, WaveFormat waveFormat)
		{
			DmoMediaType mediaType = CreateDmoMediaTypeForWaveFormat(waveFormat);
			bool result = SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.DMO_SET_TYPEF_TEST_ONLY);
			DmoInterop.MoFreeMediaType(ref mediaType);
			return result;
		}

		private DmoMediaType CreateDmoMediaTypeForWaveFormat(WaveFormat

BepInEx/core/NAudio.WinForms.dll

Decompiled 2 days ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using System.Windows.Forms;
using NAudio.Mixer;
using NAudio.Wave;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.WinForms")]
[assembly: AssemblyTitle("NAudio.WinForms")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: AssemblyVersion("2.2.1.0")]
namespace NAudio.Wave
{
	public class WaveCallbackInfo
	{
		private WaveWindow waveOutWindow;

		private WaveWindowNative waveOutWindowNative;

		public WaveCallbackStrategy Strategy { get; private set; }

		public IntPtr Handle { get; private set; }

		public static WaveCallbackInfo FunctionCallback()
		{
			return new WaveCallbackInfo((WaveCallbackStrategy)0, IntPtr.Zero);
		}

		public static WaveCallbackInfo NewWindow()
		{
			return new WaveCallbackInfo((WaveCallbackStrategy)1, IntPtr.Zero);
		}

		public static WaveCallbackInfo ExistingWindow(IntPtr handle)
		{
			if (handle == IntPtr.Zero)
			{
				throw new ArgumentException("Handle cannot be zero");
			}
			return new WaveCallbackInfo((WaveCallbackStrategy)2, handle);
		}

		private WaveCallbackInfo(WaveCallbackStrategy strategy, IntPtr handle)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			Strategy = strategy;
			Handle = handle;
		}

		internal void Connect(WaveCallback callback)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Invalid comparison between Unknown and I4
			if ((int)Strategy == 1)
			{
				waveOutWindow = new WaveWindow(callback);
				((Control)waveOutWindow).CreateControl();
				Handle = ((Control)waveOutWindow).Handle;
			}
			else if ((int)Strategy == 2)
			{
				waveOutWindowNative = new WaveWindowNative(callback);
				((NativeWindow)waveOutWindowNative).AssignHandle(Handle);
			}
		}

		internal MmResult WaveOutOpen(out IntPtr waveOutHandle, int deviceNumber, WaveFormat waveFormat, WaveCallback callback)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if ((int)Strategy == 0)
			{
				return WaveInterop.waveOutOpen(ref waveOutHandle, (IntPtr)deviceNumber, waveFormat, callback, IntPtr.Zero, (WaveInOutOpenFlags)196608);
			}
			return WaveInterop.waveOutOpenWindow(ref waveOutHandle, (IntPtr)deviceNumber, waveFormat, Handle, IntPtr.Zero, (WaveInOutOpenFlags)65536);
		}

		internal MmResult WaveInOpen(out IntPtr waveInHandle, int deviceNumber, WaveFormat waveFormat, WaveCallback callback)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if ((int)Strategy == 0)
			{
				return WaveInterop.waveInOpen(ref waveInHandle, (IntPtr)deviceNumber, waveFormat, callback, IntPtr.Zero, (WaveInOutOpenFlags)196608);
			}
			return WaveInterop.waveInOpenWindow(ref waveInHandle, (IntPtr)deviceNumber, waveFormat, Handle, IntPtr.Zero, (WaveInOutOpenFlags)65536);
		}

		internal void Disconnect()
		{
			if (waveOutWindow != null)
			{
				((Form)waveOutWindow).Close();
				waveOutWindow = null;
			}
			if (waveOutWindowNative != null)
			{
				((NativeWindow)waveOutWindowNative).ReleaseHandle();
				waveOutWindowNative = null;
			}
		}
	}
	public class WaveIn : IWaveIn, IDisposable
	{
		private IntPtr waveInHandle;

		private volatile bool recording;

		private WaveInBuffer[] buffers;

		private readonly WaveCallback callback;

		private WaveCallbackInfo callbackInfo;

		private readonly SynchronizationContext syncContext;

		private int lastReturnedBufferIndex;

		public static int DeviceCount => WaveInterop.waveInGetNumDevs();

		public int BufferMilliseconds { get; set; }

		public int NumberOfBuffers { get; set; }

		public int DeviceNumber { get; set; }

		public WaveFormat WaveFormat { get; set; }

		public event EventHandler<WaveInEventArgs> DataAvailable;

		public event EventHandler<StoppedEventArgs> RecordingStopped;

		public WaveIn()
			: this(WaveCallbackInfo.NewWindow())
		{
		}

		public WaveIn(IntPtr windowHandle)
			: this(WaveCallbackInfo.ExistingWindow(windowHandle))
		{
		}

		public WaveIn(WaveCallbackInfo callbackInfo)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Invalid comparison between Unknown and I4
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Invalid comparison between Unknown and I4
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Expected O, but got Unknown
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Expected O, but got Unknown
			syncContext = SynchronizationContext.Current;
			if (((int)callbackInfo.Strategy == 1 || (int)callbackInfo.Strategy == 2) && syncContext == null)
			{
				throw new InvalidOperationException("Use WaveInEvent to record on a background thread");
			}
			DeviceNumber = 0;
			WaveFormat = new WaveFormat(8000, 16, 1);
			BufferMilliseconds = 100;
			NumberOfBuffers = 3;
			callback = new WaveCallback(Callback);
			this.callbackInfo = callbackInfo;
			callbackInfo.Connect(callback);
		}

		public static WaveInCapabilities GetCapabilities(int devNumber)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			WaveInCapabilities val = default(WaveInCapabilities);
			int num = Marshal.SizeOf<WaveInCapabilities>(val);
			MmException.Try(WaveInterop.waveInGetDevCaps((IntPtr)devNumber, ref val, num), "waveInGetDevCaps");
			return val;
		}

		private void CreateBuffers()
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Expected O, but got Unknown
			int num = BufferMilliseconds * WaveFormat.AverageBytesPerSecond / 1000;
			if (num % WaveFormat.BlockAlign != 0)
			{
				num -= num % WaveFormat.BlockAlign;
			}
			buffers = (WaveInBuffer[])(object)new WaveInBuffer[NumberOfBuffers];
			for (int i = 0; i < buffers.Length; i++)
			{
				buffers[i] = new WaveInBuffer(waveInHandle, num);
			}
		}

		private void Callback(IntPtr waveInHandle, WaveMessage message, IntPtr userData, WaveHeader waveHeader, IntPtr reserved)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Invalid comparison between Unknown and I4
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			if ((int)message != 960 || !recording)
			{
				return;
			}
			WaveInBuffer val = (WaveInBuffer)((GCHandle)waveHeader.userData).Target;
			if (val != null)
			{
				lastReturnedBufferIndex = Array.IndexOf(buffers, val);
				RaiseDataAvailable(val);
				try
				{
					val.Reuse();
				}
				catch (Exception e)
				{
					recording = false;
					RaiseRecordingStopped(e);
				}
			}
		}

		private void RaiseDataAvailable(WaveInBuffer buffer)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			this.DataAvailable?.Invoke(this, new WaveInEventArgs(buffer.Data, buffer.BytesRecorded));
		}

		private void RaiseRecordingStopped(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.RecordingStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}

		private void OpenWaveInDevice()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			CloseWaveInDevice();
			MmException.Try(callbackInfo.WaveInOpen(out waveInHandle, DeviceNumber, WaveFormat, callback), "waveInOpen");
			CreateBuffers();
		}

		public void StartRecording()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			if (recording)
			{
				throw new InvalidOperationException("Already recording");
			}
			OpenWaveInDevice();
			EnqueueBuffers();
			MmException.Try(WaveInterop.waveInStart(waveInHandle), "waveInStart");
			recording = true;
		}

		private void EnqueueBuffers()
		{
			WaveInBuffer[] array = buffers;
			foreach (WaveInBuffer val in array)
			{
				if (!val.InQueue)
				{
					val.Reuse();
				}
			}
		}

		public void StopRecording()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			if (!recording)
			{
				return;
			}
			recording = false;
			MmException.Try(WaveInterop.waveInStop(waveInHandle), "waveInStop");
			for (int i = 0; i < buffers.Length; i++)
			{
				int num = (i + lastReturnedBufferIndex + 1) % buffers.Length;
				WaveInBuffer val = buffers[num];
				if (val.Done)
				{
					RaiseDataAvailable(val);
				}
			}
			RaiseRecordingStopped(null);
		}

		public long GetPosition()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			MmTime val = default(MmTime);
			val.wType = 4u;
			MmException.Try(WaveInterop.waveInGetPosition(waveInHandle, ref val, Marshal.SizeOf<MmTime>(val)), "waveInGetPosition");
			if (val.wType != 4)
			{
				throw new Exception($"waveInGetPosition: wType -> Expected {4}, Received {val.wType}");
			}
			return val.cb;
		}

		protected virtual void Dispose(bool disposing)
		{
			if (disposing)
			{
				if (recording)
				{
					StopRecording();
				}
				CloseWaveInDevice();
				if (callbackInfo != null)
				{
					callbackInfo.Disconnect();
					callbackInfo = null;
				}
			}
		}

		private void CloseWaveInDevice()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			if (waveInHandle == IntPtr.Zero)
			{
				return;
			}
			WaveInterop.waveInReset(waveInHandle);
			if (buffers != null)
			{
				for (int i = 0; i < buffers.Length; i++)
				{
					buffers[i].Dispose();
				}
				buffers = null;
			}
			WaveInterop.waveInClose(waveInHandle);
			waveInHandle = IntPtr.Zero;
		}

		public MixerLine GetMixerLine()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			if (waveInHandle != IntPtr.Zero)
			{
				return new MixerLine(waveInHandle, 0, (MixerFlags)(-1610612736));
			}
			return new MixerLine((IntPtr)DeviceNumber, 0, (MixerFlags)536870912);
		}

		public void Dispose()
		{
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}
	}
	public class WaveOut : IWavePlayer, IDisposable, IWavePosition
	{
		private IntPtr hWaveOut;

		private WaveOutBuffer[] buffers;

		private IWaveProvider waveStream;

		private volatile PlaybackState playbackState;

		private readonly WaveCallback callback;

		private readonly WaveCallbackInfo callbackInfo;

		private readonly object waveOutLock;

		private int queuedBuffers;

		private readonly SynchronizationContext syncContext;

		public static int DeviceCount => WaveInterop.waveOutGetNumDevs();

		public int DesiredLatency { get; set; }

		public int NumberOfBuffers { get; set; }

		public int DeviceNumber { get; set; } = -1;


		public WaveFormat OutputWaveFormat => waveStream.WaveFormat;

		public PlaybackState PlaybackState => playbackState;

		public float Volume
		{
			get
			{
				return WaveOutUtils.GetWaveOutVolume(hWaveOut, waveOutLock);
			}
			set
			{
				WaveOutUtils.SetWaveOutVolume(value, hWaveOut, waveOutLock);
			}
		}

		public event EventHandler<StoppedEventArgs> PlaybackStopped;

		public static WaveOutCapabilities GetCapabilities(int devNumber)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			WaveOutCapabilities val = default(WaveOutCapabilities);
			int num = Marshal.SizeOf<WaveOutCapabilities>(val);
			MmException.Try(WaveInterop.waveOutGetDevCaps((IntPtr)devNumber, ref val, num), "waveOutGetDevCaps");
			return val;
		}

		public WaveOut()
			: this((SynchronizationContext.Current == null) ? WaveCallbackInfo.FunctionCallback() : WaveCallbackInfo.NewWindow())
		{
		}

		public WaveOut(IntPtr windowHandle)
			: this(WaveCallbackInfo.ExistingWindow(windowHandle))
		{
		}

		public WaveOut(WaveCallbackInfo callbackInfo)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			syncContext = SynchronizationContext.Current;
			DesiredLatency = 300;
			NumberOfBuffers = 2;
			callback = new WaveCallback(Callback);
			waveOutLock = new object();
			this.callbackInfo = callbackInfo;
			callbackInfo.Connect(callback);
		}

		public void Init(IWaveProvider waveProvider)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Expected O, but got Unknown
			waveStream = waveProvider;
			int num = waveProvider.WaveFormat.ConvertLatencyToByteSize((DesiredLatency + NumberOfBuffers - 1) / NumberOfBuffers);
			MmResult val;
			lock (waveOutLock)
			{
				val = callbackInfo.WaveOutOpen(out hWaveOut, DeviceNumber, waveStream.WaveFormat, callback);
			}
			MmException.Try(val, "waveOutOpen");
			buffers = (WaveOutBuffer[])(object)new WaveOutBuffer[NumberOfBuffers];
			playbackState = (PlaybackState)0;
			for (int i = 0; i < NumberOfBuffers; i++)
			{
				buffers[i] = new WaveOutBuffer(hWaveOut, num, waveStream, waveOutLock);
			}
		}

		public void Play()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Invalid comparison between Unknown and I4
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 0)
			{
				playbackState = (PlaybackState)1;
				EnqueueBuffers();
			}
			else if ((int)playbackState == 2)
			{
				EnqueueBuffers();
				Resume();
				playbackState = (PlaybackState)1;
			}
		}

		private void EnqueueBuffers()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < NumberOfBuffers; i++)
			{
				if (!buffers[i].InQueue)
				{
					if (!buffers[i].OnDone())
					{
						playbackState = (PlaybackState)0;
						break;
					}
					Interlocked.Increment(ref queuedBuffers);
				}
			}
		}

		public void Pause()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 1)
			{
				playbackState = (PlaybackState)2;
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutPause(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutPause");
				}
			}
		}

		public void Resume()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 2)
			{
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutRestart(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutRestart");
				}
				playbackState = (PlaybackState)1;
			}
		}

		public void Stop()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState != 0)
			{
				playbackState = (PlaybackState)0;
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutReset(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutReset");
				}
				if ((int)callbackInfo.Strategy == 0)
				{
					RaisePlaybackStoppedEvent(null);
				}
			}
		}

		public long GetPosition()
		{
			return WaveOutUtils.GetPositionBytes(hWaveOut, waveOutLock);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			Stop();
			if (disposing && buffers != null)
			{
				for (int i = 0; i < buffers.Length; i++)
				{
					if (buffers[i] != null)
					{
						buffers[i].Dispose();
					}
				}
				buffers = null;
			}
			lock (waveOutLock)
			{
				WaveInterop.waveOutClose(hWaveOut);
			}
			if (disposing)
			{
				callbackInfo.Disconnect();
			}
		}

		~WaveOut()
		{
			Dispose(disposing: false);
		}

		private void Callback(IntPtr hWaveOut, WaveMessage uMsg, IntPtr dwInstance, WaveHeader wavhdr, IntPtr dwReserved)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Invalid comparison between Unknown and I4
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Invalid comparison between Unknown and I4
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			if ((int)uMsg != 957)
			{
				return;
			}
			WaveOutBuffer val = (WaveOutBuffer)((GCHandle)wavhdr.userData).Target;
			Interlocked.Decrement(ref queuedBuffers);
			Exception e = null;
			if ((int)PlaybackState == 1)
			{
				lock (waveOutLock)
				{
					try
					{
						if (val.OnDone())
						{
							Interlocked.Increment(ref queuedBuffers);
						}
					}
					catch (Exception ex)
					{
						e = ex;
					}
				}
			}
			if (queuedBuffers == 0 && ((int)callbackInfo.Strategy != 0 || (int)playbackState != 0))
			{
				playbackState = (PlaybackState)0;
				RaisePlaybackStoppedEvent(e);
			}
		}

		private void RaisePlaybackStoppedEvent(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.PlaybackStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}
	}
	internal class WaveWindowNative : NativeWindow
	{
		private WaveCallback waveCallback;

		public WaveWindowNative(WaveCallback waveCallback)
		{
			this.waveCallback = waveCallback;
		}

		protected override void WndProc(ref Message m)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected I4, but got Unknown
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			WaveMessage val = (WaveMessage)((Message)(ref m)).Msg;
			switch (val - 955)
			{
			case 2:
			case 5:
			{
				IntPtr wParam = ((Message)(ref m)).WParam;
				WaveHeader val2 = new WaveHeader();
				Marshal.PtrToStructure<WaveHeader>(((Message)(ref m)).LParam, val2);
				waveCallback.Invoke(wParam, val, IntPtr.Zero, val2, IntPtr.Zero);
				break;
			}
			case 0:
			case 1:
			case 3:
			case 4:
				waveCallback.Invoke(((Message)(ref m)).WParam, val, IntPtr.Zero, (WaveHeader)null, IntPtr.Zero);
				break;
			default:
				((NativeWindow)this).WndProc(ref m);
				break;
			}
		}
	}
	internal class WaveWindow : Form
	{
		private WaveCallback waveCallback;

		public WaveWindow(WaveCallback waveCallback)
		{
			this.waveCallback = waveCallback;
		}

		protected override void WndProc(ref Message m)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected I4, but got Unknown
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			WaveMessage val = (WaveMessage)((Message)(ref m)).Msg;
			switch (val - 955)
			{
			case 2:
			case 5:
			{
				IntPtr wParam = ((Message)(ref m)).WParam;
				WaveHeader val2 = new WaveHeader();
				Marshal.PtrToStructure<WaveHeader>(((Message)(ref m)).LParam, val2);
				waveCallback.Invoke(wParam, val, IntPtr.Zero, val2, IntPtr.Zero);
				break;
			}
			case 0:
			case 1:
			case 3:
			case 4:
				waveCallback.Invoke(((Message)(ref m)).WParam, val, IntPtr.Zero, (WaveHeader)null, IntPtr.Zero);
				break;
			default:
				((Form)this).WndProc(ref m);
				break;
			}
		}
	}
}
namespace NAudio.Utils
{
	public class ProgressLog : UserControl
	{
		private delegate void LogMessageDelegate(Color color, string message);

		private delegate void ClearLogDelegate();

		private IContainer components;

		private RichTextBox richTextBoxLog;

		public string Text => ((Control)richTextBoxLog).Text;

		public ProgressLog()
		{
			InitializeComponent();
		}

		public void LogMessage(Color color, string message)
		{
			if (((Control)richTextBoxLog).InvokeRequired)
			{
				((Control)this).Invoke((Delegate)new LogMessageDelegate(LogMessage), new object[2] { color, message });
			}
			else
			{
				((TextBoxBase)richTextBoxLog).SelectionStart = ((TextBoxBase)richTextBoxLog).TextLength;
				richTextBoxLog.SelectionColor = color;
				((TextBoxBase)richTextBoxLog).AppendText(message);
				((TextBoxBase)richTextBoxLog).AppendText(Environment.NewLine);
			}
		}

		public void ClearLog()
		{
			if (((Control)richTextBoxLog).InvokeRequired)
			{
				((Control)this).Invoke((Delegate)new ClearLogDelegate(ClearLog), new object[0]);
			}
			else
			{
				((TextBoxBase)richTextBoxLog).Clear();
			}
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((ContainerControl)this).Dispose(disposing);
		}

		private void InitializeComponent()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			richTextBoxLog = new RichTextBox();
			((Control)this).SuspendLayout();
			((TextBoxBase)richTextBoxLog).BorderStyle = (BorderStyle)0;
			((Control)richTextBoxLog).Dock = (DockStyle)5;
			((Control)richTextBoxLog).Location = new Point(1, 1);
			((Control)richTextBoxLog).Name = "richTextBoxLog";
			((TextBoxBase)richTextBoxLog).ReadOnly = true;
			((Control)richTextBoxLog).Size = new Size(311, 129);
			((Control)richTextBoxLog).TabIndex = 0;
			((Control)richTextBoxLog).Text = "";
			((ContainerControl)this).AutoScaleDimensions = new SizeF(6f, 13f);
			((ContainerControl)this).AutoScaleMode = (AutoScaleMode)1;
			((Control)this).BackColor = SystemColors.ControlDarkDark;
			((Control)this).Controls.Add((Control)(object)richTextBoxLog);
			((Control)this).Name = "ProgressLog";
			((Control)this).Padding = new Padding(1);
			((Control)this).Size = new Size(313, 131);
			((Control)this).ResumeLayout(false);
		}
	}
}
namespace NAudio.WinForms.Gui
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Fader
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("NAudio.WinForms.Gui.Fader", typeof(Fader).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Fader()
		{
		}
	}
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class PanSlider
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("NAudio.WinForms.Gui.PanSlider", typeof(PanSlider).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal PanSlider()
		{
		}
	}
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class VolumeSlider
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("NAudio.WinForms.Gui.VolumeSlider", typeof(VolumeSlider).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal VolumeSlider()
		{
		}
	}
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class WaveViewer
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					resourceMan = new ResourceManager("NAudio.WinForms.Gui.WaveViewer", typeof(WaveViewer).Assembly);
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal WaveViewer()
		{
		}
	}
}
namespace NAudio.Gui
{
	public class Fader : Control
	{
		private int minimum;

		private int maximum;

		private float percent;

		private Orientation orientation;

		private Container components;

		private readonly int SliderHeight = 30;

		private readonly int SliderWidth = 15;

		private Rectangle sliderRectangle;

		private bool dragging;

		private int dragY;

		public int Minimum
		{
			get
			{
				return minimum;
			}
			set
			{
				minimum = value;
			}
		}

		public int Maximum
		{
			get
			{
				return maximum;
			}
			set
			{
				maximum = value;
			}
		}

		public int Value
		{
			get
			{
				return (int)(percent * (float)(maximum - minimum)) + minimum;
			}
			set
			{
				percent = (float)(value - minimum) / (float)(maximum - minimum);
			}
		}

		public Orientation Orientation
		{
			get
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return orientation;
			}
			set
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				orientation = value;
			}
		}

		public Fader()
		{
			InitializeComponent();
			((Control)this).SetStyle((ControlStyles)73730, true);
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((Control)this).Dispose(disposing);
		}

		private void DrawSlider(Graphics g)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			Brush val = (Brush)new SolidBrush(Color.White);
			Pen val2 = new Pen(Color.Black);
			sliderRectangle.X = (((Control)this).Width - SliderWidth) / 2;
			sliderRectangle.Width = SliderWidth;
			sliderRectangle.Y = (int)((float)(((Control)this).Height - SliderHeight) * percent);
			sliderRectangle.Height = SliderHeight;
			g.FillRectangle(val, sliderRectangle);
			g.DrawLine(val2, sliderRectangle.Left, sliderRectangle.Top + sliderRectangle.Height / 2, sliderRectangle.Right, sliderRectangle.Top + sliderRectangle.Height / 2);
			val.Dispose();
			val2.Dispose();
		}

		protected override void OnPaint(PaintEventArgs e)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Invalid comparison between Unknown and I4
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			Graphics graphics = e.Graphics;
			if ((int)Orientation == 1)
			{
				Brush val = (Brush)new SolidBrush(Color.Black);
				graphics.FillRectangle(val, ((Control)this).Width / 2, SliderHeight / 2, 2, ((Control)this).Height - SliderHeight);
				val.Dispose();
				DrawSlider(graphics);
			}
			((Control)this).OnPaint(e);
		}

		protected override void OnMouseDown(MouseEventArgs e)
		{
			if (sliderRectangle.Contains(e.X, e.Y))
			{
				dragging = true;
				dragY = e.Y - sliderRectangle.Y;
			}
			((Control)this).OnMouseDown(e);
		}

		protected override void OnMouseMove(MouseEventArgs e)
		{
			if (dragging)
			{
				int num = e.Y - dragY;
				if (num < 0)
				{
					percent = 0f;
				}
				else if (num > ((Control)this).Height - SliderHeight)
				{
					percent = 1f;
				}
				else
				{
					percent = (float)num / (float)(((Control)this).Height - SliderHeight);
				}
				((Control)this).Invalidate();
			}
			((Control)this).OnMouseMove(e);
		}

		protected override void OnMouseUp(MouseEventArgs e)
		{
			dragging = false;
			((Control)this).OnMouseUp(e);
		}

		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
		}
	}
	public class PanSlider : UserControl
	{
		private Container components;

		private float pan;

		public float Pan
		{
			get
			{
				return pan;
			}
			set
			{
				if (value < -1f)
				{
					value = -1f;
				}
				if (value > 1f)
				{
					value = 1f;
				}
				if (value != pan)
				{
					pan = value;
					if (this.PanChanged != null)
					{
						this.PanChanged(this, EventArgs.Empty);
					}
					((Control)this).Invalidate();
				}
			}
		}

		public event EventHandler PanChanged;

		public PanSlider()
		{
			InitializeComponent();
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((ContainerControl)this).Dispose(disposing);
		}

		private void InitializeComponent()
		{
			((Control)this).Name = "PanSlider";
			((Control)this).Size = new Size(104, 16);
		}

		protected override void OnPaint(PaintEventArgs pe)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Expected O, but got Unknown
			StringFormat val = new StringFormat();
			val.LineAlignment = (StringAlignment)1;
			val.Alignment = (StringAlignment)1;
			string text;
			if ((double)pan == 0.0)
			{
				pe.Graphics.FillRectangle(Brushes.Orange, ((Control)this).Width / 2 - 1, 1, 3, ((Control)this).Height - 2);
				text = "C";
			}
			else if (pan > 0f)
			{
				pe.Graphics.FillRectangle(Brushes.Orange, ((Control)this).Width / 2, 1, (int)((float)(((Control)this).Width / 2) * pan), ((Control)this).Height - 2);
				text = $"{pan * 100f:F0}%R";
			}
			else
			{
				pe.Graphics.FillRectangle(Brushes.Orange, (int)((float)(((Control)this).Width / 2) * (pan + 1f)), 1, (int)((float)(((Control)this).Width / 2) * (0f - pan)), ((Control)this).Height - 2);
				text = $"{pan * -100f:F0}%L";
			}
			pe.Graphics.DrawRectangle(Pens.Black, 0, 0, ((Control)this).Width - 1, ((Control)this).Height - 1);
			pe.Graphics.DrawString(text, ((Control)this).Font, Brushes.Black, (RectangleF)((Control)this).ClientRectangle, val);
		}

		protected override void OnMouseMove(MouseEventArgs e)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			if ((int)e.Button == 1048576)
			{
				SetPanFromMouse(e.X);
			}
			((Control)this).OnMouseMove(e);
		}

		protected override void OnMouseDown(MouseEventArgs e)
		{
			SetPanFromMouse(e.X);
			((UserControl)this).OnMouseDown(e);
		}

		private void SetPanFromMouse(int x)
		{
			Pan = (float)x / (float)((Control)this).Width * 2f - 1f;
		}
	}
	public class Pot : UserControl
	{
		private double minimum;

		private double maximum = 1.0;

		private double value = 0.5;

		private int beginDragY;

		private double beginDragValue;

		private bool dragging;

		private IContainer components;

		public double Minimum
		{
			get
			{
				return minimum;
			}
			set
			{
				if (value >= maximum)
				{
					throw new ArgumentOutOfRangeException("Minimum must be less than maximum");
				}
				minimum = value;
				if (Value < minimum)
				{
					Value = minimum;
				}
			}
		}

		public double Maximum
		{
			get
			{
				return maximum;
			}
			set
			{
				if (value <= minimum)
				{
					throw new ArgumentOutOfRangeException("Maximum must be greater than minimum");
				}
				maximum = value;
				if (Value > maximum)
				{
					Value = maximum;
				}
			}
		}

		public double Value
		{
			get
			{
				return value;
			}
			set
			{
				SetValue(value, raiseEvents: false);
			}
		}

		public event EventHandler ValueChanged;

		public Pot()
		{
			((Control)this).SetStyle((ControlStyles)73730, true);
			InitializeComponent();
		}

		private void SetValue(double newValue, bool raiseEvents)
		{
			if (value != newValue)
			{
				value = newValue;
				if (raiseEvents && this.ValueChanged != null)
				{
					this.ValueChanged(this, EventArgs.Empty);
				}
				((Control)this).Invalidate();
			}
		}

		protected override void OnPaint(PaintEventArgs e)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			int num = Math.Min(((Control)this).Width - 4, ((Control)this).Height - 4);
			Pen val = new Pen(((Control)this).ForeColor, 3f);
			val.LineJoin = (LineJoin)2;
			GraphicsState val2 = e.Graphics.Save();
			e.Graphics.TranslateTransform((float)(((Control)this).Width / 2), (float)(((Control)this).Height / 2));
			e.Graphics.SmoothingMode = (SmoothingMode)4;
			e.Graphics.DrawArc(val, new Rectangle(num / -2, num / -2, num, num), 135f, 270f);
			double num2 = (value - minimum) / (maximum - minimum);
			double num3 = 135.0 + num2 * 270.0;
			double num4 = (double)num / 2.0 * Math.Cos(Math.PI * num3 / 180.0);
			double num5 = (double)num / 2.0 * Math.Sin(Math.PI * num3 / 180.0);
			e.Graphics.DrawLine(val, 0f, 0f, (float)num4, (float)num5);
			e.Graphics.Restore(val2);
			((Control)this).OnPaint(e);
		}

		protected override void OnMouseDown(MouseEventArgs e)
		{
			dragging = true;
			beginDragY = e.Y;
			beginDragValue = value;
			((UserControl)this).OnMouseDown(e);
		}

		protected override void OnMouseUp(MouseEventArgs e)
		{
			dragging = false;
			((Control)this).OnMouseUp(e);
		}

		protected override void OnMouseMove(MouseEventArgs e)
		{
			if (dragging)
			{
				int num = beginDragY - e.Y;
				double num2 = (maximum - minimum) * ((double)num / 150.0);
				double num3 = beginDragValue + num2;
				if (num3 < minimum)
				{
					num3 = minimum;
				}
				if (num3 > maximum)
				{
					num3 = maximum;
				}
				SetValue(num3, raiseEvents: true);
			}
			((Control)this).OnMouseMove(e);
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((ContainerControl)this).Dispose(disposing);
		}

		private void InitializeComponent()
		{
			((Control)this).SuspendLayout();
			((ContainerControl)this).AutoScaleDimensions = new SizeF(6f, 13f);
			((ContainerControl)this).AutoScaleMode = (AutoScaleMode)1;
			((Control)this).Name = "Pot";
			((Control)this).Size = new Size(32, 32);
			((Control)this).ResumeLayout(false);
		}
	}
	public class VolumeMeter : Control
	{
		private Brush foregroundBrush;

		private float amplitude;

		private IContainer components;

		[DefaultValue(-3.0)]
		public float Amplitude
		{
			get
			{
				return amplitude;
			}
			set
			{
				amplitude = value;
				((Control)this).Invalidate();
			}
		}

		[DefaultValue(-60.0)]
		public float MinDb { get; set; }

		[DefaultValue(18.0)]
		public float MaxDb { get; set; }

		[DefaultValue(/*Could not decode attribute arguments.*/)]
		public Orientation Orientation { get; set; }

		public VolumeMeter()
		{
			((Control)this).SetStyle((ControlStyles)139266, true);
			MinDb = -60f;
			MaxDb = 18f;
			Amplitude = 0f;
			Orientation = (Orientation)1;
			InitializeComponent();
			((Control)this).OnForeColorChanged(EventArgs.Empty);
		}

		protected override void OnForeColorChanged(EventArgs e)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			foregroundBrush = (Brush)new SolidBrush(((Control)this).ForeColor);
			((Control)this).OnForeColorChanged(e);
		}

		protected override void OnPaint(PaintEventArgs pe)
		{
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			pe.Graphics.DrawRectangle(Pens.Black, 0, 0, ((Control)this).Width - 1, ((Control)this).Height - 1);
			double num = 20.0 * Math.Log10(Amplitude);
			if (num < (double)MinDb)
			{
				num = MinDb;
			}
			if (num > (double)MaxDb)
			{
				num = MaxDb;
			}
			double num2 = (num - (double)MinDb) / (double)(MaxDb - MinDb);
			int num3 = ((Control)this).Width - 2;
			int num4 = ((Control)this).Height - 2;
			if ((int)Orientation == 0)
			{
				num3 = (int)((double)num3 * num2);
				pe.Graphics.FillRectangle(foregroundBrush, 1, 1, num3, num4);
			}
			else
			{
				num4 = (int)((double)num4 * num2);
				pe.Graphics.FillRectangle(foregroundBrush, 1, ((Control)this).Height - 1 - num4, num3, num4);
			}
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((Control)this).Dispose(disposing);
		}

		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
		}
	}
	public class VolumeSlider : UserControl
	{
		private Container components;

		private float volume = 1f;

		private float MinDb = -48f;

		[DefaultValue(1f)]
		public float Volume
		{
			get
			{
				return volume;
			}
			set
			{
				if (value < 0f)
				{
					value = 0f;
				}
				if (value > 1f)
				{
					value = 1f;
				}
				if (volume != value)
				{
					volume = value;
					if (this.VolumeChanged != null)
					{
						this.VolumeChanged(this, EventArgs.Empty);
					}
					((Control)this).Invalidate();
				}
			}
		}

		public event EventHandler VolumeChanged;

		public VolumeSlider()
		{
			InitializeComponent();
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((ContainerControl)this).Dispose(disposing);
		}

		private void InitializeComponent()
		{
			((Control)this).Name = "VolumeSlider";
			((Control)this).Size = new Size(96, 16);
		}

		protected override void OnPaint(PaintEventArgs pe)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Expected O, but got Unknown
			StringFormat val = new StringFormat();
			val.LineAlignment = (StringAlignment)1;
			val.Alignment = (StringAlignment)1;
			pe.Graphics.DrawRectangle(Pens.Black, 0, 0, ((Control)this).Width - 1, ((Control)this).Height - 1);
			float num = 20f * (float)Math.Log10(Volume);
			float num2 = 1f - num / MinDb;
			pe.Graphics.FillRectangle(Brushes.LightGreen, 1, 1, (int)((float)(((Control)this).Width - 2) * num2), ((Control)this).Height - 2);
			string text = $"{num:F2} dB";
			pe.Graphics.DrawString(text, ((Control)this).Font, Brushes.Black, (RectangleF)((Control)this).ClientRectangle, val);
		}

		protected override void OnMouseMove(MouseEventArgs e)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			if ((int)e.Button == 1048576)
			{
				SetVolumeFromMouse(e.X);
			}
			((Control)this).OnMouseMove(e);
		}

		protected override void OnMouseDown(MouseEventArgs e)
		{
			SetVolumeFromMouse(e.X);
			((UserControl)this).OnMouseDown(e);
		}

		private void SetVolumeFromMouse(int x)
		{
			float num = (1f - (float)x / (float)((Control)this).Width) * MinDb;
			if (x <= 0)
			{
				Volume = 0f;
			}
			else
			{
				Volume = (float)Math.Pow(10.0, num / 20f);
			}
		}
	}
	public class WaveformPainter : Control
	{
		private Pen foregroundPen;

		private List<float> samples = new List<float>(1000);

		private int maxSamples;

		private int insertPos;

		private IContainer components;

		public WaveformPainter()
		{
			((Control)this).SetStyle((ControlStyles)139266, true);
			InitializeComponent();
			((Control)this).OnForeColorChanged(EventArgs.Empty);
			((Control)this).OnResize(EventArgs.Empty);
		}

		protected override void OnResize(EventArgs e)
		{
			maxSamples = ((Control)this).Width;
			((Control)this).OnResize(e);
		}

		protected override void OnForeColorChanged(EventArgs e)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			foregroundPen = new Pen(((Control)this).ForeColor);
			((Control)this).OnForeColorChanged(e);
		}

		public void AddMax(float maxSample)
		{
			if (maxSamples != 0)
			{
				if (samples.Count <= maxSamples)
				{
					samples.Add(maxSample);
				}
				else if (insertPos < maxSamples)
				{
					samples[insertPos] = maxSample;
				}
				insertPos++;
				insertPos %= maxSamples;
				((Control)this).Invalidate();
			}
		}

		protected override void OnPaint(PaintEventArgs pe)
		{
			((Control)this).OnPaint(pe);
			for (int i = 0; i < ((Control)this).Width; i++)
			{
				float num = (float)((Control)this).Height * GetSample(i - ((Control)this).Width + insertPos);
				float num2 = ((float)((Control)this).Height - num) / 2f;
				pe.Graphics.DrawLine(foregroundPen, (float)i, num2, (float)i, num2 + num);
			}
		}

		private float GetSample(int index)
		{
			if (index < 0)
			{
				index += maxSamples;
			}
			if ((index >= 0) & (index < samples.Count))
			{
				return samples[index];
			}
			return 0f;
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((Control)this).Dispose(disposing);
		}

		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
		}
	}
	public class WaveViewer : UserControl
	{
		private Container components;

		private WaveStream waveStream;

		private int samplesPerPixel = 128;

		private long startPosition;

		private int bytesPerSample;

		public WaveStream WaveStream
		{
			get
			{
				return waveStream;
			}
			set
			{
				waveStream = value;
				if (waveStream != null)
				{
					bytesPerSample = waveStream.WaveFormat.BitsPerSample / 8 * waveStream.WaveFormat.Channels;
				}
				((Control)this).Invalidate();
			}
		}

		public int SamplesPerPixel
		{
			get
			{
				return samplesPerPixel;
			}
			set
			{
				samplesPerPixel = value;
				((Control)this).Invalidate();
			}
		}

		public long StartPosition
		{
			get
			{
				return startPosition;
			}
			set
			{
				startPosition = value;
			}
		}

		public WaveViewer()
		{
			InitializeComponent();
			((Control)this).DoubleBuffered = true;
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && components != null)
			{
				components.Dispose();
			}
			((ContainerControl)this).Dispose(disposing);
		}

		protected override void OnPaint(PaintEventArgs e)
		{
			if (waveStream != null)
			{
				((Stream)(object)waveStream).Position = 0L;
				byte[] array = new byte[samplesPerPixel * bytesPerSample];
				((Stream)(object)waveStream).Position = startPosition + e.ClipRectangle.Left * bytesPerSample * samplesPerPixel;
				for (float num = e.ClipRectangle.X; num < (float)e.ClipRectangle.Right; num += 1f)
				{
					short num2 = 0;
					short num3 = 0;
					int num4 = ((Stream)(object)waveStream).Read(array, 0, samplesPerPixel * bytesPerSample);
					if (num4 == 0)
					{
						break;
					}
					for (int i = 0; i < num4; i += 2)
					{
						short num5 = BitConverter.ToInt16(array, i);
						if (num5 < num2)
						{
							num2 = num5;
						}
						if (num5 > num3)
						{
							num3 = num5;
						}
					}
					float num6 = ((float)num2 - -32768f) / 65535f;
					float num7 = ((float)num3 - -32768f) / 65535f;
					e.Graphics.DrawLine(Pens.Black, num, (float)((Control)this).Height * num6, num, (float)((Control)this).Height * num7);
				}
			}
			((Control)this).OnPaint(e);
		}

		private void InitializeComponent()
		{
			components = new Container();
		}
	}
}

BepInEx/core/NAudio.WinMM.dll

Decompiled 2 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using Microsoft.Win32;
using NAudio.CoreAudioApi;
using NAudio.Mixer;
using NAudio.Utils;
using NAudio.Wave.Compression;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("NAudio.WinMM")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.WinMM")]
[assembly: AssemblyTitle("NAudio.WinMM")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: AssemblyVersion("2.2.1.0")]
namespace NAudio.Mixer
{
	public class BooleanMixerControl : MixerControl
	{
		private MixerInterop.MIXERCONTROLDETAILS_BOOLEAN boolDetails;

		public bool Value
		{
			get
			{
				GetControlDetails();
				return boolDetails.fValue == 1;
			}
			set
			{
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				boolDetails.fValue = (value ? 1 : 0);
				mixerControlDetails.paDetails = Marshal.AllocHGlobal(Marshal.SizeOf(boolDetails));
				Marshal.StructureToPtr(boolDetails, mixerControlDetails.paDetails, fDeleteOld: false);
				MmException.Try(MixerInterop.mixerSetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType), "mixerSetControlDetails");
				Marshal.FreeHGlobal(mixerControlDetails.paDetails);
			}
		}

		internal BooleanMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
			boolDetails = Marshal.PtrToStructure<MixerInterop.MIXERCONTROLDETAILS_BOOLEAN>(pDetails);
		}
	}
	public class CustomMixerControl : MixerControl
	{
		internal CustomMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
		}
	}
	public class ListTextMixerControl : MixerControl
	{
		internal ListTextMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
		}
	}
	public class Mixer
	{
		private MixerInterop.MIXERCAPS caps;

		private IntPtr mixerHandle;

		private MixerFlags mixerHandleType;

		public static int NumberOfDevices => MixerInterop.mixerGetNumDevs();

		public int DestinationCount => (int)caps.cDestinations;

		public string Name => caps.szPname;

		public Manufacturers Manufacturer => (Manufacturers)caps.wMid;

		public int ProductID => caps.wPid;

		public IEnumerable<MixerLine> Destinations
		{
			get
			{
				for (int destination = 0; destination < DestinationCount; destination++)
				{
					yield return GetDestination(destination);
				}
			}
		}

		public static IEnumerable<Mixer> Mixers
		{
			get
			{
				for (int device = 0; device < NumberOfDevices; device++)
				{
					yield return new Mixer(device);
				}
			}
		}

		public Mixer(int mixerIndex)
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			if (mixerIndex < 0 || mixerIndex >= NumberOfDevices)
			{
				throw new ArgumentOutOfRangeException("mixerID");
			}
			caps = default(MixerInterop.MIXERCAPS);
			MmException.Try(MixerInterop.mixerGetDevCaps((IntPtr)mixerIndex, ref caps, Marshal.SizeOf(caps)), "mixerGetDevCaps");
			mixerHandle = (IntPtr)mixerIndex;
			mixerHandleType = MixerFlags.Mixer;
		}

		public MixerLine GetDestination(int destinationIndex)
		{
			if (destinationIndex < 0 || destinationIndex >= DestinationCount)
			{
				throw new ArgumentOutOfRangeException("destinationIndex");
			}
			return new MixerLine(mixerHandle, destinationIndex, mixerHandleType);
		}
	}
	public abstract class MixerControl
	{
		internal MixerInterop.MIXERCONTROL mixerControl;

		internal MixerInterop.MIXERCONTROLDETAILS mixerControlDetails;

		protected IntPtr mixerHandle;

		protected int nChannels;

		protected MixerFlags mixerHandleType;

		public string Name => mixerControl.szName;

		public MixerControlType ControlType => mixerControl.dwControlType;

		public bool IsBoolean => IsControlBoolean(mixerControl.dwControlType);

		public bool IsListText => IsControlListText(mixerControl.dwControlType);

		public bool IsSigned => IsControlSigned(mixerControl.dwControlType);

		public bool IsUnsigned => IsControlUnsigned(mixerControl.dwControlType);

		public bool IsCustom => IsControlCustom(mixerControl.dwControlType);

		public static IList<MixerControl> GetMixerControls(IntPtr mixerHandle, MixerLine mixerLine, MixerFlags mixerHandleType)
		{
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			List<MixerControl> list = new List<MixerControl>();
			if (mixerLine.ControlsCount > 0)
			{
				int num = Marshal.SizeOf<MixerInterop.MIXERCONTROL>();
				MixerInterop.MIXERLINECONTROLS mixerLineControls = default(MixerInterop.MIXERLINECONTROLS);
				IntPtr intPtr = Marshal.AllocHGlobal(num * mixerLine.ControlsCount);
				mixerLineControls.cbStruct = Marshal.SizeOf(mixerLineControls);
				mixerLineControls.dwLineID = mixerLine.LineId;
				mixerLineControls.cControls = mixerLine.ControlsCount;
				mixerLineControls.pamxctrl = intPtr;
				mixerLineControls.cbmxctrl = Marshal.SizeOf<MixerInterop.MIXERCONTROL>();
				try
				{
					MmResult val = MixerInterop.mixerGetLineControls(mixerHandle, ref mixerLineControls, MixerFlags.Mixer | mixerHandleType);
					if ((int)val != 0)
					{
						throw new MmException(val, "mixerGetLineControls");
					}
					for (int i = 0; i < mixerLineControls.cControls; i++)
					{
						MixerInterop.MIXERCONTROL mIXERCONTROL = Marshal.PtrToStructure<MixerInterop.MIXERCONTROL>((IntPtr)(intPtr.ToInt64() + num * i));
						MixerControl item = GetMixerControl(mixerHandle, mixerLine.LineId, mIXERCONTROL.dwControlID, mixerLine.Channels, mixerHandleType);
						list.Add(item);
					}
				}
				finally
				{
					Marshal.FreeHGlobal(intPtr);
				}
			}
			return list;
		}

		public static MixerControl GetMixerControl(IntPtr mixerHandle, int nLineId, int controlId, int nChannels, MixerFlags mixerFlags)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			MixerInterop.MIXERLINECONTROLS mixerLineControls = default(MixerInterop.MIXERLINECONTROLS);
			MixerInterop.MIXERCONTROL structure = default(MixerInterop.MIXERCONTROL);
			IntPtr intPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(structure));
			mixerLineControls.cbStruct = Marshal.SizeOf(mixerLineControls);
			mixerLineControls.cControls = 1;
			mixerLineControls.dwControlID = controlId;
			mixerLineControls.cbmxctrl = Marshal.SizeOf(structure);
			mixerLineControls.pamxctrl = intPtr;
			mixerLineControls.dwLineID = nLineId;
			MmResult val = MixerInterop.mixerGetLineControls(mixerHandle, ref mixerLineControls, MixerFlags.ListText | mixerFlags);
			if ((int)val != 0)
			{
				Marshal.FreeCoTaskMem(intPtr);
				throw new MmException(val, "mixerGetLineControls");
			}
			structure = Marshal.PtrToStructure<MixerInterop.MIXERCONTROL>(mixerLineControls.pamxctrl);
			Marshal.FreeCoTaskMem(intPtr);
			if (IsControlBoolean(structure.dwControlType))
			{
				return new BooleanMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlSigned(structure.dwControlType))
			{
				return new SignedMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlUnsigned(structure.dwControlType))
			{
				return new UnsignedMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlListText(structure.dwControlType))
			{
				return new ListTextMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlCustom(structure.dwControlType))
			{
				return new CustomMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			throw new InvalidOperationException($"Unknown mixer control type {structure.dwControlType}");
		}

		protected void GetControlDetails()
		{
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			mixerControlDetails.cbStruct = Marshal.SizeOf(mixerControlDetails);
			mixerControlDetails.dwControlID = mixerControl.dwControlID;
			if (IsCustom)
			{
				mixerControlDetails.cChannels = 0;
			}
			else if ((mixerControl.fdwControl & (true ? 1u : 0u)) != 0)
			{
				mixerControlDetails.cChannels = 1;
			}
			else
			{
				mixerControlDetails.cChannels = nChannels;
			}
			if ((mixerControl.fdwControl & 2u) != 0)
			{
				mixerControlDetails.hwndOwner = (IntPtr)mixerControl.cMultipleItems;
			}
			else if (IsCustom)
			{
				mixerControlDetails.hwndOwner = IntPtr.Zero;
			}
			else
			{
				mixerControlDetails.hwndOwner = IntPtr.Zero;
			}
			if (IsBoolean)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_BOOLEAN>();
			}
			else if (IsListText)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_LISTTEXT>();
			}
			else if (IsSigned)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_SIGNED>();
			}
			else if (IsUnsigned)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_UNSIGNED>();
			}
			else
			{
				mixerControlDetails.cbDetails = mixerControl.Metrics.customData;
			}
			int num = mixerControlDetails.cbDetails * mixerControlDetails.cChannels;
			if ((mixerControl.fdwControl & 2u) != 0)
			{
				num *= (int)mixerControl.cMultipleItems;
			}
			IntPtr intPtr = Marshal.AllocCoTaskMem(num);
			mixerControlDetails.paDetails = intPtr;
			MmResult val = MixerInterop.mixerGetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType);
			if ((int)val == 0)
			{
				GetDetails(mixerControlDetails.paDetails);
			}
			Marshal.FreeCoTaskMem(intPtr);
			if ((int)val != 0)
			{
				throw new MmException(val, "mixerGetControlDetails");
			}
		}

		protected abstract void GetDetails(IntPtr pDetails);

		private static bool IsControlBoolean(MixerControlType controlType)
		{
			switch (controlType)
			{
			case MixerControlType.BooleanMeter:
			case MixerControlType.Boolean:
			case MixerControlType.OnOff:
			case MixerControlType.Mute:
			case MixerControlType.Mono:
			case MixerControlType.Loudness:
			case MixerControlType.StereoEnhance:
			case MixerControlType.Button:
			case MixerControlType.SingleSelect:
			case MixerControlType.Mux:
			case MixerControlType.MultipleSelect:
			case MixerControlType.Mixer:
				return true;
			default:
				return false;
			}
		}

		private static bool IsControlListText(MixerControlType controlType)
		{
			if (controlType == MixerControlType.Equalizer || (uint)(controlType - 1879113728) <= 1u || (uint)(controlType - 1895890944) <= 1u)
			{
				return true;
			}
			return false;
		}

		private static bool IsControlSigned(MixerControlType controlType)
		{
			switch (controlType)
			{
			case MixerControlType.SignedMeter:
			case MixerControlType.PeakMeter:
			case MixerControlType.Signed:
			case MixerControlType.Decibels:
			case MixerControlType.Slider:
			case MixerControlType.Pan:
			case MixerControlType.QSoundPan:
				return true;
			default:
				return false;
			}
		}

		private static bool IsControlUnsigned(MixerControlType controlType)
		{
			switch (controlType)
			{
			case MixerControlType.UnsignedMeter:
			case MixerControlType.Unsigned:
			case MixerControlType.Percent:
			case MixerControlType.Fader:
			case MixerControlType.Volume:
			case MixerControlType.Bass:
			case MixerControlType.Treble:
			case MixerControlType.Equalizer:
			case MixerControlType.MicroTime:
			case MixerControlType.MilliTime:
				return true;
			default:
				return false;
			}
		}

		private static bool IsControlCustom(MixerControlType controlType)
		{
			return controlType == MixerControlType.Custom;
		}

		public override string ToString()
		{
			return $"{Name} {ControlType}";
		}
	}
	[Flags]
	internal enum MixerControlClass
	{
		Custom = 0,
		Meter = 0x10000000,
		Switch = 0x20000000,
		Number = 0x30000000,
		Slider = 0x40000000,
		Fader = 0x50000000,
		Time = 0x60000000,
		List = 0x70000000,
		Mask = 0x70000000
	}
	[Flags]
	internal enum MixerControlSubclass
	{
		SwitchBoolean = 0,
		SwitchButton = 0x1000000,
		MeterPolled = 0,
		TimeMicrosecs = 0,
		TimeMillisecs = 0x1000000,
		ListSingle = 0,
		ListMultiple = 0x1000000,
		Mask = 0xF000000
	}
	[Flags]
	internal enum MixerControlUnits
	{
		Custom = 0,
		Boolean = 0x10000,
		Signed = 0x20000,
		Unsigned = 0x30000,
		Decibels = 0x40000,
		Percent = 0x50000,
		Mask = 0xFF0000
	}
	public enum MixerControlType
	{
		Custom = 0,
		BooleanMeter = 268500992,
		SignedMeter = 268566528,
		PeakMeter = 268566529,
		UnsignedMeter = 268632064,
		Boolean = 536936448,
		OnOff = 536936449,
		Mute = 536936450,
		Mono = 536936451,
		Loudness = 536936452,
		StereoEnhance = 536936453,
		Button = 553713664,
		Decibels = 805568512,
		Signed = 805437440,
		Unsigned = 805502976,
		Percent = 805634048,
		Slider = 1073872896,
		Pan = 1073872897,
		QSoundPan = 1073872898,
		Fader = 1342373888,
		Volume = 1342373889,
		Bass = 1342373890,
		Treble = 1342373891,
		Equalizer = 1342373892,
		SingleSelect = 1879113728,
		Mux = 1879113729,
		MultipleSelect = 1895890944,
		Mixer = 1895890945,
		MicroTime = 1610809344,
		MilliTime = 1627586560
	}
	[Flags]
	public enum MixerFlags
	{
		Handle = int.MinValue,
		Mixer = 0,
		MixerHandle = int.MinValue,
		WaveOut = 0x10000000,
		WaveOutHandle = -1879048192,
		WaveIn = 0x20000000,
		WaveInHandle = -1610612736,
		MidiOut = 0x30000000,
		MidiOutHandle = -1342177280,
		MidiIn = 0x40000000,
		MidiInHandle = -1073741824,
		Aux = 0x50000000,
		Value = 0,
		ListText = 1,
		QueryMask = 0xF,
		All = 0,
		OneById = 1,
		OneByType = 2,
		GetLineInfoOfDestination = 0,
		GetLineInfoOfSource = 1,
		GetLineInfoOfLineId = 2,
		GetLineInfoOfComponentType = 3,
		GetLineInfoOfTargetType = 4,
		GetLineInfoOfQueryMask = 0xF
	}
	internal class MixerInterop
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
		public struct MIXERCONTROLDETAILS
		{
			public int cbStruct;

			public int dwControlID;

			public int cChannels;

			public IntPtr hwndOwner;

			public int cbDetails;

			public IntPtr paDetails;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERCAPS
		{
			public ushort wMid;

			public ushort wPid;

			public uint vDriverVersion;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
			public string szPname;

			public uint fdwSupport;

			public uint cDestinations;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERLINECONTROLS
		{
			public int cbStruct;

			public int dwLineID;

			public int dwControlID;

			public int cControls;

			public int cbmxctrl;

			public IntPtr pamxctrl;
		}

		[Flags]
		public enum MIXERLINE_LINEF
		{
			MIXERLINE_LINEF_ACTIVE = 1,
			MIXERLINE_LINEF_DISCONNECTED = 0x8000,
			MIXERLINE_LINEF_SOURCE = int.MinValue
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERLINE
		{
			public int cbStruct;

			public int dwDestination;

			public int dwSource;

			public int dwLineID;

			public MIXERLINE_LINEF fdwLine;

			public IntPtr dwUser;

			public MixerLineComponentType dwComponentType;

			public int cChannels;

			public int cConnections;

			public int cControls;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
			public string szShortName;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
			public string szName;

			public uint dwType;

			public uint dwDeviceID;

			public ushort wMid;

			public ushort wPid;

			public uint vDriverVersion;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
			public string szPname;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct Bounds
		{
			public int minimum;

			public int maximum;

			public int reserved2;

			public int reserved3;

			public int reserved4;

			public int reserved5;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct Metrics
		{
			public int step;

			public int customData;

			public int reserved2;

			public int reserved3;

			public int reserved4;

			public int reserved5;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERCONTROL
		{
			public uint cbStruct;

			public int dwControlID;

			public MixerControlType dwControlType;

			public uint fdwControl;

			public uint cMultipleItems;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
			public string szShortName;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
			public string szName;

			public Bounds Bounds;

			public Metrics Metrics;
		}

		public struct MIXERCONTROLDETAILS_BOOLEAN
		{
			public int fValue;
		}

		public struct MIXERCONTROLDETAILS_SIGNED
		{
			public int lValue;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERCONTROLDETAILS_LISTTEXT
		{
			public uint dwParam1;

			public uint dwParam2;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
			public string szName;
		}

		public struct MIXERCONTROLDETAILS_UNSIGNED
		{
			public uint dwValue;
		}

		public const uint MIXERCONTROL_CONTROLF_UNIFORM = 1u;

		public const uint MIXERCONTROL_CONTROLF_MULTIPLE = 2u;

		public const uint MIXERCONTROL_CONTROLF_DISABLED = 2147483648u;

		public const int MAXPNAMELEN = 32;

		public const int MIXER_SHORT_NAME_CHARS = 16;

		public const int MIXER_LONG_NAME_CHARS = 64;

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern int mixerGetNumDevs();

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerOpen(out IntPtr hMixer, int uMxId, IntPtr dwCallback, IntPtr dwInstance, MixerFlags dwOpenFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerClose(IntPtr hMixer);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetControlDetails(IntPtr hMixer, ref MIXERCONTROLDETAILS mixerControlDetails, MixerFlags dwDetailsFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetDevCaps(IntPtr nMixerID, ref MIXERCAPS mixerCaps, int mixerCapsSize);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetID(IntPtr hMixer, out int mixerID, MixerFlags dwMixerIDFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetLineControls(IntPtr hMixer, ref MIXERLINECONTROLS mixerLineControls, MixerFlags dwControlFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetLineInfo(IntPtr hMixer, ref MIXERLINE mixerLine, MixerFlags dwInfoFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerMessage(IntPtr hMixer, uint nMessage, IntPtr dwParam1, IntPtr dwParam2);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerSetControlDetails(IntPtr hMixer, ref MIXERCONTROLDETAILS mixerControlDetails, MixerFlags dwDetailsFlags);
	}
	public class MixerLine
	{
		private MixerInterop.MIXERLINE mixerLine;

		private IntPtr mixerHandle;

		private MixerFlags mixerHandleType;

		public string Name => mixerLine.szName;

		public string ShortName => mixerLine.szShortName;

		public int LineId => mixerLine.dwLineID;

		public MixerLineComponentType ComponentType => mixerLine.dwComponentType;

		public string TypeDescription => mixerLine.dwComponentType switch
		{
			MixerLineComponentType.DestinationUndefined => "Undefined Destination", 
			MixerLineComponentType.DestinationDigital => "Digital Destination", 
			MixerLineComponentType.DestinationLine => "Line Level Destination", 
			MixerLineComponentType.DestinationMonitor => "Monitor Destination", 
			MixerLineComponentType.DestinationSpeakers => "Speakers Destination", 
			MixerLineComponentType.DestinationHeadphones => "Headphones Destination", 
			MixerLineComponentType.DestinationTelephone => "Telephone Destination", 
			MixerLineComponentType.DestinationWaveIn => "Wave Input Destination", 
			MixerLineComponentType.DestinationVoiceIn => "Voice Recognition Destination", 
			MixerLineComponentType.SourceUndefined => "Undefined Source", 
			MixerLineComponentType.SourceDigital => "Digital Source", 
			MixerLineComponentType.SourceLine => "Line Level Source", 
			MixerLineComponentType.SourceMicrophone => "Microphone Source", 
			MixerLineComponentType.SourceSynthesizer => "Synthesizer Source", 
			MixerLineComponentType.SourceCompactDisc => "Compact Disk Source", 
			MixerLineComponentType.SourceTelephone => "Telephone Source", 
			MixerLineComponentType.SourcePcSpeaker => "PC Speaker Source", 
			MixerLineComponentType.SourceWaveOut => "Wave Out Source", 
			MixerLineComponentType.SourceAuxiliary => "Auxiliary Source", 
			MixerLineComponentType.SourceAnalog => "Analog Source", 
			_ => "Invalid Component Type", 
		};

		public int Channels => mixerLine.cChannels;

		public int SourceCount => mixerLine.cConnections;

		public int ControlsCount => mixerLine.cControls;

		public bool IsActive => (mixerLine.fdwLine & MixerInterop.MIXERLINE_LINEF.MIXERLINE_LINEF_ACTIVE) != 0;

		public bool IsDisconnected => (mixerLine.fdwLine & MixerInterop.MIXERLINE_LINEF.MIXERLINE_LINEF_DISCONNECTED) != 0;

		public bool IsSource => (mixerLine.fdwLine & MixerInterop.MIXERLINE_LINEF.MIXERLINE_LINEF_SOURCE) != 0;

		public IEnumerable<MixerControl> Controls => MixerControl.GetMixerControls(mixerHandle, this, mixerHandleType);

		public IEnumerable<MixerLine> Sources
		{
			get
			{
				for (int source = 0; source < SourceCount; source++)
				{
					yield return GetSource(source);
				}
			}
		}

		public string TargetName => mixerLine.szPname;

		public MixerLine(IntPtr mixerHandle, int destinationIndex, MixerFlags mixerHandleType)
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			this.mixerHandle = mixerHandle;
			this.mixerHandleType = mixerHandleType;
			mixerLine = default(MixerInterop.MIXERLINE);
			mixerLine.cbStruct = Marshal.SizeOf(mixerLine);
			mixerLine.dwDestination = destinationIndex;
			MmException.Try(MixerInterop.mixerGetLineInfo(mixerHandle, ref mixerLine, mixerHandleType | MixerFlags.Mixer), "mixerGetLineInfo");
		}

		public MixerLine(IntPtr mixerHandle, int destinationIndex, int sourceIndex, MixerFlags mixerHandleType)
		{
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			this.mixerHandle = mixerHandle;
			this.mixerHandleType = mixerHandleType;
			mixerLine = default(MixerInterop.MIXERLINE);
			mixerLine.cbStruct = Marshal.SizeOf(mixerLine);
			mixerLine.dwDestination = destinationIndex;
			mixerLine.dwSource = sourceIndex;
			MmException.Try(MixerInterop.mixerGetLineInfo(mixerHandle, ref mixerLine, mixerHandleType | MixerFlags.ListText), "mixerGetLineInfo");
		}

		public static int GetMixerIdForWaveIn(int waveInDevice)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			int mixerID = -1;
			MmException.Try(MixerInterop.mixerGetID((IntPtr)waveInDevice, out mixerID, MixerFlags.WaveIn), "mixerGetID");
			return mixerID;
		}

		public MixerLine GetSource(int sourceIndex)
		{
			if (sourceIndex < 0 || sourceIndex >= SourceCount)
			{
				throw new ArgumentOutOfRangeException("sourceIndex");
			}
			return new MixerLine(mixerHandle, mixerLine.dwDestination, sourceIndex, mixerHandleType);
		}

		public override string ToString()
		{
			return $"{Name} {TypeDescription} ({ControlsCount} controls, ID={mixerLine.dwLineID})";
		}
	}
	public enum MixerLineComponentType
	{
		DestinationUndefined = 0,
		DestinationDigital = 1,
		DestinationLine = 2,
		DestinationMonitor = 3,
		DestinationSpeakers = 4,
		DestinationHeadphones = 5,
		DestinationTelephone = 6,
		DestinationWaveIn = 7,
		DestinationVoiceIn = 8,
		SourceUndefined = 4096,
		SourceDigital = 4097,
		SourceLine = 4098,
		SourceMicrophone = 4099,
		SourceSynthesizer = 4100,
		SourceCompactDisc = 4101,
		SourceTelephone = 4102,
		SourcePcSpeaker = 4103,
		SourceWaveOut = 4104,
		SourceAuxiliary = 4105,
		SourceAnalog = 4106
	}
	public class SignedMixerControl : MixerControl
	{
		private MixerInterop.MIXERCONTROLDETAILS_SIGNED signedDetails;

		public int Value
		{
			get
			{
				GetControlDetails();
				return signedDetails.lValue;
			}
			set
			{
				//IL_0052: Unknown result type (might be due to invalid IL or missing references)
				signedDetails.lValue = value;
				mixerControlDetails.paDetails = Marshal.AllocHGlobal(Marshal.SizeOf(signedDetails));
				Marshal.StructureToPtr(signedDetails, mixerControlDetails.paDetails, fDeleteOld: false);
				MmException.Try(MixerInterop.mixerSetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType), "mixerSetControlDetails");
				Marshal.FreeHGlobal(mixerControlDetails.paDetails);
			}
		}

		public int MinValue => mixerControl.Bounds.minimum;

		public int MaxValue => mixerControl.Bounds.maximum;

		public double Percent
		{
			get
			{
				return 100.0 * (double)(Value - MinValue) / (double)(MaxValue - MinValue);
			}
			set
			{
				Value = (int)((double)MinValue + value / 100.0 * (double)(MaxValue - MinValue));
			}
		}

		internal SignedMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
			signedDetails = Marshal.PtrToStructure<MixerInterop.MIXERCONTROLDETAILS_SIGNED>(mixerControlDetails.paDetails);
		}

		public override string ToString()
		{
			return $"{base.ToString()} {Percent}%";
		}
	}
	public class UnsignedMixerControl : MixerControl
	{
		private MixerInterop.MIXERCONTROLDETAILS_UNSIGNED[] unsignedDetails;

		public uint Value
		{
			get
			{
				GetControlDetails();
				return unsignedDetails[0].dwValue;
			}
			set
			{
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				int num = Marshal.SizeOf(unsignedDetails[0]);
				mixerControlDetails.paDetails = Marshal.AllocHGlobal(num * nChannels);
				for (int i = 0; i < nChannels; i++)
				{
					unsignedDetails[i].dwValue = value;
					long num2 = mixerControlDetails.paDetails.ToInt64() + num * i;
					Marshal.StructureToPtr(unsignedDetails[i], (IntPtr)num2, fDeleteOld: false);
				}
				MmException.Try(MixerInterop.mixerSetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType), "mixerSetControlDetails");
				Marshal.FreeHGlobal(mixerControlDetails.paDetails);
			}
		}

		public uint MinValue => (uint)mixerControl.Bounds.minimum;

		public uint MaxValue => (uint)mixerControl.Bounds.maximum;

		public double Percent
		{
			get
			{
				return 100.0 * (double)(Value - MinValue) / (double)(MaxValue - MinValue);
			}
			set
			{
				Value = (uint)((double)MinValue + value / 100.0 * (double)(MaxValue - MinValue));
			}
		}

		internal UnsignedMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
			unsignedDetails = new MixerInterop.MIXERCONTROLDETAILS_UNSIGNED[nChannels];
			for (int i = 0; i < nChannels; i++)
			{
				unsignedDetails[i] = Marshal.PtrToStructure<MixerInterop.MIXERCONTROLDETAILS_UNSIGNED>(mixerControlDetails.paDetails);
			}
		}

		public override string ToString()
		{
			return $"{base.ToString()} {Percent}%";
		}
	}
}
namespace NAudio.Wave
{
	internal enum AcmMetrics
	{
		CountDrivers = 1,
		CountCodecs = 2,
		CountConverters = 3,
		CountFilters = 4,
		CountDisabled = 5,
		CountHardware = 6,
		CountLocalDrivers = 20,
		CountLocalCodecs = 21,
		CountLocalConverters = 22,
		CountLocalFilters = 23,
		CountLocalDisabled = 24,
		HardwareWaveInput = 30,
		HardwareWaveOutput = 31,
		MaxSizeFormat = 50,
		MaxSizeFilter = 51,
		DriverSupport = 100,
		DriverPriority = 101
	}
	[Flags]
	internal enum AcmStreamConvertFlags
	{
		BlockAlign = 4,
		Start = 0x10,
		End = 0x20
	}
	[StructLayout(LayoutKind.Explicit)]
	public struct MmTime
	{
		public const int TIME_MS = 1;

		public const int TIME_SAMPLES = 2;

		public const int TIME_BYTES = 4;

		[FieldOffset(0)]
		public uint wType;

		[FieldOffset(4)]
		public uint ms;

		[FieldOffset(4)]
		public uint sample;

		[FieldOffset(4)]
		public uint cb;

		[FieldOffset(4)]
		public uint ticks;

		[FieldOffset(4)]
		public byte smpteHour;

		[FieldOffset(5)]
		public byte smpteMin;

		[FieldOffset(6)]
		public byte smpteSec;

		[FieldOffset(7)]
		public byte smpteFrame;

		[FieldOffset(8)]
		public byte smpteFps;

		[FieldOffset(9)]
		public byte smpteDummy;

		[FieldOffset(10)]
		public byte smptePad0;

		[FieldOffset(11)]
		public byte smptePad1;

		[FieldOffset(4)]
		public uint midiSongPtrPos;
	}
	public enum WaveCallbackStrategy
	{
		FunctionCallback,
		NewWindow,
		ExistingWindow,
		Event
	}
	[StructLayout(LayoutKind.Sequential)]
	public sealed class WaveHeader
	{
		public IntPtr dataBuffer;

		public int bufferLength;

		public int bytesRecorded;

		public IntPtr userData;

		public WaveHeaderFlags flags;

		public int loops;

		public IntPtr next;

		public IntPtr reserved;
	}
	[Flags]
	public enum WaveHeaderFlags
	{
		BeginLoop = 4,
		Done = 1,
		EndLoop = 8,
		InQueue = 0x10,
		Prepared = 2
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
	public struct WaveInCapabilities
	{
		private short manufacturerId;

		private short productId;

		private int driverVersion;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		private string productName;

		private SupportedWaveFormat supportedFormats;

		private short channels;

		private short reserved;

		private Guid manufacturerGuid;

		private Guid productGuid;

		private Guid nameGuid;

		private const int MaxProductNameLength = 32;

		public int Channels => channels;

		public string ProductName => productName;

		public Guid NameGuid => nameGuid;

		public Guid ProductGuid => productGuid;

		public Guid ManufacturerGuid => manufacturerGuid;

		public bool SupportsWaveFormat(SupportedWaveFormat waveFormat)
		{
			return (supportedFormats & waveFormat) == waveFormat;
		}
	}
	public static class WaveCapabilitiesHelpers
	{
		public static readonly Guid MicrosoftDefaultManufacturerId = new Guid("d5a47fa8-6d98-11d1-a21a-00a0c9223196");

		public static readonly Guid DefaultWaveOutGuid = new Guid("E36DC310-6D9A-11D1-A21A-00A0C9223196");

		public static readonly Guid DefaultWaveInGuid = new Guid("E36DC311-6D9A-11D1-A21A-00A0C9223196");

		public static string GetNameFromGuid(Guid guid)
		{
			string result = null;
			using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\MediaCategories"))
			{
				using RegistryKey registryKey2 = registryKey.OpenSubKey(guid.ToString("B"));
				if (registryKey2 != null)
				{
					result = registryKey2.GetValue("Name") as string;
				}
			}
			return result;
		}
	}
	public class WaveInterop
	{
		[Flags]
		public enum WaveInOutOpenFlags
		{
			CallbackNull = 0,
			CallbackFunction = 0x30000,
			CallbackEvent = 0x50000,
			CallbackWindow = 0x10000,
			CallbackThread = 0x20000
		}

		public enum WaveMessage
		{
			WaveInOpen = 958,
			WaveInClose = 959,
			WaveInData = 960,
			WaveOutClose = 956,
			WaveOutDone = 957,
			WaveOutOpen = 955
		}

		public delegate void WaveCallback(IntPtr hWaveOut, WaveMessage message, IntPtr dwInstance, WaveHeader wavhdr, IntPtr dwReserved);

		[DllImport("winmm.dll")]
		public static extern int mmioStringToFOURCC([MarshalAs(UnmanagedType.LPStr)] string s, int flags);

		[DllImport("winmm.dll")]
		public static extern int waveOutGetNumDevs();

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutPrepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutUnprepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutWrite(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutOpen(out IntPtr hWaveOut, IntPtr uDeviceID, WaveFormat lpFormat, WaveCallback dwCallback, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll", EntryPoint = "waveOutOpen")]
		public static extern MmResult waveOutOpenWindow(out IntPtr hWaveOut, IntPtr uDeviceID, WaveFormat lpFormat, IntPtr callbackWindowHandle, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutReset(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutClose(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutPause(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutRestart(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutGetPosition(IntPtr hWaveOut, ref MmTime mmTime, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutSetVolume(IntPtr hWaveOut, int dwVolume);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutGetVolume(IntPtr hWaveOut, out int dwVolume);

		[DllImport("winmm.dll", CharSet = CharSet.Auto)]
		public static extern MmResult waveOutGetDevCaps(IntPtr deviceID, out WaveOutCapabilities waveOutCaps, int waveOutCapsSize);

		[DllImport("winmm.dll")]
		public static extern int waveInGetNumDevs();

		[DllImport("winmm.dll", CharSet = CharSet.Auto)]
		public static extern MmResult waveInGetDevCaps(IntPtr deviceID, out WaveInCapabilities waveInCaps, int waveInCapsSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInAddBuffer(IntPtr hWaveIn, WaveHeader pwh, int cbwh);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInClose(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInOpen(out IntPtr hWaveIn, IntPtr uDeviceID, WaveFormat lpFormat, WaveCallback dwCallback, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll", EntryPoint = "waveInOpen")]
		public static extern MmResult waveInOpenWindow(out IntPtr hWaveIn, IntPtr uDeviceID, WaveFormat lpFormat, IntPtr callbackWindowHandle, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInPrepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInUnprepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInReset(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInStart(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInStop(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInGetPosition(IntPtr hWaveIn, out MmTime mmTime, int uSize);
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
	public struct WaveOutCapabilities
	{
		private short manufacturerId;

		private short productId;

		private int driverVersion;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		private string productName;

		private SupportedWaveFormat supportedFormats;

		private short channels;

		private short reserved;

		private WaveOutSupport support;

		private Guid manufacturerGuid;

		private Guid productGuid;

		private Guid nameGuid;

		private const int MaxProductNameLength = 32;

		public int Channels => channels;

		public bool SupportsPlaybackRateControl => (support & WaveOutSupport.PlaybackRate) == WaveOutSupport.PlaybackRate;

		public string ProductName => productName;

		public Guid NameGuid => nameGuid;

		public Guid ProductGuid => productGuid;

		public Guid ManufacturerGuid => manufacturerGuid;

		public bool SupportsWaveFormat(SupportedWaveFormat waveFormat)
		{
			return (supportedFormats & waveFormat) == waveFormat;
		}
	}
	[Flags]
	public enum SupportedWaveFormat
	{
		WAVE_FORMAT_1M08 = 1,
		WAVE_FORMAT_1S08 = 2,
		WAVE_FORMAT_1M16 = 4,
		WAVE_FORMAT_1S16 = 8,
		WAVE_FORMAT_2M08 = 0x10,
		WAVE_FORMAT_2S08 = 0x20,
		WAVE_FORMAT_2M16 = 0x40,
		WAVE_FORMAT_2S16 = 0x80,
		WAVE_FORMAT_4M08 = 0x100,
		WAVE_FORMAT_4S08 = 0x200,
		WAVE_FORMAT_4M16 = 0x400,
		WAVE_FORMAT_4S16 = 0x800,
		WAVE_FORMAT_44M08 = 0x100,
		WAVE_FORMAT_44S08 = 0x200,
		WAVE_FORMAT_44M16 = 0x400,
		WAVE_FORMAT_44S16 = 0x800,
		WAVE_FORMAT_48M08 = 0x1000,
		WAVE_FORMAT_48S08 = 0x2000,
		WAVE_FORMAT_48M16 = 0x4000,
		WAVE_FORMAT_48S16 = 0x8000,
		WAVE_FORMAT_96M08 = 0x10000,
		WAVE_FORMAT_96S08 = 0x20000,
		WAVE_FORMAT_96M16 = 0x40000,
		WAVE_FORMAT_96S16 = 0x80000
	}
	[Flags]
	internal enum WaveOutSupport
	{
		Pitch = 1,
		PlaybackRate = 2,
		Volume = 4,
		LRVolume = 8,
		Sync = 0x10,
		SampleAccurate = 0x20
	}
	public class AcmMp3FrameDecompressor : IMp3FrameDecompressor, IDisposable
	{
		private readonly AcmStream conversionStream;

		private readonly WaveFormat pcmFormat;

		private bool disposed;

		public WaveFormat OutputFormat => pcmFormat;

		public AcmMp3FrameDecompressor(WaveFormat sourceFormat)
		{
			pcmFormat = AcmStream.SuggestPcmFormat(sourceFormat);
			try
			{
				conversionStream = new AcmStream(sourceFormat, pcmFormat);
			}
			catch (Exception)
			{
				disposed = true;
				GC.SuppressFinalize(this);
				throw;
			}
		}

		public int DecompressFrame(Mp3Frame frame, byte[] dest, int destOffset)
		{
			if (frame == null)
			{
				throw new ArgumentNullException("frame", "You must provide a non-null Mp3Frame to decompress");
			}
			Array.Copy(frame.RawData, conversionStream.SourceBuffer, frame.FrameLength);
			int sourceBytesConverted;
			int num = conversionStream.Convert(frame.FrameLength, out sourceBytesConverted);
			if (sourceBytesConverted != frame.FrameLength)
			{
				throw new InvalidOperationException($"Couldn't convert the whole MP3 frame (converted {sourceBytesConverted}/{frame.FrameLength})");
			}
			Array.Copy(conversionStream.DestBuffer, 0, dest, destOffset, num);
			return num;
		}

		public void Reset()
		{
			conversionStream.Reposition();
		}

		public void Dispose()
		{
			if (!disposed)
			{
				disposed = true;
				if (conversionStream != null)
				{
					conversionStream.Dispose();
				}
				GC.SuppressFinalize(this);
			}
		}

		~AcmMp3FrameDecompressor()
		{
			Dispose();
		}
	}
	public class WaveFormatConversionProvider : IWaveProvider, IDisposable
	{
		private readonly AcmStream conversionStream;

		private readonly IWaveProvider sourceProvider;

		private readonly int preferredSourceReadSize;

		private int leftoverDestBytes;

		private int leftoverDestOffset;

		private int leftoverSourceBytes;

		private bool isDisposed;

		public WaveFormat WaveFormat { get; }

		public WaveFormatConversionProvider(WaveFormat targetFormat, IWaveProvider sourceProvider)
		{
			this.sourceProvider = sourceProvider;
			WaveFormat = targetFormat;
			conversionStream = new AcmStream(sourceProvider.WaveFormat, targetFormat);
			preferredSourceReadSize = Math.Min(sourceProvider.WaveFormat.AverageBytesPerSecond, conversionStream.SourceBuffer.Length);
			preferredSourceReadSize -= preferredSourceReadSize % sourceProvider.WaveFormat.BlockAlign;
		}

		public void Reposition()
		{
			leftoverDestBytes = 0;
			leftoverDestOffset = 0;
			leftoverSourceBytes = 0;
			conversionStream.Reposition();
		}

		public int Read(byte[] buffer, int offset, int count)
		{
			int i = 0;
			if (count % WaveFormat.BlockAlign != 0)
			{
				count -= count % WaveFormat.BlockAlign;
			}
			int num5;
			for (; i < count; i += num5)
			{
				int num = Math.Min(count - i, leftoverDestBytes);
				if (num > 0)
				{
					Array.Copy(conversionStream.DestBuffer, leftoverDestOffset, buffer, offset + i, num);
					leftoverDestOffset += num;
					leftoverDestBytes -= num;
					i += num;
				}
				if (i >= count)
				{
					break;
				}
				int num2 = Math.Min(preferredSourceReadSize, conversionStream.SourceBuffer.Length - leftoverSourceBytes);
				int num3 = sourceProvider.Read(conversionStream.SourceBuffer, leftoverSourceBytes, num2) + leftoverSourceBytes;
				if (num3 == 0)
				{
					break;
				}
				int sourceBytesConverted;
				int num4 = conversionStream.Convert(num3, out sourceBytesConverted);
				if (sourceBytesConverted == 0)
				{
					break;
				}
				leftoverSourceBytes = num3 - sourceBytesConverted;
				if (leftoverSourceBytes > 0)
				{
					Buffer.BlockCopy(conversionStream.SourceBuffer, sourceBytesConverted, conversionStream.SourceBuffer, 0, leftoverSourceBytes);
				}
				if (num4 <= 0)
				{
					break;
				}
				int val = count - i;
				num5 = Math.Min(num4, val);
				if (num5 < num4)
				{
					leftoverDestBytes = num4 - num5;
					leftoverDestOffset = num5;
				}
				Array.Copy(conversionStream.DestBuffer, 0, buffer, i + offset, num5);
			}
			return i;
		}

		protected virtual void Dispose(bool disposing)
		{
			if (!isDisposed)
			{
				isDisposed = true;
				conversionStream?.Dispose();
			}
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		~WaveFormatConversionProvider()
		{
			Dispose(disposing: false);
		}
	}
	public class WaveFormatConversionStream : WaveStream
	{
		private readonly WaveFormatConversionProvider conversionProvider;

		private readonly WaveFormat targetFormat;

		private readonly long length;

		private long position;

		private readonly WaveStream sourceStream;

		private bool isDisposed;

		public override long Position
		{
			get
			{
				return position;
			}
			set
			{
				value -= value % ((WaveStream)this).BlockAlign;
				long num = EstimateDestToSource(value);
				((Stream)(object)sourceStream).Position = num;
				position = EstimateSourceToDest(((Stream)(object)sourceStream).Position);
				conversionProvider.Reposition();
			}
		}

		public override long Length => length;

		public override WaveFormat WaveFormat => targetFormat;

		public WaveFormatConversionStream(WaveFormat targetFormat, WaveStream sourceStream)
		{
			this.sourceStream = sourceStream;
			this.targetFormat = targetFormat;
			conversionProvider = new WaveFormatConversionProvider(targetFormat, (IWaveProvider)(object)sourceStream);
			length = EstimateSourceToDest((int)((Stream)(object)sourceStream).Length);
			position = 0L;
		}

		public static WaveStream CreatePcmStream(WaveStream sourceStream)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Invalid comparison between Unknown and I4
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Expected O, but got Unknown
			if ((int)sourceStream.WaveFormat.Encoding == 1)
			{
				return sourceStream;
			}
			WaveFormat val = AcmStream.SuggestPcmFormat(sourceStream.WaveFormat);
			if (val.SampleRate < 8000)
			{
				if ((int)sourceStream.WaveFormat.Encoding != 163)
				{
					throw new InvalidOperationException("Invalid suggested output format, please explicitly provide a target format");
				}
				val = new WaveFormat(8000, 16, 1);
			}
			return (WaveStream)(object)new WaveFormatConversionStream(val, sourceStream);
		}

		[Obsolete("can be unreliable, use of this method not encouraged")]
		public int SourceToDest(int source)
		{
			return (int)EstimateSourceToDest(source);
		}

		private long EstimateSourceToDest(long source)
		{
			long num = source * targetFormat.AverageBytesPerSecond / sourceStream.WaveFormat.AverageBytesPerSecond;
			return num - num % targetFormat.BlockAlign;
		}

		private long EstimateDestToSource(long dest)
		{
			long num = dest * sourceStream.WaveFormat.AverageBytesPerSecond / targetFormat.AverageBytesPerSecond;
			return (int)(num - num % sourceStream.WaveFormat.BlockAlign);
		}

		[Obsolete("can be unreliable, use of this method not encouraged")]
		public int DestToSource(int dest)
		{
			return (int)EstimateDestToSource(dest);
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			int num = conversionProvider.Read(buffer, offset, count);
			position += num;
			return num;
		}

		protected override void Dispose(bool disposing)
		{
			if (!isDisposed)
			{
				isDisposed = true;
				if (disposing)
				{
					((Stream)(object)sourceStream).Dispose();
					conversionProvider.Dispose();
				}
			}
			((Stream)this).Dispose(disposing);
		}
	}
	public class WaveInBuffer : IDisposable
	{
		private readonly WaveHeader header;

		private readonly int bufferSize;

		private readonly byte[] buffer;

		private GCHandle hBuffer;

		private IntPtr waveInHandle;

		private GCHandle hHeader;

		private GCHandle hThis;

		public byte[] Data => buffer;

		public bool Done => (header.flags & WaveHeaderFlags.Done) == WaveHeaderFlags.Done;

		public bool InQueue => (header.flags & WaveHeaderFlags.InQueue) == WaveHeaderFlags.InQueue;

		public int BytesRecorded => header.bytesRecorded;

		public int BufferSize => bufferSize;

		public WaveInBuffer(IntPtr waveInHandle, int bufferSize)
		{
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			this.bufferSize = bufferSize;
			buffer = new byte[bufferSize];
			hBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
			this.waveInHandle = waveInHandle;
			header = new WaveHeader();
			hHeader = GCHandle.Alloc(header, GCHandleType.Pinned);
			header.dataBuffer = hBuffer.AddrOfPinnedObject();
			header.bufferLength = bufferSize;
			header.loops = 1;
			hThis = GCHandle.Alloc(this);
			header.userData = (IntPtr)hThis;
			MmException.Try(WaveInterop.waveInPrepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveInPrepareHeader");
		}

		public void Reuse()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(WaveInterop.waveInUnprepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveUnprepareHeader");
			MmException.Try(WaveInterop.waveInPrepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveInPrepareHeader");
			MmException.Try(WaveInterop.waveInAddBuffer(waveInHandle, header, Marshal.SizeOf(header)), "waveInAddBuffer");
		}

		~WaveInBuffer()
		{
			Dispose(disposing: false);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			if (waveInHandle != IntPtr.Zero)
			{
				WaveInterop.waveInUnprepareHeader(waveInHandle, header, Marshal.SizeOf(header));
				waveInHandle = IntPtr.Zero;
			}
			if (hHeader.IsAllocated)
			{
				hHeader.Free();
			}
			if (hBuffer.IsAllocated)
			{
				hBuffer.Free();
			}
			if (hThis.IsAllocated)
			{
				hThis.Free();
			}
		}
	}
	public class WaveInEvent : IWaveIn, IDisposable
	{
		private readonly AutoResetEvent callbackEvent;

		private readonly SynchronizationContext syncContext;

		private IntPtr waveInHandle;

		private volatile CaptureState captureState;

		private WaveInBuffer[] buffers;

		public static int DeviceCount => WaveInterop.waveInGetNumDevs();

		public int BufferMilliseconds { get; set; }

		public int NumberOfBuffers { get; set; }

		public int DeviceNumber { get; set; }

		public WaveFormat WaveFormat { get; set; }

		public event EventHandler<WaveInEventArgs> DataAvailable;

		public event EventHandler<StoppedEventArgs> RecordingStopped;

		public WaveInEvent()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			callbackEvent = new AutoResetEvent(initialState: false);
			syncContext = SynchronizationContext.Current;
			DeviceNumber = 0;
			WaveFormat = new WaveFormat(8000, 16, 1);
			BufferMilliseconds = 100;
			NumberOfBuffers = 3;
			captureState = (CaptureState)0;
		}

		public static WaveInCapabilities GetCapabilities(int devNumber)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			WaveInCapabilities waveInCaps = default(WaveInCapabilities);
			int waveInCapsSize = Marshal.SizeOf(waveInCaps);
			MmException.Try(WaveInterop.waveInGetDevCaps((IntPtr)devNumber, out waveInCaps, waveInCapsSize), "waveInGetDevCaps");
			return waveInCaps;
		}

		private void CreateBuffers()
		{
			int num = BufferMilliseconds * WaveFormat.AverageBytesPerSecond / 1000;
			if (num % WaveFormat.BlockAlign != 0)
			{
				num -= num % WaveFormat.BlockAlign;
			}
			buffers = new WaveInBuffer[NumberOfBuffers];
			for (int i = 0; i < buffers.Length; i++)
			{
				buffers[i] = new WaveInBuffer(waveInHandle, num);
			}
		}

		private void OpenWaveInDevice()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			CloseWaveInDevice();
			MmException.Try(WaveInterop.waveInOpenWindow(out waveInHandle, (IntPtr)DeviceNumber, WaveFormat, callbackEvent.SafeWaitHandle.DangerousGetHandle(), IntPtr.Zero, WaveInterop.WaveInOutOpenFlags.CallbackEvent), "waveInOpen");
			CreateBuffers();
		}

		public void StartRecording()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			if ((int)captureState != 0)
			{
				throw new InvalidOperationException("Already recording");
			}
			OpenWaveInDevice();
			MmException.Try(WaveInterop.waveInStart(waveInHandle), "waveInStart");
			captureState = (CaptureState)1;
			ThreadPool.QueueUserWorkItem(delegate
			{
				RecordThread();
			}, null);
		}

		private void RecordThread()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Exception e = null;
			try
			{
				DoRecording();
			}
			catch (Exception ex)
			{
				e = ex;
			}
			finally
			{
				captureState = (CaptureState)0;
				RaiseRecordingStoppedEvent(e);
			}
		}

		private void DoRecording()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Invalid comparison between Unknown and I4
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Invalid comparison between Unknown and I4
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Expected O, but got Unknown
			captureState = (CaptureState)2;
			WaveInBuffer[] array = buffers;
			foreach (WaveInBuffer waveInBuffer in array)
			{
				if (!waveInBuffer.InQueue)
				{
					waveInBuffer.Reuse();
				}
			}
			while ((int)captureState == 2)
			{
				if (!callbackEvent.WaitOne())
				{
					continue;
				}
				array = buffers;
				foreach (WaveInBuffer waveInBuffer2 in array)
				{
					if (waveInBuffer2.Done)
					{
						if (waveInBuffer2.BytesRecorded > 0)
						{
							this.DataAvailable?.Invoke(this, new WaveInEventArgs(waveInBuffer2.Data, waveInBuffer2.BytesRecorded));
						}
						if ((int)captureState == 2)
						{
							waveInBuffer2.Reuse();
						}
					}
				}
			}
		}

		private void RaiseRecordingStoppedEvent(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.RecordingStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}

		public void StopRecording()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			if ((int)captureState != 0)
			{
				captureState = (CaptureState)3;
				MmException.Try(WaveInterop.waveInStop(waveInHandle), "waveInStop");
				MmException.Try(WaveInterop.waveInReset(waveInHandle), "waveInReset");
				callbackEvent.Set();
			}
		}

		public long GetPosition()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			MmTime mmTime = default(MmTime);
			mmTime.wType = 4u;
			MmException.Try(WaveInterop.waveInGetPosition(waveInHandle, out mmTime, Marshal.SizeOf(mmTime)), "waveInGetPosition");
			if (mmTime.wType != 4)
			{
				throw new Exception($"waveInGetPosition: wType -> Expected {4}, Received {mmTime.wType}");
			}
			return mmTime.cb;
		}

		protected virtual void Dispose(bool disposing)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			if (disposing)
			{
				if ((int)captureState != 0)
				{
					StopRecording();
				}
				CloseWaveInDevice();
			}
		}

		private void CloseWaveInDevice()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			WaveInterop.waveInReset(waveInHandle);
			if (buffers != null)
			{
				for (int i = 0; i < buffers.Length; i++)
				{
					buffers[i].Dispose();
				}
				buffers = null;
			}
			WaveInterop.waveInClose(waveInHandle);
			waveInHandle = IntPtr.Zero;
		}

		public MixerLine GetMixerLine()
		{
			if (waveInHandle != IntPtr.Zero)
			{
				return new MixerLine(waveInHandle, 0, MixerFlags.WaveInHandle);
			}
			return new MixerLine((IntPtr)DeviceNumber, 0, MixerFlags.WaveIn);
		}

		public void Dispose()
		{
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}
	}
	public class WaveOutBuffer : IDisposable
	{
		private readonly WaveHeader header;

		private readonly int bufferSize;

		private readonly byte[] buffer;

		private readonly IWaveProvider waveStream;

		private readonly object waveOutLock;

		private GCHandle hBuffer;

		private IntPtr hWaveOut;

		private GCHandle hHeader;

		private GCHandle hThis;

		public bool InQueue => (header.flags & WaveHeaderFlags.InQueue) == WaveHeaderFlags.InQueue;

		public int BufferSize => bufferSize;

		public WaveOutBuffer(IntPtr hWaveOut, int bufferSize, IWaveProvider bufferFillStream, object waveOutLock)
		{
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			this.bufferSize = bufferSize;
			buffer = new byte[bufferSize];
			hBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
			this.hWaveOut = hWaveOut;
			waveStream = bufferFillStream;
			this.waveOutLock = waveOutLock;
			header = new WaveHeader();
			hHeader = GCHandle.Alloc(header, GCHandleType.Pinned);
			header.dataBuffer = hBuffer.AddrOfPinnedObject();
			header.bufferLength = bufferSize;
			header.loops = 1;
			hThis = GCHandle.Alloc(this);
			header.userData = (IntPtr)hThis;
			lock (waveOutLock)
			{
				MmException.Try(WaveInterop.waveOutPrepareHeader(hWaveOut, header, Marshal.SizeOf(header)), "waveOutPrepareHeader");
			}
		}

		~WaveOutBuffer()
		{
			Dispose(disposing: false);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			if (hHeader.IsAllocated)
			{
				hHeader.Free();
			}
			if (hBuffer.IsAllocated)
			{
				hBuffer.Free();
			}
			if (hThis.IsAllocated)
			{
				hThis.Free();
			}
			if (hWaveOut != IntPtr.Zero)
			{
				lock (waveOutLock)
				{
					WaveInterop.waveOutUnprepareHeader(hWaveOut, header, Marshal.SizeOf(header));
				}
				hWaveOut = IntPtr.Zero;
			}
		}

		public bool OnDone()
		{
			int num;
			lock (waveStream)
			{
				num = waveStream.Read(buffer, 0, buffer.Length);
			}
			if (num == 0)
			{
				return false;
			}
			for (int i = num; i < buffer.Length; i++)
			{
				buffer[i] = 0;
			}
			WriteToWaveOut();
			return true;
		}

		private void WriteToWaveOut()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			MmResult val;
			lock (waveOutLock)
			{
				val = WaveInterop.waveOutWrite(hWaveOut, header, Marshal.SizeOf(header));
			}
			if ((int)val != 0)
			{
				throw new MmException(val, "waveOutWrite");
			}
			GC.KeepAlive(this);
		}
	}
	public class WaveOutEvent : IWavePlayer, IDisposable, IWavePosition
	{
		private readonly object waveOutLock;

		private readonly SynchronizationContext syncContext;

		private IntPtr hWaveOut;

		private WaveOutBuffer[] buffers;

		private IWaveProvider waveStream;

		private volatile PlaybackState playbackState;

		private AutoResetEvent callbackEvent;

		public int DesiredLatency { get; set; }

		public int NumberOfBuffers { get; set; }

		public int DeviceNumber { get; set; } = -1;


		public WaveFormat OutputWaveFormat => waveStream.WaveFormat;

		public PlaybackState PlaybackState => playbackState;

		public float Volume
		{
			get
			{
				return WaveOutUtils.GetWaveOutVolume(hWaveOut, waveOutLock);
			}
			set
			{
				WaveOutUtils.SetWaveOutVolume(value, hWaveOut, waveOutLock);
			}
		}

		public event EventHandler<StoppedEventArgs> PlaybackStopped;

		public WaveOutEvent()
		{
			syncContext = SynchronizationContext.Current;
			if (syncContext != null && (syncContext.GetType().Name == "LegacyAspNetSynchronizationContext" || syncContext.GetType().Name == "AspNetSynchronizationContext"))
			{
				syncContext = null;
			}
			DesiredLatency = 300;
			NumberOfBuffers = 2;
			waveOutLock = new object();
		}

		public void Init(IWaveProvider waveProvider)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState != 0)
			{
				throw new InvalidOperationException("Can't re-initialize during playback");
			}
			if (hWaveOut != IntPtr.Zero)
			{
				DisposeBuffers();
				CloseWaveOut();
			}
			callbackEvent = new AutoResetEvent(initialState: false);
			waveStream = waveProvider;
			int bufferSize = waveProvider.WaveFormat.ConvertLatencyToByteSize((DesiredLatency + NumberOfBuffers - 1) / NumberOfBuffers);
			MmResult val;
			lock (waveOutLock)
			{
				val = WaveInterop.waveOutOpenWindow(out hWaveOut, (IntPtr)DeviceNumber, waveStream.WaveFormat, callbackEvent.SafeWaitHandle.DangerousGetHandle(), IntPtr.Zero, WaveInterop.WaveInOutOpenFlags.CallbackEvent);
			}
			MmException.Try(val, "waveOutOpen");
			buffers = new WaveOutBuffer[NumberOfBuffers];
			playbackState = (PlaybackState)0;
			for (int i = 0; i < NumberOfBuffers; i++)
			{
				buffers[i] = new WaveOutBuffer(hWaveOut, bufferSize, waveStream, waveOutLock);
			}
		}

		public void Play()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Invalid comparison between Unknown and I4
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			if (buffers == null || waveStream == null)
			{
				throw new InvalidOperationException("Must call Init first");
			}
			if ((int)playbackState == 0)
			{
				playbackState = (PlaybackState)1;
				callbackEvent.Set();
				ThreadPool.QueueUserWorkItem(delegate
				{
					PlaybackThread();
				}, null);
			}
			else if ((int)playbackState == 2)
			{
				Resume();
				callbackEvent.Set();
			}
		}

		private void PlaybackThread()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Exception e = null;
			try
			{
				DoPlayback();
			}
			catch (Exception ex)
			{
				e = ex;
			}
			finally
			{
				playbackState = (PlaybackState)0;
				RaisePlaybackStoppedEvent(e);
			}
		}

		private void DoPlayback()
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Invalid comparison between Unknown and I4
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			while ((int)playbackState != 0)
			{
				if (!callbackEvent.WaitOne(DesiredLatency))
				{
					_ = playbackState;
					_ = 1;
				}
				if ((int)playbackState != 1)
				{
					continue;
				}
				int num = 0;
				WaveOutBuffer[] array = buffers;
				foreach (WaveOutBuffer waveOutBuffer in array)
				{
					if (waveOutBuffer.InQueue || waveOutBuffer.OnDone())
					{
						num++;
					}
				}
				if (num == 0)
				{
					playbackState = (PlaybackState)0;
					callbackEvent.Set();
				}
			}
		}

		public void Pause()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 1)
			{
				playbackState = (PlaybackState)2;
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutPause(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutPause");
				}
			}
		}

		private void Resume()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 2)
			{
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutRestart(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutRestart");
				}
				playbackState = (PlaybackState)1;
			}
		}

		public void Stop()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState != 0)
			{
				playbackState = (PlaybackState)0;
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutReset(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutReset");
				}
				callbackEvent.Set();
			}
		}

		public long GetPosition()
		{
			return WaveOutUtils.GetPositionBytes(hWaveOut, waveOutLock);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			Stop();
			if (disposing)
			{
				DisposeBuffers();
			}
			CloseWaveOut();
		}

		private void CloseWaveOut()
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (callbackEvent != null)
			{
				callbackEvent.Close();
				callbackEvent = null;
			}
			lock (waveOutLock)
			{
				if (hWaveOut != IntPtr.Zero)
				{
					WaveInterop.waveOutClose(hWaveOut);
					hWaveOut = IntPtr.Zero;
				}
			}
		}

		private void DisposeBuffers()
		{
			if (buffers != null)
			{
				WaveOutBuffer[] array = buffers;
				for (int i = 0; i < array.Length; i++)
				{
					array[i].Dispose();
				}
				buffers = null;
			}
		}

		~WaveOutEvent()
		{
			Dispose(disposing: false);
		}

		private void RaisePlaybackStoppedEvent(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.PlaybackStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}
	}
	public static class WaveOutUtils
	{
		public static float GetWaveOutVolume(IntPtr hWaveOut, object lockObject)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			MmResult val;
			int dwVolume;
			lock (lockObject)
			{
				val = WaveInterop.waveOutGetVolume(hWaveOut, out dwVolume);
			}
			MmException.Try(val, "waveOutGetVolume");
			return (float)(dwVolume & 0xFFFF) / 65535f;
		}

		public static void SetWaveOutVolume(float value, IntPtr hWaveOut, object lockObject)
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			if (value < 0f)
			{
				throw new ArgumentOutOfRangeException("value", "Volume must be between 0.0 and 1.0");
			}
			if (value > 1f)
			{
				throw new ArgumentOutOfRangeException("value", "Volume must be between 0.0 and 1.0");
			}
			int dwVolume = (int)(value * 65535f) + ((int)(value * 65535f) << 16);
			MmResult val;
			lock (lockObject)
			{
				val = WaveInterop.waveOutSetVolume(hWaveOut, dwVolume);
			}
			MmException.Try(val, "waveOutSetVolume");
		}

		public static long GetPositionBytes(IntPtr hWaveOut, object lockObject)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			lock (lockObject)
			{
				MmTime mmTime = default(MmTime);
				mmTime.wType = 4u;
				MmException.Try(WaveInterop.waveOutGetPosition(hWaveOut, ref mmTime, Marshal.SizeOf(mmTime)), "waveOutGetPosition");
				if (mmTime.wType != 4)
				{
					throw new Exception($"waveOutGetPosition: wType -> Expected {4}, Received {mmTime.wType}");
				}
				return mmTime.cb;
			}
		}
	}
}
namespace NAudio.Wave.Compression
{
	public class AcmDriver : IDisposable
	{
		private static List<AcmDriver> drivers;

		private AcmDriverDetails details;

		private IntPtr driverId;

		private IntPtr driverHandle;

		private List<AcmFormatTag> formatTags;

		private List<AcmFormat> tempFormatsList;

		private IntPtr localDllHandle;

		public int MaxFormatSize
		{
			get
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				MmException.Try(AcmInterop.acmMetrics(driverHandle, AcmMetrics.MaxSizeFormat, out var output), "acmMetrics");
				return output;
			}
		}

		public string ShortName => details.shortName;

		public string LongName => details.longName;

		public IntPtr DriverId => driverId;

		public IEnumerable<AcmFormatTag> FormatTags
		{
			get
			{
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				if (formatTags == null)
				{
					if (driverHandle == IntPtr.Zero)
					{
						throw new InvalidOperationException("Driver must be opened first");
					}
					formatTags = new List<AcmFormatTag>();
					AcmFormatTagDetails formatTagDetails = default(AcmFormatTagDetails);
					formatTagDetails.structureSize = Marshal.SizeOf(formatTagDetails);
					MmException.Try(AcmInterop.acmFormatTagEnum(driverHandle, ref formatTagDetails, AcmFormatTagEnumCallback, IntPtr.Zero, 0), "acmFormatTagEnum");
				}
				return formatTags;
			}
		}

		public static bool IsCodecInstalled(string shortName)
		{
			foreach (AcmDriver item in EnumerateAcmDrivers())
			{
				if (item.ShortName == shortName)
				{
					return true;
				}
			}
			return false;
		}

		public static AcmDriver AddLocalDriver(string driverFile)
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			IntPtr intPtr = NativeMethods.LoadLibrary(driverFile);
			if (intPtr == IntPtr.Zero)
			{
				throw new ArgumentException("Failed to load driver file");
			}
			IntPtr procAddress = NativeMethods.GetProcAddress(intPtr, "DriverProc");
			if (procAddress == IntPtr.Zero)
			{
				NativeMethods.FreeLibrary(intPtr);
				throw new ArgumentException("Failed to discover DriverProc");
			}
			IntPtr hAcmDriver;
			MmResult val = AcmInterop.acmDriverAdd(out hAcmDriver, intPtr, procAddress, 0, AcmDriverAddFlags.Function);
			if ((int)val != 0)
			{
				NativeMethods.FreeLibrary(intPtr);
				throw new MmException(val, "acmDriverAdd");
			}
			AcmDriver acmDriver = new AcmDriver(hAcmDriver);
			if (string.IsNullOrEmpty(acmDriver.details.longName))
			{
				acmDriver.details.longName = "Local driver: " + Path.GetFileName(driverFile);
				acmDriver.localDllHandle = intPtr;
			}
			return acmDriver;
		}

		public static void RemoveLocalDriver(AcmDriver localDriver)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			if (localDriver.localDllHandle == IntPtr.Zero)
			{
				throw new ArgumentException("Please pass in the AcmDriver returned by the AddLocalDriver method");
			}
			MmResult val = AcmInterop.acmDriverRemove(localDriver.driverId, 0);
			NativeMethods.FreeLibrary(localDriver.localDllHandle);
			MmException.Try(val, "acmDriverRemove");
		}

		public static bool ShowFormatChooseDialog(IntPtr ownerWindowHandle, string windowTitle, AcmFormatEnumFlags enumFlags, WaveFormat enumFormat, out WaveFormat selectedFormat, out string selectedFormatDescription, out string selectedFormatTagDescription)
		{
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Invalid comparison between Unknown and I4
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Invalid comparison between Unknown and I4
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			AcmFormatChoose formatChoose = default(AcmFormatChoose);
			formatChoose.structureSize = Marshal.SizeOf(formatChoose);
			formatChoose.styleFlags = AcmFormatChooseStyleFlags.None;
			formatChoose.ownerWindowHandle = ownerWindowHandle;
			int num = 200;
			formatChoose.selectedWaveFormatPointer = Marshal.AllocHGlobal(num);
			formatChoose.selectedWaveFormatByteSize = num;
			formatChoose.title = windowTitle;
			formatChoose.name = null;
			formatChoose.formatEnumFlags = enumFlags;
			formatChoose.waveFormatEnumPointer = IntPtr.Zero;
			if (enumFormat != null)
			{
				IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf<WaveFormat>(enumFormat));
				Marshal.StructureToPtr<WaveFormat>(enumFormat, intPtr, fDeleteOld: false);
				formatChoose.waveFormatEnumPointer = intPtr;
			}
			formatChoose.instanceHandle = IntPtr.Zero;
			formatChoose.templateName = null;
			MmResult val = AcmInterop.acmFormatChoose(ref formatChoose);
			selectedFormat = null;
			selectedFormatDescription = null;
			selectedFormatTagDescription = null;
			if ((int)val == 0)
			{
				selectedFormat = WaveFormat.MarshalFromPtr(formatChoose.selectedWaveFormatPointer);
				selectedFormatDescription = formatChoose.formatDescription;
				selectedFormatTagDescription = formatChoose.formatTagDescription;
			}
			Marshal.FreeHGlobal(formatChoose.waveFormatEnumPointer);
			Marshal.FreeHGlobal(formatChoose.selectedWaveFormatPointer);
			if ((int)val != 515 && (int)val != 0)
			{
				throw new MmException(val, "acmFormatChoose");
			}
			return (int)val == 0;
		}

		public static AcmDriver FindByShortName(string shortName)
		{
			foreach (AcmDriver item in EnumerateAcmDrivers())
			{
				if (item.ShortName == shortName)
				{
					return item;
				}
			}
			return null;
		}

		public static IEnumerable<AcmDriver> EnumerateAcmDrivers()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			drivers = new List<AcmDriver>();
			MmException.Try(AcmInterop.acmDriverEnum(DriverEnumCallback, IntPtr.Zero, (AcmDriverEnumFlags)0), "acmDriverEnum");
			return drivers;
		}

		private static bool DriverEnumCallback(IntPtr hAcmDriver, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags)
		{
			drivers.Add(new AcmDriver(hAcmDriver));
			return true;
		}

		private AcmDriver(IntPtr hAcmDriver)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			driverId = hAcmDriver;
			details = default(AcmDriverDetails);
			details.structureSize = Marshal.SizeOf(details);
			MmException.Try(AcmInterop.acmDriverDetails(hAcmDriver, ref details, 0), "acmDriverDetails");
		}

		public override string ToString()
		{
			return LongName;
		}

		public IEnumerable<AcmFormat> GetFormats(AcmFormatTag formatTag)
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected I4, but got Unknown
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			if (driverHandle == IntPtr.Zero)
			{
				throw new InvalidOperationException("Driver must be opened first");
			}
			tempFormatsList = new List<AcmFormat>();
			AcmFormatDetails formatDetails = default(AcmFormatDetails);
			formatDetails.structSize = Marshal.SizeOf(formatDetails);
			formatDetails.waveFormatByteSize = 1024;
			formatDetails.waveFormatPointer = Marshal.AllocHGlobal(formatDetails.waveFormatByteSize);
			formatDetails.formatTag = (int)formatTag.FormatTag;
			MmResult val = AcmInterop.acmFormatEnum(driverHandle, ref formatDetails, AcmFormatEnumCallback, IntPtr.Zero, AcmFormatEnumFlags.None);
			Marshal.FreeHGlobal(formatDetails.waveFormatPointer);
			MmException.Try(val, "acmFormatEnum");
			return tempFormatsList;
		}

		public void Open()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (driverHandle == IntPtr.Zero)
			{
				MmException.Try(AcmInterop.acmDriverOpen(out driverHandle, DriverId, 0), "acmDriverOpen");
			}
		}

		public void Close()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			if (driverHandle != IntPtr.Zero)
			{
				MmException.Try(AcmInterop.acmDriverClose(driverHandle, 0), "acmDriverClose");
				driverHandle = IntPtr.Zero;
			}
		}

		private bool AcmFormatTagEnumCallback(IntPtr hAcmDriverId, ref AcmFormatTagDetails formatTagDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags)
		{
			formatTags.Add(new AcmFormatTag(formatTagDetails));
			return true;
		}

		private bool AcmFormatEnumCallback(IntPtr hAcmDriverId, ref AcmFormatDetails formatDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags)
		{
			tempFormatsList.Add(new AcmFormat(formatDetails));
			return true;
		}

		public void Dispose()
		{
			if (driverHandle != IntPtr.Zero)
			{
				Close();
				GC.SuppressFinalize(this);
			}
		}
	}
	internal enum AcmDriverAddFlags
	{
		Local = 0,
		Global = 8,
		Function = 3,
		NotifyWindowHandle = 4
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	internal struct AcmDriverDetails
	{
		public int structureSize;

		public uint fccType;

		public uint fccComp;

		public ushort manufacturerId;

		public ushort productId;

		public uint acmVersion;

		public uint driverVersion;

		public AcmDriverDetailsSupportFlags supportFlags;

		public int formatTagsCount;

		public int filterTagsCount;

		public IntPtr hicon;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		public string shortName;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string longName;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
		public string copyright;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string licensing;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
		public string features;

		private const int ShortNameChars = 32;

		private const int LongNameChars = 128;

		private const int CopyrightChars = 80;

		private const int LicensingChars = 128;

		private const int FeaturesChars = 512;
	}
	[Flags]
	public enum AcmDriverDetailsSupportFlags
	{
		Codec = 1,
		Converter = 2,
		Filter = 4,
		Hardware = 8,
		Async = 0x10,
		Local = 0x40000000,
		Disabled = int.MinValue
	}
	[Flags]
	internal enum AcmDriverEnumFlags
	{
		NoLocal = 0x40000000,
		Disabled = int.MinValue
	}
	public class AcmFormat
	{
		private readonly AcmFormatDetails formatDetails;

		public int FormatIndex => formatDetails.formatIndex;

		public WaveFormatEncoding FormatTag => (WaveFormatEncoding)(ushort)formatDetails.formatTag;

		public AcmDriverDetailsSupportFlags SupportFlags => formatDetails.supportFlags;

		public WaveFormat WaveFormat { get; private set; }

		public int WaveFormatByteSize => formatDetails.waveFormatByteSize;

		public string FormatDescription => formatDetails.formatDescription;

		internal AcmFormat(AcmFormatDetails formatDetails)
		{
			this.formatDetails = formatDetails;
			WaveFormat = WaveFormat.MarshalFromPtr(formatDetails.waveFormatPointer);
		}
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]
	internal struct AcmFormatChoose
	{
		public int structureSize;

		public AcmFormatChooseStyleFlags styleFlags;

		public IntPtr ownerWindowHandle;

		public IntPtr selectedWaveFormatPointer;

		public int selectedWaveFormatByteSize;

		[MarshalAs(UnmanagedType.LPTStr)]
		public string title;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
		public string formatTagDescription;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string formatDescription;

		[MarshalAs(UnmanagedType.LPTStr)]
		public string name;

		public int nameByteSize;

		public AcmFormatEnumFlags formatEnumFlags;

		public IntPtr waveFormatEnumPointer;

		public IntPtr instanceHandle;

		[MarshalAs(UnmanagedType.LPTStr)]
		public string templateName;

		public IntPtr customData;

		public AcmInterop.AcmFormatChooseHookProc windowCallbackFunction;
	}
	[Flags]
	internal enum AcmFormatChooseStyleFlags
	{
		None = 0,
		ShowHelp = 4,
		EnableHook = 8,
		EnableTemplate = 0x10,
		EnableTemplateHandle = 0x20,
		InitToWfxStruct = 0x40,
		ContextHelp = 0x80
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	internal struct AcmFormatDetails
	{
		public int structSize;

		public int formatIndex;

		public int formatTag;

		public AcmDriverDetailsSupportFlags supportFlags;

		public IntPtr waveFormatPointer;

		public int waveFormatByteSize;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string formatDescription;

		public const int FormatDescriptionChars = 128;
	}
	[Flags]
	public enum AcmFormatEnumFlags
	{
		None = 0,
		Convert = 0x100000,
		Hardware = 0x400000,
		Input = 0x800000,
		Channels = 0x20000,
		SamplesPerSecond = 0x40000,
		Output = 0x1000000,
		Suggest = 0x200000,
		BitsPerSample = 0x80000,
		FormatTag = 0x10000
	}
	[Flags]
	internal enum AcmFormatSuggestFlags
	{
		FormatTag = 0x10000,
		Channels = 0x20000,
		SamplesPerSecond = 0x40000,
		BitsPerSample = 0x80000,
		TypeMask = 0xFF0000
	}
	public class AcmFormatTag
	{
		private AcmFormatTagDetails formatTagDetails;

		public int FormatTagIndex => formatTagDetails.formatTagIndex;

		public WaveFormatEncoding FormatTag => (WaveFormatEncoding)(ushort)formatTagDetails.formatTag;

		public int FormatSize => formatTagDetails.formatSize;

		public AcmDriverDetailsSupportFlags SupportFlags => formatTagDetails.supportFlags;

		public int StandardFormatsCount => formatTagDetails.standardFormatsCount;

		public string FormatDescription => formatTagDetails.formatDescription;

		internal AcmFormatTag(AcmFormatTagDetails formatTagDetails)
		{
			this.formatTagDetails = formatTagDetails;
		}
	}
	internal struct AcmFormatTagDetails
	{
		public int structureSize;

		public int formatTagIndex;

		public int formatTag;

		public int formatSize;

		public AcmDriverDetailsSupportFlags supportFlags;

		public int standardFormatsCount;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
		public string formatDescription;

		public const int FormatTagDescriptionChars = 48;
	}
	internal class AcmInterop
	{
		public delegate bool AcmDriverEnumCallback(IntPtr hAcmDriverId, IntPtr instance, AcmDriverDetailsSupportFlags flags);

		public delegate bool AcmFormatEnumCallback(IntPtr hAcmDriverId, ref AcmFormatDetails formatDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags);

		public delegate bool AcmFormatTagEnumCallback(IntPtr hAcmDriverId, ref AcmFormatTagDetails formatTagDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags);

		public delegate bool AcmFormatChooseHookProc(IntPtr windowHandle, int message, IntPtr wParam, IntPtr lParam);

		[DllImport("msacm32.dll")]
		public static extern MmResult acmDriverAdd(out IntPtr driverHandle, IntPtr driverModule, IntPtr driverFunctionAddress, int priority, AcmDriverAddFlags flags);

		[DllImport("msacm32.dll")]
		public static extern MmResult acmDriverRemove(IntPtr driverHandle, int removeFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverClose(IntPtr hAcmDriver, int closeFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverEnum(AcmDriverEnumCallback fnCallback, IntPtr dwInstance, AcmDriverEnumFlags flags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverDetails(IntPtr hAcmDriver, ref AcmDriverDetails driverDetails, int reserved);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverOpen(out IntPtr pAcmDriver, IntPtr hAcmDriverId, int openFlags);

		[DllImport("Msacm32.dll", EntryPoint = "acmFormatChooseW")]
		public static extern MmResult acmFormatChoose(ref AcmFormatChoose formatChoose);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmFormatEnum(IntPtr hAcmDriver, ref AcmFormatDetails formatDetails, AcmFormatEnumCallback callback, IntPtr instance, AcmFormatEnumFlags flags);

		[DllImport("Msacm32.dll", EntryPoint = "acmFormatSuggest")]
		public static extern MmResult acmFormatSuggest2(IntPtr hAcmDriver, IntPtr sourceFormatPointer, IntPtr destFormatPointer, int sizeDestFormat, AcmFormatSuggestFlags suggestFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmFormatTagEnum(IntPtr hAcmDriver, ref AcmFormatTagDetails formatTagDetails, AcmFormatTagEnumCallback callback, IntPtr instance, int reserved);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmMetrics(IntPtr hAcmObject, AcmMetrics metric, out int output);

		[DllImport("Msacm32.dll", EntryPoint = "acmStreamOpen")]
		public static extern MmResult acmStreamOpen2(out IntPtr hAcmStream, IntPtr hAcmDriver, IntPtr sourceFormatPointer, IntPtr destFormatPointer, [In] WaveFilter waveFilter, IntPtr callback, IntPtr instance, AcmStreamOpenFlags openFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamClose(IntPtr hAcmStream, int closeFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamConvert(IntPtr hAcmStream, [In][Out] AcmStreamHeaderStruct streamHeader, AcmStreamConvertFlags streamConvertFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamPrepareHeader(IntPtr hAcmStream, [In][Out] AcmStreamHeaderStruct streamHeader, int prepareFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamReset(IntPtr hAcmStream, int resetFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamSize(IntPtr hAcmStream, int inputBufferSize, out int outputBufferSize, AcmStreamSizeFlags flags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamUnprepareHeader(IntPtr hAcmStream, [In][Out] AcmStreamHeaderStruct streamHeader, int flags);
	}
	public class AcmStream : IDisposable
	{
		private IntPtr streamHandle;

		private IntPtr driverHandle;

		private AcmStreamHeader streamHeader;

		private readonly WaveFormat sourceFormat;

		public byte[] SourceBuffer => streamHeader.SourceBuffer;

		public byte[] DestBuffer => streamHeader.DestBuffer;

		public AcmStream(WaveFormat sourceFormat, WaveFormat destFormat)
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				streamHandle = IntPtr.Zero;
				this.sourceFormat = sourceFormat;
				int num = Math.Max(65536, sourceFormat.AverageBytesPerSecond);
				num -= num % sourceFormat.BlockAlign;
				IntPtr intPtr = WaveFormat.MarshalToPtr(sourceFormat);
				IntPtr intPtr2 = WaveFormat.MarshalToPtr(destFormat);
				try
				{
					MmException.Try(AcmInterop.acmStreamOpen2(out streamHandle, IntPtr.Zero, intPtr, intPtr2, null, IntPtr.Zero, IntPtr.Zero, AcmStreamOpenFlags.NonRealTime), "acmStreamOpen");
				}
				finally
				{
					Marshal.FreeHGlobal(intPtr);
					Marshal.FreeHGlobal(intPtr2);
				}
				int destBufferLength = SourceToDest(num);
				streamHeader = new AcmStreamHeader(streamHandle, num, destBufferLength);
				driverHandle = IntPtr.Zero;
			}
			catch
			{
				Dispose();
				throw;
			}
		}

		public AcmStream(IntPtr driverId, WaveFormat sourceFormat, WaveFilter waveFilter)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			int num = Math.Max(16384, sourceFormat.AverageBytesPerSecond);
			this.sourceFormat = sourceFormat;
			num -= num % sourceFormat.BlockAlign;
			MmException.Try(AcmInterop.acmDriverOpen(out driverHandle, driverId, 0), "acmDriverOpen");
			IntPtr intPtr = WaveFormat.MarshalToPtr(sourceFormat);
			try
			{
				MmException.Try(AcmInterop.acmStreamOpen2(out streamHandle, driverHandle, intPtr, intPtr, waveFilter, IntPtr.Zero, IntPtr.Zero, AcmStreamOpenFlags.NonRealTime), "acmStreamOpen");
			}
			finally
			{
				Marshal.FreeHGlobal(intPtr);
			}
			streamHeader = new AcmStreamHeader(streamHandle, num, SourceToDest(num));
		}

		public int SourceToDest(int source)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (source == 0)
			{
				return 0;
			}
			MmException.Try(AcmInterop.acmStreamSize(streamHandle, source, out var outputBufferSize, AcmStreamSizeFlags.Source), "acmStreamSize");
			return outputBufferSize;
		}

		public int DestToSource(int dest)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (dest == 0)
			{
				return 0;
			}
			MmException.Try(AcmInterop.acmStreamSize(streamHandle, dest, out var outputBufferSize, AcmStreamSizeFlags.Destination), "acmStreamSize");
			return outputBufferSize;
		}

		public static WaveFormat SuggestPcmFormat(WaveFormat compressedFormat)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			WaveFormat val = new WaveFormat(compressedFormat.SampleRate, 16, compressedFormat.Channels);
			IntPtr intPtr = WaveFormat.MarshalToPtr(val);
			IntPtr intPtr2 = WaveFormat.MarshalToPtr(compressedFormat);
			try
			{
				MmResult val2 = AcmInterop.acmFormatSuggest2(IntPtr.Zero, intPtr2, intPtr, Marshal.SizeOf<WaveFormat>(val), AcmFormatSuggestFlags.FormatTag);
				val = WaveFormat.MarshalFromPtr(intPtr);
				MmException.Try(val2, "acmFormatSuggest");
				return val;
			}
			finally
			{
				Marshal.FreeHGlobal(intPtr);
				Marshal.FreeHGlobal(intPtr2);
			}
		}

		public void Reposition()
		{
			streamHeader.Reposition();
		}

		public int Convert(int bytesToConvert, out int sourceBytesConverted)
		{
			if (bytesToConvert % sourceFormat.BlockAlign != 0)
			{
				bytesToConvert -= bytesToConvert % sourceFormat.BlockAlign;
			}
			return streamHeader.Convert(bytesToConvert, out sourceBytesConverted);
		}

		[Obsolete("Call the version returning sourceBytesConverted instead")]
		public int Convert(int bytesToConvert)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			int sourceBytesConverted;
			int result = Convert(bytesToConvert, out sourceBytesConverted);
			if (sourceBytesConverted != bytesToConvert)
			{
				throw new MmException((MmResult)8, "AcmStreamHeader.Convert didn't convert everything");
			}
			return result;
		}

		public void Dispose()
		{
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}

		protected virtual void Dispose(bool disposing)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			if (disposing && streamHeader != null)
			{
				streamHeader.Dispose();
				streamHeader = null;
			}
			if (streamHandle != IntPtr.Zero)
			{
				MmResult val = AcmInterop.acmStreamClose(streamHandle, 0);
				streamHandle = IntPtr.Zero;
				if ((int)val != 0)
				{
					throw new MmException(val, "acmStreamClose");
				}
			}
			if (driverHandle != IntPtr.Zero)
			{
				AcmInterop.acmDriverClose(driverHandle, 0);
				driverHandle = IntPtr.Zero;
			}
		}

		~AcmStream()
		{
			Dispose(disposing: false);
		}
	}
	internal class AcmStreamHeader : IDisposable
	{
		private AcmStreamHeaderStruct streamHeader;

		private GCHandle hSourceBuffer;

		private GCHandle hDestBuffer;

		private IntPtr streamHandle;

		private bool firstTime;

		private bool disposed;

		public byte[] SourceBuffer { get; private set; }

		public byte[] DestBuffer { get; private set; }

		public AcmStreamHeader(IntPtr streamHandle, int sourceBufferLength, int destBufferLength)
		{
			streamHeader = new AcmStreamHeaderStruct();
			SourceBuffer = new byte[sourceBufferLength];
			hSourceBuffer = GCHandle.Alloc(SourceBuffer, GCHandleType.Pinned);
			DestBuffer = new byte[destBufferLength];
			hDestBuffer = GCHandle.Alloc(DestBuffer, GCHandleType.Pinned);
			this.streamHandle = streamHandle;
			firstTime = true;
		}

		private void Prepare()
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			streamHeader.cbStruct = Marshal.SizeOf(streamHeader);
			streamHeader.sourceBufferLength = SourceBuffer.Length;
			streamHeader.sourceBufferPointer = hSourceBuffer.AddrOfPinnedObject();
			streamHeader.destBufferLength = DestBuffer.Length;
			streamHeader.destBufferPointer = hDestBuffer.AddrOfPinnedObject();
			MmException.Try(AcmInterop.acmStreamPrepareHeader(streamHandle, streamHeader, 0), "acmStreamPrepareHeader");
		}

		private void Unprepare()
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			streamHeader.sourceBufferLength = SourceBuffer.Length;
			streamHeader.sourceBufferPointer = hSourceBuffer.AddrOfPinnedObject();
			streamHeader.destBufferLength = DestBuffer.Length;
			streamHeader.destBufferPointer = hDestBuffer.AddrOfPinnedObject();
			MmResult val = AcmInterop.acmStreamUnprepareHeader(streamHandle, streamHeader, 0);
			if ((int)val != 0)
			{
				throw new MmException(val, "acmStreamUnprepareHeader");
			}
		}

		public void Reposition()
		{
			firstTime = true;
		}

		public int Convert(int bytesToConvert, out int sourceBytesConverted)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			Prepare();
			try
			{
				streamHeader.sourceBufferLength = bytesToConvert;
				streamHeader.sourceBufferLengthUsed = bytesToConvert;
				AcmStreamConvertFlags streamConvertFlags = (firstTime ? (AcmStreamConvertFlags.BlockAlign | AcmStreamConvertFlags.Start) : AcmStreamConvertFlags.BlockAlign);
				MmException.Try(AcmInterop.acmStreamConvert(streamHandle, streamHeader, streamConvertFlags), "acmStreamConvert");
				firstTime = false;
				sourceBytesConverted = streamHeader.sourceBufferLengthUsed;
			}
			finally
			{
				Unprepare();
			}
			return streamHeader.destBufferLengthUsed;
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected virtual void Dispose(bool disposing)
		{
			if (!disposed)
			{
				SourceBuffer = null;
				DestBuffer = null;
				hSourceBuffer.Free();
				hDestBuffer.Free();
			}
			disposed = true;
		}

		~AcmStreamHeader()
		{
			Dispose(disposing: false);
		}
	}
	[Flags]
	internal enum AcmStreamHeaderStatusFlags
	{
		Done = 0x10000,
		Prepared = 0x20000,
		InQueue = 0x100000
	}
	[StructLayout(LayoutKind.Sequential, Size = 128)]
	internal class AcmStreamHeaderStruct
	{
		public int cbStruct;

		public AcmStreamHeaderStatusFlags fdwStatus;

		public IntPtr userData;

		public IntPtr sourceBufferPointer;

		public int sourceBufferLength;

		public int sourceBufferLengthUsed;

		public IntPtr sourceUserData;

		public IntPtr destBufferPointer;

		public int destBufferLength;

		public int destBufferLengthUsed;

		public IntPtr destUserData;
	}
	[Flags]
	internal enum AcmStreamOpenFlags
	{
		Query = 1,
		Async = 2,
		NonRealTime = 4,
		CallbackTypeMask = 0x70000,
		CallbackNull = 0,
		CallbackWindow = 0x10000,
		CallbackTask = 0x20000,
		CallbackFunction = 0x30000,
		CallbackThread = 0x20000,
		CallbackEvent = 0x50000
	}
	internal enum AcmStreamSizeFlags
	{
		Source,
		Destination
	}
	[StructLayout(LayoutKind.Sequential)]
	public class WaveFilter
	{
		public int StructureSize = Marshal.SizeOf(typeof(WaveFilter));

		public int FilterTag;

		public int Filter;

		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
		public int[] Reserved;
	}
}

BepInEx/core/UniTask.Addressables.dll

Decompiled 2 days ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[0];
		result.TypesData = new byte[0];
		result.TotalFiles = 0;
		result.TotalTypes = 0;
		result.IsEditorOnly = false;
		return result;
	}
}

BepInEx/core/UniTask.dll

Decompiled 2 days ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks.CompilerServices;
using Cysharp.Threading.Tasks.Internal;
using Cysharp.Threading.Tasks.Triggers;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.LowLevel;
using UnityEngine.Networking;
using UnityEngine.ParticleSystemJobs;
using UnityEngine.PlayerLoop;
using UnityEngine.Rendering;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("UniTask.Linq")]
[assembly: InternalsVisibleTo("UniTask.Addressables")]
[assembly: InternalsVisibleTo("UniTask.DOTween")]
[assembly: InternalsVisibleTo("UniTask.TextMeshPro")]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[6371]
		{
			0, 0, 0, 2, 0, 0, 0, 68, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 65, 115, 121, 110, 99, 76,
			97, 122, 121, 46, 99, 115, 0, 0, 0, 11,
			0, 0, 0, 80, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			65, 115, 121, 110, 99, 82, 101, 97, 99, 116,
			105, 118, 101, 80, 114, 111, 112, 101, 114, 116,
			121, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 68, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 65, 115,
			121, 110, 99, 85, 110, 105, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 92, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 84, 111, 107, 101,
			110, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 86, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 84, 111, 107, 101,
			110, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 92, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			84, 111, 107, 101, 110, 83, 111, 117, 114, 99,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 10, 0, 0,
			0, 66, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 104,
			97, 110, 110, 101, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 103, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 105, 108, 101, 114,
			83, 101, 114, 118, 105, 99, 101, 115, 92, 65,
			115, 121, 110, 99, 77, 101, 116, 104, 111, 100,
			66, 117, 105, 108, 100, 101, 114, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 101, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 92,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 77, 101, 116, 104, 111, 100, 66, 117,
			105, 108, 100, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 105, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 105, 108, 101, 114,
			83, 101, 114, 118, 105, 99, 101, 115, 92, 65,
			115, 121, 110, 99, 85, 110, 105, 84, 97, 115,
			107, 86, 111, 105, 100, 77, 101, 116, 104, 111,
			100, 66, 117, 105, 108, 100, 101, 114, 46, 99,
			115, 0, 0, 0, 7, 0, 0, 0, 94, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 105,
			108, 101, 114, 83, 101, 114, 118, 105, 99, 101,
			115, 92, 83, 116, 97, 116, 101, 77, 97, 99,
			104, 105, 110, 101, 82, 117, 110, 110, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			84, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 65, 115, 121,
			110, 99, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 84, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 69,
			110, 117, 109, 101, 114, 97, 116, 111, 114, 65,
			115, 121, 110, 99, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 78, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			77, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 65, 114, 114, 97,
			121, 80, 111, 111, 108, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 81, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 110, 116, 101, 114, 110, 97, 108,
			92, 65, 114, 114, 97, 121, 80, 111, 111, 108,
			85, 116, 105, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 77, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 110, 116, 101, 114, 110, 97, 108, 92,
			65, 114, 114, 97, 121, 85, 116, 105, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 85,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 110, 116, 101,
			114, 110, 97, 108, 92, 67, 111, 110, 116, 105,
			110, 117, 97, 116, 105, 111, 110, 81, 117, 101,
			117, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 89, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			110, 116, 101, 114, 110, 97, 108, 92, 68, 105,
			97, 103, 110, 111, 115, 116, 105, 99, 115, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 73,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 110, 116, 101,
			114, 110, 97, 108, 92, 69, 114, 114, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			80, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 77, 105, 110, 105,
			109, 117, 109, 81, 117, 101, 117, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 84, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 110, 116, 101, 114,
			110, 97, 108, 92, 80, 108, 97, 121, 101, 114,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			82, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 80, 111, 111, 108,
			101, 100, 68, 101, 108, 101, 103, 97, 116, 101,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			93, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 82, 117, 110, 116,
			105, 109, 101, 72, 101, 108, 112, 101, 114, 115,
			65, 98, 115, 116, 114, 97, 99, 116, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 7, 0, 0,
			0, 77, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 110,
			116, 101, 114, 110, 97, 108, 92, 83, 116, 97,
			116, 101, 80, 111, 111, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 79, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 110, 116, 101, 114, 110, 97,
			108, 92, 84, 97, 115, 107, 84, 114, 97, 99,
			107, 101, 114, 46, 99, 115, 0, 0, 0, 15,
			0, 0, 0, 89, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 110, 116, 101, 114, 110, 97, 108, 92, 85,
			110, 105, 116, 121, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			93, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 85, 110, 105, 116,
			121, 87, 101, 98, 82, 101, 113, 117, 101, 115,
			116, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 82, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 110,
			116, 101, 114, 110, 97, 108, 92, 86, 97, 108,
			117, 101, 83, 116, 111, 112, 119, 97, 116, 99,
			104, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 82, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 110,
			116, 101, 114, 110, 97, 108, 92, 87, 101, 97,
			107, 68, 105, 99, 116, 105, 111, 110, 97, 114,
			121, 46, 99, 115, 0, 0, 0, 8, 0, 0,
			0, 82, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 73, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 85,
			110, 105, 84, 97, 115, 107, 83, 111, 117, 114,
			99, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 73, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			111, 118, 101, 78, 101, 120, 116, 83, 111, 117,
			114, 99, 101, 46, 99, 115, 0, 0, 0, 35,
			0, 0, 0, 75, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			80, 108, 97, 121, 101, 114, 76, 111, 111, 112,
			72, 101, 108, 112, 101, 114, 46, 99, 115, 0,
			0, 0, 4, 0, 0, 0, 74, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 80, 108, 97, 121, 101, 114, 76,
			111, 111, 112, 84, 105, 109, 101, 114, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 67, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 80, 114, 111, 103, 114,
			101, 115, 115, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 67, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			84, 97, 115, 107, 80, 111, 111, 108, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 76, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 84, 105, 109, 101, 111,
			117, 116, 67, 111, 110, 116, 114, 111, 108, 108,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 71, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			114, 105, 103, 103, 101, 114, 69, 118, 101, 110,
			116, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 85, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 84, 114,
			105, 103, 103, 101, 114, 115, 92, 65, 115, 121,
			110, 99, 65, 119, 97, 107, 101, 84, 114, 105,
			103, 103, 101, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 87, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 114, 105, 103, 103, 101, 114, 115, 92,
			65, 115, 121, 110, 99, 68, 101, 115, 116, 114,
			111, 121, 84, 114, 105, 103, 103, 101, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 85,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 84, 114, 105, 103,
			103, 101, 114, 115, 92, 65, 115, 121, 110, 99,
			83, 116, 97, 114, 116, 84, 114, 105, 103, 103,
			101, 114, 46, 99, 115, 0, 0, 0, 6, 0,
			0, 0, 84, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			114, 105, 103, 103, 101, 114, 115, 92, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			66, 97, 115, 101, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 90, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 114, 105, 103, 103, 101, 114, 115, 92,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 1, 40, 0,
			0, 0, 97, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			114, 105, 103, 103, 101, 114, 115, 92, 77, 111,
			110, 111, 66, 101, 104, 97, 118, 105, 111, 117,
			114, 77, 101, 115, 115, 97, 103, 101, 115, 84,
			114, 105, 103, 103, 101, 114, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 73, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 84, 97, 115,
			107, 46, 66, 114, 105, 100, 103, 101, 46, 99,
			115, 0, 0, 0, 10, 0, 0, 0, 66, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 84, 97,
			115, 107, 46, 99, 115, 0, 0, 0, 10, 0,
			0, 0, 72, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 68, 101, 108,
			97, 121, 46, 99, 115, 0, 0, 0, 10, 0,
			0, 0, 74, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 70, 97, 99,
			116, 111, 114, 121, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 70, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 84, 97, 115, 107, 46, 82,
			117, 110, 46, 99, 115, 0, 0, 0, 13, 0,
			0, 0, 76, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 99, 115, 0,
			0, 0, 6, 0, 0, 0, 76, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 84, 97, 115, 107,
			46, 87, 97, 105, 116, 85, 110, 116, 105, 108,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			74, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			84, 97, 115, 107, 46, 87, 104, 101, 110, 65,
			108, 108, 46, 99, 115, 0, 0, 0, 15, 0,
			0, 0, 84, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 87, 104, 101,
			110, 65, 108, 108, 46, 71, 101, 110, 101, 114,
			97, 116, 101, 100, 46, 99, 115, 0, 0, 0,
			4, 0, 0, 0, 74, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 84, 97, 115, 107, 46, 87,
			104, 101, 110, 65, 110, 121, 46, 99, 115, 0,
			0, 0, 15, 0, 0, 0, 84, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 84, 97, 115, 107,
			46, 87, 104, 101, 110, 65, 110, 121, 46, 71,
			101, 110, 101, 114, 97, 116, 101, 100, 46, 99,
			115, 0, 0, 0, 13, 0, 0, 0, 82, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 84, 97,
			115, 107, 67, 111, 109, 112, 108, 101, 116, 105,
			111, 110, 83, 111, 117, 114, 99, 101, 46, 99,
			115, 0, 0, 0, 5, 0, 0, 0, 76, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 84, 97,
			115, 107, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 86, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 83, 104, 111,
			114, 116, 104, 97, 110, 100, 46, 99, 115, 0,
			0, 0, 14, 0, 0, 0, 86, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 84, 97, 115, 107,
			79, 98, 115, 101, 114, 118, 97, 98, 108, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			75, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			84, 97, 115, 107, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 88, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 84, 97, 115, 107, 83, 121, 110,
			99, 104, 114, 111, 110, 105, 122, 97, 116, 105,
			111, 110, 67, 111, 110, 116, 101, 120, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 70,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 84,
			97, 115, 107, 86, 111, 105, 100, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 107, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 116, 121, 65,
			115, 121, 110, 99, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 65, 115, 115, 101, 116,
			66, 117, 110, 100, 108, 101, 82, 101, 113, 117,
			101, 115, 116, 65, 108, 108, 65, 115, 115, 101,
			116, 115, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 96, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 116, 121, 65, 115, 121, 110, 99, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			65, 115, 121, 110, 99, 71, 80, 85, 82, 101,
			97, 100, 98, 97, 99, 107, 46, 99, 115, 0,
			0, 0, 11, 0, 0, 0, 79, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 116, 121, 65, 115,
			121, 110, 99, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 84, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 116, 121, 65, 115, 121, 110, 99,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 74, 111, 98, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 93, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 116, 121, 65, 115, 121,
			110, 99, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 77, 111, 110, 111, 66, 101, 104,
			97, 118, 105, 111, 117, 114, 46, 99, 115, 0,
			0, 0, 16, 0, 0, 0, 84, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 116, 121, 65, 115,
			121, 110, 99, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 117, 71, 85, 73, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 81, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 116, 121,
			66, 105, 110, 100, 105, 110, 103, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 83, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 116, 121, 87,
			101, 98, 82, 101, 113, 117, 101, 115, 116, 69,
			120, 99, 101, 112, 116, 105, 111, 110, 46, 99,
			115
		};
		result.TypesData = new byte[36615]
		{
			1, 0, 0, 0, 33, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 65,
			115, 121, 110, 99, 76, 97, 122, 121, 1, 0,
			0, 0, 33, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 65, 115, 121,
			110, 99, 76, 97, 122, 121, 0, 0, 0, 0,
			54, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 73, 82, 101, 97, 100,
			79, 110, 108, 121, 65, 115, 121, 110, 99, 82,
			101, 97, 99, 116, 105, 118, 101, 80, 114, 111,
			112, 101, 114, 116, 121, 0, 0, 0, 0, 46,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 73, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 0, 0, 0, 0,
			45, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 0, 0, 0, 0,
			61, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 124, 87, 97, 105,
			116, 65, 115, 121, 110, 99, 83, 111, 117, 114,
			99, 101, 0, 0, 0, 0, 70, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 65, 115, 121, 110, 99, 82, 101, 97, 99,
			116, 105, 118, 101, 80, 114, 111, 112, 101, 114,
			116, 121, 124, 87, 105, 116, 104, 111, 117, 116,
			67, 117, 114, 114, 101, 110, 116, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 56, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 65, 115, 121, 110,
			99, 82, 101, 97, 99, 116, 105, 118, 101, 80,
			114, 111, 112, 101, 114, 116, 121, 124, 69, 110,
			117, 109, 101, 114, 97, 116, 111, 114, 0, 0,
			0, 0, 53, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 82, 101, 97,
			100, 79, 110, 108, 121, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 0, 0, 0, 0,
			69, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 82, 101, 97, 100, 79,
			110, 108, 121, 65, 115, 121, 110, 99, 82, 101,
			97, 99, 116, 105, 118, 101, 80, 114, 111, 112,
			101, 114, 116, 121, 124, 87, 97, 105, 116, 65,
			115, 121, 110, 99, 83, 111, 117, 114, 99, 101,
			0, 0, 0, 0, 78, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 82,
			101, 97, 100, 79, 110, 108, 121, 65, 115, 121,
			110, 99, 82, 101, 97, 99, 116, 105, 118, 101,
			80, 114, 111, 112, 101, 114, 116, 121, 124, 87,
			105, 116, 104, 111, 117, 116, 67, 117, 114, 114,
			101, 110, 116, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 64, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 82, 101, 97, 100, 79, 110, 108, 121,
			65, 115, 121, 110, 99, 82, 101, 97, 99, 116,
			105, 118, 101, 80, 114, 111, 112, 101, 114, 116,
			121, 124, 69, 110, 117, 109, 101, 114, 97, 116,
			111, 114, 0, 0, 0, 0, 39, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 83, 116, 97, 116, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			33, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 65, 115, 121, 110, 99,
			85, 110, 105, 116, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 84, 111, 107, 101, 110,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 0, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 84, 111, 107,
			101, 110, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 50, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 84, 111, 107, 101, 110, 65, 119,
			97, 105, 116, 97, 98, 108, 101, 1, 0, 0,
			0, 32, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 124, 65, 119, 97,
			105, 116, 101, 114, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 84, 111, 107, 101, 110,
			83, 111, 117, 114, 99, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 1, 0, 0, 0,
			31, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 67, 104, 97, 110, 110,
			101, 108, 1, 0, 0, 0, 31, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 67, 104, 97, 110, 110, 101, 108, 1, 0,
			0, 0, 31, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 67, 104, 97,
			110, 110, 101, 108, 0, 0, 0, 0, 37, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 67, 104, 97, 110, 110, 101, 108,
			82, 101, 97, 100, 101, 114, 0, 0, 0, 0,
			37, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 67, 104, 97, 110, 110,
			101, 108, 87, 114, 105, 116, 101, 114, 0, 0,
			0, 0, 46, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 67, 104, 97,
			110, 110, 101, 108, 67, 108, 111, 115, 101, 100,
			69, 120, 99, 101, 112, 116, 105, 111, 110, 0,
			0, 0, 0, 54, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 83, 105,
			110, 103, 108, 101, 67, 111, 110, 115, 117, 109,
			101, 114, 85, 110, 98, 111, 117, 110, 100, 101,
			100, 67, 104, 97, 110, 110, 101, 108, 0, 0,
			0, 0, 91, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 83, 105, 110,
			103, 108, 101, 67, 111, 110, 115, 117, 109, 101,
			114, 85, 110, 98, 111, 117, 110, 100, 101, 100,
			67, 104, 97, 110, 110, 101, 108, 124, 83, 105,
			110, 103, 108, 101, 67, 111, 110, 115, 117, 109,
			101, 114, 85, 110, 98, 111, 117, 110, 100, 101,
			100, 67, 104, 97, 110, 110, 101, 108, 87, 114,
			105, 116, 101, 114, 0, 0, 0, 0, 91, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 83, 105, 110, 103, 108, 101, 67,
			111, 110, 115, 117, 109, 101, 114, 85, 110, 98,
			111, 117, 110, 100, 101, 100, 67, 104, 97, 110,
			110, 101, 108, 124, 83, 105, 110, 103, 108, 101,
			67, 111, 110, 115, 117, 109, 101, 114, 85, 110,
			98, 111, 117, 110, 100, 101, 100, 67, 104, 97,
			110, 110, 101, 108, 82, 101, 97, 100, 101, 114,
			0, 0, 0, 0, 114, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 83,
			105, 110, 103, 108, 101, 67, 111, 110, 115, 117,
			109, 101, 114, 85, 110, 98, 111, 117, 110, 100,
			101, 100, 67, 104, 97, 110, 110, 101, 108, 43,
			83, 105, 110, 103, 108, 101, 67, 111, 110, 115,
			117, 109, 101, 114, 85, 110, 98, 111, 117, 110,
			100, 101, 100, 67, 104, 97, 110, 110, 101, 108,
			82, 101, 97, 100, 101, 114, 124, 82, 101, 97,
			100, 65, 108, 108, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 59, 83, 121, 115, 116, 101, 109,
			46, 82, 117, 110, 116, 105, 109, 101, 46, 67,
			111, 109, 112, 105, 108, 101, 114, 83, 101, 114,
			118, 105, 99, 101, 115, 124, 65, 115, 121, 110,
			99, 77, 101, 116, 104, 111, 100, 66, 117, 105,
			108, 100, 101, 114, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 1, 0, 0, 0, 66, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 67, 111, 109, 112, 105, 108, 101, 114,
			83, 101, 114, 118, 105, 99, 101, 115, 124, 65,
			115, 121, 110, 99, 85, 110, 105, 84, 97, 115,
			107, 77, 101, 116, 104, 111, 100, 66, 117, 105,
			108, 100, 101, 114, 1, 0, 0, 0, 66, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 124,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 77, 101, 116, 104, 111, 100, 66, 117,
			105, 108, 100, 101, 114, 0, 0, 0, 0, 70,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 67, 111, 109, 112, 105, 108,
			101, 114, 83, 101, 114, 118, 105, 99, 101, 115,
			124, 65, 115, 121, 110, 99, 85, 110, 105, 84,
			97, 115, 107, 86, 111, 105, 100, 77, 101, 116,
			104, 111, 100, 66, 117, 105, 108, 100, 101, 114,
			0, 0, 0, 0, 60, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 67,
			111, 109, 112, 105, 108, 101, 114, 83, 101, 114,
			118, 105, 99, 101, 115, 124, 73, 83, 116, 97,
			116, 101, 77, 97, 99, 104, 105, 110, 101, 82,
			117, 110, 110, 101, 114, 1, 0, 0, 0, 67,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 67, 111, 109, 112, 105, 108,
			101, 114, 83, 101, 114, 118, 105, 99, 101, 115,
			124, 73, 83, 116, 97, 116, 101, 77, 97, 99,
			104, 105, 110, 101, 82, 117, 110, 110, 101, 114,
			80, 114, 111, 109, 105, 115, 101, 1, 0, 0,
			0, 67, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 67, 111, 109, 112,
			105, 108, 101, 114, 83, 101, 114, 118, 105, 99,
			101, 115, 124, 73, 83, 116, 97, 116, 101, 77,
			97, 99, 104, 105, 110, 101, 82, 117, 110, 110,
			101, 114, 80, 114, 111, 109, 105, 115, 101, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 67, 111,
			109, 112, 105, 108, 101, 114, 83, 101, 114, 118,
			105, 99, 101, 115, 124, 83, 116, 97, 116, 101,
			77, 97, 99, 104, 105, 110, 101, 85, 116, 105,
			108, 105, 116, 121, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 124,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 86, 111, 105, 100, 1, 0, 0, 0,
			53, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 67, 111, 109, 112, 105,
			108, 101, 114, 83, 101, 114, 118, 105, 99, 101,
			115, 124, 65, 115, 121, 110, 99, 85, 110, 105,
			84, 97, 115, 107, 1, 0, 0, 0, 53, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 124,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 0, 0, 0, 0, 49, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 65, 115, 121, 110, 99, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			49, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 65, 115, 121, 110, 99,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 67, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 69,
			110, 117, 109, 101, 114, 97, 116, 111, 114, 65,
			115, 121, 110, 99, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 124, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 80, 114, 111, 109, 105,
			115, 101, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 42, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 65, 114,
			114, 97, 121, 80, 111, 111, 108, 0, 0, 0,
			0, 46, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 124, 65, 114, 114, 97, 121,
			80, 111, 111, 108, 85, 116, 105, 108, 0, 0,
			0, 0, 56, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 46, 65, 114, 114, 97,
			121, 80, 111, 111, 108, 85, 116, 105, 108, 124,
			82, 101, 110, 116, 65, 114, 114, 97, 121, 0,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 65, 114, 114,
			97, 121, 85, 116, 105, 108, 0, 0, 0, 0,
			50, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 124, 67, 111, 110, 116, 105, 110,
			117, 97, 116, 105, 111, 110, 81, 117, 101, 117,
			101, 0, 0, 0, 0, 54, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 68,
			105, 97, 103, 110, 111, 115, 116, 105, 99, 115,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 38, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 69, 114,
			114, 111, 114, 0, 0, 0, 0, 45, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			124, 77, 105, 110, 105, 109, 117, 109, 81, 117,
			101, 117, 101, 0, 0, 0, 0, 49, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			124, 80, 108, 97, 121, 101, 114, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 0, 0, 0,
			0, 47, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 124, 80, 111, 111, 108, 101,
			100, 68, 101, 108, 101, 103, 97, 116, 101, 0,
			0, 0, 0, 58, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 82, 117, 110,
			116, 105, 109, 101, 72, 101, 108, 112, 101, 114,
			115, 65, 98, 115, 116, 114, 97, 99, 116, 105,
			111, 110, 0, 0, 0, 0, 91, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 46,
			82, 117, 110, 116, 105, 109, 101, 72, 101, 108,
			112, 101, 114, 115, 65, 98, 115, 116, 114, 97,
			99, 116, 105, 111, 110, 124, 87, 101, 108, 108,
			75, 110, 111, 119, 110, 78, 111, 82, 101, 102,
			101, 114, 101, 110, 99, 101, 67, 111, 110, 116,
			97, 105, 110, 115, 84, 121, 112, 101, 1, 0,
			0, 0, 43, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 124, 83, 116, 97, 116,
			101, 84, 117, 112, 108, 101, 1, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 124, 83, 116, 97, 116, 101, 84,
			117, 112, 108, 101, 1, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 124, 83, 116, 97, 116, 101, 80, 111, 111,
			108, 1, 0, 0, 0, 43, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 83,
			116, 97, 116, 101, 84, 117, 112, 108, 101, 1,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 83, 116, 97,
			116, 101, 80, 111, 111, 108, 1, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 124, 83, 116, 97, 116, 101, 84,
			117, 112, 108, 101, 1, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 124, 83, 116, 97, 116, 101, 80, 111, 111,
			108, 0, 0, 0, 0, 35, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			84, 97, 115, 107, 84, 114, 97, 99, 107, 101,
			114, 0, 0, 0, 0, 54, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 85,
			110, 105, 116, 121, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			0, 0, 0, 0, 60, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 46, 85, 110,
			105, 116, 121, 69, 113, 117, 97, 108, 105, 116,
			121, 67, 111, 109, 112, 97, 114, 101, 114, 124,
			67, 97, 99, 104, 101, 0, 0, 0, 0, 78,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 86, 101, 99, 116, 111,
			114, 50, 69, 113, 117, 97, 108, 105, 116, 121,
			67, 111, 109, 112, 97, 114, 101, 114, 0, 0,
			0, 0, 78, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 46, 85, 110, 105, 116,
			121, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 124, 86, 101,
			99, 116, 111, 114, 51, 69, 113, 117, 97, 108,
			105, 116, 121, 67, 111, 109, 112, 97, 114, 101,
			114, 0, 0, 0, 0, 78, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 46, 85,
			110, 105, 116, 121, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			124, 86, 101, 99, 116, 111, 114, 52, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 0, 0, 0, 0, 76, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 46, 85, 110, 105, 116, 121, 69, 113, 117,
			97, 108, 105, 116, 121, 67, 111, 109, 112, 97,
			114, 101, 114, 124, 67, 111, 108, 111, 114, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 75,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 82, 101, 99, 116, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 77,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 66, 111, 117, 110, 100,
			115, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 0, 0, 0,
			0, 81, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 46, 85, 110, 105, 116, 121,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 124, 81, 117, 97,
			116, 101, 114, 110, 105, 111, 110, 69, 113, 117,
			97, 108, 105, 116, 121, 67, 111, 109, 112, 97,
			114, 101, 114, 0, 0, 0, 0, 78, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			46, 85, 110, 105, 116, 121, 69, 113, 117, 97,
			108, 105, 116, 121, 67, 111, 109, 112, 97, 114,
			101, 114, 124, 67, 111, 108, 111, 114, 51, 50,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 0, 0, 0, 0,
			81, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 46, 85, 110, 105, 116, 121, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 124, 86, 101, 99, 116,
			111, 114, 50, 73, 110, 116, 69, 113, 117, 97,
			108, 105, 116, 121, 67, 111, 109, 112, 97, 114,
			101, 114, 0, 0, 0, 0, 81, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 46,
			85, 110, 105, 116, 121, 69, 113, 117, 97, 108,
			105, 116, 121, 67, 111, 109, 112, 97, 114, 101,
			114, 124, 86, 101, 99, 116, 111, 114, 51, 73,
			110, 116, 69, 113, 117, 97, 108, 105, 116, 121,
			67, 111, 109, 112, 97, 114, 101, 114, 0, 0,
			0, 0, 79, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 46, 85, 110, 105, 116,
			121, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 124, 82, 97,
			110, 103, 101, 73, 110, 116, 69, 113, 117, 97,
			108, 105, 116, 121, 67, 111, 109, 112, 97, 114,
			101, 114, 0, 0, 0, 0, 78, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 46,
			85, 110, 105, 116, 121, 69, 113, 117, 97, 108,
			105, 116, 121, 67, 111, 109, 112, 97, 114, 101,
			114, 124, 82, 101, 99, 116, 73, 110, 116, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 80,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 66, 111, 117, 110, 100,
			115, 73, 110, 116, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			0, 0, 0, 0, 64, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 85, 110,
			105, 116, 121, 87, 101, 98, 82, 101, 113, 117,
			101, 115, 116, 82, 101, 115, 117, 108, 116, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 47, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 86, 97, 108,
			117, 101, 83, 116, 111, 112, 119, 97, 116, 99,
			104, 0, 0, 0, 0, 47, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 87,
			101, 97, 107, 68, 105, 99, 116, 105, 111, 110,
			97, 114, 121, 0, 0, 0, 0, 53, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			46, 87, 101, 97, 107, 68, 105, 99, 116, 105,
			111, 110, 97, 114, 121, 124, 69, 110, 116, 114,
			121, 0, 0, 0, 0, 47, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			73, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 47, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 124, 73, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 0, 0, 0, 0, 47,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 73, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 68, 105, 115,
			112, 111, 115, 97, 98, 108, 101, 0, 0, 0,
			0, 54, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 124, 73, 85, 110, 105,
			84, 97, 115, 107, 79, 114, 100, 101, 114, 101,
			100, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			58, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 73, 67, 111, 110, 110,
			101, 99, 116, 97, 98, 108, 101, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 56, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 56, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 67, 97, 110, 99,
			101, 108, 97, 98, 108, 101, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 35, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			124, 69, 110, 117, 109, 101, 114, 97, 116, 111,
			114, 1, 0, 0, 0, 38, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			73, 85, 110, 105, 84, 97, 115, 107, 83, 111,
			117, 114, 99, 101, 1, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 73, 85, 110, 105, 84, 97, 115,
			107, 83, 111, 117, 114, 99, 101, 0, 0, 0,
			0, 47, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 83, 116, 97, 116, 117, 115, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 38, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 77, 111,
			118, 101, 78, 101, 120, 116, 83, 111, 117, 114,
			99, 101, 0, 0, 0, 0, 42, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 0,
			0, 0, 0, 74, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 73, 110, 105, 116, 105, 97,
			108, 105, 122, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 71, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 69, 97, 114, 108, 121, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 71, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 70,
			105, 120, 101, 100, 85, 112, 100, 97, 116, 101,
			0, 0, 0, 0, 69, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 115, 124, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 80, 114, 101, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 66, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 73,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			80, 114, 101, 76, 97, 116, 101, 85, 112, 100,
			97, 116, 101, 0, 0, 0, 0, 74, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 80, 111,
			115, 116, 76, 97, 116, 101, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 78, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 73, 110, 105, 116, 105, 97, 108, 105, 122,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 75,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			76, 97, 115, 116, 69, 97, 114, 108, 121, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 75,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			76, 97, 115, 116, 70, 105, 120, 101, 100, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 73,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			76, 97, 115, 116, 80, 114, 101, 85, 112, 100,
			97, 116, 101, 0, 0, 0, 0, 70, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 76, 97,
			115, 116, 85, 112, 100, 97, 116, 101, 0, 0,
			0, 0, 77, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 76, 97, 115, 116, 80, 114, 101,
			76, 97, 116, 101, 85, 112, 100, 97, 116, 101,
			0, 0, 0, 0, 78, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 115, 124, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 76, 97, 115, 116, 80,
			111, 115, 116, 76, 97, 116, 101, 85, 112, 100,
			97, 116, 101, 0, 0, 0, 0, 79, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 89, 105,
			101, 108, 100, 73, 110, 105, 116, 105, 97, 108,
			105, 122, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 76, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 115, 124, 85, 110, 105, 84, 97,
			115, 107, 76, 111, 111, 112, 82, 117, 110, 110,
			101, 114, 89, 105, 101, 108, 100, 69, 97, 114,
			108, 121, 85, 112, 100, 97, 116, 101, 0, 0,
			0, 0, 76, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 89, 105, 101, 108, 100, 70, 105,
			120, 101, 100, 85, 112, 100, 97, 116, 101, 0,
			0, 0, 0, 74, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 89, 105, 101, 108, 100, 80,
			114, 101, 85, 112, 100, 97, 116, 101, 0, 0,
			0, 0, 71, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 89, 105, 101, 108, 100, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 78, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 89,
			105, 101, 108, 100, 80, 114, 101, 76, 97, 116,
			101, 85, 112, 100, 97, 116, 101, 0, 0, 0,
			0, 79, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 115, 124, 85, 110, 105, 84, 97,
			115, 107, 76, 111, 111, 112, 82, 117, 110, 110,
			101, 114, 89, 105, 101, 108, 100, 80, 111, 115,
			116, 76, 97, 116, 101, 85, 112, 100, 97, 116,
			101, 0, 0, 0, 0, 83, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 76, 97, 115, 116,
			89, 105, 101, 108, 100, 73, 110, 105, 116, 105,
			97, 108, 105, 122, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 80, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 76, 97, 115, 116, 89, 105,
			101, 108, 100, 69, 97, 114, 108, 121, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 80, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 76,
			97, 115, 116, 89, 105, 101, 108, 100, 70, 105,
			120, 101, 100, 85, 112, 100, 97, 116, 101, 0,
			0, 0, 0, 78, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 76, 97, 115, 116, 89, 105,
			101, 108, 100, 80, 114, 101, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 75, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 89, 105, 101, 108, 100, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 82, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 89, 105, 101, 108, 100, 80, 114, 101, 76,
			97, 116, 101, 85, 112, 100, 97, 116, 101, 0,
			0, 0, 0, 83, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 76, 97, 115, 116, 89, 105,
			101, 108, 100, 80, 111, 115, 116, 76, 97, 116,
			101, 85, 112, 100, 97, 116, 101, 0, 0, 0,
			0, 70, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 115, 124, 85, 110, 105, 84, 97,
			115, 107, 76, 111, 111, 112, 82, 117, 110, 110,
			101, 114, 84, 105, 109, 101, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 74, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 84, 105, 109, 101, 85, 112, 100, 97, 116,
			101, 0, 0, 0, 0, 75, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 89, 105, 101, 108,
			100, 84, 105, 109, 101, 85, 112, 100, 97, 116,
			101, 0, 0, 0, 0, 79, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 76, 97, 115, 116,
			89, 105, 101, 108, 100, 84, 105, 109, 101, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 39,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 73, 80, 108, 97, 121, 101,
			114, 76, 111, 111, 112, 73, 116, 101, 109, 0,
			0, 0, 0, 40, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 80, 108,
			97, 121, 101, 114, 76, 111, 111, 112, 72, 101,
			108, 112, 101, 114, 0, 0, 0, 0, 39, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 80, 108, 97, 121, 101, 114, 76,
			111, 111, 112, 84, 105, 109, 101, 114, 0, 0,
			0, 0, 48, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 68, 101, 108,
			116, 97, 84, 105, 109, 101, 80, 108, 97, 121,
			101, 114, 76, 111, 111, 112, 84, 105, 109, 101,
			114, 0, 0, 0, 0, 54, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			73, 103, 110, 111, 114, 101, 84, 105, 109, 101,
			83, 99, 97, 108, 101, 80, 108, 97, 121, 101,
			114, 76, 111, 111, 112, 84, 105, 109, 101, 114,
			0, 0, 0, 0, 47, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 82,
			101, 97, 108, 116, 105, 109, 101, 80, 108, 97,
			121, 101, 114, 76, 111, 111, 112, 84, 105, 109,
			101, 114, 0, 0, 0, 0, 32, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 80, 114, 111, 103, 114, 101, 115, 115, 0,
			0, 0, 0, 45, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 80, 114,
			111, 103, 114, 101, 115, 115, 124, 78, 117, 108,
			108, 80, 114, 111, 103, 114, 101, 115, 115, 0,
			0, 0, 0, 50, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 80, 114,
			111, 103, 114, 101, 115, 115, 124, 65, 110, 111,
			110, 121, 109, 111, 117, 115, 80, 114, 111, 103,
			114, 101, 115, 115, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 80, 114, 111, 103, 114, 101, 115,
			115, 124, 79, 110, 108, 121, 86, 97, 108, 117,
			101, 67, 104, 97, 110, 103, 101, 100, 80, 114,
			111, 103, 114, 101, 115, 115, 1, 0, 0, 0,
			32, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 84, 97, 115, 107, 80,
			111, 111, 108, 0, 0, 0, 0, 37, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 124, 73, 84, 97, 115, 107, 80, 111, 111,
			108, 78, 111, 100, 101, 1, 0, 0, 0, 32,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 84, 97, 115, 107, 80, 111,
			111, 108, 0, 0, 0, 0, 41, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 84, 105, 109, 101, 111, 117, 116, 67, 111,
			110, 116, 114, 111, 108, 108, 101, 114, 0, 0,
			0, 0, 39, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 73, 84, 114,
			105, 103, 103, 101, 114, 72, 97, 110, 100, 108,
			101, 114, 0, 0, 0, 0, 36, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 84, 114, 105, 103, 103, 101, 114, 69, 118,
			101, 110, 116, 1, 0, 0, 0, 55, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 84, 114, 105, 103,
			103, 101, 114, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 50, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 65, 119, 97, 107,
			101, 84, 114, 105, 103, 103, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 52, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 68, 101, 115, 116, 114, 111, 121, 84, 114,
			105, 103, 103, 101, 114, 0, 0, 0, 0, 65,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 46, 65, 115, 121, 110, 99, 68, 101,
			115, 116, 114, 111, 121, 84, 114, 105, 103, 103,
			101, 114, 124, 65, 119, 97, 107, 101, 77, 111,
			110, 105, 116, 111, 114, 1, 0, 0, 0, 55,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 84, 114,
			105, 103, 103, 101, 114, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 50,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 83, 116,
			97, 114, 116, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 49, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			66, 97, 115, 101, 0, 0, 0, 0, 72, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 46, 65, 115, 121, 110, 99, 84, 114, 105,
			103, 103, 101, 114, 66, 97, 115, 101, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 69, 110, 117, 109, 101, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 62, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 46, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 66, 97, 115, 101, 124, 65, 119, 97, 107,
			101, 77, 111, 110, 105, 116, 111, 114, 0, 0,
			0, 0, 53, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 73, 65, 115, 121,
			110, 99, 79, 110, 101, 83, 104, 111, 116, 84,
			114, 105, 103, 103, 101, 114, 1, 0, 0, 0,
			52, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 72, 97, 110, 100,
			108, 101, 114, 1, 0, 0, 0, 52, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 84, 114, 105, 103,
			103, 101, 114, 72, 97, 110, 100, 108, 101, 114,
			0, 0, 0, 0, 53, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 67, 97, 110, 99,
			101, 108, 108, 97, 116, 105, 111, 110, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 73, 65, 115, 121,
			110, 99, 70, 105, 120, 101, 100, 85, 112, 100,
			97, 116, 101, 72, 97, 110, 100, 108, 101, 114,
			1, 0, 0, 0, 52, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 56, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			70, 105, 120, 101, 100, 85, 112, 100, 97, 116,
			101, 84, 114, 105, 103, 103, 101, 114, 0, 0,
			0, 0, 56, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 73, 65, 115, 121,
			110, 99, 76, 97, 116, 101, 85, 112, 100, 97,
			116, 101, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 52, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 76,
			97, 116, 101, 85, 112, 100, 97, 116, 101, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			58, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 65, 110, 105, 109, 97, 116, 111, 114,
			73, 75, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 52, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 65,
			110, 105, 109, 97, 116, 111, 114, 73, 75, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			60, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 65, 110, 105, 109, 97, 116, 111, 114,
			77, 111, 118, 101, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 65, 110, 105, 109, 97, 116, 111, 114, 77,
			111, 118, 101, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 64, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 65, 112, 112, 108,
			105, 99, 97, 116, 105, 111, 110, 70, 111, 99,
			117, 115, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 52, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			61, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 65,
			112, 112, 108, 105, 99, 97, 116, 105, 111, 110,
			70, 111, 99, 117, 115, 84, 114, 105, 103, 103,
			101, 114, 0, 0, 0, 0, 64, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			73, 65, 115, 121, 110, 99, 79, 110, 65, 112,
			112, 108, 105, 99, 97, 116, 105, 111, 110, 80,
			97, 117, 115, 101, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 61, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 65, 112, 112, 108, 105, 99, 97, 116, 105,
			111, 110, 80, 97, 117, 115, 101, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 63, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			65, 112, 112, 108, 105, 99, 97, 116, 105, 111,
			110, 81, 117, 105, 116, 72, 97, 110, 100, 108,
			101, 114, 1, 0, 0, 0, 52, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 65, 112, 112, 108, 105, 99, 97, 116,
			105, 111, 110, 81, 117, 105, 116, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 63, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			65, 117, 100, 105, 111, 70, 105, 108, 116, 101,
			114, 82, 101, 97, 100, 72, 97, 110, 100, 108,
			101, 114, 1, 0, 0, 0, 52, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 65, 117, 100, 105, 111, 70, 105, 108,
			116, 101, 114, 82, 101, 97, 100, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 63, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			66, 101, 99, 97, 109, 101, 73, 110, 118, 105,
			115, 105, 98, 108, 101, 72, 97, 110, 100, 108,
			101, 114, 1, 0, 0, 0, 52, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 66, 101, 99, 97, 109, 101, 73, 110,
			118, 105, 115, 105, 98, 108, 101, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 61, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			66, 101, 99, 97, 109, 101, 86, 105, 115, 105,
			98, 108, 101, 72, 97, 110, 100, 108, 101, 114,
			1, 0, 0, 0, 52, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 58, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			66, 101, 99, 97, 109, 101, 86, 105, 115, 105,
			98, 108, 101, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 76, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 66, 101, 102, 111,
			114, 101, 84, 114, 97, 110, 115, 102, 111, 114,
			109, 80, 97, 114, 101, 110, 116, 67, 104, 97,
			110, 103, 101, 100, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 73, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 66, 101, 102, 111, 114, 101, 84, 114, 97,
			110, 115, 102, 111, 114, 109, 80, 97, 114, 101,
			110, 116, 67, 104, 97, 110, 103, 101, 100, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			66, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 67, 97, 110, 118, 97, 115, 71, 114,
			111, 117, 112, 67, 104, 97, 110, 103, 101, 100,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 52, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 72, 97, 110,
			100, 108, 101, 114, 1, 0, 0, 0, 55, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 65, 115, 121, 110, 99, 84, 114, 105,
			103, 103, 101, 114, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 65, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 65, 115, 121, 110, 99, 79, 110, 67,
			97, 110, 118, 97, 115, 71, 114, 111, 117, 112,
			67, 104, 97, 110, 103, 101, 100, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 62, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			67, 111, 108, 108, 105, 115, 105, 111, 110, 69,
			110, 116, 101, 114, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 59, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 67, 111, 108, 108, 105, 115, 105, 111, 110,
			69, 110, 116, 101, 114, 84, 114, 105, 103, 103,
			101, 114, 0, 0, 0, 0, 64, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			73, 65, 115, 121, 110, 99, 79, 110, 67, 111,
			108, 108, 105, 115, 105, 111, 110, 69, 110, 116,
			101, 114, 50, 68, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 61, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 67, 111, 108, 108, 105, 115, 105, 111, 110,
			69, 110, 116, 101, 114, 50, 68, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 61, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			67, 111, 108, 108, 105, 115, 105, 111, 110, 69,
			120, 105, 116, 72, 97, 110, 100, 108, 101, 114,
			1, 0, 0, 0, 52, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 58, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			67, 111, 108, 108, 105, 115, 105, 111, 110, 69,
			120, 105, 116, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 63, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 67, 111, 108, 108,
			105, 115, 105, 111, 110, 69, 120, 105, 116, 50,
			68, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 52, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 72, 97,
			110, 100, 108, 101, 114, 1, 0, 0, 0, 55,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 84, 114,
			105, 103, 103, 101, 114, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 60,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 67, 111,
			108, 108, 105, 115, 105, 111, 110, 69, 120, 105,
			116, 50, 68, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 61, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 67, 111, 108, 108,
			105, 115, 105, 111, 110, 83, 116, 97, 121, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			52, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 72, 97, 110, 100,
			108, 101, 114, 1, 0, 0, 0, 55, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 84, 114, 105, 103,
			103, 101, 114, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 58, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 67, 111, 108, 108,
			105, 115, 105, 111, 110, 83, 116, 97, 121, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			63, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 67, 111, 108, 108, 105, 115, 105, 111,
			110, 83, 116, 97, 121, 50, 68, 72, 97, 110,
			100, 108, 101, 114, 1, 0, 0, 0, 52, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 65, 115, 121, 110, 99, 84, 114, 105,
			103, 103, 101, 114, 72, 97, 110, 100, 108, 101,
			114

BepInEx/core/UniTask.DOTween.dll

Decompiled 2 days ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[0];
		result.TypesData = new byte[0];
		result.TotalFiles = 0;
		result.TotalTypes = 0;
		result.IsEditorOnly = false;
		return result;
	}
}

BepInEx/core/UniTask.Linq.dll

Decompiled 2 days ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks.CompilerServices;
using Cysharp.Threading.Tasks.Internal;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[5897]
		{
			0, 0, 0, 2, 0, 0, 0, 73, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 65,
			103, 103, 114, 101, 103, 97, 116, 101, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 67, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			65, 108, 108, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 67, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 65, 110, 121, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 77, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			65, 112, 112, 101, 110, 100, 80, 114, 101, 112,
			101, 110, 100, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 88, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 65, 115, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 83,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 116, 111, 114, 66, 97, 115, 101,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			71, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 76, 105, 110,
			113, 92, 65, 118, 101, 114, 97, 103, 101, 46,
			99, 115, 0, 0, 0, 5, 0, 0, 0, 70,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 66, 117, 102, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 68, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 67,
			97, 115, 116, 46, 99, 115, 0, 0, 0, 29,
			0, 0, 0, 77, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 70, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			67, 111, 110, 99, 97, 116, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 72, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 67, 111,
			110, 116, 97, 105, 110, 115, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 69, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 67, 111,
			117, 110, 116, 46, 99, 115, 0, 0, 0, 5,
			0, 0, 0, 70, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 67, 114, 101, 97, 116,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 78, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 68, 101, 102, 97, 117, 108, 116,
			73, 102, 69, 109, 112, 116, 121, 46, 99, 115,
			0, 0, 0, 9, 0, 0, 0, 72, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 68,
			105, 115, 116, 105, 110, 99, 116, 46, 99, 115,
			0, 0, 0, 9, 0, 0, 0, 84, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 66,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 68, 111, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 73, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 69, 108, 101, 109, 101,
			110, 116, 65, 116, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 69, 109, 112, 116,
			121, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 69, 120, 99, 101, 112, 116, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 69,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 70, 105, 114, 115, 116, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 71, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 70, 111,
			114, 69, 97, 99, 104, 46, 99, 115, 0, 0,
			0, 13, 0, 0, 0, 71, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 71, 114, 111,
			117, 112, 66, 121, 46, 99, 115, 0, 0, 0,
			7, 0, 0, 0, 73, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 71, 114, 111, 117,
			112, 74, 111, 105, 110, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 73, 110, 116,
			101, 114, 115, 101, 99, 116, 46, 99, 115, 0,
			0, 0, 7, 0, 0, 0, 68, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 74, 111,
			105, 110, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 68, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 76, 97, 115, 116, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 73, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			76, 111, 110, 103, 67, 111, 117, 110, 116, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 67,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 77, 97, 120, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 77, 101, 114, 103,
			101, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 67, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 77, 105, 110, 46, 99, 115, 0,
			0, 0, 4, 0, 0, 0, 70, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 77, 105,
			110, 77, 97, 120, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 78, 101, 118, 101,
			114, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 79, 102, 84, 121, 112, 101, 46,
			99, 115, 0, 0, 0, 10, 0, 0, 0, 71,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 79, 114, 100, 101, 114, 66, 121, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 72, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			80, 97, 105, 114, 119, 105, 115, 101, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 71, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			80, 117, 98, 108, 105, 115, 104, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 69, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 81,
			117, 101, 117, 101, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 82, 97, 110, 103,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 82, 101, 112, 101, 97, 116, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 70,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 82, 101, 116, 117, 114, 110, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 71, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 82,
			101, 118, 101, 114, 115, 101, 46, 99, 115, 0,
			0, 0, 13, 0, 0, 0, 70, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 101,
			108, 101, 99, 116, 46, 99, 115, 0, 0, 0,
			7, 0, 0, 0, 74, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 83, 101, 108, 101,
			99, 116, 77, 97, 110, 121, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 77, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 101,
			113, 117, 101, 110, 99, 101, 69, 113, 117, 97,
			108, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 83, 105, 110, 103, 108, 101, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 68,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 83, 107, 105, 112, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 72, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 83, 107, 105,
			112, 76, 97, 115, 116, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 83, 107, 105,
			112, 85, 110, 116, 105, 108, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 81, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 107,
			105, 112, 85, 110, 116, 105, 108, 67, 97, 110,
			99, 101, 108, 101, 100, 46, 99, 115, 0, 0,
			0, 13, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 83, 107, 105,
			112, 87, 104, 105, 108, 101, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 73, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 117,
			98, 115, 99, 114, 105, 98, 101, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 67, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 83,
			117, 109, 46, 99, 115, 0, 0, 0, 3, 0,
			0, 0, 68, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 84, 97, 107, 101, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 72, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 97, 107, 101, 76, 97, 115, 116, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 73, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 97, 107, 101, 85, 110, 116, 105, 108, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 81,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 84, 97, 107, 101, 85, 110, 116, 105, 108,
			67, 97, 110, 99, 101, 108, 101, 100, 46, 99,
			115, 0, 0, 0, 13, 0, 0, 0, 73, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 97, 107, 101, 87, 104, 105, 108, 101, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 69,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 84, 104, 114, 111, 119, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 71, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 84, 111,
			65, 114, 114, 97, 121, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 76, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 84, 111, 68,
			105, 99, 116, 105, 111, 110, 97, 114, 121, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 73,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 84, 111, 72, 97, 115, 104, 83, 101, 116,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			70, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 76, 105, 110,
			113, 92, 84, 111, 76, 105, 115, 116, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 72, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 111, 76, 111, 111, 107, 117, 112, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 76, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 111, 79, 98, 115, 101, 114, 118, 97, 98,
			108, 101, 46, 99, 115, 0, 0, 0, 9, 0,
			0, 0, 88, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 84, 111, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 69, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			85, 110, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 91, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 85, 110, 105,
			116, 121, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 69, 118, 101, 114, 121, 85, 112,
			100, 97, 116, 101, 46, 99, 115, 0, 0, 0,
			5, 0, 0, 0, 97, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 85, 110, 105, 116,
			121, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 69, 118, 101, 114, 121, 86, 97, 108,
			117, 101, 67, 104, 97, 110, 103, 101, 100, 46,
			99, 115, 0, 0, 0, 5, 0, 0, 0, 85,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 85, 110, 105, 116, 121, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 84, 105, 109,
			101, 114, 46, 99, 115, 0, 0, 0, 13, 0,
			0, 0, 69, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 87, 104, 101, 114, 101, 46,
			99, 115, 0, 0, 0, 7, 0, 0, 0, 67,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 90, 105, 112, 46, 99, 115
		};
		result.TypesData = new byte[17792]
		{
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			65, 103, 103, 114, 101, 103, 97, 116, 101, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 32,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 65,
			108, 108, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 32, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 65, 110, 121, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 42, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 65, 112, 112, 101, 110,
			100, 80, 114, 101, 112, 101, 110, 100, 0, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 65, 112, 112, 101, 110, 100, 80, 114,
			101, 112, 101, 110, 100, 124, 95, 65, 112, 112,
			101, 110, 100, 80, 114, 101, 112, 101, 110, 100,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			48, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 66, 97, 115, 101, 0,
			0, 0, 0, 61, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 116, 111, 114, 65, 119,
			97, 105, 116, 83, 101, 108, 101, 99, 116, 111,
			114, 66, 97, 115, 101, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 36, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 65, 118, 101, 114, 97,
			103, 101, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 35, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 66, 117, 102, 102, 101, 114, 0, 0,
			0, 0, 43, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 66, 117, 102, 102, 101, 114, 124, 95,
			66, 117, 102, 102, 101, 114, 0, 0, 0, 0,
			39, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			66, 117, 102, 102, 101, 114, 83, 107, 105, 112,
			0, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 66, 117, 102, 102, 101, 114,
			83, 107, 105, 112, 124, 95, 66, 117, 102, 102,
			101, 114, 83, 107, 105, 112, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 33, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 67, 97, 115, 116,
			0, 0, 0, 0, 39, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 67, 97, 115, 116, 124, 95,
			67, 97, 115, 116, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			1, 0, 0, 0, 42, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 57, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 124, 95, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 1,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			57, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 124, 95, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 1, 0,
			0, 0, 42, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 1, 0, 0, 0, 57,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 124, 95, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 42, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 1, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 124, 95, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			42, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 1, 0, 0, 0, 57, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 67, 111, 109,
			98, 105, 110, 101, 76, 97, 116, 101, 115, 116,
			124, 95, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 1, 0, 0, 0, 42,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 1, 0, 0, 0, 57, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 124,
			95, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 1, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 1, 0, 0, 0, 57, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 124, 95,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 1, 0, 0, 0, 42, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 67, 111, 109,
			98, 105, 110, 101, 76, 97, 116, 101, 115, 116,
			1, 0, 0, 0, 57, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 124, 95, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 1, 0, 0, 0, 42, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 1,
			0, 0, 0, 57, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 124, 95, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 1, 0, 0, 0, 42, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 1, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 124, 95, 67, 111, 109,
			98, 105, 110, 101, 76, 97, 116, 101, 115, 116,
			1, 0, 0, 0, 42, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 57, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 124, 95, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 1,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			57, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 124, 95, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 1, 0,
			0, 0, 42, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 1, 0, 0, 0, 57,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 124, 95, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 42, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 1, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 124, 95, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 35, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 67, 111, 110, 99,
			97, 116, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 67, 111, 110, 99,
			97, 116, 124, 95, 67, 111, 110, 99, 97, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			37, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			67, 111, 110, 116, 97, 105, 110, 115, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 34, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 67, 111,
			117, 110, 116, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 41, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 73, 65, 115, 121, 110, 99, 87,
			114, 105, 116, 101, 114, 0, 0, 0, 0, 35,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 67,
			114, 101, 97, 116, 101, 0, 0, 0, 0, 43,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 67,
			114, 101, 97, 116, 101, 124, 95, 67, 114, 101,
			97, 116, 101, 0, 0, 0, 0, 47, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 67, 114, 101,
			97, 116, 101, 124, 65, 115, 121, 110, 99, 87,
			114, 105, 116, 101, 114, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 43, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 68, 101, 102, 97, 117,
			108, 116, 73, 102, 69, 109, 112, 116, 121, 0,
			0, 0, 0, 59, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 101, 102, 97, 117, 108, 116,
			73, 102, 69, 109, 112, 116, 121, 124, 95, 68,
			101, 102, 97, 117, 108, 116, 73, 102, 69, 109,
			112, 116, 121, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 1,
			0, 0, 0, 37, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 1, 0, 0, 0, 47, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 68, 105, 115, 116, 105,
			110, 99, 116, 124, 95, 68, 105, 115, 116, 105,
			110, 99, 116, 1, 0, 0, 0, 37, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 68, 105, 115,
			116, 105, 110, 99, 116, 1, 0, 0, 0, 47,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 68,
			105, 115, 116, 105, 110, 99, 116, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 0, 0, 0,
			0, 42, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 68, 105, 115, 116, 105, 110, 99, 116, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 68, 105,
			115, 116, 105, 110, 99, 116, 65, 119, 97, 105,
			116, 124, 95, 68, 105, 115, 116, 105, 110, 99,
			116, 65, 119, 97, 105, 116, 0, 0, 0, 0,
			58, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			68, 105, 115, 116, 105, 110, 99, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 89, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 105, 115, 116, 105, 110, 99,
			116, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 124, 95, 68, 105, 115, 116, 105, 110,
			99, 116, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 1,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 1, 0, 0, 0, 71, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 68, 105, 115,
			116, 105, 110, 99, 116, 85, 110, 116, 105, 108,
			67, 104, 97, 110, 103, 101, 100, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 1,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 1, 0, 0, 0, 71, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 68, 105, 115,
			116, 105, 110, 99, 116, 85, 110, 116, 105, 108,
			67, 104, 97, 110, 103, 101, 100, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 0,
			0, 0, 0, 54, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 65, 119, 97, 105, 116, 0, 0,
			0, 0, 81, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 68, 105, 115, 116, 105, 110, 99, 116,
			85, 110, 116, 105, 108, 67, 104, 97, 110, 103,
			101, 100, 65, 119, 97, 105, 116, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 70, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 68, 105,
			115, 116, 105, 110, 99, 116, 85, 110, 116, 105,
			108, 67, 104, 97, 110, 103, 101, 100, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 113, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 124, 95, 68, 105, 115, 116,
			105, 110, 99, 116, 85, 110, 116, 105, 108, 67,
			104, 97, 110, 103, 101, 100, 65, 119, 97, 105,
			116, 87, 105, 116, 104, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 1, 0, 0,
			0, 51, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 31, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 68, 111, 0,
			0, 0, 0, 35, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 111, 124, 95, 68, 111, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 38,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 69,
			108, 101, 109, 101, 110, 116, 65, 116, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 34, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 69, 109,
			112, 116, 121, 0, 0, 0, 0, 41, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 69, 109, 112,
			116, 121, 124, 95, 69, 109, 112, 116, 121, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 35,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 69,
			120, 99, 101, 112, 116, 0, 0, 0, 0, 43,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 69,
			120, 99, 101, 112, 116, 124, 95, 69, 120, 99,
			101, 112, 116, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 34, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 70, 105, 114, 115, 116, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 36, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 70, 111,
			114, 69, 97, 99, 104, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 1, 0, 0, 0, 36, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 71, 114, 111, 117, 112,
			66, 121, 1, 0, 0, 0, 45, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 71, 114, 111, 117,
			112, 66, 121, 124, 95, 71, 114, 111, 117, 112,
			66, 121, 1, 0, 0, 0, 36, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 71, 114, 111, 117,
			112, 66, 121, 1, 0, 0, 0, 45, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 71, 114, 111,
			117, 112, 66, 121, 124, 95, 71, 114, 111, 117,
			112, 66, 121, 1, 0, 0, 0, 41, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 71, 114, 111,
			117, 112, 66, 121, 65, 119, 97, 105, 116, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 124, 95, 71, 114, 111,
			117, 112, 66, 121, 65, 119, 97, 105, 116, 1,
			0, 0, 0, 41, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 1, 0, 0, 0, 55,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 71,
			114, 111, 117, 112, 66, 121, 65, 119, 97, 105,
			116, 124, 95, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 1, 0, 0, 0, 57,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 71,
			114, 111, 117, 112, 66, 121, 65, 119, 97, 105,
			116, 87, 105, 116, 104, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 1, 0, 0,
			0, 87, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 71, 114, 111, 117, 112, 66, 121, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 124,
			95, 71, 114, 111, 117, 112, 66, 121, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 1,
			0, 0, 0, 57, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 87, 105, 116, 104, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 1, 0, 0, 0, 87, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 71, 114, 111, 117, 112,
			66, 121, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 124, 95, 71, 114, 111, 117, 112,
			66, 121, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 38, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 71, 114, 111, 117, 112, 74, 111,
			105, 110, 0, 0, 0, 0, 49, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 71, 114, 111, 117,
			112, 74, 111, 105, 110, 124, 95, 71, 114, 111,
			117, 112, 74, 111, 105, 110, 0, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			71, 114, 111, 117, 112, 74, 111, 105, 110, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 59, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 71, 114,
			111, 117, 112, 74, 111, 105, 110, 65, 119, 97,
			105, 116, 124, 95, 71, 114, 111, 117, 112, 74,
			111, 105, 110, 65, 119, 97, 105, 116, 0, 0,
			0, 0, 59, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 71, 114, 111, 117, 112, 74, 111, 105,
			110, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 91, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 71, 114, 111, 117,
			112, 74, 111, 105, 110, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 124, 95, 71, 114,
			111, 117, 112, 74, 111, 105, 110, 65, 119, 97,
			105, 116, 87, 105, 116, 104, 67, 97, 110, 99,
			101, 108, 108, 97, 116, 105, 111, 110, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 73, 110,
			116, 101, 114, 115, 101, 99, 116, 0, 0, 0,
			0, 49, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 73, 110, 116, 101, 114, 115, 101, 99, 116,
			124, 95, 73, 110, 116, 101, 114, 115, 101, 99,
			116, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 33, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 74, 111, 105, 110, 0, 0, 0, 0, 39,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 74,
			111, 105, 110, 124, 95, 74, 111, 105, 110, 0,
			0, 0, 0, 38, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 74, 111, 105, 110, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 49, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 74, 111, 105, 110,
			65, 119, 97, 105, 116, 124, 95, 74, 111, 105,
			110, 65, 119, 97, 105, 116, 0, 0, 0, 0,
			54, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			74, 111, 105, 110, 65, 119, 97, 105, 116, 87,
			105, 116, 104, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 81,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 74,
			111, 105, 110, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 124, 95, 74, 111, 105, 110,
			65, 119, 97, 105, 116, 87, 105, 116, 104, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 33, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 76, 97, 115, 116, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 38, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 76, 111, 110, 103, 67,
			111, 117, 110, 116, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			1, 0, 0, 0, 32, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 77, 97, 120, 1, 0, 0,
			0, 51, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 34, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 77, 101, 114,
			103, 101, 0, 0, 0, 0, 41, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 77, 101, 114, 103,
			101, 124, 95, 77, 101, 114, 103, 101, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 1, 0, 0, 0, 32, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 77, 105,
			110, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 1, 0, 0,
			0, 32, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 77, 105, 110, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			1, 0, 0, 0, 32, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 77, 97, 120, 1, 0, 0,
			0, 51, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 34, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 78, 101, 118,
			101, 114, 0, 0, 0, 0, 41, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 78, 101, 118, 101,
			114, 124, 95, 78, 101, 118, 101, 114, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 35, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 79, 102,
			84, 121, 112, 101, 0, 0, 0, 0, 43, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 79, 102,
			84, 121, 112, 101, 124, 95, 79, 102, 84, 121,
			112, 101, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 50, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 83, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 62, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 83, 121, 110,
			99, 83, 101, 108, 101, 99, 116, 111, 114, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 83, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 58, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 65, 115, 121, 110, 99, 83,
			101, 108, 101, 99, 116, 111, 114, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 83, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 74, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 65, 115, 121,
			110, 99, 83, 101, 108, 101, 99, 116, 111, 114,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 83, 111, 114, 116,
			101, 114, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 79, 114, 100, 101,
			114, 101, 100, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 75, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 79, 114, 100, 101, 114, 101, 100, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 124, 95, 79, 114, 100, 101,
			114, 101, 100, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 116, 111, 114, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 79, 114, 100, 101, 114, 101, 100, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 56, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 79, 114,
			100, 101, 114, 101, 100, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			65, 119, 97, 105, 116, 0, 0, 0, 0, 72,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 79,
			114, 100, 101, 114, 101, 100, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 37, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 80, 97, 105, 114, 119, 105, 115, 101,
			0, 0, 0, 0, 47, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 80, 97, 105, 114, 119, 105,
			115, 101, 124, 95, 80, 97, 105, 114, 119, 105,
			115, 101, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 36, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 80, 117, 98, 108, 105, 115, 104, 0,
			0, 0, 0, 54, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 80, 117, 98, 108, 105, 115, 104,
			124, 67, 111, 110, 110, 101, 99, 116, 68, 105,
			115, 112, 111, 115, 97, 98, 108, 101, 0, 0,
			0, 0, 45, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 80, 117, 98, 108, 105, 115, 104, 124,
			95, 80, 117, 98, 108, 105, 115, 104, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 81, 117,
			101, 117, 101, 79, 112, 101, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 49, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 81, 117, 101, 117, 101,
			79, 112, 101, 114, 97, 116, 111, 114, 124, 95,
			81, 117, 101, 117, 101, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 34, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 82, 97, 110, 103, 101,
			0, 0, 0, 0, 41, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 82, 97, 110, 103, 101, 124,
			95, 82, 97, 110, 103, 101, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 35, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 82, 101, 112, 101,
			97, 116, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 82, 101, 112, 101,
			97, 116, 124, 95, 82, 101, 112, 101, 97, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			35, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			82, 101, 116, 117, 114, 110, 0, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			82, 101, 116, 117, 114, 110, 124, 95, 82, 101,
			116, 117, 114, 110, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			0, 0, 0, 0, 36, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 82, 101, 118, 101, 114, 115,
			101, 0, 0, 0, 0, 45, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 82, 101, 118, 101, 114,
			115, 101, 124, 95, 82, 101, 118, 101, 114, 115,
			101, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 35, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 83, 101, 108, 101, 99, 116, 0, 0, 0,
			0, 43, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 101, 108, 101, 99, 116, 124, 95, 83,
			101, 108, 101, 99, 116, 0, 0, 0, 0, 38,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			101, 108, 101, 99, 116, 73, 110, 116, 0, 0,
			0, 0, 46, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 83, 101, 108, 101, 99, 116, 73, 110,
			116, 124, 95, 83, 101, 108, 101, 99, 116, 0,
			0, 0, 0, 40, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 83, 101, 108, 101, 99, 116, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 53, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 101,
			108, 101, 99, 116, 65, 119, 97, 105, 116, 124,
			95, 83, 101, 108, 101, 99, 116, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 83, 101, 108, 101,
			99, 116, 73, 110, 116, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 56, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 83, 101, 108, 101, 99, 116,
			73, 110, 116, 65, 119, 97, 105, 116, 124, 95,
			83, 101, 108, 101, 99, 116, 65, 119, 97, 105,
			116, 0, 0, 0, 0, 56, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 83, 101, 108, 101, 99,
			116, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 85, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 83, 101, 108, 101,
			99, 116, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 124, 95, 83, 101, 108, 101, 99,
			116, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 59, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 83, 101, 108, 101,
			99, 116, 73, 110, 116, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 0, 0, 0, 0,
			88, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			83, 101, 108, 101, 99, 116, 73, 110, 116, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			124, 95, 83, 101, 108, 101, 99, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 39,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			101, 108, 101, 99, 116, 77, 97, 110, 121, 0,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 83, 101, 108, 101, 99, 116, 77,
			97, 110, 121, 124, 95, 83, 101, 108, 101, 99,
			116, 77, 97, 110, 121, 0, 0, 0, 0, 44,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			101, 108, 101, 99, 116, 77, 97, 110, 121, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 61, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 101,
			108, 101, 99, 116, 77, 97, 110, 121, 65, 119,
			97, 105, 116, 124, 95, 83, 101, 108, 101, 99,
			116, 77, 97, 110, 121, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 60, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 83, 101, 108, 101, 99, 116,
			77, 97, 110, 121, 65, 119, 97, 105, 116, 87,
			105, 116, 104, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 93,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 83,
			101, 108, 101, 99, 116, 77, 97, 110, 121, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			124, 95, 83, 101, 108, 101, 99, 116, 77, 97,
			110, 121, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 83, 101, 113, 117, 101, 110, 99,
			101, 69, 113, 117, 97, 108, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 83, 105, 110, 103,
			108, 101, 79, 112, 101, 114, 97, 116, 111, 114,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			33, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			83, 107, 105, 112, 0, 0, 0, 0, 39, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 107,
			105, 112, 124, 95, 83, 107, 105, 112, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 37, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 83, 107,
			105, 112, 76, 97, 115, 116, 0, 0, 0, 0,
			47, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			83, 107, 105, 112, 76, 97, 115, 116, 124, 95,
			83, 107, 105, 112, 76, 97, 115, 116, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 83, 107,
			105, 112, 85, 110, 116, 105, 108, 0, 0, 0,
			0, 49, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 85, 110, 116, 105, 108,
			124, 95, 83, 107, 105, 112, 85, 110, 116, 105,
			108, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 46, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 83, 107, 105, 112, 85, 110, 116, 105, 108,
			67, 97, 110, 99, 101, 108, 101, 100, 0, 0,
			0, 0, 65, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 83, 107, 105, 112, 85, 110, 116, 105,
			108, 67, 97, 110, 99, 101, 108, 101, 100, 124,
			95, 83, 107, 105, 112, 85, 110, 116, 105, 108,
			67, 97, 110, 99, 101, 108, 101, 100, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 83, 107,
			105, 112, 87, 104, 105, 108, 101, 0, 0, 0,
			0, 49, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			124, 95, 83, 107, 105, 112, 87, 104, 105, 108,
			101, 0, 0, 0, 0, 41, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 83, 107, 105, 112, 87,
			104, 105, 108, 101, 73, 110, 116, 0, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			73, 110, 116, 124, 95, 83, 107, 105, 112, 87,
			104, 105, 108, 101, 73, 110, 116, 0, 0, 0,
			0, 43, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			65, 119, 97, 105, 116, 0, 0, 0, 0, 59,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 83,
			107, 105, 112, 87, 104, 105, 108, 101, 65, 119,
			97, 105, 116, 124, 95, 83, 107, 105, 112, 87,
			104, 105, 108, 101, 65, 119, 97, 105, 116, 0,
			0, 0, 0, 46, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 83, 107, 105, 112, 87, 104, 105,
			108, 101, 73, 110, 116, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 65, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 83, 107, 105, 112, 87, 104,
			105, 108, 101, 73, 110, 116, 65, 119, 97, 105,
			116, 124, 95, 83, 107, 105, 112, 87, 104, 105,
			108, 101, 73, 110, 116, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 59, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 83, 107, 105, 112, 87, 104,
			105, 108, 101, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 0, 0, 0, 0, 91, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 107,
			105, 112, 87, 104, 105, 108, 101, 65, 119, 97,
			105, 116, 87, 105, 116, 104, 67, 97, 110, 99,
			101, 108, 108, 97, 116, 105, 111, 110, 124, 95,
			83, 107, 105, 112, 87, 104, 105, 108, 101, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			0, 0, 0, 0, 62, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 83, 107, 105, 112, 87, 104,
			105, 108, 101, 73, 110, 116, 65, 119, 97, 105,
			116, 87, 105, 116, 104, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 97, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			73, 110, 116, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 124, 95, 83, 107, 105, 112,
			87, 104, 105, 108, 101, 73, 110, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 56,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 84, 111, 107, 101, 110, 68, 105, 115, 112,
			111, 115, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			83, 117, 98, 115, 99, 114, 105, 98, 101, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 32,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			117, 109, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 33, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 84, 97, 107, 101, 0, 0, 0, 0,
			39, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 97, 107, 101, 124, 95, 84, 97, 107, 101,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			37, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 97, 107, 101, 76, 97, 115, 116, 0, 0,
			0, 0, 47, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 84, 97, 107, 101, 76, 97, 115, 116,
			124, 95, 84, 97, 107, 101, 76, 97, 115, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 97, 107, 101, 85, 110, 116, 105, 108, 0,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 85, 110, 116,
			105, 108, 124, 95, 84, 97, 107, 101, 85, 110,
			116, 105, 108, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 46, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 84, 97, 107, 101, 85, 110, 116,
			105, 108, 67, 97, 110, 99, 101, 108, 101, 100,
			0, 0, 0, 0, 65, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 84, 97, 107, 101, 85, 110,
			116, 105, 108, 67, 97, 110, 99, 101, 108, 101,
			100, 124, 95, 84, 97, 107, 101, 85, 110, 116,
			105, 108, 67, 97, 110, 99, 101, 108, 101, 100,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 97, 107, 101, 87, 104, 105, 108, 101, 0,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 124, 95, 84, 97, 107, 101, 87, 104,
			105, 108, 101, 0, 0, 0, 0, 41, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 84, 97, 107,
			101, 87, 104, 105, 108, 101, 73, 110, 116, 0,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 73, 110, 116, 124, 95, 84, 97, 107,
			101, 87, 104, 105, 108, 101, 73, 110, 116, 0,
			0, 0, 0, 43, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 65, 119, 97, 105, 116, 0, 0, 0,
			0, 59, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 84, 97, 107, 101, 87, 104, 105, 108, 101,
			65, 119, 97, 105, 116, 124, 95, 84, 97, 107,
			101, 87, 104, 105, 108, 101, 65, 119, 97, 105,
			116, 0, 0, 0, 0, 46, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 84, 97, 107, 101, 87,
			104, 105, 108, 101, 73, 110, 116, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 65, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 84, 97, 107, 101,
			87, 104, 105, 108, 101, 73, 110, 116, 65, 119,
			97, 105, 116, 124, 95, 84, 97, 107, 101, 87,
			104, 105, 108, 101, 73, 110, 116, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 59, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 84, 97, 107, 101,
			87, 104, 105, 108, 101, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 0, 0, 0, 0,
			91, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 97, 107, 101, 87, 104, 105, 108, 101, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			124, 95, 84, 97, 107, 101, 87, 104, 105, 108,
			101, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 62, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 84, 97, 107, 101,
			87, 104, 105, 108, 101, 73, 110, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 97, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 73, 110, 116, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 124, 95, 84, 97,
			107, 101, 87, 104, 105, 108, 101, 73, 110, 116,
			65, 119, 97, 105, 116, 87, 105, 116, 104, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 34, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 84, 104, 114, 111, 119, 0, 0, 0, 0,
			41, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 104, 114, 111, 119, 124, 95, 84, 104, 114,
			111, 119, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 36, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 84, 111, 65, 114, 114, 97, 121, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 41,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 84,
			111, 68, 105, 99, 116, 105, 111, 110, 97, 114,
			121, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 38, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 84, 111, 72, 97, 115, 104, 83, 101, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			35, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 111, 76, 105, 115, 116, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 37, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 84, 111, 76, 111,
			111, 107, 117, 112, 0, 0, 0, 0, 44, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 84, 111,
			76, 111, 111, 107, 117, 112, 124, 76, 111, 111,
			107, 117, 112, 0, 0, 0, 0, 46, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 84, 111, 76,
			111, 111, 107, 117, 112, 124, 71, 114, 111, 117,
			112, 105, 110, 103, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			0, 0, 0, 0, 41, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 84, 111, 79, 98, 115, 101,
			114, 118, 97, 98, 108, 101, 0, 0, 0, 0,
			69, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 111, 79, 98, 115, 101, 114, 118, 97, 98,
			108, 101, 124, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 84, 111, 107, 101, 110,
			68, 105, 115, 112, 111, 115, 97, 98, 108, 101,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105

BepInEx/core/UniTask.TextMeshPro.dll

Decompiled 2 days ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Threading;
using Cysharp.Threading.Tasks.CompilerServices;
using TMPro;
using UnityEngine;
using UnityEngine.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[239]
		{
			0, 0, 0, 1, 0, 0, 0, 106, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 69, 120, 116, 101, 114, 110,
			97, 108, 92, 84, 101, 120, 116, 77, 101, 115,
			104, 80, 114, 111, 92, 84, 101, 120, 116, 77,
			101, 115, 104, 80, 114, 111, 65, 115, 121, 110,
			99, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 117, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 120,
			116, 101, 114, 110, 97, 108, 92, 84, 101, 120,
			116, 77, 101, 115, 104, 80, 114, 111, 92, 84,
			101, 120, 116, 77, 101, 115, 104, 80, 114, 111,
			65, 115, 121, 110, 99, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 73, 110, 112, 117,
			116, 70, 105, 101, 108, 100, 46, 99, 115
		};
		result.TypesData = new byte[110]
		{
			1, 0, 0, 0, 50, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 84,
			101, 120, 116, 77, 101, 115, 104, 80, 114, 111,
			65, 115, 121, 110, 99, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 1, 0, 0, 0, 50,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 84, 101, 120, 116, 77, 101,
			115, 104, 80, 114, 111, 65, 115, 121, 110, 99,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115
		};
		result.TotalFiles = 2;
		result.TotalTypes = 2;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace Cysharp.Threading.Tasks;

public static class TextMeshProAsyncExtensions
{
	[StructLayout(LayoutKind.Auto)]
	[CompilerGenerated]
	private struct <BindToCore>d__2 : IAsyncStateMachine
	{
		public int <>1__state;

		public AsyncUniTaskVoidMethodBuilder <>t__builder;

		public IUniTaskAsyncEnumerable<string> source;

		public CancellationToken cancellationToken;

		public bool rebindOnError;

		public TMP_Text text;

		private bool <repeat>5__2;

		private IUniTaskAsyncEnumerator<string> <e>5__3;

		private object <>7__wrap3;

		private int <>7__wrap4;

		private Awaiter<bool> <>u__1;

		private Awaiter <>u__2;

		private void MoveNext()
		{
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			int num = <>1__state;
			try
			{
				if (num == 0)
				{
					goto IL_003e;
				}
				if (num != 1)
				{
					<repeat>5__2 = false;
					goto IL_0018;
				}
				Awaiter awaiter = <>u__2;
				<>u__2 = default(Awaiter);
				num = (<>1__state = -1);
				goto IL_0179;
				IL_0179:
				((Awaiter)(ref awaiter)).GetResult();
				goto IL_0180;
				IL_0180:
				object obj = <>7__wrap3;
				if (obj != null)
				{
					ExceptionDispatchInfo.Capture((obj as Exception) ?? throw obj).Throw();
				}
				switch (<>7__wrap4)
				{
				case 1:
					break;
				case 2:
					goto end_IL_0007;
				default:
					<>7__wrap3 = null;
					<e>5__3 = null;
					goto end_IL_0007;
				}
				goto IL_0018;
				IL_0018:
				<e>5__3 = source.GetAsyncEnumerator(cancellationToken);
				<>7__wrap3 = null;
				<>7__wrap4 = 0;
				goto IL_003e;
				IL_003e:
				try
				{
					while (true)
					{
						bool result;
						try
						{
							Awaiter<bool> awaiter2;
							if (num != 0)
							{
								awaiter2 = <e>5__3.MoveNextAsync().GetAwaiter();
								if (!awaiter2.IsCompleted)
								{
									num = (<>1__state = 0);
									<>u__1 = awaiter2;
									((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter<bool>, <BindToCore>d__2>(ref awaiter2, ref this);
									return;
								}
							}
							else
							{
								awaiter2 = <>u__1;
								<>u__1 = default(Awaiter<bool>);
								num = (<>1__state = -1);
							}
							result = awaiter2.GetResult();
							<repeat>5__2 = false;
						}
						catch (Exception ex)
						{
							if (ex is OperationCanceledException)
							{
								goto IL_00fc;
							}
							if (rebindOnError && !<repeat>5__2)
							{
								<repeat>5__2 = true;
								goto IL_00f3;
							}
							throw;
						}
						if (result)
						{
							text.text = <e>5__3.Current;
							continue;
						}
						goto IL_00fc;
						IL_00f3:
						<>7__wrap4 = 1;
						break;
						IL_00fc:
						<>7__wrap4 = 2;
						break;
					}
				}
				catch (object obj2)
				{
					<>7__wrap3 = obj2;
				}
				if (<e>5__3 != null)
				{
					UniTask val = ((IUniTaskAsyncDisposable)<e>5__3).DisposeAsync();
					awaiter = ((UniTask)(ref val)).GetAwaiter();
					if (!((Awaiter)(ref awaiter)).IsCompleted)
					{
						num = (<>1__state = 1);
						<>u__2 = awaiter;
						((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <BindToCore>d__2>(ref awaiter, ref this);
						return;
					}
					goto IL_0179;
				}
				goto IL_0180;
				end_IL_0007:;
			}
			catch (Exception exception)
			{
				<>1__state = -2;
				<e>5__3 = null;
				((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetException(exception);
				return;
			}
			<>1__state = -2;
			<e>5__3 = null;
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetResult();
		}

		void IAsyncStateMachine.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			this.MoveNext();
		}

		[DebuggerHidden]
		private void SetStateMachine(IAsyncStateMachine stateMachine)
		{
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine);
		}

		void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
		{
			//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
			this.SetStateMachine(stateMachine);
		}
	}

	[StructLayout(LayoutKind.Auto)]
	[CompilerGenerated]
	private struct <BindToCore>d__6<T> : IAsyncStateMachine
	{
		public int <>1__state;

		public AsyncUniTaskVoidMethodBuilder <>t__builder;

		public IUniTaskAsyncEnumerable<T> source;

		public CancellationToken cancellationToken;

		public bool rebindOnError;

		public TMP_Text text;

		private bool <repeat>5__2;

		private IUniTaskAsyncEnumerator<T> <e>5__3;

		private object <>7__wrap3;

		private int <>7__wrap4;

		private Awaiter<bool> <>u__1;

		private Awaiter <>u__2;

		private void MoveNext()
		{
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			int num = <>1__state;
			try
			{
				if (num == 0)
				{
					goto IL_003e;
				}
				if (num != 1)
				{
					<repeat>5__2 = false;
					goto IL_0018;
				}
				Awaiter awaiter = <>u__2;
				<>u__2 = default(Awaiter);
				num = (<>1__state = -1);
				goto IL_0188;
				IL_0188:
				((Awaiter)(ref awaiter)).GetResult();
				goto IL_018f;
				IL_018f:
				object obj = <>7__wrap3;
				if (obj != null)
				{
					ExceptionDispatchInfo.Capture((obj as Exception) ?? throw obj).Throw();
				}
				switch (<>7__wrap4)
				{
				case 1:
					break;
				case 2:
					goto end_IL_0007;
				default:
					<>7__wrap3 = null;
					<e>5__3 = null;
					goto end_IL_0007;
				}
				goto IL_0018;
				IL_0018:
				<e>5__3 = source.GetAsyncEnumerator(cancellationToken);
				<>7__wrap3 = null;
				<>7__wrap4 = 0;
				goto IL_003e;
				IL_003e:
				try
				{
					while (true)
					{
						bool result;
						try
						{
							Awaiter<bool> awaiter2;
							if (num != 0)
							{
								awaiter2 = <e>5__3.MoveNextAsync().GetAwaiter();
								if (!awaiter2.IsCompleted)
								{
									num = (<>1__state = 0);
									<>u__1 = awaiter2;
									((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter<bool>, <BindToCore>d__6<T>>(ref awaiter2, ref this);
									return;
								}
							}
							else
							{
								awaiter2 = <>u__1;
								<>u__1 = default(Awaiter<bool>);
								num = (<>1__state = -1);
							}
							result = awaiter2.GetResult();
							<repeat>5__2 = false;
						}
						catch (Exception ex)
						{
							if (ex is OperationCanceledException)
							{
								goto IL_010b;
							}
							if (rebindOnError && !<repeat>5__2)
							{
								<repeat>5__2 = true;
								goto IL_0102;
							}
							throw;
						}
						if (result)
						{
							text.text = <e>5__3.Current.ToString();
							continue;
						}
						goto IL_010b;
						IL_0102:
						<>7__wrap4 = 1;
						break;
						IL_010b:
						<>7__wrap4 = 2;
						break;
					}
				}
				catch (object obj2)
				{
					<>7__wrap3 = obj2;
				}
				if (<e>5__3 != null)
				{
					UniTask val = ((IUniTaskAsyncDisposable)<e>5__3).DisposeAsync();
					awaiter = ((UniTask)(ref val)).GetAwaiter();
					if (!((Awaiter)(ref awaiter)).IsCompleted)
					{
						num = (<>1__state = 1);
						<>u__2 = awaiter;
						((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <BindToCore>d__6<T>>(ref awaiter, ref this);
						return;
					}
					goto IL_0188;
				}
				goto IL_018f;
				end_IL_0007:;
			}
			catch (Exception exception)
			{
				<>1__state = -2;
				<e>5__3 = null;
				((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetException(exception);
				return;
			}
			<>1__state = -2;
			<e>5__3 = null;
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetResult();
		}

		void IAsyncStateMachine.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			this.MoveNext();
		}

		[DebuggerHidden]
		private void SetStateMachine(IAsyncStateMachine stateMachine)
		{
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine);
		}

		void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
		{
			//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
			this.SetStateMachine(stateMachine);
		}
	}

	public static void BindTo(this IUniTaskAsyncEnumerable<string> source, TMP_Text text, bool rebindOnError = true)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore(source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	public static void BindTo(this IUniTaskAsyncEnumerable<string> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError = true)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore(source, text, cancellationToken, rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	[AsyncStateMachine(typeof(<BindToCore>d__2))]
	private static UniTaskVoid BindToCore(IUniTaskAsyncEnumerable<string> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		<BindToCore>d__2 <BindToCore>d__ = default(<BindToCore>d__2);
		<BindToCore>d__.<>t__builder = AsyncUniTaskVoidMethodBuilder.Create();
		<BindToCore>d__.source = source;
		<BindToCore>d__.text = text;
		<BindToCore>d__.cancellationToken = cancellationToken;
		<BindToCore>d__.rebindOnError = rebindOnError;
		<BindToCore>d__.<>1__state = -1;
		((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Start<<BindToCore>d__2>(ref <BindToCore>d__);
		return ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Task;
	}

	public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, TMP_Text text, bool rebindOnError = true)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore<T>(source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError = true)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore<T>(source, text, cancellationToken, rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	public static void BindTo<T>(this AsyncReactiveProperty<T> source, TMP_Text text, bool rebindOnError = true)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore<T>((IUniTaskAsyncEnumerable<T>)(object)source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	[AsyncStateMachine(typeof(<BindToCore>d__6<>))]
	private static UniTaskVoid BindToCore<T>(IUniTaskAsyncEnumerable<T> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		<BindToCore>d__6<T> <BindToCore>d__ = default(<BindToCore>d__6<T>);
		<BindToCore>d__.<>t__builder = AsyncUniTaskVoidMethodBuilder.Create();
		<BindToCore>d__.source = source;
		<BindToCore>d__.text = text;
		<BindToCore>d__.cancellationToken = cancellationToken;
		<BindToCore>d__.rebindOnError = rebindOnError;
		<BindToCore>d__.<>1__state = -1;
		((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Start<<BindToCore>d__6<T>>(ref <BindToCore>d__);
		return ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Task;
	}

	public static IAsyncValueChangedEventHandler<string> GetAsyncValueChangedEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncValueChangedEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncValueChangedEventHandler<string> GetAsyncValueChangedEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncValueChangedEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken, false);
	}

	public static UniTask<string> OnValueChangedAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnValueChangedAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken);
	}

	public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncEndEditEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncEndEditEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken, false);
	}

	public static UniTask<string> OnEndEditAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnEndEditAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken);
	}

	public static IAsyncEndTextSelectionEventHandler<(string, int, int)> GetAsyncEndTextSelectionEventHandler(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		return (IAsyncEndTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncEndTextSelectionEventHandler<(string, int, int)> GetAsyncEndTextSelectionEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		return (IAsyncEndTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken, false);
	}

	public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSelectionAsAsyncEnumerable(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSelectionAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken);
	}

	public static IAsyncTextSelectionEventHandler<(string, int, int)> GetAsyncTextSelectionEventHandler(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		return (IAsyncTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncTextSelectionEventHandler<(string, int, int)> GetAsyncTextSelectionEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		return (IAsyncTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken, false);
	}

	public static UniTask<(string, int, int)> OnTextSelectionAsync(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<(string, int, int)> OnTextSelectionAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelectionAsAsyncEnumerable(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelectionAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken);
	}

	public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncDeselectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncDeselectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken, false);
	}

	public static UniTask<string> OnDeselectAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnDeselectAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken);
	}

	public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncSelectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncSelectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken, false);
	}

	public static UniTask<string> OnSelectAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnSelectAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken);
	}

	public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncSubmitEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncSubmitEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken, false);
	}

	public static UniTask<string> OnSubmitAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnSubmitAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken);
	}
}

BepInEx/core/WebRtcVadSharp.dll

Decompiled 2 days ago
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using WebRtcVadSharp.WebRtc;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Jay Miller")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright (c) 2020 Jay Miller")]
[assembly: AssemblyDescription(".NET Standard interface for the WebRTC voice activity detection (VAD) component.")]
[assembly: AssemblyFileVersion("1.3.2.0")]
[assembly: AssemblyInformationalVersion("1.3.2+fdd4f4ef0570520f9031f994d8b587fba0e4f31c")]
[assembly: AssemblyProduct("WebRtcVadSharp")]
[assembly: AssemblyTitle("WebRtcVadSharp")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/ladenedge/WebRtcVadSharp.git")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.3.2.0")]
[module: UnverifiableCode]
namespace WebRtcVadSharp
{
	public enum FrameLength : long
	{
		Is10ms = 10L,
		Is20ms = 20L,
		Is30ms = 30L
	}
	public interface IWebRtcVad
	{
		SampleRate SampleRate { get; set; }

		FrameLength FrameLength { get; set; }

		OperatingMode OperatingMode { get; set; }

		bool HasSpeech(byte[] audioFrame);

		bool HasSpeech(byte[] audioFrame, SampleRate sampleRate, FrameLength frameLength);

		bool HasSpeech(short[] audioFrame);

		bool HasSpeech(short[] audioFrame, SampleRate sampleRate, FrameLength frameLength);

		bool HasSpeech(IntPtr audioFrame);

		bool HasSpeech(IntPtr audioFrame, SampleRate sampleRate, FrameLength frameLength);
	}
	public enum OperatingMode
	{
		HighQuality,
		LowBitrate,
		Aggressive,
		VeryAggressive
	}
	public enum SampleRate
	{
		Is8kHz = 8000,
		Is16kHz = 16000,
		Is32kHz = 32000,
		Is48kHz = 48000
	}
	public class WebRtcVad : IWebRtcVad, IDisposable
	{
		private readonly IWebRtcDll _webrtc;

		private IntPtr _handle;

		private SampleRate _rate;

		private FrameLength _length;

		private OperatingMode _mode;

		private bool hasDisposed;

		public SampleRate SampleRate
		{
			get
			{
				return _rate;
			}
			set
			{
				ValidateRateAndFrameLength(value, FrameLength);
				_rate = value;
			}
		}

		public FrameLength FrameLength
		{
			get
			{
				return _length;
			}
			set
			{
				ValidateRateAndFrameLength(SampleRate, value);
				_length = value;
			}
		}

		public OperatingMode OperatingMode
		{
			get
			{
				return _mode;
			}
			set
			{
				int result = _webrtc.SetMode(_handle, (int)value);
				ValidateSetMode(result, _handle, value);
				_mode = value;
			}
		}

		public WebRtcVad()
			: this(new WebRtcDll())
		{
		}

		public WebRtcVad(IWebRtcDll library)
		{
			_webrtc = library ?? throw new ArgumentNullException("library");
			_mode = OperatingMode.HighQuality;
			_rate = SampleRate.Is8kHz;
			_length = FrameLength.Is10ms;
			try
			{
				_handle = _webrtc.Create();
				int result = _webrtc.Init(_handle);
				ValidateInitialize(result, _handle);
			}
			catch (DllNotFoundException inner)
			{
				string currentDirectory = Directory.GetCurrentDirectory();
				throw new DllNotFoundException("Unable to load DLL 'WebRtcVad.dll' or a dependency. Be sure it exists in '" + currentDirectory + "' or elsewhere in the DLL search path.", inner);
			}
		}

		public bool HasSpeech(byte[] audioFrame)
		{
			return HasSpeech(audioFrame, _rate, _length);
		}

		public bool HasSpeech(byte[] audioFrame, SampleRate sampleRate, FrameLength frameLength)
		{
			ulong frame_length = CalculateSamples(sampleRate, frameLength);
			int result = _webrtc.Process(_handle, (int)sampleRate, audioFrame, frame_length);
			return ValidateProcess(result, _handle, sampleRate, audioFrame, frameLength);
		}

		public bool HasSpeech(short[] audioFrame)
		{
			return HasSpeech(audioFrame, _rate, _length);
		}

		public bool HasSpeech(short[] audioFrame, SampleRate sampleRate, FrameLength frameLength)
		{
			ulong frame_length = CalculateSamples(sampleRate, frameLength);
			int result = _webrtc.Process(_handle, (int)sampleRate, audioFrame, frame_length);
			return ValidateProcess(result, _handle, sampleRate, audioFrame, frameLength);
		}

		public bool HasSpeech(IntPtr audioFrame)
		{
			return HasSpeech(audioFrame, _rate, _length);
		}

		public bool HasSpeech(IntPtr audioFrame, SampleRate sampleRate, FrameLength frameLength)
		{
			ulong frame_length = CalculateSamples(sampleRate, frameLength);
			int result = _webrtc.Process(_handle, (int)sampleRate, audioFrame, frame_length);
			return ValidateProcess(result, _handle, sampleRate, audioFrame, frameLength);
		}

		private ulong CalculateSamples(SampleRate rate, FrameLength length)
		{
			return (ulong)rate / 1000uL * (ulong)length;
		}

		private void ValidateInitialize(int result, IntPtr handle)
		{
			if (result == 0)
			{
				return;
			}
			ValidateHandle(handle);
			throw new InvalidOperationException($"Could not initialize WebRTC [Init({handle}) = {result}].");
		}

		private void ValidateSetMode(int result, IntPtr handle, OperatingMode mode)
		{
			if (result == 0)
			{
				return;
			}
			ValidateHandle(handle);
			ValidateEnum(mode);
			throw new InvalidOperationException($"Could not set operating mode [SetMode({handle}, {mode}) = {result}].");
		}

		private void ValidateRateAndFrameLength(SampleRate sampleRate, FrameLength frameLength)
		{
			ulong num = CalculateSamples(sampleRate, frameLength);
			int num2 = _webrtc.ValidRateAndFrameLength((int)sampleRate, num);
			if (num2 == 0)
			{
				return;
			}
			ValidateEnum(sampleRate);
			ValidateEnum(frameLength);
			throw new InvalidOperationException($"Could not validate rate/length [ValidRateAndFrameLength({(int)sampleRate}, {num}) = {num2}].");
		}

		private bool ValidateProcess(int result, IntPtr handle, SampleRate sampleRate, byte[] audioFrame, FrameLength frameLength)
		{
			return ValidateProcess(result, handle, sampleRate, $"byte[{audioFrame.Length}]", frameLength);
		}

		private bool ValidateProcess(int result, IntPtr handle, SampleRate sampleRate, short[] audioFrame, FrameLength frameLength)
		{
			return ValidateProcess(result, handle, sampleRate, $"short[{audioFrame.Length}]", frameLength);
		}

		private bool ValidateProcess(int result, IntPtr handle, SampleRate sampleRate, IntPtr audioFrame, FrameLength frameLength)
		{
			return ValidateProcess(result, handle, sampleRate, "0x" + audioFrame.ToInt64().ToString("X8"), frameLength);
		}

		private bool ValidateProcess(int result, IntPtr handle, SampleRate sampleRate, string frameDescription, FrameLength frameLength)
		{
			switch (result)
			{
			case 0:
				return false;
			case 1:
				return true;
			default:
				ValidateHandle(handle);
				ValidateEnum(sampleRate);
				ValidateEnum(frameLength);
				throw new InvalidOperationException($"Could not process audio frame [Process({handle}, {sampleRate}, <{frameDescription}>, {frameLength}) = {result}].");
			}
		}

		private void ValidateHandle(IntPtr handle)
		{
			if (handle == IntPtr.Zero)
			{
				throw new ObjectDisposedException("Invalid WebRTC handle; object appears to have been disposed.");
			}
		}

		private void ValidateEnum<T>(T val)
		{
			if (Enum.IsDefined(typeof(T), val))
			{
				return;
			}
			string arg = string.Join(", ", Enum.GetValues(typeof(T)).OfType<T>());
			throw new ArgumentException($"{val} was not a valid {typeof(T).Name}. Valid values are [{arg}].");
		}

		protected virtual void Dispose(bool disposing)
		{
			if (hasDisposed)
			{
				return;
			}
			if (disposing)
			{
				if (_webrtc != null)
				{
					_webrtc.Free(_handle);
				}
				_handle = IntPtr.Zero;
			}
			hasDisposed = true;
		}

		public void Dispose()
		{
			Dispose(disposing: true);
		}
	}
}
namespace WebRtcVadSharp.WebRtc
{
	public interface IWebRtcDll
	{
		IntPtr Create();

		int Init(IntPtr handle);

		int SetMode(IntPtr self, int mode);

		int ValidRateAndFrameLength(int rate, ulong frame_length);

		int Process(IntPtr handle, int fs, byte[] audio_frame, ulong frame_length);

		int Process(IntPtr handle, int fs, short[] audio_frame, ulong frame_length);

		int Process(IntPtr handle, int fs, IntPtr audio_frame, ulong frame_length);

		void Free(IntPtr handle);
	}
	public class WebRtcDll : IWebRtcDll
	{
		private class NativeMethods
		{
			[DllImport("webrtcvad")]
			public static extern IntPtr Vad_Create();

			[DllImport("webrtcvad")]
			public static extern int Vad_Init(IntPtr handle);

			[DllImport("webrtcvad")]
			public static extern int Vad_SetMode(IntPtr self, int mode);

			[DllImport("webrtcvad")]
			public static extern int Vad_ValidRateAndFrameLength(int rate, UIntPtr frame_length);

			[DllImport("webrtcvad")]
			public static extern int Vad_Process(IntPtr handle, int fs, IntPtr audio_frame, UIntPtr frame_length);

			[DllImport("webrtcvad")]
			public static extern void Vad_Free(IntPtr handle);
		}

		public IntPtr Create()
		{
			return NativeMethods.Vad_Create();
		}

		public int Init(IntPtr handle)
		{
			return NativeMethods.Vad_Init(handle);
		}

		public unsafe int Process(IntPtr handle, int fs, byte[] audio_frame, ulong frame_length)
		{
			UIntPtr frame_length2 = new UIntPtr(frame_length);
			fixed (byte* ptr = audio_frame)
			{
				return NativeMethods.Vad_Process(handle, fs, (IntPtr)ptr, frame_length2);
			}
		}

		public unsafe int Process(IntPtr handle, int fs, short[] audio_frame, ulong frame_length)
		{
			UIntPtr frame_length2 = new UIntPtr(frame_length);
			fixed (short* ptr = audio_frame)
			{
				return NativeMethods.Vad_Process(handle, fs, (IntPtr)ptr, frame_length2);
			}
		}

		public int Process(IntPtr handle, int fs, IntPtr audio_frame, ulong frame_length)
		{
			UIntPtr frame_length2 = new UIntPtr(frame_length);
			return NativeMethods.Vad_Process(handle, fs, audio_frame, frame_length2);
		}

		public int SetMode(IntPtr self, int mode)
		{
			return NativeMethods.Vad_SetMode(self, mode);
		}

		public int ValidRateAndFrameLength(int rate, ulong frame_length)
		{
			UIntPtr frame_length2 = new UIntPtr(frame_length);
			return NativeMethods.Vad_ValidRateAndFrameLength(rate, frame_length2);
		}

		public void Free(IntPtr handle)
		{
			NativeMethods.Vad_Free(handle);
		}
	}
}