Decompiled source of Mirage v1.12.2

BepInEx/plugins/Mirage.Core.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$Mirage-Core>.$Mirage.Core.Async;
using <StartupCode$Mirage-Core>.$Mirage.Core.Audio.Microphone;
using FSharpPlus;
using FSharpPlus.Control;
using FSharpPlus.Internals;
using FSharpx.Control;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Mirage.Core.Async;
using Mirage.Core.Audio.File;
using NAudio.Dsp;
using NAudio.Lame;
using NAudio.Wave;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("NAudio.Core")]
[assembly: IgnoresAccessChecksTo("NAudio")]
[assembly: IgnoresAccessChecksTo("NAudio.Lame")]
[assembly: AssemblyCompany("Mirage.Core")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d4268f339b456174c9355e162d86752ac7d7774b")]
[assembly: AssemblyProduct("Mirage.Core")]
[assembly: AssemblyTitle("Mirage.Core")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[CompilationMapping(/*Could not decode attribute arguments.*/)]
public static class AssemblyInfo
{
}
namespace <StartupCode$Mirage-Core>
{
	internal static class $AssemblyInfo
	{
	}
}
namespace Mirage.Core.Audio.Microphone
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Recognition
	{
		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal sealed class BatchedState<PlayerId> : IEquatable<BatchedState<PlayerId>>, IStructuralEquatable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid fileId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PlayerId playerId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal List<float> samples@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Detection.VADFrame vadFrame@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpList<Detection.VADFrame> vadTimings@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool finished@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal Guid fileId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return fileId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal PlayerId playerId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return playerId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal List<float> samples
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return samples@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal Detection.VADFrame vadFrame
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadFrame@;
				}
				[CompilerGenerated]
				[DebuggerNonUserCode]
				set
				{
					vadFrame@ = value;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal FSharpList<Detection.VADFrame> vadTimings
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadTimings@;
				}
				[CompilerGenerated]
				[DebuggerNonUserCode]
				set
				{
					vadTimings@ = value;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			internal bool finished
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return finished@;
				}
				[CompilerGenerated]
				[DebuggerNonUserCode]
				set
				{
					finished@ = value;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BatchedState<>))]
			internal BatchedState(Guid fileId, PlayerId playerId, List<float> samples, Detection.VADFrame vadFrame, FSharpList<Detection.VADFrame> vadTimings, bool finished)
			{
				fileId@ = fileId;
				playerId@ = playerId;
				samples@ = samples;
				vadFrame@ = vadFrame;
				vadTimings@ = vadTimings;
				finished@ = finished;
			}

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

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					num = -1640531527 + ((finished@ ? 1 : 0) + ((num << 6) + (num >> 2)));
					num = -1640531527 + (vadTimings@.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					Detection.VADFrame vADFrame = vadFrame@;
					num = -1640531527 + (vADFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<List<float>>(comp, samples@) + ((num << 6) + (num >> 2)));
					PlayerId val = playerId@;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<PlayerId>(comp, val) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, fileId@) + ((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 BatchedState<PlayerId> batchedState)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, fileId@, batchedState.fileId@))
						{
							PlayerId val = playerId@;
							PlayerId val2 = batchedState.playerId@;
							if (HashCompare.GenericEqualityWithComparerIntrinsic<PlayerId>(comp, val, val2))
							{
								if (HashCompare.GenericEqualityWithComparerIntrinsic<List<float>>(comp, samples@, batchedState.samples@))
								{
									Detection.VADFrame vADFrame = vadFrame@;
									Detection.VADFrame vADFrame2 = batchedState.vadFrame@;
									if (vADFrame.Equals(vADFrame2, comp))
									{
										FSharpList<Detection.VADFrame> val3 = vadTimings@;
										FSharpList<Detection.VADFrame> val4 = batchedState.vadTimings@;
										if (val3.Equals((object)val4, comp))
										{
											return finished@ == batchedState.finished@;
										}
										return false;
									}
									return false;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(BatchedState<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						if (HashCompare.GenericEqualityERIntrinsic<Guid>(fileId@, obj.fileId@))
						{
							PlayerId val = playerId@;
							PlayerId val2 = obj.playerId@;
							if (HashCompare.GenericEqualityERIntrinsic<PlayerId>(val, val2))
							{
								if (HashCompare.GenericEqualityERIntrinsic<List<float>>(samples@, obj.samples@))
								{
									Detection.VADFrame vADFrame = vadFrame@;
									if (vADFrame.Equals(obj.vadFrame@))
									{
										if (HashCompare.GenericEqualityERIntrinsic<FSharpList<Detection.VADFrame>>(vadTimings@, obj.vadTimings@))
										{
											return finished@ == obj.finished@;
										}
										return false;
									}
									return false;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class BatchedStart<PlayerId> : IEquatable<BatchedStart<PlayerId>>, IStructuralEquatable, IComparable<BatchedStart<PlayerId>>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid fileId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PlayerId playerId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid sentenceId@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid fileId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return fileId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public PlayerId playerId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return playerId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid sentenceId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return sentenceId@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BatchedStart<>))]
			public BatchedStart(Guid fileId, PlayerId playerId, Guid sentenceId)
			{
				fileId@ = fileId;
				playerId@ = playerId;
				sentenceId@ = sentenceId;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(BatchedStart<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, fileId@, obj.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						PlayerId val = playerId@;
						PlayerId val2 = obj.playerId@;
						int num2 = HashCompare.GenericComparisonWithComparerIntrinsic<PlayerId>(genericComparer, val, val2);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						return HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, sentenceId@, obj.sentenceId@);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((BatchedStart<PlayerId>)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				BatchedStart<PlayerId> batchedStart = (BatchedStart<PlayerId>)obj;
				if (this != null)
				{
					if ((BatchedStart<PlayerId>)obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, fileId@, batchedStart.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						PlayerId val = playerId@;
						PlayerId val2 = batchedStart.playerId@;
						int num2 = HashCompare.GenericComparisonWithComparerIntrinsic<PlayerId>(comp, val, val2);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						return HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, sentenceId@, batchedStart.sentenceId@);
					}
					return 1;
				}
				if ((BatchedStart<PlayerId>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, sentenceId@) + ((num << 6) + (num >> 2)));
					PlayerId val = playerId@;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<PlayerId>(comp, val) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, fileId@) + ((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 BatchedStart<PlayerId> batchedStart)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, fileId@, batchedStart.fileId@))
						{
							PlayerId val = playerId@;
							PlayerId val2 = batchedStart.playerId@;
							if (HashCompare.GenericEqualityWithComparerIntrinsic<PlayerId>(comp, val, val2))
							{
								return HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, sentenceId@, batchedStart.sentenceId@);
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(BatchedStart<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						if (HashCompare.GenericEqualityERIntrinsic<Guid>(fileId@, obj.fileId@))
						{
							PlayerId val = playerId@;
							PlayerId val2 = obj.playerId@;
							if (HashCompare.GenericEqualityERIntrinsic<PlayerId>(val, val2))
							{
								return HashCompare.GenericEqualityERIntrinsic<Guid>(sentenceId@, obj.sentenceId@);
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class BatchedFound<PlayerId> : IEquatable<BatchedFound<PlayerId>>, IStructuralEquatable, IComparable<BatchedFound<PlayerId>>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PlayerId playerId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid sentenceId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal float[] samples@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Detection.VADFrame vadFrame@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public PlayerId playerId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return playerId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid sentenceId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return sentenceId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public float[] samples
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return samples@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Detection.VADFrame vadFrame
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadFrame@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BatchedFound<>))]
			public BatchedFound(PlayerId playerId, Guid sentenceId, float[] samples, Detection.VADFrame vadFrame)
			{
				playerId@ = playerId;
				sentenceId@ = sentenceId;
				samples@ = samples;
				vadFrame@ = vadFrame;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(BatchedFound<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						PlayerId val = playerId@;
						PlayerId val2 = obj.playerId@;
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<PlayerId>(genericComparer, val, val2);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						int num2 = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, sentenceId@, obj.sentenceId@);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						int num3 = HashCompare.GenericComparisonWithComparerIntrinsic<float[]>(LanguagePrimitives.GenericComparer, samples@, obj.samples@);
						if (num3 < 0)
						{
							return num3;
						}
						if (num3 > 0)
						{
							return num3;
						}
						genericComparer = LanguagePrimitives.GenericComparer;
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = obj.vadFrame@;
						return vADFrame.CompareTo(vADFrame2, genericComparer);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((BatchedFound<PlayerId>)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				BatchedFound<PlayerId> batchedFound = (BatchedFound<PlayerId>)obj;
				if (this != null)
				{
					if ((BatchedFound<PlayerId>)obj != null)
					{
						PlayerId val = playerId@;
						PlayerId val2 = batchedFound.playerId@;
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<PlayerId>(comp, val, val2);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						int num2 = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, sentenceId@, batchedFound.sentenceId@);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						int num3 = HashCompare.GenericComparisonWithComparerIntrinsic<float[]>(comp, samples@, batchedFound.samples@);
						if (num3 < 0)
						{
							return num3;
						}
						if (num3 > 0)
						{
							return num3;
						}
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = batchedFound.vadFrame@;
						return vADFrame.CompareTo(vADFrame2, comp);
					}
					return 1;
				}
				if ((BatchedFound<PlayerId>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					Detection.VADFrame vADFrame = vadFrame@;
					num = -1640531527 + (vADFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<float[]>(comp, samples@) + ((num << 6) + (num >> 2)));
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, sentenceId@) + ((num << 6) + (num >> 2)));
					PlayerId val = playerId@;
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<PlayerId>(comp, val) + ((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 BatchedFound<PlayerId> batchedFound)
					{
						PlayerId val = playerId@;
						PlayerId val2 = batchedFound.playerId@;
						if (HashCompare.GenericEqualityWithComparerIntrinsic<PlayerId>(comp, val, val2))
						{
							if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, sentenceId@, batchedFound.sentenceId@))
							{
								if (HashCompare.GenericEqualityWithComparerIntrinsic<float[]>(comp, samples@, batchedFound.samples@))
								{
									Detection.VADFrame vADFrame = vadFrame@;
									Detection.VADFrame vADFrame2 = batchedFound.vadFrame@;
									return vADFrame.Equals(vADFrame2, comp);
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(BatchedFound<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						PlayerId val = playerId@;
						PlayerId val2 = obj.playerId@;
						if (HashCompare.GenericEqualityERIntrinsic<PlayerId>(val, val2))
						{
							if (HashCompare.GenericEqualityERIntrinsic<Guid>(sentenceId@, obj.sentenceId@))
							{
								if (HashCompare.GenericEqualityERIntrinsic<float[]>(samples@, obj.samples@))
								{
									Detection.VADFrame vADFrame = vadFrame@;
									return vADFrame.Equals(obj.vadFrame@);
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class BatchedEnd : IEquatable<BatchedEnd>, IStructuralEquatable, IComparable<BatchedEnd>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid sentenceId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpList<Detection.VADFrame> vadTimings@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid sentenceId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return sentenceId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpList<Detection.VADFrame> vadTimings
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadTimings@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(BatchedEnd))]
			public BatchedEnd(Guid sentenceId, FSharpList<Detection.VADFrame> vadTimings)
			{
				sentenceId@ = sentenceId;
				vadTimings@ = vadTimings;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(BatchedEnd obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, sentenceId@, obj.sentenceId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						FSharpList<Detection.VADFrame> val = vadTimings@;
						FSharpList<Detection.VADFrame> val2 = obj.vadTimings@;
						return val.CompareTo((object)val2, genericComparer);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((BatchedEnd)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				BatchedEnd batchedEnd = (BatchedEnd)obj;
				if (this != null)
				{
					if ((BatchedEnd)obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, sentenceId@, batchedEnd.sentenceId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						FSharpList<Detection.VADFrame> val = vadTimings@;
						FSharpList<Detection.VADFrame> val2 = batchedEnd.vadTimings@;
						return val.CompareTo((object)val2, comp);
					}
					return 1;
				}
				if ((BatchedEnd)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					num = -1640531527 + (vadTimings@.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, sentenceId@) + ((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 BatchedEnd batchedEnd)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, sentenceId@, batchedEnd.sentenceId@))
						{
							FSharpList<Detection.VADFrame> val = vadTimings@;
							FSharpList<Detection.VADFrame> val2 = batchedEnd.vadTimings@;
							return val.Equals((object)val2, comp);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(BatchedEnd obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						if (HashCompare.GenericEqualityERIntrinsic<Guid>(sentenceId@, obj.sentenceId@))
						{
							return HashCompare.GenericEqualityERIntrinsic<FSharpList<Detection.VADFrame>>(vadTimings@, obj.vadTimings@);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

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

				public const int BatchedFound = 1;

				public const int BatchedEnd = 2;
			}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscribeBatched<PlayerId> NewBatchedStart(BatchedStart<PlayerId> item)
			{
				return new BatchedStart(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscribeBatched<PlayerId> NewBatchedFound(BatchedFound<PlayerId> item)
			{
				return new BatchedFound(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscribeBatched<PlayerId> NewBatchedEnd(Recognition.BatchedEnd item)
			{
				return new BatchedEnd(item);
			}

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

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

			[CompilerGenerated]
			public virtual sealed int CompareTo(TranscribeBatched<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = ((this is BatchedEnd) ? 2 : ((this is BatchedFound) ? 1 : 0));
						int num2 = ((obj is BatchedEnd) ? 2 : ((obj is BatchedFound) ? 1 : 0));
						if (num == num2)
						{
							IComparer genericComparer;
							if (!(this is BatchedStart))
							{
								if (this is BatchedFound)
								{
									BatchedFound batchedFound = (BatchedFound)this;
									BatchedFound batchedFound2 = (BatchedFound)obj;
									genericComparer = LanguagePrimitives.GenericComparer;
									BatchedFound<PlayerId> item = batchedFound.item;
									BatchedFound<PlayerId> item2 = batchedFound2.item;
									return item.CompareTo(item2, genericComparer);
								}
								if (this is BatchedEnd)
								{
									BatchedEnd batchedEnd = (BatchedEnd)this;
									BatchedEnd batchedEnd2 = (BatchedEnd)obj;
									genericComparer = LanguagePrimitives.GenericComparer;
									Recognition.BatchedEnd item3 = batchedEnd.item;
									Recognition.BatchedEnd item4 = batchedEnd2.item;
									return item3.CompareTo(item4, genericComparer);
								}
							}
							BatchedStart batchedStart = (BatchedStart)this;
							BatchedStart batchedStart2 = (BatchedStart)obj;
							genericComparer = LanguagePrimitives.GenericComparer;
							BatchedStart<PlayerId> item5 = batchedStart.item;
							BatchedStart<PlayerId> item6 = batchedStart2.item;
							return item5.CompareTo(item6, genericComparer);
						}
						return num - num2;
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public virtual sealed int CompareTo(object obj)
			{
				return CompareTo((TranscribeBatched<PlayerId>)obj);
			}

			[CompilerGenerated]
			public virtual sealed int CompareTo(object obj, IComparer comp)
			{
				TranscribeBatched<PlayerId> transcribeBatched = (TranscribeBatched<PlayerId>)obj;
				if (this != null)
				{
					if ((TranscribeBatched<PlayerId>)obj != null)
					{
						int num = ((this is BatchedEnd) ? 2 : ((this is BatchedFound) ? 1 : 0));
						TranscribeBatched<PlayerId> transcribeBatched2 = transcribeBatched;
						int num2 = ((transcribeBatched2 is BatchedEnd) ? 2 : ((transcribeBatched2 is BatchedFound) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is BatchedStart))
							{
								if (this is BatchedFound)
								{
									BatchedFound batchedFound = (BatchedFound)this;
									BatchedFound batchedFound2 = (BatchedFound)transcribeBatched;
									BatchedFound<PlayerId> item = batchedFound.item;
									BatchedFound<PlayerId> item2 = batchedFound2.item;
									return item.CompareTo(item2, comp);
								}
								if (this is BatchedEnd)
								{
									BatchedEnd batchedEnd = (BatchedEnd)this;
									BatchedEnd batchedEnd2 = (BatchedEnd)transcribeBatched;
									Recognition.BatchedEnd item3 = batchedEnd.item;
									Recognition.BatchedEnd item4 = batchedEnd2.item;
									return item3.CompareTo(item4, comp);
								}
							}
							BatchedStart batchedStart = (BatchedStart)this;
							BatchedStart batchedStart2 = (BatchedStart)transcribeBatched;
							BatchedStart<PlayerId> item5 = batchedStart.item;
							BatchedStart<PlayerId> item6 = batchedStart2.item;
							return item5.CompareTo(item6, comp);
						}
						return num - num2;
					}
					return 1;
				}
				if ((TranscribeBatched<PlayerId>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					if (!(this is BatchedStart))
					{
						if (this is BatchedFound)
						{
							BatchedFound batchedFound = (BatchedFound)this;
							num = 1;
							return -1640531527 + (batchedFound.item.GetHashCode(comp) + ((num << 6) + (num >> 2)));
						}
						if (this is BatchedEnd)
						{
							BatchedEnd batchedEnd = (BatchedEnd)this;
							num = 2;
							return -1640531527 + (batchedEnd.item.GetHashCode(comp) + ((num << 6) + (num >> 2)));
						}
					}
					BatchedStart batchedStart = (BatchedStart)this;
					num = 0;
					return -1640531527 + (batchedStart.item.GetHashCode(comp) + ((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 TranscribeBatched<PlayerId> transcribeBatched)
					{
						int num = ((this is BatchedEnd) ? 2 : ((this is BatchedFound) ? 1 : 0));
						TranscribeBatched<PlayerId> transcribeBatched2 = transcribeBatched;
						int num2 = ((transcribeBatched2 is BatchedEnd) ? 2 : ((transcribeBatched2 is BatchedFound) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is BatchedStart))
							{
								if (this is BatchedFound)
								{
									BatchedFound batchedFound = (BatchedFound)this;
									BatchedFound batchedFound2 = (BatchedFound)transcribeBatched;
									BatchedFound<PlayerId> item = batchedFound.item;
									BatchedFound<PlayerId> item2 = batchedFound2.item;
									return item.Equals(item2, comp);
								}
								if (this is BatchedEnd)
								{
									BatchedEnd batchedEnd = (BatchedEnd)this;
									BatchedEnd batchedEnd2 = (BatchedEnd)transcribeBatched;
									Recognition.BatchedEnd item3 = batchedEnd.item;
									Recognition.BatchedEnd item4 = batchedEnd2.item;
									return item3.Equals(item4, comp);
								}
							}
							BatchedStart batchedStart = (BatchedStart)this;
							BatchedStart batchedStart2 = (BatchedStart)transcribeBatched;
							BatchedStart<PlayerId> item5 = batchedStart.item;
							BatchedStart<PlayerId> item6 = batchedStart2.item;
							return item5.Equals(item6, comp);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(TranscribeBatched<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = ((this is BatchedEnd) ? 2 : ((this is BatchedFound) ? 1 : 0));
						int num2 = ((obj is BatchedEnd) ? 2 : ((obj is BatchedFound) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is BatchedStart))
							{
								if (this is BatchedFound)
								{
									BatchedFound batchedFound = (BatchedFound)this;
									BatchedFound batchedFound2 = (BatchedFound)obj;
									return batchedFound.item.Equals(batchedFound2.item);
								}
								if (this is BatchedEnd)
								{
									BatchedEnd batchedEnd = (BatchedEnd)this;
									BatchedEnd batchedEnd2 = (BatchedEnd)obj;
									return batchedEnd.item.Equals(batchedEnd2.item);
								}
							}
							BatchedStart batchedStart = (BatchedStart)this;
							BatchedStart batchedStart2 = (BatchedStart)obj;
							return batchedStart.item.Equals(batchedStart2.item);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

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

				public const int TranscribeBatched = 1;

				public const int TryTranscribeAudio = 2;

				public const int SetLanguage = 3;
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TranscriberInput<>.TranscribeLocal@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			public class TranscribeLocal : TranscriberInput<PlayerId>
			{
				[DebuggerBrowsable(DebuggerBrowsableState.Never)]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal readonly Recorder.RecordAction item;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public static TranscriberInput<PlayerId> TryTranscribeAudio
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return _unique_TryTranscribeAudio;
				}
			}

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

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

			static TranscriberInput()
			{
				_unique_TryTranscribeAudio = new TranscriberInput<PlayerId>(2);
			}

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

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscriberInput<PlayerId> NewTranscribeLocal(Recorder.RecordAction item)
			{
				return new TranscribeLocal(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscriberInput<PlayerId> NewTranscribeBatched(TranscribeBatched<PlayerId> item)
			{
				return new TranscribeBatched(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscriberInput<PlayerId> NewSetLanguage(string item)
			{
				return new SetLanguage(item);
			}

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

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

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					switch (Tag)
					{
					case 0:
					{
						TranscribeLocal transcribeLocal = (TranscribeLocal)this;
						num = 0;
						return -1640531527 + (transcribeLocal.item.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					}
					case 1:
					{
						TranscribeBatched transcribeBatched = (TranscribeBatched)this;
						num = 1;
						return -1640531527 + (transcribeBatched.item.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					}
					case 3:
					{
						SetLanguage setLanguage = (SetLanguage)this;
						num = 3;
						return -1640531527 + ((setLanguage.item?.GetHashCode() ?? 0) + ((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 TranscriberInput<PlayerId> transcriberInput)
					{
						int tag = _tag;
						int tag2 = transcriberInput._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							case 0:
							{
								TranscribeLocal transcribeLocal = (TranscribeLocal)this;
								TranscribeLocal transcribeLocal2 = (TranscribeLocal)transcriberInput;
								Recorder.RecordAction item3 = transcribeLocal.item;
								Recorder.RecordAction item4 = transcribeLocal2.item;
								return item3.Equals(item4, comp);
							}
							case 1:
							{
								TranscribeBatched transcribeBatched = (TranscribeBatched)this;
								TranscribeBatched transcribeBatched2 = (TranscribeBatched)transcriberInput;
								TranscribeBatched<PlayerId> item = transcribeBatched.item;
								TranscribeBatched<PlayerId> item2 = transcribeBatched2.item;
								return item.Equals(item2, comp);
							}
							case 3:
							{
								SetLanguage setLanguage = (SetLanguage)this;
								SetLanguage setLanguage2 = (SetLanguage)transcriberInput;
								return string.Equals(setLanguage.item, setLanguage2.item);
							}
							default:
								return true;
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(TranscriberInput<PlayerId> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int tag = _tag;
						int tag2 = obj._tag;
						if (tag == tag2)
						{
							switch (Tag)
							{
							case 0:
							{
								TranscribeLocal transcribeLocal = (TranscribeLocal)this;
								TranscribeLocal transcribeLocal2 = (TranscribeLocal)obj;
								return transcribeLocal.item.Equals(transcribeLocal2.item);
							}
							case 1:
							{
								TranscribeBatched transcribeBatched = (TranscribeBatched)this;
								TranscribeBatched transcribeBatched2 = (TranscribeBatched)obj;
								return transcribeBatched.item.Equals(transcribeBatched2.item);
							}
							case 3:
							{
								SetLanguage setLanguage = (SetLanguage)this;
								SetLanguage setLanguage2 = (SetLanguage)obj;
								return string.Equals(setLanguage.item, setLanguage2.item);
							}
							default:
								return true;
							}
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class TranscribeRequest : IEquatable<TranscribeRequest>, IStructuralEquatable, IComparable<TranscribeRequest>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal float[][] samplesBatch@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal string language@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public float[][] samplesBatch
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return samplesBatch@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public string language
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return language@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(TranscribeRequest))]
			public TranscribeRequest(float[][] samplesBatch, string language)
			{
				samplesBatch@ = samplesBatch;
				language@ = language;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(TranscribeRequest obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<float[][]>(LanguagePrimitives.GenericComparer, samplesBatch@, obj.samplesBatch@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						return string.CompareOrdinal(language@, obj.language@);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((TranscribeRequest)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				TranscribeRequest transcribeRequest = (TranscribeRequest)obj;
				if (this != null)
				{
					if ((TranscribeRequest)obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<float[][]>(comp, samplesBatch@, transcribeRequest.samplesBatch@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						return string.CompareOrdinal(language@, transcribeRequest.language@);
					}
					return 1;
				}
				if ((TranscribeRequest)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					num = -1640531527 + ((language@?.GetHashCode() ?? 0) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<float[][]>(comp, samplesBatch@) + ((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 TranscribeRequest transcribeRequest)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<float[][]>(comp, samplesBatch@, transcribeRequest.samplesBatch@))
						{
							return string.Equals(language@, transcribeRequest.language@);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(TranscribeRequest obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						if (HashCompare.GenericEqualityERIntrinsic<float[][]>(samplesBatch@, obj.samplesBatch@))
						{
							return string.Equals(language@, obj.language@);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class TranscribeFound<Transcription> : IEquatable<TranscribeFound<Transcription>>, IStructuralEquatable, IComparable<TranscribeFound<Transcription>>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid fileId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Detection.VADFrame vadFrame@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Transcription transcription@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid fileId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return fileId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Detection.VADFrame vadFrame
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadFrame@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Transcription transcription
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return transcription@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(TranscribeFound<>))]
			public TranscribeFound(Guid fileId, Detection.VADFrame vadFrame, Transcription transcription)
			{
				fileId@ = fileId;
				vadFrame@ = vadFrame;
				transcription@ = transcription;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(TranscribeFound<Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, fileId@, obj.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = obj.vadFrame@;
						int num2 = vADFrame.CompareTo(vADFrame2, genericComparer);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						genericComparer = LanguagePrimitives.GenericComparer;
						Transcription val = transcription@;
						Transcription val2 = obj.transcription@;
						return HashCompare.GenericComparisonWithComparerIntrinsic<Transcription>(genericComparer, val, val2);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((TranscribeFound<Transcription>)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				TranscribeFound<Transcription> transcribeFound = (TranscribeFound<Transcription>)obj;
				if (this != null)
				{
					if ((TranscribeFound<Transcription>)obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, fileId@, transcribeFound.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = transcribeFound.vadFrame@;
						int num2 = vADFrame.CompareTo(vADFrame2, comp);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						Transcription val = transcription@;
						Transcription val2 = transcribeFound.transcription@;
						return HashCompare.GenericComparisonWithComparerIntrinsic<Transcription>(comp, val, val2);
					}
					return 1;
				}
				if ((TranscribeFound<Transcription>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					Transcription val = transcription@;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Transcription>(comp, val) + ((num << 6) + (num >> 2)));
					Detection.VADFrame vADFrame = vadFrame@;
					num = -1640531527 + (vADFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, fileId@) + ((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 TranscribeFound<Transcription> transcribeFound)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, fileId@, transcribeFound.fileId@))
						{
							Detection.VADFrame vADFrame = vadFrame@;
							Detection.VADFrame vADFrame2 = transcribeFound.vadFrame@;
							if (vADFrame.Equals(vADFrame2, comp))
							{
								Transcription val = transcription@;
								Transcription val2 = transcribeFound.transcription@;
								return HashCompare.GenericEqualityWithComparerIntrinsic<Transcription>(comp, val, val2);
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(TranscribeFound<Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						if (HashCompare.GenericEqualityERIntrinsic<Guid>(fileId@, obj.fileId@))
						{
							Detection.VADFrame vADFrame = vadFrame@;
							if (vADFrame.Equals(obj.vadFrame@))
							{
								Transcription val = transcription@;
								Transcription val2 = obj.transcription@;
								return HashCompare.GenericEqualityERIntrinsic<Transcription>(val, val2);
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class TranscribeEnd<Transcription> : IEquatable<TranscribeEnd<Transcription>>, IStructuralEquatable, IComparable<TranscribeEnd<Transcription>>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid fileId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Detection.VADFrame vadFrame@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal FSharpList<Detection.VADFrame> vadTimings@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Transcription transcription@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid fileId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return fileId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Detection.VADFrame vadFrame
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadFrame@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public FSharpList<Detection.VADFrame> vadTimings
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadTimings@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Transcription transcription
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return transcription@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(TranscribeEnd<>))]
			public TranscribeEnd(Guid fileId, Detection.VADFrame vadFrame, FSharpList<Detection.VADFrame> vadTimings, Transcription transcription)
			{
				fileId@ = fileId;
				vadFrame@ = vadFrame;
				vadTimings@ = vadTimings;
				transcription@ = transcription;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(TranscribeEnd<Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, fileId@, obj.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = obj.vadFrame@;
						int num2 = vADFrame.CompareTo(vADFrame2, genericComparer);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						genericComparer = LanguagePrimitives.GenericComparer;
						FSharpList<Detection.VADFrame> val = vadTimings@;
						FSharpList<Detection.VADFrame> val2 = obj.vadTimings@;
						int num3 = val.CompareTo((object)val2, genericComparer);
						if (num3 < 0)
						{
							return num3;
						}
						if (num3 > 0)
						{
							return num3;
						}
						genericComparer = LanguagePrimitives.GenericComparer;
						Transcription val3 = transcription@;
						Transcription val4 = obj.transcription@;
						return HashCompare.GenericComparisonWithComparerIntrinsic<Transcription>(genericComparer, val3, val4);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((TranscribeEnd<Transcription>)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				TranscribeEnd<Transcription> transcribeEnd = (TranscribeEnd<Transcription>)obj;
				if (this != null)
				{
					if ((TranscribeEnd<Transcription>)obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, fileId@, transcribeEnd.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = transcribeEnd.vadFrame@;
						int num2 = vADFrame.CompareTo(vADFrame2, comp);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						FSharpList<Detection.VADFrame> val = vadTimings@;
						FSharpList<Detection.VADFrame> val2 = transcribeEnd.vadTimings@;
						int num3 = val.CompareTo((object)val2, comp);
						if (num3 < 0)
						{
							return num3;
						}
						if (num3 > 0)
						{
							return num3;
						}
						Transcription val3 = transcription@;
						Transcription val4 = transcribeEnd.transcription@;
						return HashCompare.GenericComparisonWithComparerIntrinsic<Transcription>(comp, val3, val4);
					}
					return 1;
				}
				if ((TranscribeEnd<Transcription>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					Transcription val = transcription@;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Transcription>(comp, val) + ((num << 6) + (num >> 2)));
					num = -1640531527 + (vadTimings@.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					Detection.VADFrame vADFrame = vadFrame@;
					num = -1640531527 + (vADFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, fileId@) + ((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 TranscribeEnd<Transcription> transcribeEnd)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, fileId@, transcribeEnd.fileId@))
						{
							Detection.VADFrame vADFrame = vadFrame@;
							Detection.VADFrame vADFrame2 = transcribeEnd.vadFrame@;
							if (vADFrame.Equals(vADFrame2, comp))
							{
								FSharpList<Detection.VADFrame> val = vadTimings@;
								FSharpList<Detection.VADFrame> val2 = transcribeEnd.vadTimings@;
								if (val.Equals((object)val2, comp))
								{
									Transcription val3 = transcription@;
									Transcription val4 = transcribeEnd.transcription@;
									return HashCompare.GenericEqualityWithComparerIntrinsic<Transcription>(comp, val3, val4);
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public sealed bool Equals(TranscribeEnd<Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						if (HashCompare.GenericEqualityERIntrinsic<Guid>(fileId@, obj.fileId@))
						{
							Detection.VADFrame vADFrame = vadFrame@;
							if (vADFrame.Equals(obj.vadFrame@))
							{
								if (HashCompare.GenericEqualityERIntrinsic<FSharpList<Detection.VADFrame>>(vadTimings@, obj.vadTimings@))
								{
									Transcription val = transcription@;
									Transcription val2 = obj.transcription@;
									return HashCompare.GenericEqualityERIntrinsic<Transcription>(val, val2);
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

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

				public const int TranscribeFound = 1;

				public const int TranscribeEnd = 2;
			}

			[Serializable]
			[SpecialName]
			[DebuggerTypeProxy(typeof(TranscribeLocalAction<>._TranscribeStart@DebugTypeProxy))]
			[DebuggerDisplay("{__DebugDisplay(),nq}")]
			internal class _TranscribeStart : TranscribeLocalAction<Transcription>
			{
				[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(TranscribeLocalAction<>))]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				internal _TranscribeStart()
				{
				}
			}

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

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

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

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

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

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

			[SpecialName]
			internal class _TranscribeStart@DebugTypeProxy
			{
				[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(TranscribeLocalAction<>))]
				[CompilerGenerated]
				[DebuggerNonUserCode]
				public _TranscribeStart@DebugTypeProxy(_TranscribeStart obj)
				{
					_obj = obj;
				}
			}

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

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

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

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

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

			[CompilerGenerated]
			[DebuggerNonUserCode]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			public static TranscribeLocalAction<Transcription> TranscribeStart
			{
				[CompilationMapping(/*Could not decode attribute arguments.*/)]
				get
				{
					return _unique_TranscribeStart;
				}
			}

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

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

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

			static TranscribeLocalAction()
			{
				_unique_TranscribeStart = new _TranscribeStart();
			}

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

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscribeLocalAction<Transcription> NewTranscribeFound(TranscribeFound<Transcription> item)
			{
				return new TranscribeFound(item);
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public static TranscribeLocalAction<Transcription> NewTranscribeEnd(TranscribeEnd<Transcription> item)
			{
				return new TranscribeEnd(item);
			}

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

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

			[CompilerGenerated]
			public virtual sealed int CompareTo(TranscribeLocalAction<Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = ((this is TranscribeEnd) ? 2 : ((this is TranscribeFound) ? 1 : 0));
						int num2 = ((obj is TranscribeEnd) ? 2 : ((obj is TranscribeFound) ? 1 : 0));
						if (num == num2)
						{
							IComparer genericComparer;
							if (!(this is TranscribeFound))
							{
								if (this is TranscribeEnd)
								{
									TranscribeEnd transcribeEnd = (TranscribeEnd)this;
									TranscribeEnd transcribeEnd2 = (TranscribeEnd)obj;
									genericComparer = LanguagePrimitives.GenericComparer;
									TranscribeEnd<Transcription> item = transcribeEnd.item;
									TranscribeEnd<Transcription> item2 = transcribeEnd2.item;
									return item.CompareTo(item2, genericComparer);
								}
								return 0;
							}
							TranscribeFound transcribeFound = (TranscribeFound)this;
							TranscribeFound transcribeFound2 = (TranscribeFound)obj;
							genericComparer = LanguagePrimitives.GenericComparer;
							TranscribeFound<Transcription> item3 = transcribeFound.item;
							TranscribeFound<Transcription> item4 = transcribeFound2.item;
							return item3.CompareTo(item4, genericComparer);
						}
						return num - num2;
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public virtual sealed int CompareTo(object obj)
			{
				return CompareTo((TranscribeLocalAction<Transcription>)obj);
			}

			[CompilerGenerated]
			public virtual sealed int CompareTo(object obj, IComparer comp)
			{
				TranscribeLocalAction<Transcription> transcribeLocalAction = (TranscribeLocalAction<Transcription>)obj;
				if (this != null)
				{
					if ((TranscribeLocalAction<Transcription>)obj != null)
					{
						int num = ((this is TranscribeEnd) ? 2 : ((this is TranscribeFound) ? 1 : 0));
						TranscribeLocalAction<Transcription> transcribeLocalAction2 = transcribeLocalAction;
						int num2 = ((transcribeLocalAction2 is TranscribeEnd) ? 2 : ((transcribeLocalAction2 is TranscribeFound) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is TranscribeFound))
							{
								if (this is TranscribeEnd)
								{
									TranscribeEnd transcribeEnd = (TranscribeEnd)this;
									TranscribeEnd transcribeEnd2 = (TranscribeEnd)transcribeLocalAction;
									TranscribeEnd<Transcription> item = transcribeEnd.item;
									TranscribeEnd<Transcription> item2 = transcribeEnd2.item;
									return item.CompareTo(item2, comp);
								}
								return 0;
							}
							TranscribeFound transcribeFound = (TranscribeFound)this;
							TranscribeFound transcribeFound2 = (TranscribeFound)transcribeLocalAction;
							TranscribeFound<Transcription> item3 = transcribeFound.item;
							TranscribeFound<Transcription> item4 = transcribeFound2.item;
							return item3.CompareTo(item4, comp);
						}
						return num - num2;
					}
					return 1;
				}
				if ((TranscribeLocalAction<Transcription>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public virtual sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					if (!(this is TranscribeFound))
					{
						if (this is TranscribeEnd)
						{
							TranscribeEnd transcribeEnd = (TranscribeEnd)this;
							num = 2;
							return -1640531527 + (transcribeEnd.item.GetHashCode(comp) + ((num << 6) + (num >> 2)));
						}
						return (this is TranscribeEnd) ? 2 : ((this is TranscribeFound) ? 1 : 0);
					}
					TranscribeFound transcribeFound = (TranscribeFound)this;
					num = 1;
					return -1640531527 + (transcribeFound.item.GetHashCode(comp) + ((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 TranscribeLocalAction<Transcription> transcribeLocalAction)
					{
						int num = ((this is TranscribeEnd) ? 2 : ((this is TranscribeFound) ? 1 : 0));
						TranscribeLocalAction<Transcription> transcribeLocalAction2 = transcribeLocalAction;
						int num2 = ((transcribeLocalAction2 is TranscribeEnd) ? 2 : ((transcribeLocalAction2 is TranscribeFound) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is TranscribeFound))
							{
								if (this is TranscribeEnd)
								{
									TranscribeEnd transcribeEnd = (TranscribeEnd)this;
									TranscribeEnd transcribeEnd2 = (TranscribeEnd)transcribeLocalAction;
									TranscribeEnd<Transcription> item = transcribeEnd.item;
									TranscribeEnd<Transcription> item2 = transcribeEnd2.item;
									return item.Equals(item2, comp);
								}
								return true;
							}
							TranscribeFound transcribeFound = (TranscribeFound)this;
							TranscribeFound transcribeFound2 = (TranscribeFound)transcribeLocalAction;
							TranscribeFound<Transcription> item3 = transcribeFound.item;
							TranscribeFound<Transcription> item4 = transcribeFound2.item;
							return item3.Equals(item4, comp);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

			[CompilerGenerated]
			public virtual sealed bool Equals(TranscribeLocalAction<Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = ((this is TranscribeEnd) ? 2 : ((this is TranscribeFound) ? 1 : 0));
						int num2 = ((obj is TranscribeEnd) ? 2 : ((obj is TranscribeFound) ? 1 : 0));
						if (num == num2)
						{
							if (!(this is TranscribeFound))
							{
								if (this is TranscribeEnd)
								{
									TranscribeEnd transcribeEnd = (TranscribeEnd)this;
									TranscribeEnd transcribeEnd2 = (TranscribeEnd)obj;
									return transcribeEnd.item.Equals(transcribeEnd2.item);
								}
								return true;
							}
							TranscribeFound transcribeFound = (TranscribeFound)this;
							TranscribeFound transcribeFound2 = (TranscribeFound)obj;
							return transcribeFound.item.Equals(transcribeFound2.item);
						}
						return false;
					}
					return false;
				}
				return obj == null;
			}

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

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public sealed class TranscribeBatchedFound<PlayerId, Transcription> : IEquatable<TranscribeBatchedFound<PlayerId, Transcription>>, IStructuralEquatable, IComparable<TranscribeBatchedFound<PlayerId, Transcription>>, IComparable, IStructuralComparable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid fileId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal PlayerId playerId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Guid sentenceId@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Detection.VADFrame vadFrame@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal Transcription transcription@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid fileId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return fileId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public PlayerId playerId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return playerId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Guid sentenceId
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return sentenceId@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Detection.VADFrame vadFrame
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return vadFrame@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public Transcription transcription
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return transcription@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(TranscribeBatchedFound<, >))]
			public TranscribeBatchedFound(Guid fileId, PlayerId playerId, Guid sentenceId, Detection.VADFrame vadFrame, Transcription transcription)
			{
				fileId@ = fileId;
				playerId@ = playerId;
				sentenceId@ = sentenceId;
				vadFrame@ = vadFrame;
				transcription@ = transcription;
			}

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

			[CompilerGenerated]
			public sealed int CompareTo(TranscribeBatchedFound<PlayerId, Transcription> obj)
			{
				if (this != null)
				{
					if (obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, fileId@, obj.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						IComparer genericComparer = LanguagePrimitives.GenericComparer;
						PlayerId val = playerId@;
						PlayerId val2 = obj.playerId@;
						int num2 = HashCompare.GenericComparisonWithComparerIntrinsic<PlayerId>(genericComparer, val, val2);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						int num3 = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(LanguagePrimitives.GenericComparer, sentenceId@, obj.sentenceId@);
						if (num3 < 0)
						{
							return num3;
						}
						if (num3 > 0)
						{
							return num3;
						}
						genericComparer = LanguagePrimitives.GenericComparer;
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = obj.vadFrame@;
						int num4 = vADFrame.CompareTo(vADFrame2, genericComparer);
						if (num4 < 0)
						{
							return num4;
						}
						if (num4 > 0)
						{
							return num4;
						}
						genericComparer = LanguagePrimitives.GenericComparer;
						Transcription val3 = transcription@;
						Transcription val4 = obj.transcription@;
						return HashCompare.GenericComparisonWithComparerIntrinsic<Transcription>(genericComparer, val3, val4);
					}
					return 1;
				}
				if (obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj)
			{
				return CompareTo((TranscribeBatchedFound<PlayerId, Transcription>)obj);
			}

			[CompilerGenerated]
			public sealed int CompareTo(object obj, IComparer comp)
			{
				TranscribeBatchedFound<PlayerId, Transcription> transcribeBatchedFound = (TranscribeBatchedFound<PlayerId, Transcription>)obj;
				if (this != null)
				{
					if ((TranscribeBatchedFound<PlayerId, Transcription>)obj != null)
					{
						int num = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, fileId@, transcribeBatchedFound.fileId@);
						if (num < 0)
						{
							return num;
						}
						if (num > 0)
						{
							return num;
						}
						PlayerId val = playerId@;
						PlayerId val2 = transcribeBatchedFound.playerId@;
						int num2 = HashCompare.GenericComparisonWithComparerIntrinsic<PlayerId>(comp, val, val2);
						if (num2 < 0)
						{
							return num2;
						}
						if (num2 > 0)
						{
							return num2;
						}
						int num3 = HashCompare.GenericComparisonWithComparerIntrinsic<Guid>(comp, sentenceId@, transcribeBatchedFound.sentenceId@);
						if (num3 < 0)
						{
							return num3;
						}
						if (num3 > 0)
						{
							return num3;
						}
						Detection.VADFrame vADFrame = vadFrame@;
						Detection.VADFrame vADFrame2 = transcribeBatchedFound.vadFrame@;
						int num4 = vADFrame.CompareTo(vADFrame2, comp);
						if (num4 < 0)
						{
							return num4;
						}
						if (num4 > 0)
						{
							return num4;
						}
						Transcription val3 = transcription@;
						Transcription val4 = transcribeBatchedFound.transcription@;
						return HashCompare.GenericComparisonWithComparerIntrinsic<Transcription>(comp, val3, val4);
					}
					return 1;
				}
				if ((TranscribeBatchedFound<PlayerId, Transcription>)obj != null)
				{
					return -1;
				}
				return 0;
			}

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				if (this != null)
				{
					int num = 0;
					Transcription val = transcription@;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Transcription>(comp, val) + ((num << 6) + (num >> 2)));
					Detection.VADFrame vADFrame = vadFrame@;
					num = -1640531527 + (vADFrame.GetHashCode(comp) + ((num << 6) + (num >> 2)));
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, sentenceId@) + ((num << 6) + (num >> 2)));
					PlayerId val2 = playerId@;
					num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<PlayerId>(comp, val2) + ((num << 6) + (num >> 2)));
					return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<Guid>(comp, fileId@) + ((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 TranscribeBatchedFound<PlayerId, Transcription> transcribeBatchedFound)
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, fileId@, transcribeBatchedFound.fileId@))
						{
							PlayerId val = playerId@;
							PlayerId val2 = transcribeBatchedFound.playerId@;
							if (HashCompare.GenericEqualityWithComparerIntrinsic<PlayerId>(comp, val, val2))
							{
								if (HashCompare.GenericEqualityWithComparerIntrinsic<Guid>(comp, sentenceId@, transcribeBatchedFound.sentenceId@))
								{
									Detection.VADFrame vADFrame = vadFrame@;
									Detection.VADFrame vADFrame2 = transcribeBatchedFound.vadFrame@;
									if (vADFrame.Equals(vADFrame2, comp))
									{
										Transcription val3 = transcription@;
										Transcription val4 = transcribeBatchedFound.transcription@;
										return HashCompare.GenericEqualityWithComparerIntrinsic<Transcription>(comp, val3, val4);
									}
									return false;
								}
								return fals

BepInEx/plugins/Mirage.dll

Decompiled a day ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Threading;
using System.Threading.Tasks;
using <StartupCode$Mirage>;
using <StartupCode$Mirage>.$Mirage.Domain;
using <StartupCode$Mirage>.$Mirage.Domain.Audio;
using <StartupCode$Mirage>.$Mirage.Hook;
using <StartupCode$Mirage>.$Mirage.Unity;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Dissonance;
using Dissonance.Audio.Capture;
using Dissonance.Audio.Playback;
using FSharpPlus;
using FSharpPlus.Control;
using FSharpPlus.Data;
using FSharpPlus.Internals;
using FSharpx.Control;
using GameNetcodeStuff;
using LethalSettings.UI;
using LethalSettings.UI.Components;
using LobbyCompatibility.Enums;
using LobbyCompatibility.Features;
using Microsoft.FSharp.Collections;
using Microsoft.FSharp.Control;
using Microsoft.FSharp.Core;
using Mirage.Core.Async;
using Mirage.Core.Audio.File;
using Mirage.Core.Audio.Microphone;
using Mirage.Domain;
using Mirage.Domain.Audio;
using Mirage.Hook;
using Mirage.NetcodePatcher;
using Mirage.Unity;
using NAudio.Lame;
using NAudio.Wave;
using Newtonsoft.Json;
using On;
using On.Dissonance;
using On.GameNetcodeStuff;
using On.Unity.Netcode;
using Silero;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;

[assembly: FSharpInterfaceDataVersion(2, 0, 0)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("NAudio.Core")]
[assembly: IgnoresAccessChecksTo("NAudio")]
[assembly: IgnoresAccessChecksTo("NAudio.Lame")]
[assembly: IgnoresAccessChecksTo("NAudio.WinMM")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("Mirage")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+d4268f339b456174c9355e162d86752ac7d7774b")]
[assembly: AssemblyProduct("Mirage")]
[assembly: AssemblyTitle("Mirage")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Mirage
{
	[Serializable]
	[BepInPlugin("qwbarch.Mirage", "Mirage", "1.12.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public void Awake()
		{
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			bool flag = LameDLL.LoadNativeDLL(new string[1] { directoryName });
			string directoryName2 = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
			string text = Path.Join((ReadOnlySpan<char>)directoryName2, (ReadOnlySpan<char>)"Mirage");
			string recordingDirectory = Path.Join((ReadOnlySpan<char>)text, (ReadOnlySpan<char>)"Recording");
			DirectoryInfo directoryInfo = Directory.CreateDirectory(text);
			if (!flag)
			{
				Mirage.Domain.Logger.logError.Invoke("Failed to load NAudio.Lame. This means no monsters will be able to play your voice.\n" + "Please report this to qwbarch at https://github.com/qwbarch/mirage/issues\n" + PrintfModule.PrintFormatToStringThen<string>((PrintfFormat<string, Unit, string, string>)(object)new PrintfFormat<string, Unit, string, string, string>("Path failed: %P()", new object[1] { directoryName }, (Type[])null)));
			}
			Array values = Enum.GetValues(typeof(LogCategory));
			IEnumerable<LogCategory> enumerable = SeqModule.Cast<LogCategory>((IEnumerable)values);
			foreach (LogCategory item in enumerable)
			{
				Logs.SetLogLevel(item, (LogLevel)4);
			}
			Compatibility.initLobbyCompatibility();
			Mirage.Domain.Audio.Recording.initRecordingManager(recordingDirectory);
			Mirage.Domain.Setting.initSettings(Path.Join((ReadOnlySpan<char>)text, (ReadOnlySpan<char>)"settings.json"));
			Mirage.Domain.Netcode.initNetcodePatcher();
			FSharpAsync.StartImmediate(Mirage.Domain.Audio.Recording.deleteRecordings, (FSharpOption<CancellationToken>)null);
			Application.quitting += $Plugin.Awake@51.Invoke;
			Mirage.Hook.Dissonance.cacheDissonance();
			Mirage.Hook.AudioSpatializer.disableAudioSpatializer();
			Mirage.Hook.Prefab.registerPrefab();
			Mirage.Hook.Config.syncConfig();
			Mirage.Hook.Microphone.readMicrophone(recordingDirectory);
			Mirage.Hook.MaskedPlayerEnemy.hookMaskedEnemy();
		}
	}
}
namespace <StartupCode$Mirage>
{
	internal static class $Plugin
	{
		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class Awake@51
		{
			internal static void Invoke()
			{
				FSharpAsync.StartImmediate(Mirage.Domain.Audio.Recording.deleteRecordings, (FSharpOption<CancellationToken>)null);
			}
		}
	}
}
namespace Mirage
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Compatibility
	{
		[Serializable]
		internal sealed class initLobbyCompatibility@14 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			internal static readonly initLobbyCompatibility@14 @_instance = new initLobbyCompatibility@14();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal initLobbyCompatibility@14()
			{
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				PluginHelper.RegisterPlugin("Mirage", Version.Parse("1.12.2"), (CompatibilityLevel)2, (VersionStrictness)2);
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
			}
		}

		public static void initLobbyCompatibility()
		{
			if (Chainloader.PluginInfos.ContainsKey("BMX.LobbyCompatibility"))
			{
				FSharpAsync<Unit> val = ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)initLobbyCompatibility@14.@_instance);
				FSharpAsync.RunSynchronously<Unit>(val, (FSharpOption<int>)null, (FSharpOption<CancellationToken>)null);
			}
		}
	}
}
namespace <StartupCode$Mirage>.$Mirage
{
	internal static class Compatibility
	{
	}
}
[CompilationMapping(/*Could not decode attribute arguments.*/)]
public static class AssemblyInfo
{
}
namespace <StartupCode$Mirage>
{
	internal static class $AssemblyInfo
	{
	}
}
namespace Mirage.Hook
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Microphone
	{
		[Serializable]
		[Struct]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public struct RecordState : IEquatable<RecordState>, IStructuralEquatable
		{
			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal float[] samples@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal WaveFormat format@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool isReady@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool isPlayerDead@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool pushToTalkEnabled@;

			[CompilerGenerated]
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			internal bool isMuted@;

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly float[] samples
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return samples@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly WaveFormat format
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return format@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool isReady
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return isReady@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool isPlayerDead
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return isPlayerDead@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool pushToTalkEnabled
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return pushToTalkEnabled@;
				}
			}

			[CompilationMapping(/*Could not decode attribute arguments.*/)]
			public readonly bool isMuted
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					return isMuted@;
				}
			}

			[DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties, typeof(RecordState))]
			public RecordState(float[] samples, WaveFormat format, bool isReady, bool isPlayerDead, bool pushToTalkEnabled, bool isMuted)
			{
				samples@ = samples;
				format@ = format;
				isReady@ = isReady;
				isPlayerDead@ = isPlayerDead;
				pushToTalkEnabled@ = pushToTalkEnabled;
				isMuted@ = isMuted;
			}

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

			[CompilerGenerated]
			public sealed int GetHashCode(IEqualityComparer comp)
			{
				int num = 0;
				num = -1640531527 + ((isMuted@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((pushToTalkEnabled@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((isPlayerDead@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + ((isReady@ ? 1 : 0) + ((num << 6) + (num >> 2)));
				num = -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<WaveFormat>(comp, format@) + ((num << 6) + (num >> 2)));
				return -1640531527 + (HashCompare.GenericHashWithComparerIntrinsic<float[]>(comp, samples@) + ((num << 6) + (num >> 2)));
			}

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

			[CompilerGenerated]
			public sealed bool Equals(object obj, IEqualityComparer comp)
			{
				if (obj is RecordState recordState)
				{
					if (HashCompare.GenericEqualityWithComparerIntrinsic<float[]>(comp, samples@, recordState.samples@))
					{
						if (HashCompare.GenericEqualityWithComparerIntrinsic<WaveFormat>(comp, format@, recordState.format@))
						{
							if (isReady@ == recordState.isReady@)
							{
								if (isPlayerDead@ == recordState.isPlayerDead@)
								{
									if (pushToTalkEnabled@ == recordState.pushToTalkEnabled@)
									{
										return isMuted@ == recordState.isMuted@;
									}
									return false;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed bool Equals(RecordState obj)
			{
				if (HashCompare.GenericEqualityERIntrinsic<float[]>(samples@, obj.samples@))
				{
					if (HashCompare.GenericEqualityERIntrinsic<WaveFormat>(format@, obj.format@))
					{
						if (isReady@ == obj.isReady@)
						{
							if (isPlayerDead@ == obj.isPlayerDead@)
							{
								if (pushToTalkEnabled@ == obj.pushToTalkEnabled@)
								{
									return isMuted@ == obj.isMuted@;
								}
								return false;
							}
							return false;
						}
						return false;
					}
					return false;
				}
				return false;
			}

			[CompilerGenerated]
			public sealed override bool Equals(object obj)
			{
				if (obj is RecordState)
				{
					return Equals((RecordState)obj);
				}
				return false;
			}
		}

		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public class MicrophoneSubscriber : IMicrophoneSubscriber
		{
			virtual void IMicrophoneSubscriber.ReceiveMicrophoneData(ArraySegment<float> buffer, WaveFormat format)
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0052: Expected O, but got Unknown
				if (StartOfRound.Instance != null)
				{
					RecordState recordState = new RecordState(buffer.ToArray(), new WaveFormat(format.SampleRate, format.Channels), isReady, StartOfRound.Instance.localPlayerController.isPlayerDead, IngamePlayerSettings.Instance.settings.pushToTalk, Dissonance.dissonance.IsMuted);
					FSharpAsync<Unit> val = channel.AsyncAdd(recordState, (FSharpOption<int>)null);
					FSharpAsync.StartImmediate(val, (FSharpOption<CancellationToken>)null);
				}
			}

			virtual void IMicrophoneSubscriber.Reset()
			{
			}
		}

		[Serializable]
		internal sealed class recorder@51 : FSharpFunc<FSharpFunc<RecordAction, FSharpAsync<Unit>>, Recorder>
		{
			public string recordingDirectory;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public int minAudioDurationMs;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal recorder@51(string recordingDirectory, int minAudioDurationMs)
			{
				this.recordingDirectory = recordingDirectory;
				this.minAudioDurationMs = minAudioDurationMs;
			}

			public override Recorder Invoke(FSharpFunc<RecordAction, FSharpAsync<Unit>> onRecording)
			{
				return Recorder.Recorder(minAudioDurationMs, recordingDirectory, onRecording);
			}
		}

		[Serializable]
		internal sealed class recorder@51-1 : FSharpFunc<RecordAction, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<Unit> k;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal recorder@51-1(FSharpAsync<Unit> k)
			{
				this.k = k;
			}

			public override FSharpAsync<Unit> Invoke(RecordAction _arg1)
			{
				return k;
			}
		}

		[Serializable]
		internal sealed class recorder@51-2 : FSharpFunc<Tuple<Return, FSharpAsync<Unit>>, FSharpFunc<Unit, FSharpAsync<Unit>>>
		{
			internal static readonly recorder@51-2 @_instance = new recorder@51-2();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal recorder@51-2()
			{
			}

			public override FSharpFunc<Unit, FSharpAsync<Unit>> Invoke(Tuple<Return, FSharpAsync<Unit>> tupledArg)
			{
				return Return.Return<Unit>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class voiceDetector@52 : FSharpFunc<FSharpOption<float>, FSharpOption<float>>
		{
			internal static readonly voiceDetector@52 @_instance = new voiceDetector@52();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@52()
			{
			}

			public override FSharpOption<float> Invoke(FSharpOption<float> x)
			{
				return x;
			}
		}

		[Serializable]
		internal sealed class voiceDetector@52-1 : FSharpFunc<Tuple<Return, FSharpAsync<float>>, FSharpFunc<float, FSharpAsync<float>>>
		{
			internal static readonly voiceDetector@52-1 @_instance = new voiceDetector@52-1();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@52-1()
			{
			}

			public override FSharpFunc<float, FSharpAsync<float>> Invoke(Tuple<Return, FSharpAsync<float>> tupledArg)
			{
				return Return.Return<float>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class voiceDetector@52-2 : FSharpFunc<float[], FSharpAsync<float>>
		{
			public SileroVAD silero;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal voiceDetector@52-2(SileroVAD silero)
			{
				this.silero = silero;
			}

			public override FSharpAsync<float> Invoke(float[] x)
			{
				return func2@1-1(API.detectSpeech(silero, x));
			}
		}

		[Serializable]
		internal sealed class readMicrophone@67-5 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			internal static readonly readMicrophone@67-5 @_instance = new readMicrophone@67-5();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@67-5()
			{
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncActivation<Unit>.Success(ctxt, (Unit)null);
			}
		}

		[Serializable]
		internal sealed class readMicrophone@67-4 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			internal static readonly readMicrophone@67-4 @_instance = new readMicrophone@67-4();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@67-4()
			{
			}

			public override FSharpAsync<Unit> Invoke(Unit _arg2)
			{
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)readMicrophone@67-5.@_instance);
			}
		}

		[Serializable]
		internal sealed class readMicrophone@67-6 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<Unit> computation;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, FSharpAsync<Unit>> binder;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@67-6(FSharpAsync<Unit> computation, FSharpFunc<Unit, FSharpAsync<Unit>> binder)
			{
				this.computation = computation;
				this.binder = binder;
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncPrimitives.Bind<Unit, Unit>(ctxt, computation, binder);
			}
		}

		[Serializable]
		internal sealed class readMicrophone@67-3 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> consumer;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@67-3(Lazy<FSharpAsync<Unit>> consumer)
			{
				this.consumer = consumer;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				FSharpAsync<Unit> value = consumer.Value;
				FSharpFunc<Unit, FSharpAsync<Unit>> @_instance;
				@_instance = readMicrophone@67-4.@_instance;
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new readMicrophone@67-6(value, @_instance));
			}
		}

		[Serializable]
		internal sealed class readMicrophone@57-7 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<Unit> computation2;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@57-7(FSharpAsync<Unit> computation2)
			{
				this.computation2 = computation2;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar0)
			{
				return computation2;
			}
		}

		[Serializable]
		internal sealed class readMicrophone@57-8 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<Unit> computation1;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, FSharpAsync<Unit>> part2;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@57-8(FSharpAsync<Unit> computation1, FSharpFunc<Unit, FSharpAsync<Unit>> part2)
			{
				this.computation1 = computation1;
				this.part2 = part2;
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncPrimitives.Bind<Unit, Unit>(ctxt, computation1, part2);
			}
		}

		[Serializable]
		internal sealed class readMicrophone@57-2 : FSharpFunc<RecordState, FSharpAsync<Unit>>
		{
			public Resampler<FSharpOption<float>> resampler;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> consumer;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@57-2(Resampler<FSharpOption<float>> resampler, Lazy<FSharpAsync<Unit>> consumer)
			{
				this.resampler = resampler;
				this.consumer = consumer;
			}

			public override FSharpAsync<Unit> Invoke(RecordState state)
			{
				//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_007f: Unknown result type (might be due to invalid IL or missing references)
				FSharpAsync<Unit> obj;
				FSharpAsync<Unit> val;
				if (state.isReady@ && (Mirage.Domain.Config.getConfig().enableRecordVoiceWhileDead@ || !state.isPlayerDead@))
				{
					AudioFrame item = new AudioFrame(state.samples@, state.format@);
					FSharpOption<float> item2 = (state.isMuted@ ? FSharpOption<float>.Some(0f) : ((!state.pushToTalkEnabled@) ? null : FSharpOption<float>.Some(1f)));
					val = Resampler.writeResampler<FSharpOption<float>>(resampler).Invoke((item2, item));
					FSharpAsync.StartImmediate(val, (FSharpOption<CancellationToken>)null);
					obj = ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
				}
				else
				{
					obj = ExtraTopLevelOperators.DefaultAsyncBuilder.Zero();
				}
				FSharpAsync<Unit> computation = obj;
				val = ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new readMicrophone@67-3(consumer));
				FSharpFunc<Unit, FSharpAsync<Unit>> part = new readMicrophone@57-7(val);
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new readMicrophone@57-8(computation, part));
			}
		}

		[Serializable]
		internal sealed class readMicrophone@56-9 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<RecordState> computation;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<RecordState, FSharpAsync<Unit>> binder;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@56-9(FSharpAsync<RecordState> computation, FSharpFunc<RecordState, FSharpAsync<Unit>> binder)
			{
				this.computation = computation;
				this.binder = binder;
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncPrimitives.Bind<Unit, RecordState>(ctxt, computation, binder);
			}
		}

		[Serializable]
		internal sealed class readMicrophone@56-1 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			public Resampler<FSharpOption<float>> resampler;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> consumer;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@56-1(Resampler<FSharpOption<float>> resampler, Lazy<FSharpAsync<Unit>> consumer)
			{
				this.resampler = resampler;
				this.consumer = consumer;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				FSharpAsync<RecordState> computation = channel.AsyncGet((FSharpOption<int>)null);
				FSharpFunc<RecordState, FSharpAsync<Unit>> binder = new readMicrophone@57-2(resampler, consumer);
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new readMicrophone@56-9(computation, binder));
			}
		}

		[Serializable]
		internal sealed class readMicrophone@54 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			public Resampler<FSharpOption<float>> resampler;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> consumer;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal readMicrophone@54(Resampler<FSharpOption<float>> resampler, Lazy<FSharpAsync<Unit>> consumer)
			{
				this.resampler = resampler;
				this.consumer = consumer;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new readMicrophone@56-1(resampler, consumer));
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@71-10
		{
			internal static void Invoke(orig_Start orig, DissonanceComms self)
			{
				orig.Invoke(self);
				MicrophoneSubscriber microphoneSubscriber = new MicrophoneSubscriber();
				self.SubscribeToRecordedAudio((IMicrophoneSubscriber)(object)microphoneSubscriber);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@78-11
		{
			internal static void Invoke(orig_StartTrackingAllPlayerVoices orig, StartOfRound self)
			{
				isReady = true;
				orig.Invoke(self);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@84-12
		{
			internal static void Invoke(orig_OnDestroy orig, StartOfRound self)
			{
				isReady = false;
				orig.Invoke(self);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class readMicrophone@88-13
		{
			internal static void Invoke(orig_ReviveDeadPlayers orig, StartOfRound self)
			{
				isReady = false;
				orig.Invoke(self);
			}
		}

		[Literal]
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		public const int SamplesPerWindow = 1024;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static BlockingQueueAgent<RecordState> channel => <StartupCode$Mirage>.$Mirage.Hook.Microphone.channel@30-1;

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static bool isReady
		{
			get
			{
				return <StartupCode$Mirage>.$Mirage.Hook.Microphone.isReady@31;
			}
			set
			{
				<StartupCode$Mirage>.$Mirage.Hook.Microphone.isReady@31 = value;
			}
		}

		[CompilerGenerated]
		internal static FSharpFunc<RecordAction, FSharpAsync<Unit>> func1@1(FSharpAsync<Unit> k)
		{
			return new recorder@51-1(k);
		}

		[CompilerGenerated]
		internal static FSharpAsync<float> func2@1-1(float x)
		{
			return FSharpFunc<Tuple<Return, FSharpAsync<float>>, float>.InvokeFast<FSharpAsync<float>>((FSharpFunc<Tuple<Return, FSharpAsync<float>>, FSharpFunc<float, FSharpAsync<float>>>)voiceDetector@52-1.@_instance, new Tuple<Return, FSharpAsync<float>>(null, null), x);
		}

		public static void readMicrophone(string recordingDirectory)
		{
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Expected O, but got Unknown
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Expected O, but got Unknown
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Expected O, but got Unknown
			Mirage.Domain.Config.SyncedConfig config = Mirage.Domain.Config.getConfig();
			SileroVAD silero = API.SileroVAD(1024);
			int minAudioDurationMs@ = config.minAudioDurationMs@;
			FSharpFunc<FSharpFunc<RecordAction, FSharpAsync<Unit>>, Recorder> val = new recorder@51(recordingDirectory, minAudioDurationMs@);
			FSharpAsync<Unit> k = FSharpFunc<Tuple<Return, FSharpAsync<Unit>>, Unit>.InvokeFast<FSharpAsync<Unit>>((FSharpFunc<Tuple<Return, FSharpAsync<Unit>>, FSharpFunc<Unit, FSharpAsync<Unit>>>)recorder@51-2.@_instance, new Tuple<Return, FSharpAsync<Unit>>(null, null), (Unit)null);
			Recorder val2 = val.Invoke(func1@1(k));
			VoiceDetector<FSharpOption<float>> val3 = Detection.VoiceDetector<FSharpOption<float>>(config.minSilenceDurationMs@, (FSharpFunc<FSharpOption<float>, FSharpOption<float>>)voiceDetector@52.@_instance, (FSharpFunc<float[], FSharpAsync<float>>)new voiceDetector@52-2(silero), Recorder.writeRecorder(val2));
			Resampler<FSharpOption<float>> resampler = Resampler.Resampler<FSharpOption<float>>(Detection.writeDetector<FSharpOption<float>>(val3));
			Lazy<FSharpAsync<Unit>> consumer = default(Lazy<FSharpAsync<Unit>>);
			FSharpFunc<Unit, FSharpAsync<Unit>> val4 = new readMicrophone@54(resampler, consumer);
			consumer = LazyExtensions.Create<FSharpAsync<Unit>>(val4);
			((readMicrophone@54)val4).consumer = consumer;
			k = consumer.Value;
			FSharpAsync.Start(k, (FSharpOption<CancellationToken>)null);
			DissonanceComms.Start += new hook_Start(readMicrophone@71-10.Invoke);
			StartOfRound.StartTrackingAllPlayerVoices += new hook_StartTrackingAllPlayerVoices(readMicrophone@78-11.Invoke);
			StartOfRound.OnDestroy += new hook_OnDestroy(readMicrophone@84-12.Invoke);
			StartOfRound.ReviveDeadPlayers += new hook_ReviveDeadPlayers(readMicrophone@88-13.Invoke);
		}

		static Microphone()
		{
			<StartupCode$Mirage>.$Mirage.Hook.Microphone.init@ = 0;
			_ = <StartupCode$Mirage>.$Mirage.Hook.Microphone.init@;
		}
	}
}
namespace <StartupCode$Mirage>.$Mirage.Hook
{
	internal static class Microphone
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static readonly BlockingQueueAgent<Mirage.Hook.Microphone.RecordState> channel@30-1;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static bool isReady@31;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal static int init@;

		static Microphone()
		{
			channel@30-1 = new BlockingQueueAgent<Mirage.Hook.Microphone.RecordState>(int.MaxValue);
			isReady@31 = false;
		}
	}
}
namespace Mirage.Hook
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class Prefab
	{
		[Serializable]
		internal sealed class registerPrefab@19-1 : FSharpFunc<Type, Component>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public GameObject objectArg;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal registerPrefab@19-1(GameObject objectArg)
			{
				this.objectArg = objectArg;
			}

			public override Component Invoke(Type componentType)
			{
				return objectArg.AddComponent(componentType);
			}
		}

		[Serializable]
		internal sealed class registerPrefab@19-2 : FSharpFunc<Type, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Type, Component> func1;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal registerPrefab@19-2(FSharpFunc<Type, Component> func1)
			{
				this.func1 = func1;
			}

			public override Unit Invoke(Type x)
			{
				Component val = func1.Invoke(x);
				return null;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class registerPrefab@12
		{
			internal static void Invoke(orig_Start orig, MenuManager self)
			{
				orig.Invoke(self);
				if (initialized)
				{
					return;
				}
				initialized = true;
				List<NetworkPrefab> prefabs = ((Component)GameNetworkManager.Instance).GetComponent<NetworkManager>().NetworkConfig.Prefabs.m_Prefabs;
				foreach (NetworkPrefab item in prefabs)
				{
					EnemyAI component = item.Prefab.GetComponent<EnemyAI>();
					if (component != null)
					{
						GameObject gameObject = ((Component)component).gameObject;
						FSharpFunc<Type, Component> func = new registerPrefab@19-1(gameObject);
						FSharpFunc<Type, Unit> val = new registerPrefab@19-2(func);
						FSharpList<Type> val2 = FSharpList<Type>.Cons(typeof(Mirage.Unity.AudioStream.AudioStream), FSharpList<Type>.Cons(typeof(Mirage.Unity.MimicPlayer.MimicPlayer), FSharpList<Type>.Cons(typeof(Mirage.Unity.MirageVoice.MimicVoice), FSharpList<Type>.Empty)));
						Iterate val3 = null;
						Iterate.Iterate<Type>(val2, val);
					}
				}
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public static bool initialized
		{
			get
			{
				return <StartupCode$Mirage>.$Mirage.Hook.Prefab.initialized@9;
			}
			set
			{
				<StartupCode$Mirage>.$Mirage.Hook.Prefab.initialized@9 = value;
			}
		}

		public static void registerPrefab()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			MenuManager.Start += new hook_Start(registerPrefab@12.Invoke);
		}
	}
}
namespace <StartupCode$Mirage>.$Mirage.Hook
{
	internal static class Prefab
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static bool initialized@9;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal static int init@;

		static Prefab()
		{
			initialized@9 = false;
		}
	}
}
namespace Mirage.Hook
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class MaskedPlayerEnemy
	{
		[Serializable]
		internal sealed class hookMaskedEnemy@20-1 : FSharpFunc<Transform, bool>
		{
			internal static readonly hookMaskedEnemy@20-1 @_instance = new hookMaskedEnemy@20-1();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal hookMaskedEnemy@20-1()
			{
			}

			public override bool Invoke(Transform _arg1)
			{
				return ((Object)_arg1).name.StartsWith("HeadMask");
			}
		}

		[Serializable]
		internal sealed class hookMaskedEnemy@21-2 : FSharpFunc<Transform, Unit>
		{
			internal static readonly hookMaskedEnemy@21-2 @_instance = new hookMaskedEnemy@21-2();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal hookMaskedEnemy@21-2()
			{
			}

			public override Unit Invoke(Transform _arg2)
			{
				((Component)_arg2).gameObject.SetActive(false);
				return null;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@15
		{
			internal static void Invoke(orig_Start orig, MaskedPlayerEnemy self)
			{
				((Component)self).GetComponent<Mirage.Unity.MimicPlayer.MimicPlayer>().StartMimicking();
				orig.Invoke(self);
				if (!Mirage.Domain.Config.getConfig().enableMaskTexture@)
				{
					Transform[] componentsInChildren = ((Component)self).GetComponentsInChildren<Transform>();
					FSharpFunc<Transform, bool> @_instance;
					@_instance = hookMaskedEnemy@20-1.@_instance;
					Filter val = null;
					Transform[] array = ArrayModule.Filter<Transform>(@_instance, componentsInChildren);
					FSharpFunc<Transform, Unit> @_instance2;
					@_instance2 = hookMaskedEnemy@21-2.@_instance;
					Iterate val2 = null;
					Iterate.Iterate<Transform>(array, @_instance2);
				}
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@24-3
		{
			internal static void Invoke(orig_SetHandsOutClientRpc orig, MaskedPlayerEnemy self, bool _arg1)
			{
				orig.Invoke(self, Mirage.Domain.Config.getConfig().enableArmsOut@);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@28-4
		{
			internal static void Invoke(orig_SetHandsOutServerRpc orig, MaskedPlayerEnemy self, bool _arg2)
			{
				orig.Invoke(self, Mirage.Domain.Config.getConfig().enableArmsOut@);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@32-5
		{
			internal static IEnumerator Invoke(orig_EndOfGame orig, StartOfRound self, int bodiesInsured, int connectedPlayersOnServer, int scrapCollected)
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				PlayerControllerB[] allPlayerScripts = self.allPlayerScripts;
				for (int i = 0; i < allPlayerScripts.Length; i++)
				{
					allPlayerScripts[i].deadBody = null;
				}
				return orig.Invoke(self, bodiesInsured, connectedPlayersOnServer, scrapCollected);
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@40-6
		{
			internal static void Invoke(orig_Start orig, GameNetworkManager self)
			{
				orig.Invoke(self);
				List<NetworkPrefab> prefabs = NetworkManager.Singleton.NetworkConfig.Prefabs.m_Prefabs;
				foreach (NetworkPrefab item in prefabs)
				{
					if (item.Prefab.GetComponent<MaskedPlayerEnemy>() != null && maskedPrefab == null)
					{
						maskedPrefab = item.Prefab.GetComponent<MaskedPlayerEnemy>();
					}
				}
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@71-8
		{
			internal static bool Invoke(SpawnableEnemyWithRarity delegateArg0)
			{
				return isMaskedEnemy@62(delegateArg0);
			}
		}

		[Serializable]
		internal sealed class totalWeight@74 : FSharpFunc<SpawnableEnemyWithRarity, bool>
		{
			internal static readonly totalWeight@74 @_instance = new totalWeight@74();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal totalWeight@74()
			{
			}

			public override bool Invoke(SpawnableEnemyWithRarity x)
			{
				return !isMaskedEnemy@62(x);
			}
		}

		[Serializable]
		internal sealed class totalWeight@75-1 : FSharpFunc<SpawnableEnemyWithRarity, int>
		{
			internal static readonly totalWeight@75-1 @_instance = new totalWeight@75-1();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal totalWeight@75-1()
			{
			}

			public override int Invoke(SpawnableEnemyWithRarity _arg3)
			{
				return _arg3.rarity;
			}
		}

		[Serializable]
		internal sealed class totalWeight@76-2 : FSharpFunc<int, int, int>
		{
			internal static readonly totalWeight@76-2 @_instance = new totalWeight@76-2();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal totalWeight@76-2()
			{
			}

			public override int Invoke(int x, int y)
			{
				Default1 val = null;
				return x + y;
			}
		}

		[Serializable]
		[SpecialName]
		[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static class hookMaskedEnemy@47-7
		{
			internal static void Invoke(orig_Start orig, TimeOfDay self)
			{
				//IL_004e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: 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_0067: 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_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0080: 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_0087: Unknown result type (might be due to invalid IL or missing references)
				//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_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0113: Expected O, but got Unknown
				//IL_0225: Unknown result type (might be due to invalid IL or missing references)
				//IL_022c: Expected O, but got Unknown
				orig.Invoke(self);
				if (!((NetworkBehaviour)self).IsHost || !Mirage.Domain.Config.localConfig.EnableSpawnControl@.Value)
				{
					return;
				}
				EnemyType val = Object.Instantiate<EnemyType>(((EnemyAI)maskedPrefab).enemyType);
				AnimationCurve probabilityCurve = val.probabilityCurve;
				probabilityCurve.ClearKeys();
				Keyframe val2 = new Keyframe(0f, 0f);
				int num = probabilityCurve.AddKey(val2);
				val2 = new Keyframe(0.19f, 0f);
				num = probabilityCurve.AddKey(val2);
				val2 = new Keyframe(0.2f, 0.5f);
				num = probabilityCurve.AddKey(val2);
				val2 = new Keyframe(0.5f, 10f);
				num = probabilityCurve.AddKey(val2);
				val2 = new Keyframe(0.9f, 15f);
				num = probabilityCurve.AddKey(val2);
				val2 = new Keyframe(1f, 1f);
				num = probabilityCurve.AddKey(val2);
				EnemyType enemyType = val;
				List<string> list = new List<string>();
				double value = Mirage.Domain.Config.localConfig.MaskedSpawnChance@.Value;
				SelectableLevel[] levels = StartOfRound.Instance.levels;
				foreach (SelectableLevel val3 in levels)
				{
					int num2 = val3.Enemies.RemoveAll(hookMaskedEnemy@71-8.Invoke);
					List<SpawnableEnemyWithRarity> enemies = val3.Enemies;
					FSharpFunc<SpawnableEnemyWithRarity, bool> @_instance;
					@_instance = totalWeight@74.@_instance;
					Filter val4 = null;
					List<SpawnableEnemyWithRarity> item = new List<SpawnableEnemyWithRarity>(SeqModule.Filter<SpawnableEnemyWithRarity>(@_instance, (IEnumerable<SpawnableEnemyWithRarity>)enemies));
					FSharpFunc<SpawnableEnemyWithRarity, int> @_instance2;
					@_instance2 = totalWeight@75-1.@_instance;
					Map val5 = null;
					List<int> list2 = null;
					List<int> list3 = Map.Map<SpawnableEnemyWithRarity, int>(new Tuple<List<SpawnableEnemyWithRarity>, FSharpFunc<SpawnableEnemyWithRarity, int>>(item, @_instance2), val5);
					IEnumerable<int> enumerable = list3;
					FSharpFunc<int, FSharpFunc<int, int>> @_instance3;
					@_instance3 = (FSharpFunc<int, FSharpFunc<int, int>>)(object)totalWeight@76-2.@_instance;
					Zero val6 = null;
					int num3 = 0;
					Default1 val7 = (Default1)(object)val6;
					int num4 = 0;
					Fold val8 = null;
					num2 = SeqModule.Fold<int, int>(@_instance3, num4, enumerable);
					if (num2 > 0)
					{
						double a = (double)num2 * value / (100.0 - value);
						num4 = (int)Math.Ceiling(a);
						num2 += num4;
						a = (double)num4 / (double)num2 * 100.0;
						list.Add(PrintfModule.PrintFormatToStringThen<string>((PrintfFormat<string, Unit, string, string>)(object)new PrintfFormat<string, Unit, string, string, Tuple<string, int, double>>("Level: %P(). Weight: %P(). SpawnChance: %P(F2)%%", new object[3] { val3.PlanetName, num4, a }, (Type[])null)));
						SpawnableEnemyWithRarity val9 = new SpawnableEnemyWithRarity();
						val9.rarity = num4;
						val9.enemyType = enemyType;
						val9.enemyType.MaxCount = Mirage.Domain.Config.localConfig.MaxMaskedSpawns@.Value;
						val3.Enemies.Add(val9);
					}
				}
				Mirage.Domain.Logger.logInfo.Invoke("Adjusting spawn weights for masked enemies:\n" + string.Join("\n", list));
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static MaskedPlayerEnemy maskedPrefab
		{
			get
			{
				return <StartupCode$Mirage>.$Mirage.Hook.MaskedPlayerEnemy.maskedPrefab@12;
			}
			set
			{
				<StartupCode$Mirage>.$Mirage.Hook.MaskedPlayerEnemy.maskedPrefab@12 = value;
			}
		}

		internal static bool isMaskedEnemy@62(SpawnableEnemyWithRarity enemy)
		{
			if (enemy != null && enemy.enemyType != null && true && enemy.enemyType.enemyPrefab != null)
			{
				return string.Equals(enemy.enemyType.enemyName, ((EnemyAI)maskedPrefab).enemyType.enemyName);
			}
			return false;
		}

		public static void hookMaskedEnemy()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected O, but got Unknown
			MaskedPlayerEnemy.Start += new hook_Start(hookMaskedEnemy@15.Invoke);
			MaskedPlayerEnemy.SetHandsOutClientRpc += new hook_SetHandsOutClientRpc(hookMaskedEnemy@24-3.Invoke);
			MaskedPlayerEnemy.SetHandsOutServerRpc += new hook_SetHandsOutServerRpc(hookMaskedEnemy@28-4.Invoke);
			StartOfRound.EndOfGame += new hook_EndOfGame(hookMaskedEnemy@32-5.Invoke);
			GameNetworkManager.Start += new hook_Start(hookMaskedEnemy@40-6.Invoke);
			TimeOfDay.Start += new hook_Start(hookMaskedEnemy@47-7.Invoke);
		}
	}
}
namespace <StartupCode$Mirage>.$Mirage.Hook
{
	internal static class MaskedPlayerEnemy
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static MaskedPlayerEnemy maskedPrefab@12;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal static int init@;

		static MaskedPlayerEnemy()
		{
			maskedPrefab@12 = null;
		}
	}
}
namespace Mirage.Unity
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class MirageVoice
	{
		[Serializable]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public class MimicVoice : NetworkBehaviour
		{
			internal FSharpRef<MimicVoice> self = new FSharpRef<MimicVoice>((MimicVoice)null);

			internal GameObject voicePlayback;

			internal AudioStream.AudioStream audioStream;

			internal MimicPlayer.MimicPlayer mimicPlayer;

			internal EnemyAI enemyAI;

			internal bool IsMimickingVoice@;

			internal int init@21;

			public bool IsMimickingVoice
			{
				[CompilerGenerated]
				[DebuggerNonUserCode]
				get
				{
					if (init@21 < 1)
					{
						IntrinsicFunctions.FailInit();
					}
					return IsMimickingVoice@;
				}
				[CompilerGenerated]
				[DebuggerNonUserCode]
				set
				{
					if (init@21 < 1)
					{
						IntrinsicFunctions.FailInit();
					}
					IsMimickingVoice@ = value;
				}
			}

			public MimicVoice()
			{
				self.contents = this;
				voicePlayback = null;
				audioStream = null;
				mimicPlayer = null;
				enemyAI = null;
				IsMimickingVoice@ = false;
				init@21 = 1;
			}

			public void Awake()
			{
				if (init@21 < 1)
				{
					IntrinsicFunctions.FailInit();
				}
				audioStream = ((Component)this).GetComponent<AudioStream.AudioStream>();
				mimicPlayer = ((Component)this).GetComponent<MimicPlayer.MimicPlayer>();
				enemyAI = ((Component)this).GetComponent<EnemyAI>();
				voicePlayback = Object.Instantiate<GameObject>(Mirage.Hook.Dissonance.dissonance._playbackPrefab2);
				GameObject objectArg = voicePlayback;
				FSharpFunc<Type, Component> func = new removeComponent@62(objectArg);
				FSharpFunc<Type, Unit> val = new removeComponent@62-1(func);
				FSharpList<Type> val2 = FSharpList<Type>.Cons(typeof(VoicePlayback), FSharpList<Type>.Cons(typeof(SamplePlaybackComponent), FSharpList<Type>.Cons(typeof(PlayerVoiceIngameSettings), FSharpList<Type>.Empty)));
				Iterate val3 = null;
				Iterate.Iterate<Type>(val2, val);
				((Behaviour)voicePlayback.GetComponent<AudioLowPassFilter>()).enabled = true;
				audioStream.AudioSource = voicePlayback.GetComponent<AudioSource>();
				audioStream.AudioSource.loop = false;
				voicePlayback.transform.parent = ((Component)audioStream).transform;
				voicePlayback.SetActive(true);
			}

			public void Start()
			{
				if (init@21 < 1)
				{
					IntrinsicFunctions.FailInit();
				}
				startVoiceMimic();
			}

			public void LateUpdate()
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				if (init@21 < 1)
				{
					IntrinsicFunctions.FailInit();
				}
				voicePlayback.transform.position = ((Component)this).transform.position;
			}

			public void Update()
			{
				//IL_0106: Unknown result type (might be due to invalid IL or missing references)
				//IL_0110: Expected O, but got Unknown
				if (init@21 < 1)
				{
					IntrinsicFunctions.FailInit();
				}
				if (mimicPlayer.mimickingPlayer == null || enemyAI == null)
				{
					audioStream.AudioSource.mute = true;
					return;
				}
				PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController;
				PlayerControllerB val = ((localPlayerController.spectatedPlayerScript != null) ? localPlayerController.spectatedPlayerScript : localPlayerController);
				audioStream.AudioSource.volume = (HashCompare.GenericEqualityIntrinsic<PlayerControllerB>(mimicPlayer.mimickingPlayer, localPlayerController) ? Mirage.Domain.Setting.settings.localPlayerVolume@ : ((mimicPlayer.mimickingPlayer != null && mimicPlayer.mimickingPlayer.currentVoiceChatAudioSource != null) ? mimicPlayer.mimickingPlayer.currentVoiceChatAudioSource.volume : 1f));
				audioStream.AudioSource.outputAudioMixerGroup = SoundManager.Instance.playerVoiceMixers[(uint)mimicPlayer.mimickingPlayer.playerClientId];
				audioStream.AudioSource.mute = enemyAI.isEnemyDead || (!Mirage.Domain.Config.getConfig().mimicVoiceWhileHiding@ && maskedEnemyIsHiding@97(this, null)) || isMimicLocalPlayerMuted@85(this, localPlayerController, null) || isNotHauntedOrDisappearedDressGirl@91(this, null) || val.isInsideFactory == enemyAI.isOutside;
			}

			[CompilerGenerated]
			internal void startVoiceMimic()
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				FSharpFunc<FSharpOption<Unit>, Unit> @_instance;
				@_instance = mimicVoice@31.@_instance;
				FSharpFunc<FSharpAsync<FSharpOption<Unit>>, FSharpAsync<Unit>> val = new mimicVoice@31-1(@_instance);
				MonadFxBuilder<OptionT<FSharpAsync<FSharpOption<Unit>>>> val2 = new MonadFxBuilder<OptionT<FSharpAsync<FSharpOption<Unit>>>>();
				Default1 val3 = null;
				Delay val4 = null;
				FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>> val5 = new mimicVoice@31-21(this);
				Delay val6 = null;
				Delay val7 = null;
				FSharpAsync<Unit> mimicVoice = val.Invoke(OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<Unit>>(val5)).Item);
				Lazy<FSharpAsync<Unit>> runMimicLoop = default(Lazy<FSharpAsync<Unit>>);
				FSharpFunc<Unit, FSharpAsync<Unit>> val8 = new clo@41-22(this, mimicVoice, runMimicLoop);
				runMimicLoop = LazyExtensions.Create<FSharpAsync<Unit>>(val8);
				((clo@41-22)val8).runMimicLoop = runMimicLoop;
				FSharpAsync<Unit> value = runMimicLoop.Value;
				FSharpAsync.StartImmediate(value, FSharpOption<CancellationToken>.Some(((MonoBehaviour)IntrinsicFunctions.CheckThis<MimicVoice>(self.contents)).destroyCancellationToken));
			}

			protected override void __initializeVariables()
			{
				((NetworkBehaviour)this).__initializeVariables();
			}

			[MethodImpl(MethodImplOptions.NoInlining)]
			protected internal override string __getTypeName()
			{
				return "MimicVoice";
			}
		}

		[Serializable]
		internal sealed class removeComponent@62 : FSharpFunc<Type, Component>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public GameObject objectArg;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal removeComponent@62(GameObject objectArg)
			{
				this.objectArg = objectArg;
			}

			public override Component Invoke(Type type)
			{
				return objectArg.GetComponent(type);
			}
		}

		[Serializable]
		internal sealed class removeComponent@62-1 : FSharpFunc<Type, Unit>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Type, Component> func1;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal removeComponent@62-1(FSharpFunc<Type, Component> func1)
			{
				this.func1 = func1;
			}

			public override Unit Invoke(Type x)
			{
				Component val = func1.Invoke(x);
				Object.Destroy((Object)(object)val);
				return null;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@31 : FSharpFunc<FSharpOption<Unit>, Unit>
		{
			internal static readonly mimicVoice@31 @_instance = new mimicVoice@31();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@31()
			{
			}

			public override Unit Invoke(FSharpOption<Unit> _arg1)
			{
				return null;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@31-1 : FSharpFunc<FSharpAsync<FSharpOption<Unit>>, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<FSharpOption<Unit>, Unit> f;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@31-1(FSharpFunc<FSharpOption<Unit>, Unit> f)
			{
				this.f = f;
			}

			public override FSharpAsync<Unit> Invoke(FSharpAsync<FSharpOption<Unit>> x)
			{
				Map val = null;
				FSharpAsync<Unit> val2 = null;
				return Map.Map<FSharpOption<Unit>, Unit>(new Tuple<FSharpAsync<FSharpOption<Unit>>, FSharpFunc<FSharpOption<Unit>, Unit>>(x, f), val);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-2 : FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@38-2 @_instance = new mimicVoice@38-2();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-2()
			{
			}

			public override FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> Invoke(Tuple<Return, FSharpAsync<FSharpOption<Unit>>> tupledArg)
			{
				return Return.Return<FSharpOption<Unit>>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-3 : FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>
		{
			internal static readonly mimicVoice@38-3 @_instance = new mimicVoice@38-3();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-3()
			{
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(Unit x)
			{
				return func2@1(FSharpOption<Unit>.Some(x));
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-4 : FSharpFunc<Unit, FSharpOption<Unit>>
		{
			internal static readonly mimicVoice@38-4 @_instance = new mimicVoice@38-4();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-4()
			{
			}

			public override FSharpOption<Unit> Invoke(Unit arg0)
			{
				return FSharpOption<Unit>.Some(arg0);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-7 : FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@38-7 @_instance = new mimicVoice@38-7();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-7()
			{
			}

			public override FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> Invoke(Tuple<Return, FSharpAsync<FSharpOption<Unit>>> tupledArg)
			{
				return Return.Return<FSharpOption<Unit>>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-6 : FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@38-6 @_instance = new mimicVoice@38-6();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-6()
			{
			}

			public override OptionT<FSharpAsync<FSharpOption<Unit>>> Invoke(Unit x)
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				FSharpOption<Unit> val = FSharpOption<Unit>.Some(x);
				return OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpOption<Unit>>.InvokeFast<FSharpAsync<FSharpOption<Unit>>>((FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>)mimicVoice@38-7.@_instance, new Tuple<Return, FSharpAsync<FSharpOption<Unit>>>(null, null), val));
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-5 : FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>>
		{
			internal static readonly mimicVoice@38-5 @_instance = new mimicVoice@38-5();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-5()
			{
			}

			public override FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>> Invoke(Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>> tupledArg)
			{
				Default1 item = (Default1)(object)tupledArg.Item1;
				return mimicVoice@38-6.@_instance;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-9 : FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@38-9 @_instance = new mimicVoice@38-9();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-9()
			{
			}

			public override FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> Invoke(Tuple<Return, FSharpAsync<FSharpOption<Unit>>> tupledArg)
			{
				return Return.Return<FSharpOption<Unit>>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@38-8 : FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>
		{
			internal static readonly mimicVoice@38-8 @_instance = new mimicVoice@38-8();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@38-8()
			{
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(FSharpOption<Unit> maybe_value)
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				FSharpOption<Unit> val;
				if (maybe_value != null)
				{
					val = maybe_value;
					_ = val.Value;
					return f@1-3(null).Item;
				}
				val = null;
				return FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpOption<Unit>>.InvokeFast<FSharpAsync<FSharpOption<Unit>>>((FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>)mimicVoice@38-9.@_instance, new Tuple<Return, FSharpAsync<FSharpOption<Unit>>>(null, null), val);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@37-11 : FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@37-11 @_instance = new mimicVoice@37-11();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@37-11()
			{
			}

			public override FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> Invoke(Tuple<Return, FSharpAsync<FSharpOption<Unit>>> tupledArg)
			{
				return Return.Return<FSharpOption<Unit>>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@37-10 : FSharpFunc<FSharpOption<string>, FSharpAsync<FSharpOption<Unit>>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MimicVoice @this;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@37-10(MimicVoice @this)
			{
				this.@this = @this;
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(FSharpOption<string> maybe_value)
			{
				//IL_0013: 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)
				if (maybe_value != null)
				{
					string value = maybe_value.Value;
					return f@1-2(this.@this, value).Item;
				}
				FSharpOption<Unit> val = null;
				return FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpOption<Unit>>.InvokeFast<FSharpAsync<FSharpOption<Unit>>>((FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>)mimicVoice@37-11.@_instance, new Tuple<Return, FSharpAsync<FSharpOption<Unit>>>(null, null), val);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@33-14 : FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@33-14 @_instance = new mimicVoice@33-14();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@33-14()
			{
			}

			public override FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> Invoke(Tuple<Return, FSharpAsync<FSharpOption<Unit>>> tupledArg)
			{
				return Return.Return<FSharpOption<Unit>>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@33-13 : FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@33-13 @_instance = new mimicVoice@33-13();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@33-13()
			{
			}

			public override OptionT<FSharpAsync<FSharpOption<Unit>>> Invoke(Unit x)
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				FSharpOption<Unit> val = FSharpOption<Unit>.Some(x);
				return OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpOption<Unit>>.InvokeFast<FSharpAsync<FSharpOption<Unit>>>((FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>)mimicVoice@33-14.@_instance, new Tuple<Return, FSharpAsync<FSharpOption<Unit>>>(null, null), val));
			}
		}

		[Serializable]
		internal sealed class mimicVoice@33-12 : FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>>
		{
			internal static readonly mimicVoice@33-12 @_instance = new mimicVoice@33-12();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@33-12()
			{
			}

			public override FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>> Invoke(Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>> tupledArg)
			{
				Default1 item = (Default1)(object)tupledArg.Item1;
				return mimicVoice@33-13.@_instance;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@32-15 : FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MimicVoice @this;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@32-15(MimicVoice @this)
			{
				this.@this = @this;
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(Unit _arg1)
			{
				//IL_0007: 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)
				return x@1-1(this.@this, null).Item;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@39-18 : FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@39-18 @_instance = new mimicVoice@39-18();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@39-18()
			{
			}

			public override FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> Invoke(Tuple<Return, FSharpAsync<FSharpOption<Unit>>> tupledArg)
			{
				return Return.Return<FSharpOption<Unit>>(tupledArg.Item2, tupledArg.Item1);
			}
		}

		[Serializable]
		internal sealed class mimicVoice@39-17 : FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>
		{
			internal static readonly mimicVoice@39-17 @_instance = new mimicVoice@39-17();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@39-17()
			{
			}

			public override OptionT<FSharpAsync<FSharpOption<Unit>>> Invoke(Unit x)
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				FSharpOption<Unit> val = FSharpOption<Unit>.Some(x);
				return OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpOption<Unit>>.InvokeFast<FSharpAsync<FSharpOption<Unit>>>((FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>)mimicVoice@39-18.@_instance, new Tuple<Return, FSharpAsync<FSharpOption<Unit>>>(null, null), val));
			}
		}

		[Serializable]
		internal sealed class mimicVoice@39-16 : FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>>
		{
			internal static readonly mimicVoice@39-16 @_instance = new mimicVoice@39-16();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@39-16()
			{
			}

			public override FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>> Invoke(Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>> tupledArg)
			{
				Default1 item = (Default1)(object)tupledArg.Item1;
				return mimicVoice@39-17.@_instance;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@32-19 : FSharpFunc<Exception, FSharpAsync<FSharpOption<Unit>>>
		{
			internal static readonly mimicVoice@32-19 @_instance = new mimicVoice@32-19();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@32-19()
			{
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(Exception x)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				return catchHandler@1-2(x).Item;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@32-20 : FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<FSharpOption<Unit>> arg00;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@32-20(FSharpAsync<FSharpOption<Unit>> arg00)
			{
				this.arg00 = arg00;
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(Unit unitVar0)
			{
				return arg00;
			}
		}

		[Serializable]
		internal sealed class mimicVoice@31-21 : FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MimicVoice @this;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal mimicVoice@31-21(MimicVoice @this)
			{
				this.@this = @this;
			}

			public override FSharpAsync<FSharpOption<Unit>> Invoke(Unit _arg1)
			{
				//IL_0007: 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)
				return x@1(this.@this, null).Item;
			}
		}

		[Serializable]
		internal sealed class clo@50-27 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			internal static readonly clo@50-27 @_instance = new clo@50-27();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@50-27()
			{
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncActivation<Unit>.Success(ctxt, (Unit)null);
			}
		}

		[Serializable]
		internal sealed class clo@50-26 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			internal static readonly clo@50-26 @_instance = new clo@50-26();

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@50-26()
			{
			}

			public override FSharpAsync<Unit> Invoke(Unit _arg6)
			{
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)clo@50-27.@_instance);
			}
		}

		[Serializable]
		internal sealed class clo@50-28 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<Unit> computation;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, FSharpAsync<Unit>> binder;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@50-28(FSharpAsync<Unit> computation, FSharpFunc<Unit, FSharpAsync<Unit>> binder)
			{
				this.computation = computation;
				this.binder = binder;
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncPrimitives.Bind<Unit, Unit>(ctxt, computation, binder);
			}
		}

		[Serializable]
		internal sealed class clo@50-25 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> runMimicLoop;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@50-25(Lazy<FSharpAsync<Unit>> runMimicLoop)
			{
				this.runMimicLoop = runMimicLoop;
			}

			public override FSharpAsync<Unit> Invoke(Unit _arg5)
			{
				FSharpAsync<Unit> value = runMimicLoop.Value;
				FSharpFunc<Unit, FSharpAsync<Unit>> @_instance;
				@_instance = clo@50-26.@_instance;
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new clo@50-28(value, @_instance));
			}
		}

		[Serializable]
		internal sealed class clo@49-29 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpAsync<Unit> computation;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, FSharpAsync<Unit>> binder;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@49-29(FSharpAsync<Unit> computation, FSharpFunc<Unit, FSharpAsync<Unit>> binder)
			{
				this.computation = computation;
				this.binder = binder;
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncPrimitives.Bind<Unit, Unit>(ctxt, computation, binder);
			}
		}

		[Serializable]
		internal sealed class clo@49-24 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> runMimicLoop;

			public int delay;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@49-24(Lazy<FSharpAsync<Unit>> runMimicLoop, int delay)
			{
				this.runMimicLoop = runMimicLoop;
				this.delay = delay;
			}

			public override FSharpAsync<Unit> Invoke(Unit _arg4)
			{
				FSharpAsync<Unit> computation = FSharpAsync.Sleep(delay);
				FSharpFunc<Unit, FSharpAsync<Unit>> binder = new clo@50-25(runMimicLoop);
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new clo@49-29(computation, binder));
			}
		}

		[Serializable]
		internal sealed class clo@48-30 : FSharpFunc<AsyncActivation<Unit>, AsyncReturn>
		{
			public FSharpAsync<Unit> mimicVoice;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public FSharpFunc<Unit, FSharpAsync<Unit>> binder;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@48-30(FSharpAsync<Unit> mimicVoice, FSharpFunc<Unit, FSharpAsync<Unit>> binder)
			{
				this.mimicVoice = mimicVoice;
				this.binder = binder;
			}

			public override AsyncReturn Invoke(AsyncActivation<Unit> ctxt)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return AsyncPrimitives.Bind<Unit, Unit>(ctxt, mimicVoice, binder);
			}
		}

		[Serializable]
		internal sealed class clo@43-23 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MimicVoice @this;

			public FSharpAsync<Unit> mimicVoice;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> runMimicLoop;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@43-23(MimicVoice @this, FSharpAsync<Unit> mimicVoice, Lazy<FSharpAsync<Unit>> runMimicLoop)
			{
				this.@this = @this;
				this.mimicVoice = mimicVoice;
				this.runMimicLoop = runMimicLoop;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				object enemyAI = this.@this.enemyAI;
				int delay = ((!(enemyAI is MaskedPlayerEnemy)) ? random.Next(Mirage.Domain.Config.getConfig().minimumDelayNonMasked@, Mirage.Domain.Config.getConfig().maximumDelayNonMasked@ + 1) : random.Next(Mirage.Domain.Config.getConfig().minimumDelayMasked@, Mirage.Domain.Config.getConfig().maximumDelayMasked@ + 1));
				FSharpFunc<Unit, FSharpAsync<Unit>> binder = new clo@49-24(runMimicLoop, delay);
				return AsyncPrimitives.MakeAsync<Unit>((FSharpFunc<AsyncActivation<Unit>, AsyncReturn>)new clo@48-30(mimicVoice, binder));
			}
		}

		[Serializable]
		internal sealed class clo@41-22 : FSharpFunc<Unit, FSharpAsync<Unit>>
		{
			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public MimicVoice @this;

			public FSharpAsync<Unit> mimicVoice;

			[DebuggerBrowsable(DebuggerBrowsableState.Never)]
			[CompilerGenerated]
			[DebuggerNonUserCode]
			public Lazy<FSharpAsync<Unit>> runMimicLoop;

			[CompilerGenerated]
			[DebuggerNonUserCode]
			internal clo@41-22(MimicVoice @this, FSharpAsync<Unit> mimicVoice, Lazy<FSharpAsync<Unit>> runMimicLoop)
			{
				this.@this = @this;
				this.mimicVoice = mimicVoice;
				this.runMimicLoop = runMimicLoop;
			}

			public override FSharpAsync<Unit> Invoke(Unit unitVar)
			{
				return ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<Unit>((FSharpFunc<Unit, FSharpAsync<Unit>>)new clo@43-23(this.@this, mimicVoice, runMimicLoop));
			}
		}

		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		internal static Random random => <StartupCode$Mirage>.$Mirage.Unity.MirageVoice.random@19;

		internal static bool isMimicLocalPlayerMuted@85(MimicVoice _, PlayerControllerB localPlayer, Unit unitVar0)
		{
			bool result = Mirage.Domain.Setting.settings.localPlayerVolume@ == 0f;
			bool flag = !Mirage.Domain.Config.getConfig().enableMimicVoiceWhileAlive@ && !_.mimicPlayer.mimickingPlayer.isPlayerDead;
			if (HashCompare.GenericEqualityIntrinsic<PlayerControllerB>(_.mimicPlayer.mimickingPlayer, localPlayer))
			{
				if (flag)
				{
					return true;
				}
				return result;
			}
			return false;
		}

		internal static bool isNotHauntedOrDisappearedDressGirl@91(MimicVoice _, Unit unitVar0)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Expected O, but got Unknown
			object enemyAI = _.enemyAI;
			if (enemyAI is DressGirlAI)
			{
				DressGirlAI val = (DressGirlAI)(object)_.enemyAI;
				bool flag = val.staringInHaunt || (((EnemyAI)val).moveTowardsDestination && ((EnemyAI)val).movingTowardsTargetPlayer);
				if (!val.hauntingLocalPlayer)
				{
					return true;
				}
				return !flag;
			}
			return false;
		}

		internal static bool maskedEnemyIsHiding@97(MimicVoice _, Unit unitVar0)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//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_005f: Unknown result type (might be due to invalid IL or missing references)
			object enemyAI = _.enemyAI;
			if (enemyAI is MaskedPlayerEnemy && Vector3.Distance(((Component)_.enemyAI).transform.position, ((MaskedPlayerEnemy)(object)_.enemyAI).shipHidingSpot) < 0.4f && _.enemyAI.agent.speed == 0f)
			{
				return ((MaskedPlayerEnemy)(object)_.enemyAI).crouching;
			}
			return false;
		}

		[CompilerGenerated]
		internal static FSharpAsync<FSharpOption<Unit>> func2@1(FSharpOption<Unit> x)
		{
			return FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpOption<Unit>>.InvokeFast<FSharpAsync<FSharpOption<Unit>>>((FSharpFunc<Tuple<Return, FSharpAsync<FSharpOption<Unit>>>, FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>>>)mimicVoice@38-2.@_instance, new Tuple<Return, FSharpAsync<FSharpOption<Unit>>>(null, null), x);
		}

		[CompilerGenerated]
		internal static OptionT<FSharpAsync<FSharpOption<Unit>>> f@1-3(Unit _arg2)
		{
			//IL_0008: 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)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			return FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, Unit>.InvokeFast<OptionT<FSharpAsync<FSharpOption<Unit>>>>((FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>>)mimicVoice@38-5.@_instance, new Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>(null, default(OptionT<FSharpAsync<FSharpOption<Unit>>>)), (Unit)null);
		}

		[CompilerGenerated]
		internal static OptionT<FSharpAsync<FSharpOption<Unit>>> f@1-2(MimicVoice @this, string recording)
		{
			//IL_004b: 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_0051: 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_005d: 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)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			FSharpAsync<Unit> val = @this.audioStream.StreamAudioFromFile(recording);
			_ = null;
			OptionT<FSharpAsync<FSharpOption<Unit>>> val4;
			Bind val2;
			FSharpAsync<FSharpOption<Unit>> val3;
			if (false)
			{
				FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>> @_instance;
				@_instance = mimicVoice@38-3.@_instance;
				val2 = null;
				val3 = null;
				val4 = OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(Bind.op_GreaterGreaterEquals<Unit, FSharpOption<Unit>>(val, @_instance));
			}
			else
			{
				FSharpFunc<Unit, FSharpOption<Unit>> @_instance2;
				@_instance2 = mimicVoice@38-4.@_instance;
				Map val5 = null;
				val3 = null;
				val4 = OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(Map.Map<Unit, FSharpOption<Unit>>(new Tuple<FSharpAsync<Unit>, FSharpFunc<Unit, FSharpOption<Unit>>>(val, @_instance2), val5));
			}
			OptionT<FSharpAsync<FSharpOption<Unit>>> val6 = val4;
			val2 = null;
			OptionT<FSharpAsync<FSharpOption<Unit>>> val7 = default(OptionT<FSharpAsync<FSharpOption<Unit>>>);
			val3 = val6.Item;
			FSharpFunc<FSharpOption<Unit>, FSharpAsync<FSharpOption<Unit>>> @_instance3;
			@_instance3 = mimicVoice@38-8.@_instance;
			Bind val8 = null;
			FSharpAsync<FSharpOption<Unit>> val9 = null;
			return OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(Bind.op_GreaterGreaterEquals<FSharpOption<Unit>, FSharpOption<Unit>>(val3, @_instance3));
		}

		[CompilerGenerated]
		internal static OptionT<FSharpAsync<FSharpOption<Unit>>> x@1-1(MimicVoice @this, Unit unitVar)
		{
			//IL_0084: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0076: Unknown result type (might be due to invalid IL or missing references)
			if (@this.enemyAI != null && @this.mimicPlayer.mimickingPlayer != null && true && HashCompare.GenericEqualityIntrinsic<PlayerControllerB>(@this.mimicPlayer.mimickingPlayer, StartOfRound.Instance.localPlayerController))
			{
				OptionT<FSharpAsync<FSharpOption<string>>> val = OptionT<FSharpAsync<FSharpOption<string>>>.NewOptionT(Mirage.Domain.Audio.Recording.getRecording);
				Bind val2 = null;
				OptionT<FSharpAsync<FSharpOption<Unit>>> val3 = default(OptionT<FSharpAsync<FSharpOption<Unit>>>);
				FSharpAsync<FSharpOption<string>> item = val.Item;
				FSharpFunc<FSharpOption<string>, FSharpAsync<FSharpOption<Unit>>> val4 = new mimicVoice@37-10(@this);
				Bind val5 = null;
				FSharpAsync<FSharpOption<Unit>> val6 = null;
				return OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(Bind.op_GreaterGreaterEquals<FSharpOption<string>, FSharpOption<Unit>>(item, val4));
			}
			return FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, Unit>.InvokeFast<OptionT<FSharpAsync<FSharpOption<Unit>>>>((FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>>)mimicVoice@33-12.@_instance, new Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>(null, default(OptionT<FSharpAsync<FSharpOption<Unit>>>)), (Unit)null);
		}

		[CompilerGenerated]
		internal static OptionT<FSharpAsync<FSharpOption<Unit>>> catchHandler@1-2(Exception error)
		{
			//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)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			Mirage.Domain.Logger.logError.Invoke(PrintfModule.PrintFormatToStringThen<string>((PrintfFormat<string, Unit, string, string>)(object)new PrintfFormat<string, Unit, string, string, Exception>("Error occurred while mimicking voice: %P()", new object[1] { error }, (Type[])null)));
			return FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, Unit>.InvokeFast<OptionT<FSharpAsync<FSharpOption<Unit>>>>((FSharpFunc<Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>, FSharpFunc<Unit, OptionT<FSharpAsync<FSharpOption<Unit>>>>>)mimicVoice@39-16.@_instance, new Tuple<Return, OptionT<FSharpAsync<FSharpOption<Unit>>>>(null, default(OptionT<FSharpAsync<FSharpOption<Unit>>>)), (Unit)null);
		}

		[CompilerGenerated]
		internal static OptionT<FSharpAsync<FSharpOption<Unit>>> x@1(MimicVoice @this, Unit unitVar)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_0031: 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)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			Default1 val = null;
			Delay val2 = null;
			FSharpFunc<Unit, FSharpAsync<FSharpOption<Unit>>> val3 = new mimicVoice@32-15(@this);
			Delay val4 = null;
			Delay val5 = null;
			OptionT<FSharpAsync<FSharpOption<Unit>>> val6 = OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(ExtraTopLevelOperators.DefaultAsyncBuilder.Delay<FSharpOption<Unit>>(val3));
			TryWith val7 = null;
			OptionT<FSharpAsync<FSharpOption<Unit>>> val8 = default(OptionT<FSharpAsync<FSharpOption<Unit>>>);
			val = (Default1)(object)val7;
			FSharpAsync<FSharpOption<Unit>> item = val6.Item;
			FSharpFunc<Exception, FSharpAsync<FSharpOption<Unit>>> @_instance;
			@_instance = mimicVoice@32-19.@_instance;
			TryWith val9 = null;
			val3 = new mimicVoice@32-20(item);
			FSharpAsync<FSharpOption<Unit>> val10 = null;
			return OptionT<FSharpAsync<FSharpOption<Unit>>>.NewOptionT(TryWith.TryWith<FSharpOption<Unit>, False>(val3, @_instance, val9, False.False));
		}
	}
}
namespace <StartupCode$Mirage>.$Mirage.Unity
{
	internal static class MirageVoice
	{
		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		internal static readonly Random random@19;

		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
		[CompilerGenerated]
		[DebuggerNonUserCode]
		internal static int init@;

		static MirageVoice()
		{
			random@19 = new Random();
		}
	}
}
namespace Mirage.Unity
{
	[CompilationMapping(/*Could not decode attribute arguments.*/)]
	public static class MimicPlayer
	{
		[Serializable]
		[AllowNullLiteral]
		[CompilationMapping(/*Could not decode attribute arguments.*/)]
		public class MimicPlayer : NetworkBehaviour
		{
			internal FSharpEvent<Guid> onSetMimicId;

			internal Random random;

			internal EnemyAI enemyAI;

			internal Guid mimicId;

			internal PlayerControllerB mimickingPlayer;

			public PlayerControllerB MimickingPlayer => mimickingPlayer;

			public Guid MimicId => mimicId;

			[CLIEvent]
			public event FSharpHandler<Guid> OnSetMimicId
			{
				add
				{
					((IDelegateEvent<FSharpHandler<Guid>>)(object)onSetMimicId.Publish).AddHandler(value);
				}
				remove
				{
					((IDelegateEvent<FSharpHandler<Guid>>)(object)onSetMimicId.Publish).RemoveHandler(value);
				}
			}

			public MimicPlayer()
			{
				onSetMimicId = new FSharpEvent<Guid>();
				random = new Random();
				enemyAI = null;
				mimicId = Guid.Empty;
				mimickingPlayer = null;
			}

			public void Awake()
			{
				enemyAI = ((Component)this).GetComponent<EnemyAI>();
			}

			public void Start()
			{
				object obj = enemyAI;
				if (!(obj is MaskedPlayerEnemy))
				{
					StartMimicking();
				}
			}

			public void StartMimicking()
			{
				if (((NetworkBehaviour)this).IsHost)
				{
					mimicId = Guid.NewGuid();
					MaskedPlayerEnemy component = ((Component)this).GetComponent<MaskedPlayerEnemy>();
					object obj = enemyAI;
					object obj2;
					if (obj is MaskedPlayerEnemy && SetModule.Contains<string>(((EnemyAI)component).enemyType.enemyName, Mirage.Domain.Config.getConfig().enemies@))
					{
						obj2 = ((component.mimickingPlayer != null) ? FSharpOption<PlayerControllerB>.Some(component.mimickingPlayer) : FSharpOption<PlayerControllerB>.Some(randomPlayer()));
					}
					else
					{
						obj = enemyAI;
						obj2 = ((obj is DressGirlAI || !SetModule.Contains<string>(enemyAI.enemyType.enemyName, Mirage.Domain.Config.getConfig().enemies@)) ? null : FSharpOption<PlayerControllerB>.Some(randomPlayer()));
					}
					FSharpOption<PlayerControllerB> val = (FSharpOption<PlayerControllerB>)obj2;
					FSharpFunc<PlayerControllerB, Unit> val2 = new StartMimicking@71(this);
					Iterate val3 = null;
					Iterate.Iterate<PlayerControllerB>(val, val2);
				}
			}

			public void MimicPlayer(int playerId)
			{
				//IL_000b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0011: Expected O, but got Unknown
				//IL_006c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerId];
				logMimic(PrintfModule.PrintFormatToStringThen<string>((PrintfFormat<string, Unit, string, string>)(object)new PrintfFormat<string, Unit, string, string, ulong>("Mimicking player #%P()", new object[1] { val.playerClientId }, (Type[])null)));
				mimickingPlayer = val;
				MaskedPlayerEnemy component = ((Component)this).GetComponent<MaskedPlayerEnemy>();
				if (component != null)
				{
					component.mimickingPlayer = val;
					component.SetSuit(val.currentSuitID);
					((EnemyAI)component).SetEnemyOutside(((Component)val).transform.position.y < -80f);
					component.SetVisibilityOfMaskedEnemy();
				}
				((Component)this).GetComponent<AudioStream.AudioStream>().AllowedSenderId = FSharpOption<ulong>.Some(val.actualClientId);
				if (((NetworkBehaviour)this).IsHost)
				{
					MimicPlayerClientRpc(playerId, mimicId.ToString());
				}
				onSetMimicId.Trigger(mimicId);
			}

			[ClientRpc]
			public void MimicPlayerClientRpc(int playerId, string mimicId')
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1323253619u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, playerId);
					bool flag = mimicId' != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(mimicId', false);
					}
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1323253619u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsHost)
				{
					mimicId = new Guid(mimicId');
					MimicPlayer(playerId);
				}
			}

			public void ResetMimicPlayer()
			{
				logMimic("No longer mimicking a player.");
				mimickingPlayer = null;
				if (((NetworkBehaviour)this).IsHost)
				{
					ResetMimicPlayerClientRpc();
				}
			}

			[ClientRpc]
			public void ResetMimicPlayerClientRpc()
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Invalid comparison between Unknown and I4
				//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
					{
						ClientRpcParams val = default(ClientRpcParams);
						FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3099822593u, val, (RpcDelivery)0);
						((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3099822593u, val, (RpcDelivery)0);
					}
					if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsHost)
					{
						ResetMimicPlayer();
					}
				}
			}

			public void Update()
			{
				//IL_004c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0052: Expected O, but got Unknown
				if (!((NetworkBehaviour)this).IsHost)
				{
					return;
				}
				object obj = enemyAI;
				if (!(obj is DressGirlAI) || !SetModule.Contains<string>(enemyAI.enemyType.enemyName, Mirage.Domain.Config.getConfig().enemies@))
				{
					return;
				}
				DressGirlAI val = (DressGirlAI)(object)enemyAI;
				StartOfRound instance = StartOfRound.Instance;
				DressGirlAI val2 = val;
				PlayerControllerB hauntingPlayer = val.hauntingPlayer;
				FSharpOption<PlayerControllerB> val3 = ((hauntingPlayer != null) ? FSharpOption<PlayerControllerB>.Some(hauntingPlayer) : null);
				hauntingPlayer = mimickingPlayer;
				FSharpOption<PlayerControllerB> val4 = ((hauntingPlayer != null) ? FSharpOption<PlayerControllerB>.Some(hauntingPlayer) : null);
				if (val3 == null)
				{
					if (val4 != null)
					{
						ResetMimicPlayer();
					}
					return;
				}
				FSharpOption<PlayerControllerB> val5 = val3;
				if (val4 != null)
				{
					FSharpOption<PlayerControllerB> val6 = val4;
					hauntingPlayer = val6.Value;
					PlayerControllerB value = val5.Value;
					if (HashCompare.GenericEqualityIntrinsic<PlayerControllerB>(value, hauntingPlayer) && instance.connectedPlayersAmount > 0)
					{
						hauntingPlayer = val6.Value;
						value = val5.Value;
						MimicPlayer(randomPlayerNotHaunted@116(this, val, null));
					}
				}
				else
				{
					hauntingPlayer = val5.Value;
					if (instance.connectedPlayersAmount == 0)
					{
						MimicPlayer((int)hauntingPlayer.playerClientId);
					}
					else
					{
						MimicPlayer(randomPlayerNotHaunted@116(this, val, null));
					}
				}
			}

			[CompilerGenerated]
			internal void logMimic<a>(a message)
			{
				Mirage.Domain.Logger.logInfo.Invoke(PrintfModule.PrintFormatToStringThen<string>((PrintfFormat<string, Unit, string, string>)(object)new PrintfFormat<string, Unit, string, string, Tuple<string, Guid, a>>("%P()(%P()) - %P()", new object[3]
				{
					((object)enemyAI).GetType().Name,
					mimicId,
					message
				}, (Type[])null)));
			}

			[CompilerGenerated]
			internal PlayerControllerB randomPlayer()
			{
				//IL_0065: Unknown result type (might be due to invalid IL or missing references)
				//IL_006b: Expected O, but got Unknown
				//IL_0097: Unknown result type (might be due to invalid IL or missing references)
				//IL_009d: Expected O, but got Unknown
				StartOfRound instance;
				int num;
				while (true)
				{
					instance = StartOfRound.Instance;
					if (playerPool.Count == 0)
					{
						playerPool.AddRange((IEnumerable<int>)SeqModule.ToList<int>(Operators.CreateSequence<int>(OperatorIntrinsics.RangeInt32(0, 1, instance.connectedPlayersAmount))));
					}
					int index = random.Next(playerPool.Count);
					num = playerPool[index];
					PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[num];
					playerPool.RemoveAt(index);
					if (num <= instance.connectedPlayersAmount && !val.disconnectedMidGame)
					{
						break;
					}
					this = this;
				}
				return instance.allPlayerScripts[num];
			}

			protected override void __initializeVariables()
			{
				((NetworkBehaviour)this).__initializeVariables();
			}

			[RuntimeInitializeOnLoadMethod]
			internal static void InitializeRPCS_MimicPlayer()
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Expected O, but got Unknown
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Expected O, but got Unknown
				NetworkManager.__rpc_func_table.Add(1323253619u, new RpcReceiveHandler(__rpc_handler_1323253619));
				NetworkManager.__rpc_func_table.Add(3099822593u, new RpcReceiveHandler(__rpc_handler_3099822593));
			}

			private static void __rpc_handler_1323253619(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0023: 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_0042: 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)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					int playerId = default(int);
					ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)