Decompiled source of ValhiemVRM EX2 v1.0.0

FastSpringBone.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using Microsoft.CodeAnalysis;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Jobs;
using UnityEngine.Profiling;
using VRM.FastSpringBones.Blittables;
using VRM.FastSpringBones.Components;
using VRM.FastSpringBones.NativeWrappers;
using VRM.FastSpringBones.Registries;
using VRM.FastSpringBones.Schedulers;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class IsUnmanagedAttribute : Attribute
	{
	}
}
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1762]
		{
			0, 0, 0, 1, 0, 0, 0, 66, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 92, 66, 108, 105, 116, 116, 97, 98,
			108, 101, 115, 92, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 67, 111, 108, 108, 105, 100, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 71, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 66, 108, 105,
			116, 116, 97, 98, 108, 101, 115, 92, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 67, 111, 108,
			108, 105, 100, 101, 114, 71, 114, 111, 117, 112,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			72, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 92, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 115, 92, 66, 108, 105,
			116, 116, 97, 98, 108, 101, 67, 111, 108, 108,
			105, 100, 101, 114, 71, 114, 111, 117, 112, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			67, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 92, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 115, 92, 66, 108, 105,
			116, 116, 97, 98, 108, 101, 67, 111, 108, 108,
			105, 100, 101, 114, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 63, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			115, 92, 66, 108, 105, 116, 116, 97, 98, 108,
			101, 80, 111, 105, 110, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 64, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 66, 108, 105, 116, 116, 97, 98, 108,
			101, 115, 92, 66, 108, 105, 116, 116, 97, 98,
			108, 101, 80, 111, 105, 110, 116, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 66, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 115, 92, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 82, 111, 111, 116, 66, 111,
			110, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 67, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 115, 92, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 84, 114,
			97, 110, 115, 102, 111, 114, 109, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 76, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 67, 111,
			108, 108, 105, 100, 101, 114, 71, 114, 111, 117,
			112, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 72, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 83, 99, 104, 101, 100, 117, 108, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 67, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 82, 111,
			111, 116, 66, 111, 110, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 72, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 78, 97, 116, 105, 118, 101, 87, 114,
			97, 112, 112, 101, 114, 115, 92, 78, 97, 116,
			105, 118, 101, 67, 111, 108, 108, 105, 100, 101,
			114, 71, 114, 111, 117, 112, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 73, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 78, 97, 116, 105, 118, 101, 87, 114,
			97, 112, 112, 101, 114, 115, 92, 78, 97, 116,
			105, 118, 101, 67, 111, 108, 108, 105, 100, 101,
			114, 71, 114, 111, 117, 112, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 66, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 92, 78, 97, 116, 105, 118, 101, 87,
			114, 97, 112, 112, 101, 114, 115, 92, 78, 97,
			116, 105, 118, 101, 80, 111, 105, 110, 116, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 65, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 78, 97, 116,
			105, 118, 101, 87, 114, 97, 112, 112, 101, 114,
			115, 92, 78, 97, 116, 105, 118, 101, 80, 111,
			105, 110, 116, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 68, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			78, 97, 116, 105, 118, 101, 87, 114, 97, 112,
			112, 101, 114, 115, 92, 78, 97, 116, 105, 118,
			101, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			70, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 92, 82, 101, 103, 105,
			115, 116, 114, 105, 101, 115, 92, 67, 111, 108,
			108, 105, 100, 101, 114, 71, 114, 111, 117, 112,
			82, 101, 103, 105, 115, 116, 114, 121, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 57, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 82, 101, 103, 105, 115, 116,
			114, 105, 101, 115, 92, 82, 101, 103, 105, 115,
			116, 114, 121, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 65, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 82,
			101, 103, 105, 115, 116, 114, 105, 101, 115, 92,
			82, 111, 111, 116, 66, 111, 110, 101, 82, 101,
			103, 105, 115, 116, 114, 121, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 66, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 82, 101, 103, 105, 115, 116, 114, 105,
			101, 115, 92, 84, 114, 97, 110, 115, 102, 111,
			114, 109, 82, 101, 103, 105, 115, 116, 114, 121,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			74, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 92, 83, 99, 104, 101,
			100, 117, 108, 101, 114, 115, 92, 80, 117, 108,
			108, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			74, 111, 98, 83, 99, 104, 101, 100, 117, 108,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 74, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 83, 99,
			104, 101, 100, 117, 108, 101, 114, 115, 92, 80,
			117, 115, 104, 84, 114, 97, 110, 115, 102, 111,
			114, 109, 74, 111, 98, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 77, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			83, 99, 104, 101, 100, 117, 108, 101, 114, 115,
			92, 85, 112, 100, 97, 116, 101, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 74, 111, 98,
			83, 99, 104, 101, 100, 117, 108, 101, 114, 46,
			99, 115
		};
		result.TypesData = new byte[1477]
		{
			0, 0, 0, 0, 48, 86, 82, 77, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 115, 124, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 67, 111, 108, 108, 105,
			100, 101, 114, 0, 0, 0, 0, 53, 86, 82,
			77, 46, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 115, 46, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 115, 124, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 67, 111,
			108, 108, 105, 100, 101, 114, 71, 114, 111, 117,
			112, 0, 0, 0, 0, 54, 86, 82, 77, 46,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 115, 46, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 115, 124, 66, 108, 105,
			116, 116, 97, 98, 108, 101, 67, 111, 108, 108,
			105, 100, 101, 114, 71, 114, 111, 117, 112, 115,
			0, 0, 0, 0, 49, 86, 82, 77, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 115, 124, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 67, 111, 108, 108, 105,
			100, 101, 114, 115, 0, 0, 0, 0, 45, 86,
			82, 77, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 115, 124,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 80,
			111, 105, 110, 116, 0, 0, 0, 0, 46, 86,
			82, 77, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 115, 124,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 80,
			111, 105, 110, 116, 115, 0, 0, 0, 0, 48,
			86, 82, 77, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			82, 111, 111, 116, 66, 111, 110, 101, 0, 0,
			0, 0, 49, 86, 82, 77, 46, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 115, 46, 66, 108, 105, 116, 116, 97, 98,
			108, 101, 115, 124, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 84, 114, 97, 110, 115, 102, 111,
			114, 109, 0, 0, 0, 0, 58, 86, 82, 77,
			46, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 115, 46, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 124, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 67, 111, 108, 108, 105, 100, 101, 114,
			71, 114, 111, 117, 112, 0, 0, 0, 0, 54,
			86, 82, 77, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			124, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 0, 0, 0, 0, 49, 86,
			82, 77, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 124,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			82, 111, 111, 116, 66, 111, 110, 101, 0, 0,
			0, 0, 54, 86, 82, 77, 46, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 115, 46, 78, 97, 116, 105, 118, 101, 87,
			114, 97, 112, 112, 101, 114, 115, 124, 78, 97,
			116, 105, 118, 101, 67, 111, 108, 108, 105, 100,
			101, 114, 71, 114, 111, 117, 112, 0, 0, 0,
			0, 55, 86, 82, 77, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 78, 97, 116, 105, 118, 101, 87, 114,
			97, 112, 112, 101, 114, 115, 124, 78, 97, 116,
			105, 118, 101, 67, 111, 108, 108, 105, 100, 101,
			114, 71, 114, 111, 117, 112, 115, 0, 0, 0,
			0, 48, 86, 82, 77, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 78, 97, 116, 105, 118, 101, 87, 114,
			97, 112, 112, 101, 114, 115, 124, 78, 97, 116,
			105, 118, 101, 80, 111, 105, 110, 116, 101, 114,
			0, 0, 0, 0, 47, 86, 82, 77, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 78, 97, 116, 105, 118,
			101, 87, 114, 97, 112, 112, 101, 114, 115, 124,
			78, 97, 116, 105, 118, 101, 80, 111, 105, 110,
			116, 115, 0, 0, 0, 0, 50, 86, 82, 77,
			46, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 115, 46, 78, 97, 116,
			105, 118, 101, 87, 114, 97, 112, 112, 101, 114,
			115, 124, 78, 97, 116, 105, 118, 101, 84, 114,
			97, 110, 115, 102, 111, 114, 109, 0, 0, 0,
			0, 52, 86, 82, 77, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 82, 101, 103, 105, 115, 116, 114, 105,
			101, 115, 124, 67, 111, 108, 108, 105, 100, 101,
			114, 71, 114, 111, 117, 112, 82, 101, 103, 105,
			115, 116, 114, 121, 0, 0, 0, 0, 39, 86,
			82, 77, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 82,
			101, 103, 105, 115, 116, 114, 105, 101, 115, 124,
			82, 101, 103, 105, 115, 116, 114, 121, 0, 0,
			0, 0, 47, 86, 82, 77, 46, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 115, 46, 82, 101, 103, 105, 115, 116, 114,
			105, 101, 115, 124, 82, 111, 111, 116, 66, 111,
			110, 101, 82, 101, 103, 105, 115, 116, 114, 121,
			0, 0, 0, 0, 48, 86, 82, 77, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 82, 101, 103, 105, 115,
			116, 114, 105, 101, 115, 124, 84, 114, 97, 110,
			115, 102, 111, 114, 109, 82, 101, 103, 105, 115,
			116, 114, 121, 0, 0, 0, 0, 56, 86, 82,
			77, 46, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 115, 46, 83, 99,
			104, 101, 100, 117, 108, 101, 114, 115, 124, 80,
			117, 108, 108, 84, 114, 97, 110, 115, 102, 111,
			114, 109, 74, 111, 98, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 0, 0, 0, 0, 60, 86,
			82, 77, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			99, 104, 101, 100, 117, 108, 101, 114, 115, 46,
			80, 117, 108, 108, 84, 114, 97, 110, 115, 102,
			111, 114, 109, 74, 111, 98, 83, 99, 104, 101,
			100, 117, 108, 101, 114, 124, 74, 111, 98, 0,
			0, 0, 0, 56, 86, 82, 77, 46, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 115, 46, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 115, 124, 80, 117, 115, 104, 84,
			114, 97, 110, 115, 102, 111, 114, 109, 74, 111,
			98, 83, 99, 104, 101, 100, 117, 108, 101, 114,
			0, 0, 0, 0, 60, 86, 82, 77, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 115, 46, 80, 117, 115, 104,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 74,
			111, 98, 83, 99, 104, 101, 100, 117, 108, 101,
			114, 124, 74, 111, 98, 0, 0, 0, 0, 59,
			86, 82, 77, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			83, 99, 104, 101, 100, 117, 108, 101, 114, 115,
			124, 85, 112, 100, 97, 116, 101, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 74, 111, 98,
			83, 99, 104, 101, 100, 117, 108, 101, 114, 0,
			0, 0, 0, 63, 86, 82, 77, 46, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 115, 46, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 115, 46, 85, 112, 100, 97, 116,
			101, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 74, 111, 98, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 124, 74, 111, 98
		};
		result.TotalFiles = 23;
		result.TotalTypes = 26;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VRM.FastSpringBones.Schedulers
{
	public sealed class PullTransformJobScheduler : IDisposable
	{
		private struct Job : IJobParallelForTransform
		{
			[NativeDisableUnsafePtrRestriction]
			public unsafe BlittableTransform** TransformPointers;

			public unsafe void Execute(int index, TransformAccess transform)
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				TransformPointers[index]->PullFrom(transform);
			}
		}

		private unsafe BlittableTransform** _transformPointers;

		private TransformAccessArray _transformAccessArray;

		private readonly CustomSampler _sampler = CustomSampler.Create("Schedule CopyFromTransformJob", false);

		private readonly TransformRegistry _transformRegistry;

		private bool _dirty = true;

		private IReadOnlyList<NativeTransform> Targets => _transformRegistry.PullTargets;

		public PullTransformJobScheduler(TransformRegistry transformRegistry)
		{
			_transformRegistry = transformRegistry;
			_transformRegistry.SubscribeOnValueChanged(OnTransformChanged);
		}

		private void OnTransformChanged()
		{
			_dirty = true;
		}

		public unsafe JobHandle Schedule(JobHandle dependOn = default(JobHandle))
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: 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)
			if (Targets.Count == 0)
			{
				return dependOn;
			}
			if (_dirty)
			{
				ReconstructBuffers();
				_dirty = false;
			}
			Job job = default(Job);
			job.TransformPointers = _transformPointers;
			return IJobParallelForTransformExtensions.Schedule<Job>(job, _transformAccessArray, dependOn);
		}

		private unsafe void ReconstructBuffers()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			ReleaseBuffers();
			IReadOnlyList<NativeTransform> targets = Targets;
			_transformPointers = (BlittableTransform**)UnsafeUtility.Malloc((long)(sizeof(BlittableTransform*) * targets.Count), 16, (Allocator)4);
			_transformAccessArray = new TransformAccessArray(targets.Count, -1);
			for (int i = 0; i < targets.Count; i++)
			{
				_transformPointers[i] = targets[i].GetUnsafePtr();
				((TransformAccessArray)(ref _transformAccessArray)).Add(targets[i].Transform);
			}
		}

		public void Dispose()
		{
			ReleaseBuffers();
			_transformRegistry.UnSubscribeOnValueChanged(OnTransformChanged);
		}

		private unsafe void ReleaseBuffers()
		{
			if (((TransformAccessArray)(ref _transformAccessArray)).isCreated)
			{
				((TransformAccessArray)(ref _transformAccessArray)).Dispose();
			}
			if (_transformPointers != null)
			{
				UnsafeUtility.Free((void*)_transformPointers, (Allocator)4);
				_transformPointers = null;
			}
		}
	}
	public sealed class PushTransformJobScheduler : IDisposable
	{
		private struct Job : IJobParallelForTransform
		{
			[NativeDisableUnsafePtrRestriction]
			public unsafe BlittableTransform** TransformPointers;

			public unsafe void Execute(int index, TransformAccess transform)
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				TransformPointers[index]->PushTo(transform);
			}
		}

		private unsafe BlittableTransform** _transformPointers;

		private TransformAccessArray _transformAccessArray;

		private readonly CustomSampler _sampler = CustomSampler.Create("Schedule CopyFromTransformJob", false);

		private readonly TransformRegistry _transformRegistry;

		private bool _dirty = true;

		private IReadOnlyList<NativeTransform> Targets => _transformRegistry.PushTargets;

		public PushTransformJobScheduler(TransformRegistry transformRegistry)
		{
			_transformRegistry = transformRegistry;
			_transformRegistry.SubscribeOnValueChanged(OnTransformChanged);
		}

		private void OnTransformChanged()
		{
			_dirty = true;
		}

		public unsafe JobHandle Schedule(JobHandle dependOn = default(JobHandle))
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: 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)
			if (Targets.Count == 0)
			{
				return dependOn;
			}
			if (_dirty)
			{
				ReconstructBuffers();
				_dirty = false;
			}
			Job job = default(Job);
			job.TransformPointers = _transformPointers;
			return IJobParallelForTransformExtensions.Schedule<Job>(job, _transformAccessArray, dependOn);
		}

		private unsafe void ReconstructBuffers()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			ReleaseBuffers();
			IReadOnlyList<NativeTransform> targets = Targets;
			_transformPointers = (BlittableTransform**)UnsafeUtility.Malloc((long)(sizeof(BlittableTransform*) * targets.Count), 16, (Allocator)4);
			_transformAccessArray = new TransformAccessArray(targets.Count, -1);
			for (int i = 0; i < targets.Count; i++)
			{
				_transformPointers[i] = targets[i].GetUnsafePtr();
				((TransformAccessArray)(ref _transformAccessArray)).Add(targets[i].Transform);
			}
		}

		public void Dispose()
		{
			ReleaseBuffers();
			_transformRegistry.UnSubscribeOnValueChanged(OnTransformChanged);
		}

		private unsafe void ReleaseBuffers()
		{
			if (((TransformAccessArray)(ref _transformAccessArray)).isCreated)
			{
				((TransformAccessArray)(ref _transformAccessArray)).Dispose();
			}
			if (_transformPointers != null)
			{
				UnsafeUtility.Free((void*)_transformPointers, (Allocator)4);
				_transformPointers = null;
			}
		}
	}
	public sealed class UpdateSpringBoneJobScheduler : IDisposable
	{
		private struct Job : IJobParallelFor
		{
			[NativeDisableUnsafePtrRestriction]
			public unsafe BlittableRootBone** RootBonePointers;

			public float DeltaTime;

			public unsafe void Execute(int index)
			{
				RootBonePointers[index]->Update(DeltaTime);
			}
		}

		private unsafe BlittableRootBone** _rootBonePointers;

		private readonly RootBoneRegistry _rootBoneRegistry;

		private readonly CustomSampler _sampler = CustomSampler.Create("Schedule CopyFromTransformJob", false);

		private bool _dirty = true;

		private IReadOnlyList<NativePointer<BlittableRootBone>> Targets => _rootBoneRegistry.Items;

		public UpdateSpringBoneJobScheduler(RootBoneRegistry rootBoneRegistry)
		{
			_rootBoneRegistry = rootBoneRegistry;
			_rootBoneRegistry.SubscribeOnValueChanged(OnRootBoneChanged);
		}

		public void Dispose()
		{
			ReleaseBuffer();
			_rootBoneRegistry.UnSubscribeOnValueChanged(OnRootBoneChanged);
		}

		private void OnRootBoneChanged()
		{
			_dirty = true;
		}

		public unsafe JobHandle Schedule(JobHandle dependOn = default(JobHandle))
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			if (Targets.Count == 0)
			{
				return dependOn;
			}
			if (_dirty)
			{
				ReconstructBuffers();
				_dirty = false;
			}
			Job job = default(Job);
			job.RootBonePointers = _rootBonePointers;
			job.DeltaTime = Time.deltaTime;
			return IJobParallelForExtensions.Schedule<Job>(job, Targets.Count, 0, dependOn);
		}

		private unsafe void ReconstructBuffers()
		{
			ReleaseBuffer();
			_rootBonePointers = (BlittableRootBone**)UnsafeUtility.Malloc((long)(sizeof(BlittableTransform*) * Targets.Count), 16, (Allocator)4);
			for (int i = 0; i < Targets.Count; i++)
			{
				_rootBonePointers[i] = Targets[i].GetUnsafePtr();
			}
		}

		private unsafe void ReleaseBuffer()
		{
			if (_rootBonePointers != null)
			{
				UnsafeUtility.Free((void*)_rootBonePointers, (Allocator)4);
				_rootBonePointers = null;
			}
		}
	}
}
namespace VRM.FastSpringBones.Registries
{
	public sealed class ColliderGroupRegistry : Registry<NativeColliderGroups>
	{
	}
	public class Registry<T>
	{
		private readonly List<T> _items = new List<T>();

		private Action _onValueChanged;

		public IReadOnlyList<T> Items => _items;

		public void Register(T value)
		{
			_items.Add(value);
			_onValueChanged?.Invoke();
		}

		public void Unregister(T value)
		{
			_items.Remove(value);
			_onValueChanged?.Invoke();
		}

		public void SubscribeOnValueChanged(Action action)
		{
			_onValueChanged = (Action)Delegate.Combine(_onValueChanged, action);
		}

		public void UnSubscribeOnValueChanged(Action action)
		{
			_onValueChanged = (Action)Delegate.Remove(_onValueChanged, action);
		}
	}
	public sealed class RootBoneRegistry : Registry<NativePointer<BlittableRootBone>>
	{
	}
	public sealed class TransformRegistry
	{
		private readonly List<NativeTransform> _transforms = new List<NativeTransform>();

		private readonly List<NativeTransform> _pullTargets = new List<NativeTransform>();

		private readonly List<NativeTransform> _pushTargets = new List<NativeTransform>();

		private Action _onValueChanged;

		public IReadOnlyList<NativeTransform> Transforms => _transforms;

		public IReadOnlyList<NativeTransform> PullTargets => _pullTargets;

		public IReadOnlyList<NativeTransform> PushTargets => _pushTargets;

		public void SubscribeOnValueChanged(Action action)
		{
			_onValueChanged = (Action)Delegate.Combine(_onValueChanged, action);
		}

		public void UnSubscribeOnValueChanged(Action action)
		{
			_onValueChanged = (Action)Delegate.Remove(_onValueChanged, action);
		}

		public void Register(NativeTransform nativeTransform, TransformSynchronizationType synchronizationType)
		{
			_transforms.Add(nativeTransform);
			switch (synchronizationType)
			{
			case TransformSynchronizationType.PullOnly:
				_pullTargets.Add(nativeTransform);
				break;
			case TransformSynchronizationType.PushOnly:
				_pushTargets.Add(nativeTransform);
				break;
			default:
				throw new ArgumentOutOfRangeException("synchronizationType", synchronizationType, null);
			}
			_onValueChanged?.Invoke();
		}

		public void Unregister(NativeTransform nativeTransform)
		{
			_transforms.Remove(nativeTransform);
			if (_pullTargets.Contains(nativeTransform))
			{
				_pullTargets.Remove(nativeTransform);
			}
			if (_pushTargets.Contains(nativeTransform))
			{
				_pushTargets.Remove(nativeTransform);
			}
			_onValueChanged?.Invoke();
		}
	}
	public enum TransformSynchronizationType
	{
		PullOnly,
		PushOnly
	}
}
namespace VRM.FastSpringBones.NativeWrappers
{
	public sealed class NativeColliderGroup : IDisposable
	{
		private readonly NativePointer<BlittableColliderGroup> _nativePointer;

		private NativeArray<BlittableCollider> Colliders { get; }

		public unsafe BlittableColliderGroup* GetUnsafePtr()
		{
			return _nativePointer.GetUnsafePtr();
		}

		public unsafe NativeColliderGroup(BlittableCollider[] colliders, NativeTransform nativeTransform)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			Colliders = new NativeArray<BlittableCollider>(colliders, (Allocator)4);
			_nativePointer = new NativePointer<BlittableColliderGroup>(new BlittableColliderGroup(Colliders, nativeTransform.GetUnsafePtr()));
		}

		public void Dispose()
		{
			//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)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			if (Colliders.IsCreated)
			{
				Colliders.Dispose();
			}
			_nativePointer.Dispose();
		}
	}
	public sealed class NativeColliderGroups : IDisposable
	{
		private readonly NativePointer<BlittableColliderGroups> _nativePointer = new NativePointer<BlittableColliderGroups>();

		private NativeArray<BlittableColliderGroup> _colliderGroupArray;

		private IReadOnlyList<FastSpringBoneColliderGroup> _colliderGroups;

		private bool _isDisposed;

		public IReadOnlyList<FastSpringBoneColliderGroup> ColliderGroups
		{
			get
			{
				return _colliderGroups;
			}
			set
			{
				_colliderGroups = value;
				UpdateColliderGroups();
			}
		}

		public unsafe BlittableColliderGroups* GetUnsafePtr()
		{
			return _nativePointer.GetUnsafePtr();
		}

		public void DrawGizmos()
		{
			_nativePointer.Value.DrawGizmos();
		}

		private void UpdateColliderGroups()
		{
			if (!_isDisposed)
			{
				if (_colliderGroupArray.IsCreated)
				{
					_colliderGroupArray.Dispose();
				}
				CreateColliderGroupArray(_colliderGroups);
				UpdateData();
			}
		}

		public NativeColliderGroups(IReadOnlyList<FastSpringBoneColliderGroup> colliderGroups)
		{
			_colliderGroups = colliderGroups;
			UpdateColliderGroups();
		}

		public void Dispose()
		{
			if (_colliderGroupArray.IsCreated)
			{
				_colliderGroupArray.Dispose();
				_isDisposed = true;
			}
			_nativePointer.Dispose();
		}

		private unsafe void CreateColliderGroupArray(IReadOnlyList<FastSpringBoneColliderGroup> colliderGroups)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			_colliderGroupArray = new NativeArray<BlittableColliderGroup>(colliderGroups.Count, (Allocator)4, (NativeArrayOptions)1);
			for (int i = 0; i < _colliderGroupArray.Length; i++)
			{
				_colliderGroupArray[i] = *colliderGroups[i].ColliderGroupPtr;
			}
		}

		private unsafe void UpdateData()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			_nativePointer.Value = new BlittableColliderGroups((BlittableColliderGroup*)NativeArrayUnsafeUtility.GetUnsafePtr<BlittableColliderGroup>(_colliderGroupArray), _colliderGroupArray.Length);
		}
	}
	public sealed class NativePointer<T> : IDisposable where T : unmanaged
	{
		private unsafe readonly T* _unsafePtr;

		public unsafe T Value
		{
			get
			{
				return *_unsafePtr;
			}
			set
			{
				*_unsafePtr = value;
			}
		}

		public unsafe T* GetUnsafePtr()
		{
			return _unsafePtr;
		}

		public unsafe NativePointer()
		{
			_unsafePtr = (T*)UnsafeUtility.Malloc((long)sizeof(T), 16, (Allocator)4);
		}

		public unsafe NativePointer(T value)
		{
			_unsafePtr = (T*)UnsafeUtility.Malloc((long)sizeof(T), 16, (Allocator)4);
			Value = value;
		}

		public unsafe void Dispose()
		{
			UnsafeUtility.Free((void*)_unsafePtr, (Allocator)4);
		}
	}
	public sealed class NativePoints : IDisposable
	{
		private readonly NativePointer<BlittablePoints> _nativePointer;

		private NativeArray<BlittablePoint> _buffer;

		public unsafe BlittablePoints* GetUnsafePtr()
		{
			return _nativePointer.GetUnsafePtr();
		}

		public unsafe NativePoints(IList<NativePointer<BlittablePoint>> points)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			_buffer = new NativeArray<BlittablePoint>(points.Count, (Allocator)4, (NativeArrayOptions)1);
			for (int i = 0; i < _buffer.Length; i++)
			{
				_buffer[i] = points[i].Value;
			}
			_nativePointer = new NativePointer<BlittablePoints>(new BlittablePoints((BlittablePoint*)NativeArrayUnsafeUtility.GetUnsafePtr<BlittablePoint>(_buffer), _buffer.Length));
		}

		public void Dispose()
		{
			if (_buffer.IsCreated)
			{
				_buffer.Dispose();
			}
			_nativePointer.Dispose();
		}
	}
	public sealed class NativeTransform : IDisposable
	{
		private readonly NativePointer<BlittableTransform> _nativePointer;

		private readonly TransformRegistry _transformRegistry;

		public Transform Transform { get; }

		public BlittableTransform Value => _nativePointer.Value;

		public unsafe BlittableTransform* GetUnsafePtr()
		{
			return _nativePointer.GetUnsafePtr();
		}

		public unsafe NativeTransform(TransformRegistry transformRegistry, TransformSynchronizationType transformSynchronizationType, Transform transform, NativeTransform parent = null)
		{
			_nativePointer = new NativePointer<BlittableTransform>(new BlittableTransform((parent != null) ? parent.GetUnsafePtr() : null, transform));
			Transform = transform;
			_transformRegistry = transformRegistry;
			_transformRegistry.Register(this, transformSynchronizationType);
		}

		public void Dispose()
		{
			_transformRegistry.Unregister(this);
			_nativePointer.Dispose();
		}
	}
}
namespace VRM.FastSpringBones.Components
{
	public sealed class FastSpringBoneColliderGroup : MonoBehaviour
	{
		private NativeTransform _nativeTransform;

		private NativeColliderGroup _nativeColliderGroup;

		public unsafe BlittableColliderGroup* ColliderGroupPtr => _nativeColliderGroup.GetUnsafePtr();

		public void Initialize(TransformRegistry transformRegistry, BlittableCollider[] colliders)
		{
			_nativeTransform = new NativeTransform(transformRegistry, TransformSynchronizationType.PullOnly, ((Component)this).transform);
			_nativeColliderGroup = new NativeColliderGroup(colliders, _nativeTransform);
		}

		private void OnDestroy()
		{
			_nativeTransform?.Dispose();
			_nativeColliderGroup?.Dispose();
		}
	}
	[DefaultExecutionOrder(11000)]
	public sealed class FastSpringBoneScheduler : MonoBehaviour
	{
		[SerializeField]
		private bool showGizmos;

		private CustomSampler _updateSampler;

		private PullTransformJobScheduler _pullTransformJobScheduler;

		private PushTransformJobScheduler _pushTransformJobScheduler;

		private UpdateSpringBoneJobScheduler _updateSpringBoneJobScheduler;

		private RootBoneRegistry _rootBoneRegistry;

		private ColliderGroupRegistry _colliderGroupRegistry;

		private JobHandle _prevJobHandle;

		public bool ShowGizmos
		{
			get
			{
				return showGizmos;
			}
			set
			{
				showGizmos = value;
			}
		}

		public void Initialize(RootBoneRegistry rootBoneRegistry, TransformRegistry transformRegistry, ColliderGroupRegistry colliderGroupRegistry)
		{
			_rootBoneRegistry = rootBoneRegistry;
			_colliderGroupRegistry = colliderGroupRegistry;
			_updateSampler = CustomSampler.Create("FastSpringBone(Update)", false);
			_pullTransformJobScheduler = new PullTransformJobScheduler(transformRegistry);
			_pushTransformJobScheduler = new PushTransformJobScheduler(transformRegistry);
			_updateSpringBoneJobScheduler = new UpdateSpringBoneJobScheduler(_rootBoneRegistry);
			_rootBoneRegistry.SubscribeOnValueChanged(OnRootBoneChanged);
		}

		private void OnDestroy()
		{
			_rootBoneRegistry.UnSubscribeOnValueChanged(OnRootBoneChanged);
			((JobHandle)(ref _prevJobHandle)).Complete();
			_pullTransformJobScheduler.Dispose();
			_pushTransformJobScheduler.Dispose();
			_updateSpringBoneJobScheduler.Dispose();
		}

		private void OnRootBoneChanged()
		{
			((JobHandle)(ref _prevJobHandle)).Complete();
		}

		private void LateUpdate()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: 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_002c: 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_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)
			//IL_003b: 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)
			((JobHandle)(ref _prevJobHandle)).Complete();
			JobHandle dependOn = _pullTransformJobScheduler.Schedule();
			dependOn = _updateSpringBoneJobScheduler.Schedule(dependOn);
			dependOn = _pushTransformJobScheduler.Schedule(dependOn);
			_prevJobHandle = dependOn;
		}
	}
	public sealed class FastSpringRootBone : IDisposable
	{
		private readonly TransformRegistry _transformRegistry;

		private readonly RootBoneRegistry _rootBoneRegistry;

		private readonly ColliderGroupRegistry _colliderGroupRegistry;

		private readonly Transform _transform;

		private float _radius;

		private NativeTransform _center;

		private IReadOnlyDictionary<Transform, int> _transformIndexMap;

		private NativeColliderGroups _nativeColliderGroups;

		private NativePoints _nativePoints;

		private NativePointer<BlittableRootBone> _rootBoneWrapper;

		private readonly IList<NativeTransform> _transformWrappers = new List<NativeTransform>();

		private readonly IList<NativePointer<BlittablePoint>> _points = new List<NativePointer<BlittablePoint>>();

		public IReadOnlyList<FastSpringBoneColliderGroup> ColliderGroups
		{
			get
			{
				return _nativeColliderGroups.ColliderGroups;
			}
			set
			{
				_nativeColliderGroups.ColliderGroups = value;
			}
		}

		public FastSpringRootBone(TransformRegistry transformRegistry, Transform transform, RootBoneRegistry rootBoneRegistry, ColliderGroupRegistry colliderGroupRegistry)
		{
			_transformRegistry = transformRegistry;
			_transform = transform;
			_rootBoneRegistry = rootBoneRegistry;
			_colliderGroupRegistry = colliderGroupRegistry;
		}

		public unsafe void Initialize(float gravityPower, Vector3 gravityDir, float dragForce, float stiffnessForce, IReadOnlyList<FastSpringBoneColliderGroup> colliderGroups, float radius, Transform center)
		{
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			_radius = radius;
			if ((Object)(object)center != (Object)null)
			{
				_center = new NativeTransform(_transformRegistry, TransformSynchronizationType.PullOnly, center);
			}
			_nativeColliderGroups = new NativeColliderGroups(colliderGroups);
			NativeTransform parent = null;
			if (Object.op_Implicit((Object)(object)_transform.parent))
			{
				parent = new NativeTransform(_transformRegistry, TransformSynchronizationType.PullOnly, _transform.parent);
			}
			SetupRecursive(_transform, parent);
			_nativePoints = new NativePoints(_points);
			_rootBoneWrapper = new NativePointer<BlittableRootBone>(new BlittableRootBone(gravityPower, gravityDir, dragForce, stiffnessForce, _nativePoints.GetUnsafePtr()));
			_rootBoneRegistry.Register(_rootBoneWrapper);
			_colliderGroupRegistry.Register(_nativeColliderGroups);
		}

		public void Dispose()
		{
			_colliderGroupRegistry.Unregister(_nativeColliderGroups);
			_rootBoneRegistry.Unregister(_rootBoneWrapper);
			foreach (NativeTransform transformWrapper in _transformWrappers)
			{
				transformWrapper.Dispose();
			}
			foreach (NativePointer<BlittablePoint> point in _points)
			{
				point.Dispose();
			}
			_center?.Dispose();
			_nativeColliderGroups?.Dispose();
			_nativePoints.Dispose();
			_rootBoneWrapper.Dispose();
		}

		private unsafe void SetupRecursive(Transform trs, NativeTransform parent = null)
		{
			NativeTransform nativeTransform = new NativeTransform(_transformRegistry, TransformSynchronizationType.PushOnly, trs, parent);
			_transformWrappers.Add(nativeTransform);
			NativePointer<BlittablePoint> item = new NativePointer<BlittablePoint>(new BlittablePoint(trs, _radius, (_center != null) ? _center.GetUnsafePtr() : null, _nativeColliderGroups.GetUnsafePtr(), nativeTransform.GetUnsafePtr()));
			_points.Add(item);
			for (int i = 0; i < trs.childCount; i++)
			{
				SetupRecursive(trs.GetChild(i), nativeTransform);
			}
		}
	}
}
namespace VRM.FastSpringBones.Blittables
{
	public readonly struct BlittableCollider
	{
		public Vector3 Offset { get; }

		public float Radius { get; }

		public BlittableCollider(Vector3 offset, float radius)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			Offset = offset;
			Radius = radius;
		}
	}
	public readonly struct BlittableColliderGroup
	{
		public BlittableColliders Colliders { get; }

		public unsafe BlittableTransform* Transform { get; }

		public unsafe BlittableColliderGroup(NativeArray<BlittableCollider> colliders, BlittableTransform* transform)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			Colliders = new BlittableColliders((BlittableCollider*)NativeArrayUnsafeUtility.GetUnsafePtr<BlittableCollider>(colliders), colliders.Length);
			Transform = transform;
		}
	}
	public readonly struct BlittableColliderGroups
	{
		private unsafe readonly BlittableColliderGroup* _data;

		public int Length { get; }

		public unsafe BlittableColliderGroup this[int i] => _data[i];

		public unsafe void DrawGizmos()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < Length; i++)
			{
				BlittableColliderGroup blittableColliderGroup = this[i];
				BlittableColliders colliders = blittableColliderGroup.Colliders;
				for (int j = 0; j < colliders.Count; j++)
				{
					Gizmos.DrawWireSphere(blittableColliderGroup.Transform->WorldPosition, colliders[j].Radius);
				}
			}
		}

		public unsafe BlittableColliderGroups(BlittableColliderGroup* data, int length)
		{
			_data = data;
			Length = length;
		}
	}
	public struct BlittableColliders
	{
		private unsafe readonly BlittableCollider* _colliders;

		public int Count { get; }

		public unsafe BlittableCollider this[int i] => _colliders[i];

		public unsafe BlittableColliders(BlittableCollider* colliders, int count)
		{
			_colliders = colliders;
			Count = count;
		}
	}
	public struct BlittablePoint
	{
		private readonly float _length;

		private readonly Quaternion _localRotation;

		private readonly Vector3 _boneAxis;

		private readonly float _radius;

		private Vector3 _prevPosition;

		private unsafe readonly BlittableColliderGroups* _blittableColliderGroups;

		private unsafe readonly BlittableTransform* _center;

		private unsafe readonly BlittableTransform* _transform;

		public Vector3 CurrentPosition { get; private set; }

		public unsafe BlittablePoint(Transform transform, float radius, BlittableTransform* center, BlittableColliderGroups* blittableColliderGroups, BlittableTransform* blittableTransform)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: 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_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 val3;
			Vector3 val4;
			if (transform.childCount == 0)
			{
				Vector3 val = transform.position - transform.parent.position;
				Vector3 val2 = transform.position + ((Vector3)(ref val)).normalized * 0.07f;
				val3 = transform.worldToLocalMatrix;
				val4 = ((Matrix4x4)(ref val3)).MultiplyPoint(val2);
			}
			else
			{
				Transform child = transform.GetChild(0);
				Vector3 lossyScale = child.lossyScale;
				val4 = child.localPosition;
				val4.x *= lossyScale.x;
				val4.y *= lossyScale.y;
				val4.z *= lossyScale.z;
			}
			Vector3 val5 = transform.TransformPoint(val4);
			Vector3 val6;
			if (center == null)
			{
				val6 = val5;
			}
			else
			{
				val3 = center->LocalToWorld;
				val3 = ((Matrix4x4)(ref val3)).inverse;
				val6 = ((Matrix4x4)(ref val3)).MultiplyPoint3x4(val5);
			}
			Vector3 prevPosition = val6;
			CurrentPosition = val6;
			_prevPosition = prevPosition;
			_localRotation = transform.localRotation;
			_boneAxis = ((Vector3)(ref val4)).normalized;
			_length = ((Vector3)(ref val4)).magnitude;
			_radius = radius;
			_blittableColliderGroups = blittableColliderGroups;
			_transform = blittableTransform;
			_center = center;
		}

		public unsafe void Update(float stiffnessForce, float dragForce, Vector3 external)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: 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_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: 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_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: 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_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: 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)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: 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_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			_transform->UpdateLocalToWorldMatrix();
			Vector3 val;
			Vector3 val2;
			if (_center == null)
			{
				val = CurrentPosition;
				val2 = _prevPosition;
			}
			else
			{
				Matrix4x4 localToWorld = _center->LocalToWorld;
				val = ((Matrix4x4)(ref localToWorld)).MultiplyPoint3x4(CurrentPosition);
				val2 = ((Matrix4x4)(ref localToWorld)).MultiplyPoint3x4(_prevPosition);
			}
			Vector3 val3 = val + (val - val2) * (1f - dragForce) + _transform->ParentWorldRotation * _localRotation * _boneAxis * stiffnessForce + external;
			Vector3 worldPosition = _transform->WorldPosition;
			Vector3 val4 = val3 - worldPosition;
			val3 = worldPosition + ((Vector3)(ref val4)).normalized * _length;
			val3 = Collision(val3, worldPosition);
			if (_center == null)
			{
				_prevPosition = val;
				CurrentPosition = val3;
			}
			else
			{
				Matrix4x4 localToWorld2 = _center->LocalToWorld;
				Matrix4x4 inverse = ((Matrix4x4)(ref localToWorld2)).inverse;
				_prevPosition = ((Matrix4x4)(ref inverse)).MultiplyPoint3x4(val);
				CurrentPosition = ((Matrix4x4)(ref inverse)).MultiplyPoint3x4(val3);
			}
			_transform->SetWorldRotation(ApplyRotation(val3));
		}

		private unsafe Vector3 Collision(Vector3 nextPosition, Vector3 position)
		{
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: 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_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: 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)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < _blittableColliderGroups->Length; i++)
			{
				BlittableColliderGroup blittableColliderGroup = (*_blittableColliderGroups)[i];
				for (int j = 0; j < blittableColliderGroup.Colliders.Count; j++)
				{
					BlittableCollider blittableCollider = blittableColliderGroup.Colliders[j];
					Vector3 val = blittableColliderGroup.Transform->TransformPoint(blittableCollider.Offset);
					float num = _radius + blittableCollider.Radius;
					Vector3 val2 = nextPosition - val;
					if (((Vector3)(ref val2)).sqrMagnitude <= num * num)
					{
						val2 = nextPosition - val;
						Vector3 normalized = ((Vector3)(ref val2)).normalized;
						Vector3 val3 = val + normalized * (_radius + blittableCollider.Radius);
						val2 = val3 - position;
						nextPosition = position + ((Vector3)(ref val2)).normalized * _length;
					}
				}
			}
			return nextPosition;
		}

		private static Quaternion FromToRotation(Vector3 from, Vector3 to)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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)
			float num = Mathf.Acos(Mathf.Clamp(Vector3.Dot(((Vector3)(ref from)).normalized, ((Vector3)(ref to)).normalized), -1f, 1f)) * 57.29578f;
			Vector3 val = Vector3.Cross(from, to);
			return Quaternion.AngleAxis(num, ((Vector3)(ref val)).normalized);
		}

		private unsafe Quaternion ApplyRotation(Vector3 nextTail)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			Quaternion val = _transform->ParentWorldRotation * _localRotation;
			return FromToRotation(val * _boneAxis, nextTail - _transform->WorldPosition) * val;
		}
	}
	public struct BlittablePoints
	{
		private unsafe readonly BlittablePoint* _points;

		public int Count { get; }

		public unsafe BlittablePoint this[int i]
		{
			get
			{
				return _points[i];
			}
			set
			{
				Unsafe.Write(_points + i, value);
			}
		}

		public unsafe BlittablePoints(BlittablePoint* points, int count)
		{
			_points = points;
			Count = count;
		}
	}
	public readonly struct BlittableRootBone
	{
		private readonly float _gravityPower;

		private readonly Vector3 _gravityDir;

		private readonly float _dragForce;

		private readonly float _stiffnessForce;

		private unsafe readonly BlittablePoints* _blittablePoints;

		public unsafe void DrawGizmos()
		{
			//IL_0013: 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_005e: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < _blittablePoints->Count; i++)
			{
				Gizmos.DrawWireSphere((*_blittablePoints)[i].CurrentPosition, 0.05f);
			}
			for (int j = 0; j < _blittablePoints->Count - 1; j++)
			{
				BlittablePoint blittablePoint = (*_blittablePoints)[j];
				BlittablePoint blittablePoint2 = (*_blittablePoints)[j + 1];
				Gizmos.DrawLine(blittablePoint.CurrentPosition, blittablePoint2.CurrentPosition);
			}
		}

		public unsafe BlittableRootBone(float gravityPower, Vector3 gravityDir, float dragForce, float stiffnessForce, BlittablePoints* blittablePoints)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			_gravityPower = gravityPower;
			_gravityDir = gravityDir;
			_dragForce = dragForce;
			_stiffnessForce = stiffnessForce;
			_blittablePoints = blittablePoints;
		}

		public unsafe void Update(float deltaTime)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			float stiffnessForce = _stiffnessForce * deltaTime;
			Vector3 external = _gravityDir * (_gravityPower * deltaTime);
			for (int i = 0; i < _blittablePoints->Count; i++)
			{
				BlittablePoint value = (*_blittablePoints)[i];
				value.Update(stiffnessForce, _dragForce, external);
				(*_blittablePoints)[i] = value;
			}
		}
	}
	public struct BlittableTransform
	{
		private unsafe readonly BlittableTransform* _parent;

		private Quaternion _worldRotation;

		private Vector3 _localPosition;

		private Vector3 _localScale;

		private Quaternion _localRotation;

		private Matrix4x4 _localToWorld;

		public Vector3 WorldPosition { get; private set; }

		public Matrix4x4 LocalToWorld => _localToWorld;

		private Matrix4x4 LocalTransform => Matrix4x4.TRS(_localPosition, _localRotation, _localScale);

		public unsafe Quaternion ParentWorldRotation
		{
			get
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				if (_parent == null)
				{
					return Quaternion.identity;
				}
				return _parent->_worldRotation;
			}
		}

		public void SetWorldRotation(Quaternion rotation)
		{
			//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)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			Quaternion parentWorldRotation = ParentWorldRotation;
			_localRotation = Quaternion.Inverse(parentWorldRotation) * rotation;
			UpdateLocalToWorldMatrix();
		}

		public unsafe BlittableTransform(BlittableTransform* parent, Transform transform)
		{
			//IL_0009: 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)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: 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_0032: 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)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			_parent = parent;
			WorldPosition = transform.position;
			_worldRotation = transform.rotation;
			_localPosition = transform.localPosition;
			_localRotation = transform.localRotation;
			_localScale = transform.localScale;
			_localToWorld = transform.localToWorldMatrix;
		}

		public void PullFrom(TransformAccess transform)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			WorldPosition = ((TransformAccess)(ref transform)).position;
			_worldRotation = ((TransformAccess)(ref transform)).rotation;
			_localPosition = ((TransformAccess)(ref transform)).localPosition;
			_localRotation = ((TransformAccess)(ref transform)).localRotation;
			_localScale = ((TransformAccess)(ref transform)).localScale;
			_localToWorld = ((TransformAccess)(ref transform)).localToWorldMatrix;
		}

		public void PushTo(TransformAccess transform)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			((TransformAccess)(ref transform)).localPosition = _localPosition;
			((TransformAccess)(ref transform)).localRotation = _localRotation;
		}

		public Vector3 TransformPoint(Vector3 offset)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return ((Matrix4x4)(ref _localToWorld)).MultiplyPoint3x4(offset);
		}

		public unsafe void UpdateLocalToWorldMatrix()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			_localToWorld = ((_parent == null) ? LocalTransform : (_parent->_localToWorld * LocalTransform));
			WorldPosition = ((Matrix4x4)(ref _localToWorld)).MultiplyPoint3x4(Vector3.zero);
			_worldRotation = ((Matrix4x4)(ref _localToWorld)).rotation;
		}
	}
}

FastSpringBone10.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using UniVRM10.FastSpringBones.Blittables;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Jobs;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1312]
		{
			0, 0, 0, 1, 0, 0, 0, 68, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 92, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 115, 92, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 67, 111, 108, 108, 105,
			100, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 72, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			115, 92, 66, 108, 105, 116, 116, 97, 98, 108,
			101, 69, 120, 116, 101, 114, 110, 97, 108, 68,
			97, 116, 97, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 65, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			115, 92, 66, 108, 105, 116, 116, 97, 98, 108,
			101, 74, 111, 105, 110, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 65, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 115, 92, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 76, 111, 103, 105, 99, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 64,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 66, 108, 105,
			116, 116, 97, 98, 108, 101, 115, 92, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 83, 112, 97,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 66, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 115, 92,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 83,
			112, 114, 105, 110, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 69, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 92, 66, 108, 105, 116, 116, 97, 98,
			108, 101, 115, 92, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 84, 114, 97, 110, 115, 102, 111,
			114, 109, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 71, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			73, 110, 112, 117, 116, 80, 111, 114, 116, 115,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 66, 117, 102, 102, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 73, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 73,
			110, 112, 117, 116, 80, 111, 114, 116, 115, 92,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 67, 111, 108, 108, 105, 100,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			73, 110, 112, 117, 116, 80, 111, 114, 116, 115,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 74, 111, 105, 110, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			71, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 73, 110,
			112, 117, 116, 80, 111, 114, 116, 115, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 112, 114, 105, 110, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 76,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 83, 121, 115,
			116, 101, 109, 92, 67, 111, 112, 121, 84, 111,
			78, 97, 116, 105, 118, 101, 65, 114, 114, 97,
			121, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			74, 111, 98, 46, 99, 115, 0, 0, 0, 5,
			0, 0, 0, 75, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 83, 121, 115, 116, 101, 109, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 66, 117, 102, 102, 101, 114, 67, 111,
			109, 98, 105, 110, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 70, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 83, 121, 115, 116, 101, 109,
			92, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 68, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 83, 121, 115, 116, 101, 109, 92, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 101, 114, 118, 105, 99, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			63, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 83, 121,
			115, 116, 101, 109, 92, 80, 117, 115, 104, 84,
			114, 97, 110, 115, 102, 111, 114, 109, 74, 111,
			98, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 70, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 83,
			121, 115, 116, 101, 109, 92, 85, 112, 100, 97,
			116, 101, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 74, 111, 98, 46,
			99, 115
		};
		result.TypesData = new byte[1303]
		{
			0, 0, 0, 0, 53, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			67, 111, 108, 108, 105, 100, 101, 114, 0, 0,
			0, 0, 57, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 115, 46, 66, 108,
			105, 116, 116, 97, 98, 108, 101, 115, 124, 66,
			108, 105, 116, 116, 97, 98, 108, 101, 69, 120,
			116, 101, 114, 110, 97, 108, 68, 97, 116, 97,
			0, 0, 0, 0, 50, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			74, 111, 105, 110, 116, 0, 0, 0, 0, 50,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 115, 124, 66, 108, 105, 116,
			116, 97, 98, 108, 101, 76, 111, 103, 105, 99,
			0, 0, 0, 0, 49, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			83, 112, 97, 110, 0, 0, 0, 0, 51, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 115, 46, 66, 108, 105, 116, 116, 97,
			98, 108, 101, 115, 124, 66, 108, 105, 116, 116,
			97, 98, 108, 101, 83, 112, 114, 105, 110, 103,
			0, 0, 0, 0, 54, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			66, 108, 105, 116, 116, 97, 98, 108, 101, 115,
			124, 66, 108, 105, 116, 116, 97, 98, 108, 101,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 0,
			0, 0, 0, 52, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			121, 115, 116, 101, 109, 124, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			66, 117, 102, 102, 101, 114, 0, 0, 0, 0,
			54, 85, 110, 105, 86, 82, 77, 49, 48, 46,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 115, 46, 83, 121, 115, 116,
			101, 109, 124, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 67, 111, 108,
			108, 105, 100, 101, 114, 0, 0, 0, 0, 51,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 115, 46, 83, 121, 115, 116, 101,
			109, 124, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 74, 111, 105, 110,
			116, 0, 0, 0, 0, 52, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 115,
			46, 83, 121, 115, 116, 101, 109, 124, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 83, 112, 114, 105, 110, 103, 0, 0,
			0, 0, 48, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 115, 46, 83, 121,
			115, 116, 101, 109, 124, 80, 117, 108, 108, 84,
			114, 97, 110, 115, 102, 111, 114, 109, 74, 111,
			98, 0, 0, 0, 0, 60, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 115,
			46, 83, 121, 115, 116, 101, 109, 124, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 66, 117, 102, 102, 101, 114, 67, 111,
			109, 98, 105, 110, 101, 114, 0, 0, 0, 0,
			78, 85, 110, 105, 86, 82, 77, 49, 48, 46,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 115, 46, 83, 121, 115, 116,
			101, 109, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 66, 117, 102,
			102, 101, 114, 67, 111, 109, 98, 105, 110, 101,
			114, 124, 76, 111, 97, 100, 84, 114, 97, 110,
			115, 102, 111, 114, 109, 115, 74, 111, 98, 0,
			0, 0, 0, 75, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			121, 115, 116, 101, 109, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			66, 117, 102, 102, 101, 114, 67, 111, 109, 98,
			105, 110, 101, 114, 124, 76, 111, 97, 100, 83,
			112, 114, 105, 110, 103, 115, 74, 111, 98, 0,
			0, 0, 0, 77, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 70, 97, 115, 116, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 115, 46, 83,
			121, 115, 116, 101, 109, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			66, 117, 102, 102, 101, 114, 67, 111, 109, 98,
			105, 110, 101, 114, 124, 76, 111, 97, 100, 67,
			111, 108, 108, 105, 100, 101, 114, 115, 74, 111,
			98, 0, 0, 0, 0, 76, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 70, 97, 115, 116, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 115,
			46, 83, 121, 115, 116, 101, 109, 46, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 66, 117, 102, 102, 101, 114, 67, 111,
			109, 98, 105, 110, 101, 114, 124, 79, 102, 102,
			115, 101, 116, 76, 111, 103, 105, 99, 115, 74,
			111, 98, 0, 0, 0, 0, 55, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 83, 121, 115, 116, 101, 109, 124, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 99, 104, 101, 100, 117, 108,
			101, 114, 0, 0, 0, 0, 53, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			115, 46, 83, 121, 115, 116, 101, 109, 124, 70,
			97, 115, 116, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 83, 101, 114, 118, 105, 99, 101,
			0, 0, 0, 0, 48, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 115, 46,
			83, 121, 115, 116, 101, 109, 124, 80, 117, 115,
			104, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			74, 111, 98, 0, 0, 0, 0, 55, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 70, 97, 115,
			116, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 115, 46, 83, 121, 115, 116, 101, 109, 124,
			85, 112, 100, 97, 116, 101, 70, 97, 115, 116,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			74, 111, 98
		};
		result.TotalFiles = 17;
		result.TotalTypes = 21;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniVRM10.FastSpringBones.System
{
	public class FastSpringBoneBuffer : IDisposable
	{
		private NativeArray<BlittableExternalData> _externalData;

		public NativeArray<BlittableSpring> Springs { get; }

		public NativeArray<BlittableJoint> Joints { get; }

		public NativeArray<BlittableCollider> Colliders { get; }

		public NativeArray<BlittableLogic> Logics { get; }

		public NativeArray<BlittableTransform> BlittableTransforms { get; }

		public Transform[] Transforms { get; }

		public bool IsDisposed { get; private set; }

		public BlittableExternalData ExternalData
		{
			get
			{
				return _externalData[0];
			}
			set
			{
				_externalData[0] = value;
			}
		}

		public unsafe FastSpringBoneBuffer(IReadOnlyList<FastSpringBoneSpring> springs, BlittableExternalData externalData, bool simulateLastBone = false)
		{
			//IL_0010: 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)
			//IL_0554: Unknown result type (might be due to invalid IL or missing references)
			//IL_0559: Unknown result type (might be due to invalid IL or missing references)
			//IL_0567: Unknown result type (might be due to invalid IL or missing references)
			//IL_056c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0579: Unknown result type (might be due to invalid IL or missing references)
			//IL_057e: Unknown result type (might be due to invalid IL or missing references)
			//IL_058c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0591: Unknown result type (might be due to invalid IL or missing references)
			//IL_059c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0365: Unknown result type (might be due to invalid IL or missing references)
			//IL_037c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_03de: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0395: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03da: Unknown result type (might be due to invalid IL or missing references)
			//IL_0408: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0411: Unknown result type (might be due to invalid IL or missing references)
			//IL_0418: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0427: Unknown result type (might be due to invalid IL or missing references)
			//IL_042f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0436: Unknown result type (might be due to invalid IL or missing references)
			//IL_044a: Unknown result type (might be due to invalid IL or missing references)
			//IL_044c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0451: Unknown result type (might be due to invalid IL or missing references)
			//IL_046d: Unknown result type (might be due to invalid IL or missing references)
			//IL_046f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0462: Unknown result type (might be due to invalid IL or missing references)
			//IL_0474: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04de: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
			_externalData = new NativeArray<BlittableExternalData>(1, (Allocator)4, (NativeArrayOptions)1);
			ExternalData = externalData;
			HashSet<Transform> hashSet = new HashSet<Transform>();
			foreach (FastSpringBoneSpring spring in springs)
			{
				FastSpringBoneJoint[] joints = spring.joints;
				for (int i = 0; i < joints.Length; i++)
				{
					FastSpringBoneJoint fastSpringBoneJoint = joints[i];
					hashSet.Add(fastSpringBoneJoint.Transform);
					if ((Object)(object)fastSpringBoneJoint.Transform.parent != (Object)null)
					{
						hashSet.Add(fastSpringBoneJoint.Transform.parent);
					}
				}
				FastSpringBoneCollider[] colliders = spring.colliders;
				for (int i = 0; i < colliders.Length; i++)
				{
					FastSpringBoneCollider fastSpringBoneCollider = colliders[i];
					hashSet.Add(fastSpringBoneCollider.Transform);
				}
				if ((Object)(object)spring.center != (Object)null)
				{
					hashSet.Add(spring.center);
				}
			}
			Transform[] array = hashSet.ToArray();
			Dictionary<Transform, int> transformIndexDictionary = array.Select((Transform trs, int index) => (trs, index)).ToDictionary<(Transform, int), Transform, int>(((Transform trs, int index) tuple) => tuple.trs, ((Transform trs, int index) tuple) => tuple.index);
			List<BlittableCollider> list = new List<BlittableCollider>();
			List<BlittableJoint> list2 = new List<BlittableJoint>();
			List<BlittableSpring> list3 = new List<BlittableSpring>();
			List<BlittableLogic> list4 = new List<BlittableLogic>();
			Vector3 val3 = default(Vector3);
			foreach (FastSpringBoneSpring spring2 in springs)
			{
				BlittableSpring item = new BlittableSpring
				{
					colliderSpan = new BlittableSpan
					{
						startIndex = list.Count,
						count = spring2.colliders.Length
					},
					logicSpan = new BlittableSpan
					{
						startIndex = list2.Count,
						count = (simulateLastBone ? spring2.joints.Length : (spring2.joints.Length - 1))
					},
					centerTransformIndex = (Object.op_Implicit((Object)(object)spring2.center) ? transformIndexDictionary[spring2.center] : (-1)),
					ExternalData = (BlittableExternalData*)NativeArrayUnsafeUtility.GetUnsafePtr<BlittableExternalData>(_externalData)
				};
				list3.Add(item);
				list.AddRange(spring2.colliders.Select(delegate(FastSpringBoneCollider collider)
				{
					BlittableCollider collider2 = collider.Collider;
					collider2.transformIndex = transformIndexDictionary[collider.Transform];
					return collider2;
				}));
				list2.AddRange(from joint in spring2.joints.Take(simulateLastBone ? spring2.joints.Length : (spring2.joints.Length - 1))
					select joint.Joint);
				for (int j = 0; j < (simulateLastBone ? spring2.joints.Length : (spring2.joints.Length - 1)); j++)
				{
					FastSpringBoneJoint fastSpringBoneJoint2 = spring2.joints[j];
					FastSpringBoneJoint? fastSpringBoneJoint3 = ((j + 1 < spring2.joints.Length) ? new FastSpringBoneJoint?(spring2.joints[j + 1]) : null);
					FastSpringBoneJoint? fastSpringBoneJoint4 = ((j - 1 >= 0) ? new FastSpringBoneJoint?(spring2.joints[j - 1]) : null);
					Vector3 zero = Vector3.zero;
					if (fastSpringBoneJoint3.HasValue)
					{
						zero = fastSpringBoneJoint3.Value.Transform.localPosition;
					}
					else if (fastSpringBoneJoint4.HasValue)
					{
						Vector3 val = fastSpringBoneJoint2.Transform.position - fastSpringBoneJoint4.Value.Transform.position;
						Matrix4x4 worldToLocalMatrix = fastSpringBoneJoint2.Transform.worldToLocalMatrix;
						zero = ((Matrix4x4)(ref worldToLocalMatrix)).MultiplyPoint(fastSpringBoneJoint2.Transform.position + val);
					}
					else
					{
						zero = Vector3.down;
					}
					Vector3 val2 = (fastSpringBoneJoint3.HasValue ? fastSpringBoneJoint3.Value.Transform.lossyScale : fastSpringBoneJoint2.Transform.lossyScale);
					((Vector3)(ref val3))..ctor(zero.x * val2.x, zero.y * val2.y, zero.z * val2.z);
					Vector3 val4 = fastSpringBoneJoint2.Transform.TransformPoint(val3);
					Vector3 val5 = (((Object)(object)spring2.center != (Object)null) ? spring2.center.InverseTransformPoint(val4) : val4);
					Transform parent = fastSpringBoneJoint2.Transform.parent;
					list4.Add(new BlittableLogic
					{
						headTransformIndex = transformIndexDictionary[fastSpringBoneJoint2.Transform],
						parentTransformIndex = (((Object)(object)parent != (Object)null) ? transformIndexDictionary[parent] : (-1)),
						currentTail = val5,
						prevTail = val5,
						localRotation = fastSpringBoneJoint2.DefaultLocalRotation,
						boneAxis = ((Vector3)(ref val3)).normalized,
						length = ((Vector3)(ref val3)).magnitude
					});
				}
			}
			Springs = new NativeArray<BlittableSpring>(list3.ToArray(), (Allocator)4);
			Joints = new NativeArray<BlittableJoint>(list2.ToArray(), (Allocator)4);
			Colliders = new NativeArray<BlittableCollider>(list.ToArray(), (Allocator)4);
			Logics = new NativeArray<BlittableLogic>(list4.ToArray(), (Allocator)4);
			BlittableTransforms = new NativeArray<BlittableTransform>(array.Length, (Allocator)4, (NativeArrayOptions)1);
			Transforms = array.ToArray();
		}

		public void Dispose()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			if (!IsDisposed)
			{
				IsDisposed = true;
				Springs.Dispose();
				Joints.Dispose();
				BlittableTransforms.Dispose();
				Colliders.Dispose();
				Logics.Dispose();
				_externalData.Dispose();
			}
		}
	}
	[Serializable]
	public struct FastSpringBoneCollider
	{
		public Transform Transform;

		public BlittableCollider Collider;
	}
	[Serializable]
	public struct FastSpringBoneJoint
	{
		public Transform Transform;

		public BlittableJoint Joint;

		public Quaternion DefaultLocalRotation;
	}
	[Serializable]
	public struct FastSpringBoneSpring
	{
		public Transform center;

		public FastSpringBoneJoint[] joints;

		public FastSpringBoneCollider[] colliders;
	}
	public struct PullTransformJob : IJobParallelForTransform
	{
		[WriteOnly]
		public NativeArray<BlittableTransform> Transforms;

		public void Execute(int index, TransformAccess transform)
		{
			//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)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: 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)
			Transforms[index] = new BlittableTransform
			{
				position = ((TransformAccess)(ref transform)).position,
				rotation = ((TransformAccess)(ref transform)).rotation,
				localPosition = ((TransformAccess)(ref transform)).localPosition,
				localRotation = ((TransformAccess)(ref transform)).localRotation,
				localScale = ((TransformAccess)(ref transform)).localScale,
				localToWorldMatrix = ((TransformAccess)(ref transform)).localToWorldMatrix,
				worldToLocalMatrix = ((TransformAccess)(ref transform)).worldToLocalMatrix
			};
		}
	}
	public sealed class FastSpringBoneBufferCombiner : IDisposable
	{
		private struct LoadTransformsJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeArray<BlittableTransform> SrcTransforms;

			[WriteOnly]
			public NativeSlice<BlittableTransform> DestTransforms;

			public void Execute(int index)
			{
				DestTransforms[index] = SrcTransforms[index];
			}
		}

		private struct LoadSpringsJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeArray<BlittableSpring> SrcSprings;

			[WriteOnly]
			public NativeSlice<BlittableSpring> DestSprings;

			public int CollidersOffset;

			public int LogicsOffset;

			public int TransformOffset;

			public void Execute(int index)
			{
				BlittableSpring blittableSpring = SrcSprings[index];
				blittableSpring.colliderSpan.startIndex += CollidersOffset;
				blittableSpring.logicSpan.startIndex += LogicsOffset;
				blittableSpring.transformIndexOffset = TransformOffset;
				DestSprings[index] = blittableSpring;
			}
		}

		private struct LoadCollidersJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeArray<BlittableCollider> SrcColliders;

			[WriteOnly]
			public NativeSlice<BlittableCollider> DestColliders;

			public void Execute(int index)
			{
				DestColliders[index] = SrcColliders[index];
			}
		}

		private struct OffsetLogicsJob : IJobParallelFor
		{
			[ReadOnly]
			public NativeSlice<BlittableLogic> SrcLogics;

			[ReadOnly]
			public NativeSlice<BlittableJoint> SrcJoints;

			[WriteOnly]
			public NativeSlice<BlittableLogic> DestLogics;

			[WriteOnly]
			public NativeSlice<BlittableJoint> DestJoints;

			public void Execute(int index)
			{
				DestLogics[index] = SrcLogics[index];
				DestJoints[index] = SrcJoints[index];
			}
		}

		private NativeArray<BlittableSpring> _springs;

		private NativeArray<BlittableTransform> _transforms;

		private NativeArray<BlittableCollider> _colliders;

		private NativeArray<BlittableJoint> _joints;

		private NativeArray<BlittableLogic> _logics;

		private TransformAccessArray _transformAccessArray;

		private readonly LinkedList<FastSpringBoneBuffer> _buffers = new LinkedList<FastSpringBoneBuffer>();

		private FastSpringBoneBuffer[] _batchedBuffers;

		private int[] _batchedBufferLogicSizes;

		private bool _isDirty;

		public NativeArray<BlittableSpring> Springs => _springs;

		public NativeArray<BlittableJoint> Joints => _joints;

		public NativeArray<BlittableTransform> Transforms => _transforms;

		public TransformAccessArray TransformAccessArray => _transformAccessArray;

		public NativeArray<BlittableCollider> Colliders => _colliders;

		public NativeArray<BlittableLogic> Logics => _logics;

		public bool HasBuffer
		{
			get
			{
				if (_batchedBuffers != null)
				{
					return _batchedBuffers.Length != 0;
				}
				return false;
			}
		}

		public void Register(FastSpringBoneBuffer buffer)
		{
			_buffers.AddLast(buffer);
			_isDirty = true;
		}

		public void Unregister(FastSpringBoneBuffer buffer)
		{
			_buffers.Remove(buffer);
			_isDirty = true;
		}

		public JobHandle ReconstructIfDirty(JobHandle handle)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			if (_isDirty)
			{
				JobHandle result = ReconstructBuffers(handle);
				_isDirty = false;
				return result;
			}
			return handle;
		}

		private void SaveToSourceBuffer()
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			if (_batchedBuffers == null)
			{
				return;
			}
			int num = 0;
			for (int i = 0; i < _batchedBuffers.Length; i++)
			{
				int num2 = _batchedBufferLogicSizes[i];
				if (!_batchedBuffers[i].IsDisposed && num2 > 0)
				{
					NativeArray<BlittableLogic>.Copy(_logics, num, _batchedBuffers[i].Logics, 0, num2);
				}
				num += num2;
			}
		}

		private JobHandle ReconstructBuffers(JobHandle handle)
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_019d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_029e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Unknown result type (might be due to invalid IL or missing references)
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Unknown result type (might be due to invalid IL or missing references)
			//IL_031a: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_0397: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			SaveToSourceBuffer();
			DisposeAllBuffers();
			int num = 0;
			int num2 = 0;
			int num3 = 0;
			int num4 = 0;
			_batchedBuffers = _buffers.ToArray();
			_batchedBufferLogicSizes = _batchedBuffers.Select((FastSpringBoneBuffer buffer) => buffer.Logics.Length).ToArray();
			foreach (FastSpringBoneBuffer buffer in _buffers)
			{
				num += buffer.Springs.Length;
				num2 += buffer.Colliders.Length;
				num3 += buffer.Logics.Length;
				num4 += buffer.BlittableTransforms.Length;
			}
			_springs = new NativeArray<BlittableSpring>(num, (Allocator)4, (NativeArrayOptions)1);
			_joints = new NativeArray<BlittableJoint>(num3, (Allocator)4, (NativeArrayOptions)1);
			_logics = new NativeArray<BlittableLogic>(num3, (Allocator)4, (NativeArrayOptions)1);
			_colliders = new NativeArray<BlittableCollider>(num2, (Allocator)4, (NativeArrayOptions)1);
			_transforms = new NativeArray<BlittableTransform>(num4, (Allocator)4, (NativeArrayOptions)1);
			int num5 = 0;
			int num6 = 0;
			int num7 = 0;
			int num8 = 0;
			for (int i = 0; i < _batchedBuffers.Length; i++)
			{
				FastSpringBoneBuffer fastSpringBoneBuffer = _batchedBuffers[i];
				LoadTransformsJob loadTransformsJob = default(LoadTransformsJob);
				loadTransformsJob.SrcTransforms = fastSpringBoneBuffer.BlittableTransforms;
				loadTransformsJob.DestTransforms = new NativeSlice<BlittableTransform>(_transforms, num8, fastSpringBoneBuffer.BlittableTransforms.Length);
				handle = IJobParallelForExtensions.Schedule<LoadTransformsJob>(loadTransformsJob, fastSpringBoneBuffer.BlittableTransforms.Length, 1, handle);
				LoadSpringsJob loadSpringsJob = default(LoadSpringsJob);
				loadSpringsJob.SrcSprings = fastSpringBoneBuffer.Springs;
				loadSpringsJob.DestSprings = new NativeSlice<BlittableSpring>(_springs, num5, fastSpringBoneBuffer.Springs.Length);
				loadSpringsJob.CollidersOffset = num6;
				loadSpringsJob.LogicsOffset = num7;
				loadSpringsJob.TransformOffset = num8;
				handle = IJobParallelForExtensions.Schedule<LoadSpringsJob>(loadSpringsJob, fastSpringBoneBuffer.Springs.Length, 1, handle);
				LoadCollidersJob loadCollidersJob = default(LoadCollidersJob);
				loadCollidersJob.SrcColliders = fastSpringBoneBuffer.Colliders;
				loadCollidersJob.DestColliders = new NativeSlice<BlittableCollider>(_colliders, num6, fastSpringBoneBuffer.Colliders.Length);
				handle = IJobParallelForExtensions.Schedule<LoadCollidersJob>(loadCollidersJob, fastSpringBoneBuffer.Colliders.Length, 1, handle);
				OffsetLogicsJob offsetLogicsJob = default(OffsetLogicsJob);
				offsetLogicsJob.SrcLogics = NativeSlice<BlittableLogic>.op_Implicit(fastSpringBoneBuffer.Logics);
				offsetLogicsJob.SrcJoints = NativeSlice<BlittableJoint>.op_Implicit(fastSpringBoneBuffer.Joints);
				offsetLogicsJob.DestLogics = new NativeSlice<BlittableLogic>(_logics, num7, fastSpringBoneBuffer.Logics.Length);
				offsetLogicsJob.DestJoints = new NativeSlice<BlittableJoint>(_joints, num7, fastSpringBoneBuffer.Logics.Length);
				handle = IJobParallelForExtensions.Schedule<OffsetLogicsJob>(offsetLogicsJob, fastSpringBoneBuffer.Logics.Length, 1, handle);
				num5 += fastSpringBoneBuffer.Springs.Length;
				num6 += fastSpringBoneBuffer.Colliders.Length;
				num7 += fastSpringBoneBuffer.Logics.Length;
				num8 += fastSpringBoneBuffer.BlittableTransforms.Length;
			}
			JobHandle.ScheduleBatchedJobs();
			Transform[] array = (Transform[])(object)new Transform[num4];
			int num9 = 0;
			FastSpringBoneBuffer[] batchedBuffers = _batchedBuffers;
			foreach (FastSpringBoneBuffer fastSpringBoneBuffer2 in batchedBuffers)
			{
				Array.Copy(fastSpringBoneBuffer2.Transforms, 0, array, num9, fastSpringBoneBuffer2.Transforms.Length);
				num9 += fastSpringBoneBuffer2.BlittableTransforms.Length;
			}
			_transformAccessArray = new TransformAccessArray(array, -1);
			return handle;
		}

		private void DisposeAllBuffers()
		{
			if (_springs.IsCreated)
			{
				_springs.Dispose();
			}
			if (_joints.IsCreated)
			{
				_joints.Dispose();
			}
			if (_transforms.IsCreated)
			{
				_transforms.Dispose();
			}
			if (((TransformAccessArray)(ref _transformAccessArray)).isCreated)
			{
				((TransformAccessArray)(ref _transformAccessArray)).Dispose();
			}
			if (_colliders.IsCreated)
			{
				_colliders.Dispose();
			}
			if (_logics.IsCreated)
			{
				_logics.Dispose();
			}
		}

		public void Dispose()
		{
			DisposeAllBuffers();
		}
	}
	public sealed class FastSpringBoneScheduler : IDisposable
	{
		private readonly FastSpringBoneBufferCombiner _bufferCombiner;

		public FastSpringBoneScheduler(FastSpringBoneBufferCombiner bufferCombiner)
		{
			_bufferCombiner = bufferCombiner;
		}

		public JobHandle Schedule(float deltaTime)
		{
			//IL_0002: 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_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: 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)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			JobHandle val = _bufferCombiner.ReconstructIfDirty(default(JobHandle));
			if (!_bufferCombiner.HasBuffer)
			{
				return val;
			}
			PullTransformJob pullTransformJob = default(PullTransformJob);
			pullTransformJob.Transforms = _bufferCombiner.Transforms;
			val = IJobParallelForTransformExtensions.Schedule<PullTransformJob>(pullTransformJob, _bufferCombiner.TransformAccessArray, val);
			UpdateFastSpringBoneJob updateFastSpringBoneJob = default(UpdateFastSpringBoneJob);
			updateFastSpringBoneJob.Colliders = _bufferCombiner.Colliders;
			updateFastSpringBoneJob.Joints = _bufferCombiner.Joints;
			updateFastSpringBoneJob.Logics = _bufferCombiner.Logics;
			updateFastSpringBoneJob.Springs = _bufferCombiner.Springs;
			updateFastSpringBoneJob.Transforms = _bufferCombiner.Transforms;
			updateFastSpringBoneJob.DeltaTime = deltaTime;
			val = IJobParallelForExtensions.Schedule<UpdateFastSpringBoneJob>(updateFastSpringBoneJob, _bufferCombiner.Springs.Length, 1, val);
			PushTransformJob pushTransformJob = default(PushTransformJob);
			pushTransformJob.Transforms = _bufferCombiner.Transforms;
			return IJobParallelForTransformExtensions.Schedule<PushTransformJob>(pushTransformJob, _bufferCombiner.TransformAccessArray, val);
		}

		public void Dispose()
		{
			_bufferCombiner.Dispose();
		}
	}
	[DefaultExecutionOrder(11010)]
	public sealed class FastSpringBoneService : MonoBehaviour
	{
		public enum UpdateTypes
		{
			Manual,
			LateUpdate
		}

		[SerializeField]
		[Header("Runtime")]
		public UpdateTypes UpdateType = UpdateTypes.LateUpdate;

		private FastSpringBoneScheduler _fastSpringBoneScheduler;

		private static FastSpringBoneService _instance;

		public FastSpringBoneBufferCombiner BufferCombiner { get; private set; }

		public static FastSpringBoneService Instance
		{
			get
			{
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Expected O, but got Unknown
				if (Object.op_Implicit((Object)(object)_instance))
				{
					return _instance;
				}
				_instance = Object.FindObjectOfType<FastSpringBoneService>();
				if (Object.op_Implicit((Object)(object)_instance))
				{
					return _instance;
				}
				GameObject val = new GameObject("FastSpringBone Service");
				Object.DontDestroyOnLoad((Object)val);
				_instance = val.AddComponent<FastSpringBoneService>();
				return _instance;
			}
		}

		public static void Free()
		{
			Object.Destroy((Object)(object)((Component)_instance).gameObject);
			_instance = null;
		}

		private void OnEnable()
		{
			BufferCombiner = new FastSpringBoneBufferCombiner();
			_fastSpringBoneScheduler = new FastSpringBoneScheduler(BufferCombiner);
		}

		private void OnDisable()
		{
			BufferCombiner.Dispose();
			_fastSpringBoneScheduler.Dispose();
		}

		private void LateUpdate()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			if (UpdateType == UpdateTypes.LateUpdate)
			{
				JobHandle val = _fastSpringBoneScheduler.Schedule(Time.deltaTime);
				((JobHandle)(ref val)).Complete();
			}
		}

		public void ManualUpdate(float deltaTime)
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (UpdateType != 0)
			{
				throw new ArgumentException("require UpdateTypes.Manual");
			}
			JobHandle val = _fastSpringBoneScheduler.Schedule(deltaTime);
			((JobHandle)(ref val)).Complete();
		}
	}
	public struct PushTransformJob : IJobParallelForTransform
	{
		[ReadOnly]
		public NativeArray<BlittableTransform> Transforms;

		public void Execute(int index, TransformAccess transform)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			((TransformAccess)(ref transform)).rotation = Transforms[index].rotation;
		}
	}
	public struct UpdateFastSpringBoneJob : IJobParallelFor
	{
		[ReadOnly]
		public NativeArray<BlittableSpring> Springs;

		[ReadOnly]
		public NativeArray<BlittableJoint> Joints;

		[ReadOnly]
		public NativeArray<BlittableCollider> Colliders;

		[NativeDisableParallelForRestriction]
		public NativeArray<BlittableLogic> Logics;

		[NativeDisableParallelForRestriction]
		public NativeArray<BlittableTransform> Transforms;

		public float DeltaTime;

		public unsafe void Execute(int index)
		{
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01de: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Unknown result type (might be due to invalid IL or missing references)
			//IL_028e: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0361: Unknown result type (might be due to invalid IL or missing references)
			//IL_034b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Unknown result type (might be due to invalid IL or missing references)
			//IL_038a: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0376: Unknown result type (might be due to invalid IL or missing references)
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039a: Unknown result type (might be due to invalid IL or missing references)
			//IL_039f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0456: Unknown result type (might be due to invalid IL or missing references)
			//IL_045d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0464: Unknown result type (might be due to invalid IL or missing references)
			//IL_0469: Unknown result type (might be due to invalid IL or missing references)
			//IL_046e: Unknown result type (might be due to invalid IL or missing references)
			//IL_047c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0481: Unknown result type (might be due to invalid IL or missing references)
			//IL_048a: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0401: Unknown result type (might be due to invalid IL or missing references)
			//IL_0406: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0433: Unknown result type (might be due to invalid IL or missing references)
			//IL_0438: Unknown result type (might be due to invalid IL or missing references)
			//IL_0446: Unknown result type (might be due to invalid IL or missing references)
			//IL_044b: Unknown result type (might be due to invalid IL or missing references)
			BlittableSpring blittableSpring = Springs[index];
			int transformIndexOffset = blittableSpring.transformIndexOffset;
			BlittableSpan colliderSpan = blittableSpring.colliderSpan;
			BlittableSpan logicSpan = blittableSpring.logicSpan;
			for (int i = logicSpan.startIndex; i < logicSpan.startIndex + logicSpan.count; i++)
			{
				BlittableLogic blittableLogic = Logics[i];
				BlittableJoint joint = Joints[i];
				BlittableTransform blittableTransform = Transforms[blittableLogic.headTransformIndex + transformIndexOffset];
				BlittableTransform? blittableTransform2 = ((blittableLogic.parentTransformIndex >= 0) ? new BlittableTransform?(Transforms[blittableLogic.parentTransformIndex + transformIndexOffset]) : null);
				BlittableTransform? blittableTransform3 = ((blittableSpring.centerTransformIndex >= 0) ? new BlittableTransform?(Transforms[blittableSpring.centerTransformIndex + transformIndexOffset]) : null);
				BlittableTransform value;
				if (blittableTransform2.HasValue)
				{
					value = blittableTransform2.Value;
					blittableTransform.position = ((Matrix4x4)(ref value.localToWorldMatrix)).MultiplyPoint3x4(blittableTransform.localPosition);
					blittableTransform.rotation = blittableTransform2.Value.rotation * blittableTransform.localRotation;
				}
				Vector3 val;
				if (!blittableTransform3.HasValue)
				{
					val = blittableLogic.currentTail;
				}
				else
				{
					value = blittableTransform3.Value;
					val = ((Matrix4x4)(ref value.localToWorldMatrix)).MultiplyPoint3x4(blittableLogic.currentTail);
				}
				Vector3 val2 = val;
				Vector3 val3;
				if (!blittableTransform3.HasValue)
				{
					val3 = blittableLogic.prevTail;
				}
				else
				{
					value = blittableTransform3.Value;
					val3 = ((Matrix4x4)(ref value.localToWorldMatrix)).MultiplyPoint3x4(blittableLogic.prevTail);
				}
				Vector3 val4 = val3;
				Quaternion val5 = blittableTransform2?.rotation ?? Quaternion.identity;
				Vector3 val6 = (joint.gravityDir * joint.gravityPower + blittableSpring.ExternalData->ExternalForce) * DeltaTime;
				Vector3 val7 = val2 + (val2 - val4) * (1f - joint.dragForce) + val5 * blittableLogic.localRotation * blittableLogic.boneAxis * joint.stiffnessForce * DeltaTime + val6;
				Vector3 position = blittableTransform.position;
				Vector3 val8 = val7 - blittableTransform.position;
				val7 = position + ((Vector3)(ref val8)).normalized * blittableLogic.length;
				for (int j = colliderSpan.startIndex; j < colliderSpan.startIndex + colliderSpan.count; j++)
				{
					BlittableCollider collider = Colliders[j];
					BlittableTransform blittableTransform4 = Transforms[collider.transformIndex + transformIndexOffset];
					Vector3 lossyScale = ((Matrix4x4)(ref blittableTransform4.localToWorldMatrix)).lossyScale;
					float maxColliderScale = Mathf.Max(Mathf.Max(Mathf.Abs(lossyScale.x), Mathf.Abs(lossyScale.y)), Mathf.Abs(lossyScale.z));
					Vector3 worldPosition = ((Matrix4x4)(ref blittableTransform4.localToWorldMatrix)).MultiplyPoint3x4(collider.offset);
					Vector3 worldTail = ((Matrix4x4)(ref blittableTransform4.localToWorldMatrix)).MultiplyPoint3x4(collider.tail);
					switch (collider.colliderType)
					{
					case BlittableColliderType.Sphere:
						ResolveSphereCollision(joint, collider, worldPosition, blittableTransform, maxColliderScale, blittableLogic, ref val7);
						break;
					case BlittableColliderType.Capsule:
						ResolveCapsuleCollision(worldTail, worldPosition, blittableTransform, joint, collider, maxColliderScale, blittableLogic, ref val7);
						break;
					}
				}
				Vector3 prevTail;
				if (!blittableTransform3.HasValue)
				{
					prevTail = val2;
				}
				else
				{
					value = blittableTransform3.Value;
					prevTail = ((Matrix4x4)(ref value.worldToLocalMatrix)).MultiplyPoint3x4(val2);
				}
				blittableLogic.prevTail = prevTail;
				Vector3 currentTail;
				if (!blittableTransform3.HasValue)
				{
					currentTail = val7;
				}
				else
				{
					value = blittableTransform3.Value;
					currentTail = ((Matrix4x4)(ref value.worldToLocalMatrix)).MultiplyPoint3x4(val7);
				}
				blittableLogic.currentTail = currentTail;
				Quaternion val9 = val5 * blittableLogic.localRotation;
				blittableTransform.rotation = Quaternion.FromToRotation(val9 * blittableLogic.boneAxis, val7 - blittableTransform.position) * val9;
				if (blittableTransform2.HasValue)
				{
					Matrix4x4 localToWorldMatrix = blittableTransform2.Value.localToWorldMatrix;
					blittableTransform.localRotation = Normalize(Quaternion.Inverse(blittableTransform2.Value.rotation) * blittableTransform.rotation);
					blittableTransform.localToWorldMatrix = localToWorldMatrix * Matrix4x4.TRS(blittableTransform.localPosition, blittableTransform.localRotation, blittableTransform.localScale);
					blittableTransform.worldToLocalMatrix = ((Matrix4x4)(ref blittableTransform.localToWorldMatrix)).inverse;
				}
				else
				{
					blittableTransform.localToWorldMatrix = Matrix4x4.TRS(blittableTransform.position, blittableTransform.rotation, blittableTransform.localScale);
					blittableTransform.worldToLocalMatrix = ((Matrix4x4)(ref blittableTransform.localToWorldMatrix)).inverse;
					blittableTransform.localRotation = blittableTransform.rotation;
				}
				Transforms[blittableLogic.headTransformIndex + transformIndexOffset] = blittableTransform;
				Logics[i] = blittableLogic;
			}
		}

		private static Quaternion Normalize(Quaternion q)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: 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_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: 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_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			float num = (float)Math.Sqrt(Quaternion.Dot(q, q));
			if (!(num < float.Epsilon))
			{
				return new Quaternion(q.x / num, q.y / num, q.z / num, q.w / num);
			}
			return Quaternion.identity;
		}

		private static void ResolveCapsuleCollision(Vector3 worldTail, Vector3 worldPosition, BlittableTransform headTransform, BlittableJoint joint, BlittableCollider collider, float maxColliderScale, BlittableLogic logic, ref Vector3 nextTail)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: 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_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = worldTail - worldPosition;
			Vector3 val2 = headTransform.position - worldPosition;
			float num = Vector3.Dot(val, val2);
			if (num <= 0f)
			{
				ResolveSphereCollision(joint, collider, worldPosition, headTransform, maxColliderScale, logic, ref nextTail);
			}
			float num2 = num / ((Vector3)(ref val)).magnitude;
			if (num2 >= 1f)
			{
				ResolveSphereCollision(joint, collider, worldTail, headTransform, maxColliderScale, logic, ref nextTail);
			}
			Vector3 worldPosition2 = worldPosition + val * num2;
			ResolveSphereCollision(joint, collider, worldPosition2, headTransform, maxColliderScale, logic, ref nextTail);
		}

		private static void ResolveSphereCollision(BlittableJoint joint, BlittableCollider collider, Vector3 worldPosition, BlittableTransform headTransform, float maxColliderScale, BlittableLogic logic, ref Vector3 nextTail)
		{
			//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)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			float num = joint.radius + collider.radius * maxColliderScale;
			if (Vector3.SqrMagnitude(nextTail - worldPosition) <= num * num)
			{
				Vector3 val = nextTail - worldPosition;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				Vector3 val2 = worldPosition + normalized * num;
				Vector3 position = headTransform.position;
				val = val2 - headTransform.position;
				nextTail = position + ((Vector3)(ref val)).normalized * logic.length;
			}
		}
	}
}
namespace UniVRM10.FastSpringBones.Blittables
{
	[Serializable]
	public struct BlittableCollider
	{
		public BlittableColliderType colliderType;

		public Vector3 offset;

		public float radius;

		public Vector3 tail;

		public int transformIndex;
	}
	public enum BlittableColliderType
	{
		Sphere,
		Capsule
	}
	public struct BlittableExternalData
	{
		public Vector3 ExternalForce;
	}
	[Serializable]
	public struct BlittableJoint
	{
		public float stiffnessForce;

		public float gravityPower;

		public Vector3 gravityDir;

		public float dragForce;

		public float radius;
	}
	[Serializable]
	public struct BlittableLogic
	{
		public int parentTransformIndex;

		public int headTransformIndex;

		public float length;

		public Vector3 currentTail;

		public Vector3 prevTail;

		public Quaternion localRotation;

		public Vector3 boneAxis;
	}
	[Serializable]
	public struct BlittableSpan
	{
		public int startIndex;

		public int count;
	}
	[Serializable]
	public struct BlittableSpring
	{
		public BlittableSpan colliderSpan;

		public BlittableSpan logicSpan;

		public int centerTransformIndex;

		public int transformIndexOffset;

		public unsafe BlittableExternalData* ExternalData;
	}
	[Serializable]
	public struct BlittableTransform
	{
		public Vector3 position;

		public Quaternion rotation;

		public Vector3 localPosition;

		public Quaternion localRotation;

		public Vector3 localScale;

		public Matrix4x4 localToWorldMatrix;

		public Matrix4x4 worldToLocalMatrix;
	}
}

MToon.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[383]
		{
			0, 0, 0, 1, 0, 0, 0, 51, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			92, 77, 84, 111, 111, 110, 92, 77, 84, 111,
			111, 110, 92, 83, 99, 114, 105, 112, 116, 115,
			92, 69, 110, 117, 109, 115, 46, 99, 115, 0,
			0, 0, 13, 0, 0, 0, 61, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 86, 82, 77, 92,
			77, 84, 111, 111, 110, 92, 77, 84, 111, 111,
			110, 92, 83, 99, 114, 105, 112, 116, 115, 92,
			77, 84, 111, 111, 110, 68, 101, 102, 105, 110,
			105, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 51, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 86, 82, 77, 92, 77,
			84, 111, 111, 110, 92, 77, 84, 111, 111, 110,
			92, 83, 99, 114, 105, 112, 116, 115, 92, 85,
			116, 105, 108, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 57, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 86, 82, 77, 92, 77, 84,
			111, 111, 110, 92, 77, 84, 111, 111, 110, 92,
			83, 99, 114, 105, 112, 116, 115, 92, 85, 116,
			105, 108, 115, 71, 101, 116, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 57,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 92, 86,
			82, 77, 92, 77, 84, 111, 111, 110, 92, 77,
			84, 111, 111, 110, 92, 83, 99, 114, 105, 112,
			116, 115, 92, 85, 116, 105, 108, 115, 83, 101,
			116, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 58, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 86, 82, 77, 92, 77, 84,
			111, 111, 110, 92, 77, 84, 111, 111, 110, 92,
			83, 99, 114, 105, 112, 116, 115, 92, 85, 116,
			105, 108, 115, 86, 101, 114, 115, 105, 111, 110,
			46, 99, 115
		};
		result.TypesData = new byte[480]
		{
			0, 0, 0, 0, 28, 77, 84, 111, 111, 110,
			124, 82, 101, 110, 100, 101, 114, 81, 117, 101,
			117, 101, 82, 101, 113, 117, 105, 114, 101, 109,
			101, 110, 116, 0, 0, 0, 0, 21, 77, 84,
			111, 111, 110, 124, 77, 84, 111, 111, 110, 68,
			101, 102, 105, 110, 105, 116, 105, 111, 110, 0,
			0, 0, 0, 20, 77, 84, 111, 111, 110, 124,
			77, 101, 116, 97, 68, 101, 102, 105, 110, 105,
			116, 105, 111, 110, 0, 0, 0, 0, 25, 77,
			84, 111, 111, 110, 124, 82, 101, 110, 100, 101,
			114, 105, 110, 103, 68, 101, 102, 105, 110, 105,
			116, 105, 111, 110, 0, 0, 0, 0, 21, 77,
			84, 111, 111, 110, 124, 67, 111, 108, 111, 114,
			68, 101, 102, 105, 110, 105, 116, 105, 111, 110,
			0, 0, 0, 0, 24, 77, 84, 111, 111, 110,
			124, 76, 105, 103, 104, 116, 105, 110, 103, 68,
			101, 102, 105, 110, 105, 116, 105, 111, 110, 0,
			0, 0, 0, 33, 77, 84, 111, 111, 110, 124,
			76, 105, 116, 65, 110, 100, 83, 104, 97, 100,
			101, 77, 105, 120, 105, 110, 103, 68, 101, 102,
			105, 110, 105, 116, 105, 111, 110, 0, 0, 0,
			0, 33, 77, 84, 111, 111, 110, 124, 76, 105,
			103, 104, 116, 105, 110, 103, 73, 110, 102, 108,
			117, 101, 110, 99, 101, 68, 101, 102, 105, 110,
			105, 116, 105, 111, 110, 0, 0, 0, 0, 24,
			77, 84, 111, 111, 110, 124, 69, 109, 105, 115,
			115, 105, 111, 110, 68, 101, 102, 105, 110, 105,
			116, 105, 111, 110, 0, 0, 0, 0, 22, 77,
			84, 111, 111, 110, 124, 77, 97, 116, 67, 97,
			112, 68, 101, 102, 105, 110, 105, 116, 105, 111,
			110, 0, 0, 0, 0, 19, 77, 84, 111, 111,
			110, 124, 82, 105, 109, 68, 101, 102, 105, 110,
			105, 116, 105, 111, 110, 0, 0, 0, 0, 22,
			77, 84, 111, 111, 110, 124, 78, 111, 114, 109,
			97, 108, 68, 101, 102, 105, 110, 105, 116, 105,
			111, 110, 0, 0, 0, 0, 23, 77, 84, 111,
			111, 110, 124, 79, 117, 116, 108, 105, 110, 101,
			68, 101, 102, 105, 110, 105, 116, 105, 111, 110,
			0, 0, 0, 0, 31, 77, 84, 111, 111, 110,
			124, 84, 101, 120, 116, 117, 114, 101, 85, 118,
			67, 111, 111, 114, 100, 115, 68, 101, 102, 105,
			110, 105, 116, 105, 111, 110, 1, 0, 0, 0,
			11, 77, 84, 111, 111, 110, 124, 85, 116, 105,
			108, 115, 1, 0, 0, 0, 11, 77, 84, 111,
			111, 110, 124, 85, 116, 105, 108, 115, 1, 0,
			0, 0, 11, 77, 84, 111, 111, 110, 124, 85,
			116, 105, 108, 115, 1, 0, 0, 0, 11, 77,
			84, 111, 111, 110, 124, 85, 116, 105, 108, 115
		};
		result.TotalFiles = 6;
		result.TotalTypes = 18;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace MToon;

public enum DebugMode
{
	None,
	Normal,
	LitShadeRate
}
public enum OutlineColorMode
{
	FixedColor,
	MixedLighting
}
public enum OutlineWidthMode
{
	None,
	WorldCoordinates,
	ScreenCoordinates
}
public enum RenderMode
{
	Opaque,
	Cutout,
	Transparent,
	TransparentWithZWrite
}
public enum CullMode
{
	Off,
	Front,
	Back
}
public struct RenderQueueRequirement
{
	public int DefaultValue;

	public int MinValue;

	public int MaxValue;
}
public class MToonDefinition
{
	public MetaDefinition Meta;

	public RenderingDefinition Rendering;

	public ColorDefinition Color;

	public LightingDefinition Lighting;

	public EmissionDefinition Emission;

	public MatCapDefinition MatCap;

	public RimDefinition Rim;

	public OutlineDefinition Outline;

	public TextureUvCoordsDefinition TextureOption;
}
public class MetaDefinition
{
	public string Implementation;

	public int VersionNumber;
}
public class RenderingDefinition
{
	public RenderMode RenderMode;

	public CullMode CullMode;

	public int RenderQueueOffsetNumber;
}
public class ColorDefinition
{
	public Color LitColor;

	public Texture2D LitMultiplyTexture;

	public Color ShadeColor;

	public Texture2D ShadeMultiplyTexture;

	public float CutoutThresholdValue;
}
public class LightingDefinition
{
	public LitAndShadeMixingDefinition LitAndShadeMixing;

	public LightingInfluenceDefinition LightingInfluence;

	public NormalDefinition Normal;
}
public class LitAndShadeMixingDefinition
{
	public float ShadingShiftValue;

	public float ShadingToonyValue;

	public float ShadowReceiveMultiplierValue;

	public Texture2D ShadowReceiveMultiplierMultiplyTexture;

	public float LitAndShadeMixingMultiplierValue;

	public Texture2D LitAndShadeMixingMultiplierMultiplyTexture;
}
public class LightingInfluenceDefinition
{
	public float LightColorAttenuationValue;

	public float GiIntensityValue;
}
public class EmissionDefinition
{
	public Color EmissionColor;

	public Texture2D EmissionMultiplyTexture;
}
public class MatCapDefinition
{
	public Texture2D AdditiveTexture;
}
public class RimDefinition
{
	public Color RimColor;

	public Texture2D RimMultiplyTexture;

	public float RimLightingMixValue;

	public float RimFresnelPowerValue;

	public float RimLiftValue;
}
public class NormalDefinition
{
	public Texture2D NormalTexture;

	public float NormalScaleValue;
}
public class OutlineDefinition
{
	public OutlineWidthMode OutlineWidthMode;

	public float OutlineWidthValue;

	public Texture2D OutlineWidthMultiplyTexture;

	public float OutlineScaledMaxDistanceValue;

	public OutlineColorMode OutlineColorMode;

	public Color OutlineColor;

	public float OutlineLightingMixValue;
}
public class TextureUvCoordsDefinition
{
	public Vector2 MainTextureLeftBottomOriginScale;

	public Vector2 MainTextureLeftBottomOriginOffset;

	public Texture2D UvAnimationMaskTexture;

	public float UvAnimationScrollXSpeedValue;

	public float UvAnimationScrollYSpeedValue;

	public float UvAnimationRotationSpeedValue;
}
public static class Utils
{
	public const string ShaderName = "VRM/MToon";

	public const string PropVersion = "_MToonVersion";

	public const string PropDebugMode = "_DebugMode";

	public const string PropOutlineWidthMode = "_OutlineWidthMode";

	public const string PropOutlineColorMode = "_OutlineColorMode";

	public const string PropBlendMode = "_BlendMode";

	public const string PropCullMode = "_CullMode";

	public const string PropOutlineCullMode = "_OutlineCullMode";

	public const string PropCutoff = "_Cutoff";

	public const string PropColor = "_Color";

	public const string PropShadeColor = "_ShadeColor";

	public const string PropMainTex = "_MainTex";

	public const string PropShadeTexture = "_ShadeTexture";

	public const string PropBumpScale = "_BumpScale";

	public const string PropBumpMap = "_BumpMap";

	public const string PropReceiveShadowRate = "_ReceiveShadowRate";

	public const string PropReceiveShadowTexture = "_ReceiveShadowTexture";

	public const string PropShadingGradeRate = "_ShadingGradeRate";

	public const string PropShadingGradeTexture = "_ShadingGradeTexture";

	public const string PropShadeShift = "_ShadeShift";

	public const string PropShadeToony = "_ShadeToony";

	public const string PropLightColorAttenuation = "_LightColorAttenuation";

	public const string PropIndirectLightIntensity = "_IndirectLightIntensity";

	public const string PropRimColor = "_RimColor";

	public const string PropRimTexture = "_RimTexture";

	public const string PropRimLightingMix = "_RimLightingMix";

	public const string PropRimFresnelPower = "_RimFresnelPower";

	public const string PropRimLift = "_RimLift";

	public const string PropSphereAdd = "_SphereAdd";

	public const string PropEmissionColor = "_EmissionColor";

	public const string PropEmissionMap = "_EmissionMap";

	public const string PropOutlineWidthTexture = "_OutlineWidthTexture";

	public const string PropOutlineWidth = "_OutlineWidth";

	public const string PropOutlineScaledMaxDistance = "_OutlineScaledMaxDistance";

	public const string PropOutlineColor = "_OutlineColor";

	public const string PropOutlineLightingMix = "_OutlineLightingMix";

	public const string PropUvAnimMaskTexture = "_UvAnimMaskTexture";

	public const string PropUvAnimScrollX = "_UvAnimScrollX";

	public const string PropUvAnimScrollY = "_UvAnimScrollY";

	public const string PropUvAnimRotation = "_UvAnimRotation";

	public const string PropSrcBlend = "_SrcBlend";

	public const string PropDstBlend = "_DstBlend";

	public const string PropZWrite = "_ZWrite";

	public const string PropAlphaToMask = "_AlphaToMask";

	public const string KeyNormalMap = "_NORMALMAP";

	public const string KeyAlphaTestOn = "_ALPHATEST_ON";

	public const string KeyAlphaBlendOn = "_ALPHABLEND_ON";

	public const string KeyAlphaPremultiplyOn = "_ALPHAPREMULTIPLY_ON";

	public const string KeyOutlineWidthWorld = "MTOON_OUTLINE_WIDTH_WORLD";

	public const string KeyOutlineWidthScreen = "MTOON_OUTLINE_WIDTH_SCREEN";

	public const string KeyOutlineColorFixed = "MTOON_OUTLINE_COLOR_FIXED";

	public const string KeyOutlineColorMixed = "MTOON_OUTLINE_COLOR_MIXED";

	public const string KeyDebugNormal = "MTOON_DEBUG_NORMAL";

	public const string KeyDebugLitShadeRate = "MTOON_DEBUG_LITSHADERATE";

	public const string TagRenderTypeKey = "RenderType";

	public const string TagRenderTypeValueOpaque = "Opaque";

	public const string TagRenderTypeValueTransparentCutout = "TransparentCutout";

	public const string TagRenderTypeValueTransparent = "Transparent";

	public const int DisabledIntValue = 0;

	public const int EnabledIntValue = 1;

	public const string Implementation = "Santarh/MToon";

	public const int VersionNumber = 39;

	public static RenderQueueRequirement GetRenderQueueRequirement(RenderMode renderMode)
	{
		switch (renderMode)
		{
		case RenderMode.Opaque:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = -1;
			result.MinValue = -1;
			result.MaxValue = -1;
			return result;
		}
		case RenderMode.Cutout:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = 2450;
			result.MinValue = 2450;
			result.MaxValue = 2450;
			return result;
		}
		case RenderMode.Transparent:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = 3000;
			result.MinValue = 2951;
			result.MaxValue = 3000;
			return result;
		}
		case RenderMode.TransparentWithZWrite:
		{
			RenderQueueRequirement result = default(RenderQueueRequirement);
			result.DefaultValue = 2501;
			result.MinValue = 2501;
			result.MaxValue = 2550;
			return result;
		}
		default:
			throw new ArgumentOutOfRangeException("renderMode", renderMode, null);
		}
	}

	public static MToonDefinition GetMToonParametersFromMaterial(Material material)
	{
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: 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_01a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0298: Unknown result type (might be due to invalid IL or missing references)
		//IL_029d: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_02db: Unknown result type (might be due to invalid IL or missing references)
		return new MToonDefinition
		{
			Meta = new MetaDefinition
			{
				Implementation = "Santarh/MToon",
				VersionNumber = material.GetInt("_MToonVersion")
			},
			Rendering = new RenderingDefinition
			{
				RenderMode = GetBlendMode(material),
				CullMode = GetCullMode(material),
				RenderQueueOffsetNumber = GetRenderQueueOffset(material, GetRenderQueueOriginMode(material))
			},
			Color = new ColorDefinition
			{
				LitColor = GetColor(material, "_Color"),
				LitMultiplyTexture = GetTexture(material, "_MainTex"),
				ShadeColor = GetColor(material, "_ShadeColor"),
				ShadeMultiplyTexture = GetTexture(material, "_ShadeTexture"),
				CutoutThresholdValue = GetValue(material, "_Cutoff")
			},
			Lighting = new LightingDefinition
			{
				LitAndShadeMixing = new LitAndShadeMixingDefinition
				{
					ShadingShiftValue = GetValue(material, "_ShadeShift"),
					ShadingToonyValue = GetValue(material, "_ShadeToony"),
					ShadowReceiveMultiplierValue = GetValue(material, "_ReceiveShadowRate"),
					ShadowReceiveMultiplierMultiplyTexture = GetTexture(material, "_ReceiveShadowTexture"),
					LitAndShadeMixingMultiplierValue = GetValue(material, "_ShadingGradeRate"),
					LitAndShadeMixingMultiplierMultiplyTexture = GetTexture(material, "_ShadingGradeTexture")
				},
				LightingInfluence = new LightingInfluenceDefinition
				{
					LightColorAttenuationValue = GetValue(material, "_LightColorAttenuation"),
					GiIntensityValue = GetValue(material, "_IndirectLightIntensity")
				},
				Normal = new NormalDefinition
				{
					NormalTexture = GetTexture(material, "_BumpMap"),
					NormalScaleValue = GetValue(material, "_BumpScale")
				}
			},
			Emission = new EmissionDefinition
			{
				EmissionColor = GetColor(material, "_EmissionColor"),
				EmissionMultiplyTexture = GetTexture(material, "_EmissionMap")
			},
			MatCap = new MatCapDefinition
			{
				AdditiveTexture = GetTexture(material, "_SphereAdd")
			},
			Rim = new RimDefinition
			{
				RimColor = GetColor(material, "_RimColor"),
				RimMultiplyTexture = GetTexture(material, "_RimTexture"),
				RimLightingMixValue = GetValue(material, "_RimLightingMix"),
				RimFresnelPowerValue = GetValue(material, "_RimFresnelPower"),
				RimLiftValue = GetValue(material, "_RimLift")
			},
			Outline = new OutlineDefinition
			{
				OutlineWidthMode = GetOutlineWidthMode(material),
				OutlineWidthValue = GetValue(material, "_OutlineWidth"),
				OutlineWidthMultiplyTexture = GetTexture(material, "_OutlineWidthTexture"),
				OutlineScaledMaxDistanceValue = GetValue(material, "_OutlineScaledMaxDistance"),
				OutlineColorMode = GetOutlineColorMode(material),
				OutlineColor = GetColor(material, "_OutlineColor"),
				OutlineLightingMixValue = GetValue(material, "_OutlineLightingMix")
			},
			TextureOption = new TextureUvCoordsDefinition
			{
				MainTextureLeftBottomOriginScale = material.GetTextureScale("_MainTex"),
				MainTextureLeftBottomOriginOffset = material.GetTextureOffset("_MainTex"),
				UvAnimationMaskTexture = GetTexture(material, "_UvAnimMaskTexture"),
				UvAnimationScrollXSpeedValue = GetValue(material, "_UvAnimScrollX"),
				UvAnimationScrollYSpeedValue = GetValue(material, "_UvAnimScrollY"),
				UvAnimationRotationSpeedValue = GetValue(material, "_UvAnimRotation")
			}
		};
	}

	private static float GetValue(Material material, string propertyName)
	{
		return material.GetFloat(propertyName);
	}

	private static Color GetColor(Material material, string propertyName)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		return material.GetColor(propertyName);
	}

	private static Texture2D GetTexture(Material material, string propertyName)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Expected O, but got Unknown
		return (Texture2D)material.GetTexture(propertyName);
	}

	private static RenderMode GetBlendMode(Material material)
	{
		if (material.IsKeywordEnabled("_ALPHATEST_ON"))
		{
			return RenderMode.Cutout;
		}
		if (material.IsKeywordEnabled("_ALPHABLEND_ON"))
		{
			switch (material.GetInt("_ZWrite"))
			{
			case 1:
				return RenderMode.TransparentWithZWrite;
			case 0:
				return RenderMode.Transparent;
			default:
				Debug.LogWarning((object)"Invalid ZWrite Int Value.");
				return RenderMode.Transparent;
			}
		}
		return RenderMode.Opaque;
	}

	private static CullMode GetCullMode(Material material)
	{
		switch ((CullMode)material.GetInt("_CullMode"))
		{
		case CullMode.Off:
			return CullMode.Off;
		case CullMode.Front:
			return CullMode.Front;
		case CullMode.Back:
			return CullMode.Back;
		default:
			Debug.LogWarning((object)"Invalid CullMode.");
			return CullMode.Back;
		}
	}

	private static OutlineWidthMode GetOutlineWidthMode(Material material)
	{
		if (material.IsKeywordEnabled("MTOON_OUTLINE_WIDTH_WORLD"))
		{
			return OutlineWidthMode.WorldCoordinates;
		}
		if (material.IsKeywordEnabled("MTOON_OUTLINE_WIDTH_SCREEN"))
		{
			return OutlineWidthMode.ScreenCoordinates;
		}
		return OutlineWidthMode.None;
	}

	private static OutlineColorMode GetOutlineColorMode(Material material)
	{
		if (material.IsKeywordEnabled("MTOON_OUTLINE_COLOR_FIXED"))
		{
			return OutlineColorMode.FixedColor;
		}
		if (material.IsKeywordEnabled("MTOON_OUTLINE_COLOR_MIXED"))
		{
			return OutlineColorMode.MixedLighting;
		}
		return OutlineColorMode.FixedColor;
	}

	private static RenderMode GetRenderQueueOriginMode(Material material)
	{
		return GetBlendMode(material);
	}

	private static int GetRenderQueueOffset(Material material, RenderMode originMode)
	{
		int renderQueue = material.renderQueue;
		RenderQueueRequirement renderQueueRequirement = GetRenderQueueRequirement(originMode);
		if (renderQueue < renderQueueRequirement.MinValue || renderQueue > renderQueueRequirement.MaxValue)
		{
			return 0;
		}
		return renderQueue - renderQueueRequirement.DefaultValue;
	}

	public static void SetMToonParametersToMaterial(Material material, MToonDefinition parameters)
	{
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_0243: Unknown result type (might be due to invalid IL or missing references)
		//IL_0283: Unknown result type (might be due to invalid IL or missing references)
		//IL_0295: Unknown result type (might be due to invalid IL or missing references)
		MetaDefinition meta = parameters.Meta;
		SetValue(material, "_MToonVersion", meta.VersionNumber);
		RenderingDefinition rendering = parameters.Rendering;
		SetRenderMode(material, rendering.RenderMode, rendering.RenderQueueOffsetNumber, useDefaultRenderQueue: false);
		SetCullMode(material, rendering.CullMode);
		ColorDefinition color = parameters.Color;
		SetColor(material, "_Color", color.LitColor);
		SetTexture(material, "_MainTex", (Texture)(object)color.LitMultiplyTexture);
		SetColor(material, "_ShadeColor", color.ShadeColor);
		SetTexture(material, "_ShadeTexture", (Texture)(object)color.ShadeMultiplyTexture);
		SetValue(material, "_Cutoff", color.CutoutThresholdValue);
		LightingDefinition lighting = parameters.Lighting;
		LitAndShadeMixingDefinition litAndShadeMixing = lighting.LitAndShadeMixing;
		SetValue(material, "_ShadeShift", litAndShadeMixing.ShadingShiftValue);
		SetValue(material, "_ShadeToony", litAndShadeMixing.ShadingToonyValue);
		SetValue(material, "_ReceiveShadowRate", litAndShadeMixing.ShadowReceiveMultiplierValue);
		SetTexture(material, "_ReceiveShadowTexture", (Texture)(object)litAndShadeMixing.ShadowReceiveMultiplierMultiplyTexture);
		SetValue(material, "_ShadingGradeRate", litAndShadeMixing.LitAndShadeMixingMultiplierValue);
		SetTexture(material, "_ShadingGradeTexture", (Texture)(object)litAndShadeMixing.LitAndShadeMixingMultiplierMultiplyTexture);
		LightingInfluenceDefinition lightingInfluence = lighting.LightingInfluence;
		SetValue(material, "_LightColorAttenuation", lightingInfluence.LightColorAttenuationValue);
		SetValue(material, "_IndirectLightIntensity", lightingInfluence.GiIntensityValue);
		NormalDefinition normal = lighting.Normal;
		SetNormalMapping(material, (Texture)(object)normal.NormalTexture, normal.NormalScaleValue);
		EmissionDefinition emission = parameters.Emission;
		SetColor(material, "_EmissionColor", emission.EmissionColor);
		SetTexture(material, "_EmissionMap", (Texture)(object)emission.EmissionMultiplyTexture);
		MatCapDefinition matCap = parameters.MatCap;
		SetTexture(material, "_SphereAdd", (Texture)(object)matCap.AdditiveTexture);
		RimDefinition rim = parameters.Rim;
		SetColor(material, "_RimColor", rim.RimColor);
		SetTexture(material, "_RimTexture", (Texture)(object)rim.RimMultiplyTexture);
		SetValue(material, "_RimLightingMix", rim.RimLightingMixValue);
		SetValue(material, "_RimFresnelPower", rim.RimFresnelPowerValue);
		SetValue(material, "_RimLift", rim.RimLiftValue);
		OutlineDefinition outline = parameters.Outline;
		SetValue(material, "_OutlineWidth", outline.OutlineWidthValue);
		SetTexture(material, "_OutlineWidthTexture", (Texture)(object)outline.OutlineWidthMultiplyTexture);
		SetValue(material, "_OutlineScaledMaxDistance", outline.OutlineScaledMaxDistanceValue);
		SetColor(material, "_OutlineColor", outline.OutlineColor);
		SetValue(material, "_OutlineLightingMix", outline.OutlineLightingMixValue);
		SetOutlineMode(material, outline.OutlineWidthMode, outline.OutlineColorMode);
		TextureUvCoordsDefinition textureOption = parameters.TextureOption;
		material.SetTextureScale("_MainTex", textureOption.MainTextureLeftBottomOriginScale);
		material.SetTextureOffset("_MainTex", textureOption.MainTextureLeftBottomOriginOffset);
		material.SetTexture("_UvAnimMaskTexture", (Texture)(object)textureOption.UvAnimationMaskTexture);
		material.SetFloat("_UvAnimScrollX", textureOption.UvAnimationScrollXSpeedValue);
		material.SetFloat("_UvAnimScrollY", textureOption.UvAnimationScrollYSpeedValue);
		material.SetFloat("_UvAnimRotation", textureOption.UvAnimationRotationSpeedValue);
		ValidateProperties(material);
	}

	public static void ValidateProperties(Material material, bool isBlendModeChangedByUser = false)
	{
		SetRenderMode(material, (RenderMode)material.GetFloat("_BlendMode"), material.renderQueue - GetRenderQueueRequirement((RenderMode)material.GetFloat("_BlendMode")).DefaultValue, isBlendModeChangedByUser);
		SetNormalMapping(material, material.GetTexture("_BumpMap"), material.GetFloat("_BumpScale"));
		SetOutlineMode(material, (OutlineWidthMode)material.GetFloat("_OutlineWidthMode"), (OutlineColorMode)material.GetFloat("_OutlineColorMode"));
		SetDebugMode(material, (DebugMode)material.GetFloat("_DebugMode"));
		SetCullMode(material, (CullMode)material.GetFloat("_CullMode"));
		Texture texture = material.GetTexture("_MainTex");
		Texture texture2 = material.GetTexture("_ShadeTexture");
		if ((Object)(object)texture != (Object)null && (Object)(object)texture2 == (Object)null)
		{
			material.SetTexture("_ShadeTexture", texture);
		}
	}

	private static void SetDebugMode(Material material, DebugMode debugMode)
	{
		SetValue(material, "_DebugMode", (float)debugMode);
		switch (debugMode)
		{
		case DebugMode.None:
			SetKeyword(material, "MTOON_DEBUG_NORMAL", required: false);
			SetKeyword(material, "MTOON_DEBUG_LITSHADERATE", required: false);
			break;
		case DebugMode.Normal:
			SetKeyword(material, "MTOON_DEBUG_NORMAL", required: true);
			SetKeyword(material, "MTOON_DEBUG_LITSHADERATE", required: false);
			break;
		case DebugMode.LitShadeRate:
			SetKeyword(material, "MTOON_DEBUG_NORMAL", required: false);
			SetKeyword(material, "MTOON_DEBUG_LITSHADERATE", required: true);
			break;
		}
	}

	private static void SetRenderMode(Material material, RenderMode renderMode, int renderQueueOffset, bool useDefaultRenderQueue)
	{
		SetValue(material, "_BlendMode", (float)renderMode);
		switch (renderMode)
		{
		case RenderMode.Opaque:
			material.SetOverrideTag("RenderType", "Opaque");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			material.SetInt("_AlphaToMask", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		case RenderMode.Cutout:
			material.SetOverrideTag("RenderType", "TransparentCutout");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			material.SetInt("_AlphaToMask", 1);
			SetKeyword(material, "_ALPHATEST_ON", required: true);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		case RenderMode.Transparent:
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt("_SrcBlend", 5);
			material.SetInt("_DstBlend", 10);
			material.SetInt("_ZWrite", 0);
			material.SetInt("_AlphaToMask", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: true);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		case RenderMode.TransparentWithZWrite:
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt("_SrcBlend", 5);
			material.SetInt("_DstBlend", 10);
			material.SetInt("_ZWrite", 1);
			material.SetInt("_AlphaToMask", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: true);
			SetKeyword(material, "_ALPHAPREMULTIPLY_ON", required: false);
			break;
		}
		if (useDefaultRenderQueue)
		{
			material.renderQueue = GetRenderQueueRequirement(renderMode).DefaultValue;
			return;
		}
		RenderQueueRequirement renderQueueRequirement = GetRenderQueueRequirement(renderMode);
		material.renderQueue = Mathf.Clamp(renderQueueRequirement.DefaultValue + renderQueueOffset, renderQueueRequirement.MinValue, renderQueueRequirement.MaxValue);
	}

	private static void SetOutlineMode(Material material, OutlineWidthMode outlineWidthMode, OutlineColorMode outlineColorMode)
	{
		SetValue(material, "_OutlineWidthMode", (float)outlineWidthMode);
		SetValue(material, "_OutlineColorMode", (float)outlineColorMode);
		bool required = outlineColorMode == OutlineColorMode.FixedColor;
		bool required2 = outlineColorMode == OutlineColorMode.MixedLighting;
		switch (outlineWidthMode)
		{
		case OutlineWidthMode.None:
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_WORLD", required: false);
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_SCREEN", required: false);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_FIXED", required: false);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_MIXED", required: false);
			break;
		case OutlineWidthMode.WorldCoordinates:
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_WORLD", required: true);
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_SCREEN", required: false);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_FIXED", required);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_MIXED", required2);
			break;
		case OutlineWidthMode.ScreenCoordinates:
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_WORLD", required: false);
			SetKeyword(material, "MTOON_OUTLINE_WIDTH_SCREEN", required: true);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_FIXED", required);
			SetKeyword(material, "MTOON_OUTLINE_COLOR_MIXED", required2);
			break;
		}
	}

	private static void SetNormalMapping(Material material, Texture bumpMap, float bumpScale)
	{
		SetTexture(material, "_BumpMap", bumpMap);
		SetValue(material, "_BumpScale", bumpScale);
		SetKeyword(material, "_NORMALMAP", (Object)(object)bumpMap != (Object)null);
	}

	private static void SetCullMode(Material material, CullMode cullMode)
	{
		SetValue(material, "_CullMode", (float)cullMode);
		switch (cullMode)
		{
		case CullMode.Back:
			material.SetInt("_CullMode", 2);
			material.SetInt("_OutlineCullMode", 1);
			break;
		case CullMode.Front:
			material.SetInt("_CullMode", 1);
			material.SetInt("_OutlineCullMode", 2);
			break;
		case CullMode.Off:
			material.SetInt("_CullMode", 0);
			material.SetInt("_OutlineCullMode", 1);
			break;
		}
	}

	private static void SetValue(Material material, string propertyName, float val)
	{
		material.SetFloat(propertyName, val);
	}

	private static void SetColor(Material material, string propertyName, Color color)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		material.SetColor(propertyName, color);
	}

	private static void SetTexture(Material material, string propertyName, Texture texture)
	{
		material.SetTexture(propertyName, texture);
	}

	private static void SetKeyword(Material mat, string keyword, bool required)
	{
		if (required)
		{
			mat.EnableKeyword(keyword);
		}
		else
		{
			mat.DisableKeyword(keyword);
		}
	}
}

Newtonsoft.Json.dll

Decompiled 3 months ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Dynamic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Numerics;
using System.Reflection;
using System.Reflection.Emit;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json.Bson;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Linq.JsonPath;
using Newtonsoft.Json.Schema;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Utilities;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AllowPartiallyTrustedCallers]
[assembly: InternalsVisibleTo("Newtonsoft.Json.Schema, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f561df277c6c0b497d629032b410cdcf286e537c054724f7ffa0164345f62b3e642029d7a80cc351918955328c4adc8a048823ef90b0cf38ea7db0d729caf2b633c3babe08b0310198c1081995c19029bc675193744eab9d7345b8a67258ec17d112cebdbbb2a281487dceeafb9d83aa930f32103fbe1d2911425bc5744002c7")]
[assembly: InternalsVisibleTo("Newtonsoft.Json.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f561df277c6c0b497d629032b410cdcf286e537c054724f7ffa0164345f62b3e642029d7a80cc351918955328c4adc8a048823ef90b0cf38ea7db0d729caf2b633c3babe08b0310198c1081995c19029bc675193744eab9d7345b8a67258ec17d112cebdbbb2a281487dceeafb9d83aa930f32103fbe1d2911425bc5744002c7")]
[assembly: InternalsVisibleTo("Newtonsoft.Json.Dynamic, PublicKey=0024000004800000940000000602000000240000525341310004000001000100cbd8d53b9d7de30f1f1278f636ec462cf9c254991291e66ebb157a885638a517887633b898ccbcf0d5c5ff7be85a6abe9e765d0ac7cd33c68dac67e7e64530e8222101109f154ab14a941c490ac155cd1d4fcba0fabb49016b4ef28593b015cab5937da31172f03f67d09edda404b88a60023f062ae71d0b2e4438b74cc11dc9")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9ca358aa-317b-4925-8ada-4a29e943a363")]
[assembly: CLSCompliant(true)]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
[assembly: AssemblyCompany("Newtonsoft")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright © James Newton-King 2008")]
[assembly: AssemblyDescription("Json.NET is a popular high-performance JSON framework for .NET")]
[assembly: AssemblyFileVersion("13.0.3.27908")]
[assembly: AssemblyInformationalVersion("13.0.3+0a2e291c0d9c0c7675d445703e51750363a549ef")]
[assembly: AssemblyProduct("Json.NET")]
[assembly: AssemblyTitle("Json.NET .NET 4.5")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/JamesNK/Newtonsoft.Json")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: AssemblyVersion("13.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class IsReadOnlyAttribute : Attribute
	{
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true)]
	internal sealed class NotNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)]
	internal sealed class NotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public NotNullWhenAttribute(bool returnValue)
		{
			ReturnValue = returnValue;
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)]
	internal sealed class MaybeNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)]
	internal sealed class AllowNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	internal class DoesNotReturnIfAttribute : Attribute
	{
		public bool ParameterValue { get; }

		public DoesNotReturnIfAttribute(bool parameterValue)
		{
			ParameterValue = parameterValue;
		}
	}
}
namespace Newtonsoft.Json
{
	public enum ConstructorHandling
	{
		Default,
		AllowNonPublicDefaultConstructor
	}
	public enum DateFormatHandling
	{
		IsoDateFormat,
		MicrosoftDateFormat
	}
	public enum DateParseHandling
	{
		None,
		DateTime,
		DateTimeOffset
	}
	public enum DateTimeZoneHandling
	{
		Local,
		Utc,
		Unspecified,
		RoundtripKind
	}
	public class DefaultJsonNameTable : JsonNameTable
	{
		private class Entry
		{
			internal readonly string Value;

			internal readonly int HashCode;

			internal Entry Next;

			internal Entry(string value, int hashCode, Entry next)
			{
				Value = value;
				HashCode = hashCode;
				Next = next;
			}
		}

		private static readonly int HashCodeRandomizer;

		private int _count;

		private Entry[] _entries;

		private int _mask = 31;

		static DefaultJsonNameTable()
		{
			HashCodeRandomizer = Environment.TickCount;
		}

		public DefaultJsonNameTable()
		{
			_entries = new Entry[_mask + 1];
		}

		public override string? Get(char[] key, int start, int length)
		{
			if (length == 0)
			{
				return string.Empty;
			}
			int num = length + HashCodeRandomizer;
			num += (num << 7) ^ key[start];
			int num2 = start + length;
			for (int i = start + 1; i < num2; i++)
			{
				num += (num << 7) ^ key[i];
			}
			num -= num >> 17;
			num -= num >> 11;
			num -= num >> 5;
			int num3 = Volatile.Read(ref _mask);
			int num4 = num & num3;
			for (Entry entry = _entries[num4]; entry != null; entry = entry.Next)
			{
				if (entry.HashCode == num && TextEquals(entry.Value, key, start, length))
				{
					return entry.Value;
				}
			}
			return null;
		}

		public string Add(string key)
		{
			if (key == null)
			{
				throw new ArgumentNullException("key");
			}
			int length = key.Length;
			if (length == 0)
			{
				return string.Empty;
			}
			int num = length + HashCodeRandomizer;
			for (int i = 0; i < key.Length; i++)
			{
				num += (num << 7) ^ key[i];
			}
			num -= num >> 17;
			num -= num >> 11;
			num -= num >> 5;
			for (Entry entry = _entries[num & _mask]; entry != null; entry = entry.Next)
			{
				if (entry.HashCode == num && entry.Value.Equals(key, StringComparison.Ordinal))
				{
					return entry.Value;
				}
			}
			return AddEntry(key, num);
		}

		private string AddEntry(string str, int hashCode)
		{
			int num = hashCode & _mask;
			Entry entry = new Entry(str, hashCode, _entries[num]);
			_entries[num] = entry;
			if (_count++ == _mask)
			{
				Grow();
			}
			return entry.Value;
		}

		private void Grow()
		{
			Entry[] entries = _entries;
			int num = _mask * 2 + 1;
			Entry[] array = new Entry[num + 1];
			for (int i = 0; i < entries.Length; i++)
			{
				Entry entry = entries[i];
				while (entry != null)
				{
					int num2 = entry.HashCode & num;
					Entry next = entry.Next;
					entry.Next = array[num2];
					array[num2] = entry;
					entry = next;
				}
			}
			_entries = array;
			Volatile.Write(ref _mask, num);
		}

		private static bool TextEquals(string str1, char[] str2, int str2Start, int str2Length)
		{
			if (str1.Length != str2Length)
			{
				return false;
			}
			for (int i = 0; i < str1.Length; i++)
			{
				if (str1[i] != str2[str2Start + i])
				{
					return false;
				}
			}
			return true;
		}
	}
	[Flags]
	public enum DefaultValueHandling
	{
		Include = 0,
		Ignore = 1,
		Populate = 2,
		IgnoreAndPopulate = 3
	}
	public enum FloatFormatHandling
	{
		String,
		Symbol,
		DefaultValue
	}
	public enum FloatParseHandling
	{
		Double,
		Decimal
	}
	public enum Formatting
	{
		None,
		Indented
	}
	public interface IArrayPool<T>
	{
		T[] Rent(int minimumLength);

		void Return(T[]? array);
	}
	public interface IJsonLineInfo
	{
		int LineNumber { get; }

		int LinePosition { get; }

		bool HasLineInfo();
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false)]
	public sealed class JsonArrayAttribute : JsonContainerAttribute
	{
		private bool _allowNullItems;

		public bool AllowNullItems
		{
			get
			{
				return _allowNullItems;
			}
			set
			{
				_allowNullItems = value;
			}
		}

		public JsonArrayAttribute()
		{
		}

		public JsonArrayAttribute(bool allowNullItems)
		{
			_allowNullItems = allowNullItems;
		}

		public JsonArrayAttribute(string id)
			: base(id)
		{
		}
	}
	[AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false)]
	public sealed class JsonConstructorAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false)]
	public abstract class JsonContainerAttribute : Attribute
	{
		internal bool? _isReference;

		internal bool? _itemIsReference;

		internal ReferenceLoopHandling? _itemReferenceLoopHandling;

		internal TypeNameHandling? _itemTypeNameHandling;

		private Type? _namingStrategyType;

		private object[]? _namingStrategyParameters;

		public string? Id { get; set; }

		public string? Title { get; set; }

		public string? Description { get; set; }

		public Type? ItemConverterType { get; set; }

		public object[]? ItemConverterParameters { get; set; }

		public Type? NamingStrategyType
		{
			get
			{
				return _namingStrategyType;
			}
			set
			{
				_namingStrategyType = value;
				NamingStrategyInstance = null;
			}
		}

		public object[]? NamingStrategyParameters
		{
			get
			{
				return _namingStrategyParameters;
			}
			set
			{
				_namingStrategyParameters = value;
				NamingStrategyInstance = null;
			}
		}

		internal NamingStrategy? NamingStrategyInstance { get; set; }

		public bool IsReference
		{
			get
			{
				return _isReference.GetValueOrDefault();
			}
			set
			{
				_isReference = value;
			}
		}

		public bool ItemIsReference
		{
			get
			{
				return _itemIsReference.GetValueOrDefault();
			}
			set
			{
				_itemIsReference = value;
			}
		}

		public ReferenceLoopHandling ItemReferenceLoopHandling
		{
			get
			{
				return _itemReferenceLoopHandling.GetValueOrDefault();
			}
			set
			{
				_itemReferenceLoopHandling = value;
			}
		}

		public TypeNameHandling ItemTypeNameHandling
		{
			get
			{
				return _itemTypeNameHandling.GetValueOrDefault();
			}
			set
			{
				_itemTypeNameHandling = value;
			}
		}

		protected JsonContainerAttribute()
		{
		}

		protected JsonContainerAttribute(string id)
		{
			Id = id;
		}
	}
	public static class JsonConvert
	{
		public static readonly string True = "true";

		public static readonly string False = "false";

		public static readonly string Null = "null";

		public static readonly string Undefined = "undefined";

		public static readonly string PositiveInfinity = "Infinity";

		public static readonly string NegativeInfinity = "-Infinity";

		public static readonly string NaN = "NaN";

		public static Func<JsonSerializerSettings>? DefaultSettings { get; set; }

		public static string ToString(DateTime value)
		{
			return ToString(value, DateFormatHandling.IsoDateFormat, DateTimeZoneHandling.RoundtripKind);
		}

		public static string ToString(DateTime value, DateFormatHandling format, DateTimeZoneHandling timeZoneHandling)
		{
			DateTime value2 = DateTimeUtils.EnsureDateTime(value, timeZoneHandling);
			using StringWriter stringWriter = StringUtils.CreateStringWriter(64);
			stringWriter.Write('"');
			DateTimeUtils.WriteDateTimeString(stringWriter, value2, format, null, CultureInfo.InvariantCulture);
			stringWriter.Write('"');
			return stringWriter.ToString();
		}

		public static string ToString(DateTimeOffset value)
		{
			return ToString(value, DateFormatHandling.IsoDateFormat);
		}

		public static string ToString(DateTimeOffset value, DateFormatHandling format)
		{
			using StringWriter stringWriter = StringUtils.CreateStringWriter(64);
			stringWriter.Write('"');
			DateTimeUtils.WriteDateTimeOffsetString(stringWriter, value, format, null, CultureInfo.InvariantCulture);
			stringWriter.Write('"');
			return stringWriter.ToString();
		}

		public static string ToString(bool value)
		{
			if (!value)
			{
				return False;
			}
			return True;
		}

		public static string ToString(char value)
		{
			return ToString(char.ToString(value));
		}

		public static string ToString(Enum value)
		{
			return value.ToString("D");
		}

		public static string ToString(int value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		public static string ToString(short value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		[CLSCompliant(false)]
		public static string ToString(ushort value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		[CLSCompliant(false)]
		public static string ToString(uint value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		public static string ToString(long value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		private static string ToStringInternal(BigInteger value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		[CLSCompliant(false)]
		public static string ToString(ulong value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		public static string ToString(float value)
		{
			return EnsureDecimalPlace(value, value.ToString("R", CultureInfo.InvariantCulture));
		}

		internal static string ToString(float value, FloatFormatHandling floatFormatHandling, char quoteChar, bool nullable)
		{
			return EnsureFloatFormat(value, EnsureDecimalPlace(value, value.ToString("R", CultureInfo.InvariantCulture)), floatFormatHandling, quoteChar, nullable);
		}

		private static string EnsureFloatFormat(double value, string text, FloatFormatHandling floatFormatHandling, char quoteChar, bool nullable)
		{
			if (floatFormatHandling == FloatFormatHandling.Symbol || (!double.IsInfinity(value) && !double.IsNaN(value)))
			{
				return text;
			}
			if (floatFormatHandling == FloatFormatHandling.DefaultValue)
			{
				if (nullable)
				{
					return Null;
				}
				return "0.0";
			}
			return quoteChar + text + quoteChar;
		}

		public static string ToString(double value)
		{
			return EnsureDecimalPlace(value, value.ToString("R", CultureInfo.InvariantCulture));
		}

		internal static string ToString(double value, FloatFormatHandling floatFormatHandling, char quoteChar, bool nullable)
		{
			return EnsureFloatFormat(value, EnsureDecimalPlace(value, value.ToString("R", CultureInfo.InvariantCulture)), floatFormatHandling, quoteChar, nullable);
		}

		private static string EnsureDecimalPlace(double value, string text)
		{
			if (double.IsNaN(value) || double.IsInfinity(value) || StringUtils.IndexOf(text, '.') != -1 || StringUtils.IndexOf(text, 'E') != -1 || StringUtils.IndexOf(text, 'e') != -1)
			{
				return text;
			}
			return text + ".0";
		}

		private static string EnsureDecimalPlace(string text)
		{
			if (StringUtils.IndexOf(text, '.') != -1)
			{
				return text;
			}
			return text + ".0";
		}

		public static string ToString(byte value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		[CLSCompliant(false)]
		public static string ToString(sbyte value)
		{
			return value.ToString(null, CultureInfo.InvariantCulture);
		}

		public static string ToString(decimal value)
		{
			return EnsureDecimalPlace(value.ToString(null, CultureInfo.InvariantCulture));
		}

		public static string ToString(Guid value)
		{
			return ToString(value, '"');
		}

		internal static string ToString(Guid value, char quoteChar)
		{
			string text = value.ToString("D", CultureInfo.InvariantCulture);
			string text2 = quoteChar.ToString(CultureInfo.InvariantCulture);
			return text2 + text + text2;
		}

		public static string ToString(TimeSpan value)
		{
			return ToString(value, '"');
		}

		internal static string ToString(TimeSpan value, char quoteChar)
		{
			return ToString(value.ToString(), quoteChar);
		}

		public static string ToString(Uri? value)
		{
			if (value == null)
			{
				return Null;
			}
			return ToString(value, '"');
		}

		internal static string ToString(Uri value, char quoteChar)
		{
			return ToString(value.OriginalString, quoteChar);
		}

		public static string ToString(string? value)
		{
			return ToString(value, '"');
		}

		public static string ToString(string? value, char delimiter)
		{
			return ToString(value, delimiter, StringEscapeHandling.Default);
		}

		public static string ToString(string? value, char delimiter, StringEscapeHandling stringEscapeHandling)
		{
			if (delimiter != '"' && delimiter != '\'')
			{
				throw new ArgumentException("Delimiter must be a single or double quote.", "delimiter");
			}
			return JavaScriptUtils.ToEscapedJavaScriptString(value, delimiter, appendDelimiters: true, stringEscapeHandling);
		}

		public static string ToString(object? value)
		{
			if (value == null)
			{
				return Null;
			}
			return ConvertUtils.GetTypeCode(value.GetType()) switch
			{
				PrimitiveTypeCode.String => ToString((string)value), 
				PrimitiveTypeCode.Char => ToString((char)value), 
				PrimitiveTypeCode.Boolean => ToString((bool)value), 
				PrimitiveTypeCode.SByte => ToString((sbyte)value), 
				PrimitiveTypeCode.Int16 => ToString((short)value), 
				PrimitiveTypeCode.UInt16 => ToString((ushort)value), 
				PrimitiveTypeCode.Int32 => ToString((int)value), 
				PrimitiveTypeCode.Byte => ToString((byte)value), 
				PrimitiveTypeCode.UInt32 => ToString((uint)value), 
				PrimitiveTypeCode.Int64 => ToString((long)value), 
				PrimitiveTypeCode.UInt64 => ToString((ulong)value), 
				PrimitiveTypeCode.Single => ToString((float)value), 
				PrimitiveTypeCode.Double => ToString((double)value), 
				PrimitiveTypeCode.DateTime => ToString((DateTime)value), 
				PrimitiveTypeCode.Decimal => ToString((decimal)value), 
				PrimitiveTypeCode.DBNull => Null, 
				PrimitiveTypeCode.DateTimeOffset => ToString((DateTimeOffset)value), 
				PrimitiveTypeCode.Guid => ToString((Guid)value), 
				PrimitiveTypeCode.Uri => ToString((Uri)value), 
				PrimitiveTypeCode.TimeSpan => ToString((TimeSpan)value), 
				PrimitiveTypeCode.BigInteger => ToStringInternal((BigInteger)value), 
				_ => throw new ArgumentException("Unsupported type: {0}. Use the JsonSerializer class to get the object's JSON representation.".FormatWith(CultureInfo.InvariantCulture, value.GetType())), 
			};
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value)
		{
			return SerializeObject(value, (Type?)null, (JsonSerializerSettings?)null);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, Formatting formatting)
		{
			return SerializeObject(value, formatting, (JsonSerializerSettings?)null);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, params JsonConverter[] converters)
		{
			JsonSerializerSettings settings = ((converters != null && converters.Length != 0) ? new JsonSerializerSettings
			{
				Converters = converters
			} : null);
			return SerializeObject(value, null, settings);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, Formatting formatting, params JsonConverter[] converters)
		{
			JsonSerializerSettings settings = ((converters != null && converters.Length != 0) ? new JsonSerializerSettings
			{
				Converters = converters
			} : null);
			return SerializeObject(value, null, formatting, settings);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, JsonSerializerSettings? settings)
		{
			return SerializeObject(value, null, settings);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, Type? type, JsonSerializerSettings? settings)
		{
			JsonSerializer jsonSerializer = JsonSerializer.CreateDefault(settings);
			return SerializeObjectInternal(value, type, jsonSerializer);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, Formatting formatting, JsonSerializerSettings? settings)
		{
			return SerializeObject(value, null, formatting, settings);
		}

		[DebuggerStepThrough]
		public static string SerializeObject(object? value, Type? type, Formatting formatting, JsonSerializerSettings? settings)
		{
			JsonSerializer jsonSerializer = JsonSerializer.CreateDefault(settings);
			jsonSerializer.Formatting = formatting;
			return SerializeObjectInternal(value, type, jsonSerializer);
		}

		private static string SerializeObjectInternal(object? value, Type? type, JsonSerializer jsonSerializer)
		{
			StringWriter stringWriter = new StringWriter(new StringBuilder(256), CultureInfo.InvariantCulture);
			using (JsonTextWriter jsonTextWriter = new JsonTextWriter(stringWriter))
			{
				jsonTextWriter.Formatting = jsonSerializer.Formatting;
				jsonSerializer.Serialize(jsonTextWriter, value, type);
			}
			return stringWriter.ToString();
		}

		[DebuggerStepThrough]
		public static object? DeserializeObject(string value)
		{
			return DeserializeObject(value, (Type?)null, (JsonSerializerSettings?)null);
		}

		[DebuggerStepThrough]
		public static object? DeserializeObject(string value, JsonSerializerSettings settings)
		{
			return DeserializeObject(value, null, settings);
		}

		[DebuggerStepThrough]
		public static object? DeserializeObject(string value, Type type)
		{
			return DeserializeObject(value, type, (JsonSerializerSettings?)null);
		}

		[DebuggerStepThrough]
		public static T? DeserializeObject<T>(string value)
		{
			return JsonConvert.DeserializeObject<T>(value, (JsonSerializerSettings?)null);
		}

		[DebuggerStepThrough]
		public static T? DeserializeAnonymousType<T>(string value, T anonymousTypeObject)
		{
			return DeserializeObject<T>(value);
		}

		[DebuggerStepThrough]
		public static T? DeserializeAnonymousType<T>(string value, T anonymousTypeObject, JsonSerializerSettings settings)
		{
			return DeserializeObject<T>(value, settings);
		}

		[DebuggerStepThrough]
		public static T? DeserializeObject<T>(string value, params JsonConverter[] converters)
		{
			return (T)DeserializeObject(value, typeof(T), converters);
		}

		[DebuggerStepThrough]
		public static T? DeserializeObject<T>(string value, JsonSerializerSettings? settings)
		{
			return (T)DeserializeObject(value, typeof(T), settings);
		}

		[DebuggerStepThrough]
		public static object? DeserializeObject(string value, Type type, params JsonConverter[] converters)
		{
			JsonSerializerSettings settings = ((converters != null && converters.Length != 0) ? new JsonSerializerSettings
			{
				Converters = converters
			} : null);
			return DeserializeObject(value, type, settings);
		}

		public static object? DeserializeObject(string value, Type? type, JsonSerializerSettings? settings)
		{
			ValidationUtils.ArgumentNotNull(value, "value");
			JsonSerializer jsonSerializer = JsonSerializer.CreateDefault(settings);
			if (!jsonSerializer.IsCheckAdditionalContentSet())
			{
				jsonSerializer.CheckAdditionalContent = true;
			}
			using JsonTextReader reader = new JsonTextReader(new StringReader(value));
			return jsonSerializer.Deserialize(reader, type);
		}

		[DebuggerStepThrough]
		public static void PopulateObject(string value, object target)
		{
			PopulateObject(value, target, null);
		}

		public static void PopulateObject(string value, object target, JsonSerializerSettings? settings)
		{
			JsonSerializer jsonSerializer = JsonSerializer.CreateDefault(settings);
			using JsonReader jsonReader = new JsonTextReader(new StringReader(value));
			jsonSerializer.Populate(jsonReader, target);
			if (settings == null || !settings.CheckAdditionalContent)
			{
				return;
			}
			while (jsonReader.Read())
			{
				if (jsonReader.TokenType != JsonToken.Comment)
				{
					throw JsonSerializationException.Create(jsonReader, "Additional text found in JSON string after finishing deserializing object.");
				}
			}
		}

		public static string SerializeXmlNode(XmlNode? node)
		{
			return SerializeXmlNode(node, Formatting.None);
		}

		public static string SerializeXmlNode(XmlNode? node, Formatting formatting)
		{
			XmlNodeConverter xmlNodeConverter = new XmlNodeConverter();
			return SerializeObject(node, formatting, xmlNodeConverter);
		}

		public static string SerializeXmlNode(XmlNode? node, Formatting formatting, bool omitRootObject)
		{
			XmlNodeConverter xmlNodeConverter = new XmlNodeConverter
			{
				OmitRootObject = omitRootObject
			};
			return SerializeObject(node, formatting, xmlNodeConverter);
		}

		public static XmlDocument? DeserializeXmlNode(string value)
		{
			return DeserializeXmlNode(value, null);
		}

		public static XmlDocument? DeserializeXmlNode(string value, string? deserializeRootElementName)
		{
			return DeserializeXmlNode(value, deserializeRootElementName, writeArrayAttribute: false);
		}

		public static XmlDocument? DeserializeXmlNode(string value, string? deserializeRootElementName, bool writeArrayAttribute)
		{
			return DeserializeXmlNode(value, deserializeRootElementName, writeArrayAttribute, encodeSpecialCharacters: false);
		}

		public static XmlDocument? DeserializeXmlNode(string value, string? deserializeRootElementName, bool writeArrayAttribute, bool encodeSpecialCharacters)
		{
			XmlNodeConverter xmlNodeConverter = new XmlNodeConverter();
			xmlNodeConverter.DeserializeRootElementName = deserializeRootElementName;
			xmlNodeConverter.WriteArrayAttribute = writeArrayAttribute;
			xmlNodeConverter.EncodeSpecialCharacters = encodeSpecialCharacters;
			return (XmlDocument)DeserializeObject(value, typeof(XmlDocument), xmlNodeConverter);
		}

		public static string SerializeXNode(XObject? node)
		{
			return SerializeXNode(node, Formatting.None);
		}

		public static string SerializeXNode(XObject? node, Formatting formatting)
		{
			return SerializeXNode(node, formatting, omitRootObject: false);
		}

		public static string SerializeXNode(XObject? node, Formatting formatting, bool omitRootObject)
		{
			XmlNodeConverter xmlNodeConverter = new XmlNodeConverter
			{
				OmitRootObject = omitRootObject
			};
			return SerializeObject(node, formatting, xmlNodeConverter);
		}

		public static XDocument? DeserializeXNode(string value)
		{
			return DeserializeXNode(value, null);
		}

		public static XDocument? DeserializeXNode(string value, string? deserializeRootElementName)
		{
			return DeserializeXNode(value, deserializeRootElementName, writeArrayAttribute: false);
		}

		public static XDocument? DeserializeXNode(string value, string? deserializeRootElementName, bool writeArrayAttribute)
		{
			return DeserializeXNode(value, deserializeRootElementName, writeArrayAttribute, encodeSpecialCharacters: false);
		}

		public static XDocument? DeserializeXNode(string value, string? deserializeRootElementName, bool writeArrayAttribute, bool encodeSpecialCharacters)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			XmlNodeConverter xmlNodeConverter = new XmlNodeConverter();
			xmlNodeConverter.DeserializeRootElementName = deserializeRootElementName;
			xmlNodeConverter.WriteArrayAttribute = writeArrayAttribute;
			xmlNodeConverter.EncodeSpecialCharacters = encodeSpecialCharacters;
			return (XDocument)DeserializeObject(value, typeof(XDocument), xmlNodeConverter);
		}
	}
	public abstract class JsonConverter
	{
		public virtual bool CanRead => true;

		public virtual bool CanWrite => true;

		public abstract void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer);

		public abstract object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer);

		public abstract bool CanConvert(Type objectType);
	}
	public abstract class JsonConverter<T> : JsonConverter
	{
		public sealed override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
		{
			if (!((value != null) ? (value is T) : ReflectionUtils.IsNullable(typeof(T))))
			{
				throw new JsonSerializationException("Converter cannot write specified value to JSON. {0} is required.".FormatWith(CultureInfo.InvariantCulture, typeof(T)));
			}
			WriteJson(writer, (T)value, serializer);
		}

		public abstract void WriteJson(JsonWriter writer, T? value, JsonSerializer serializer);

		public sealed override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
		{
			bool flag = existingValue == null;
			if (!flag && !(existingValue is T))
			{
				throw new JsonSerializationException("Converter cannot read JSON with the specified existing value. {0} is required.".FormatWith(CultureInfo.InvariantCulture, typeof(T)));
			}
			return ReadJson(reader, objectType, flag ? default(T) : ((T)existingValue), !flag, serializer);
		}

		public abstract T? ReadJson(JsonReader reader, Type objectType, T? existingValue, bool hasExistingValue, JsonSerializer serializer);

		public sealed override bool CanConvert(Type objectType)
		{
			return typeof(T).IsAssignableFrom(objectType);
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Interface | AttributeTargets.Parameter, AllowMultiple = false)]
	public sealed class JsonConverterAttribute : Attribute
	{
		private readonly Type _converterType;

		public Type ConverterType => _converterType;

		public object[]? ConverterParameters { get; }

		public JsonConverterAttribute(Type converterType)
		{
			if (converterType == null)
			{
				throw new ArgumentNullException("converterType");
			}
			_converterType = converterType;
		}

		public JsonConverterAttribute(Type converterType, params object[] converterParameters)
			: this(converterType)
		{
			ConverterParameters = converterParameters;
		}
	}
	public class JsonConverterCollection : Collection<JsonConverter>
	{
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = false)]
	public sealed class JsonDictionaryAttribute : JsonContainerAttribute
	{
		public JsonDictionaryAttribute()
		{
		}

		public JsonDictionaryAttribute(string id)
			: base(id)
		{
		}
	}
	[Serializable]
	public class JsonException : Exception
	{
		public JsonException()
		{
		}

		public JsonException(string message)
			: base(message)
		{
		}

		public JsonException(string message, Exception? innerException)
			: base(message, innerException)
		{
		}

		public JsonException(SerializationInfo info, StreamingContext context)
			: base(info, context)
		{
		}

		internal static JsonException Create(IJsonLineInfo lineInfo, string path, string message)
		{
			message = JsonPosition.FormatMessage(lineInfo, path, message);
			return new JsonException(message);
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
	public class JsonExtensionDataAttribute : Attribute
	{
		public bool WriteData { get; set; }

		public bool ReadData { get; set; }

		public JsonExtensionDataAttribute()
		{
			WriteData = true;
			ReadData = true;
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
	public sealed class JsonIgnoreAttribute : Attribute
	{
	}
	public abstract class JsonNameTable
	{
		public abstract string? Get(char[] key, int start, int length);
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, AllowMultiple = false)]
	public sealed class JsonObjectAttribute : JsonContainerAttribute
	{
		private MemberSerialization _memberSerialization;

		internal MissingMemberHandling? _missingMemberHandling;

		internal Required? _itemRequired;

		internal NullValueHandling? _itemNullValueHandling;

		public MemberSerialization MemberSerialization
		{
			get
			{
				return _memberSerialization;
			}
			set
			{
				_memberSerialization = value;
			}
		}

		public MissingMemberHandling MissingMemberHandling
		{
			get
			{
				return _missingMemberHandling.GetValueOrDefault();
			}
			set
			{
				_missingMemberHandling = value;
			}
		}

		public NullValueHandling ItemNullValueHandling
		{
			get
			{
				return _itemNullValueHandling.GetValueOrDefault();
			}
			set
			{
				_itemNullValueHandling = value;
			}
		}

		public Required ItemRequired
		{
			get
			{
				return _itemRequired.GetValueOrDefault();
			}
			set
			{
				_itemRequired = value;
			}
		}

		public JsonObjectAttribute()
		{
		}

		public JsonObjectAttribute(MemberSerialization memberSerialization)
		{
			MemberSerialization = memberSerialization;
		}

		public JsonObjectAttribute(string id)
			: base(id)
		{
		}
	}
	internal enum JsonContainerType
	{
		None,
		Object,
		Array,
		Constructor
	}
	internal struct JsonPosition
	{
		private static readonly char[] SpecialCharacters = new char[18]
		{
			'.', ' ', '\'', '/', '"', '[', ']', '(', ')', '\t',
			'\n', '\r', '\f', '\b', '\\', '\u0085', '\u2028', '\u2029'
		};

		internal JsonContainerType Type;

		internal int Position;

		internal string? PropertyName;

		internal bool HasIndex;

		public JsonPosition(JsonContainerType type)
		{
			Type = type;
			HasIndex = TypeHasIndex(type);
			Position = -1;
			PropertyName = null;
		}

		internal int CalculateLength()
		{
			switch (Type)
			{
			case JsonContainerType.Object:
				return PropertyName.Length + 5;
			case JsonContainerType.Array:
			case JsonContainerType.Constructor:
				return MathUtils.IntLength((ulong)Position) + 2;
			default:
				throw new ArgumentOutOfRangeException("Type");
			}
		}

		internal void WriteTo(StringBuilder sb, ref StringWriter? writer, ref char[]? buffer)
		{
			switch (Type)
			{
			case JsonContainerType.Object:
			{
				string propertyName = PropertyName;
				if (propertyName.IndexOfAny(SpecialCharacters) != -1)
				{
					sb.Append("['");
					if (writer == null)
					{
						writer = new StringWriter(sb);
					}
					JavaScriptUtils.WriteEscapedJavaScriptString(writer, propertyName, '\'', appendDelimiters: false, JavaScriptUtils.SingleQuoteCharEscapeFlags, StringEscapeHandling.Default, null, ref buffer);
					sb.Append("']");
				}
				else
				{
					if (sb.Length > 0)
					{
						sb.Append('.');
					}
					sb.Append(propertyName);
				}
				break;
			}
			case JsonContainerType.Array:
			case JsonContainerType.Constructor:
				sb.Append('[');
				sb.Append(Position);
				sb.Append(']');
				break;
			}
		}

		internal static bool TypeHasIndex(JsonContainerType type)
		{
			if (type != JsonContainerType.Array)
			{
				return type == JsonContainerType.Constructor;
			}
			return true;
		}

		internal static string BuildPath(List<JsonPosition> positions, JsonPosition? currentPosition)
		{
			int num = 0;
			if (positions != null)
			{
				for (int i = 0; i < positions.Count; i++)
				{
					num += positions[i].CalculateLength();
				}
			}
			if (currentPosition.HasValue)
			{
				num += currentPosition.GetValueOrDefault().CalculateLength();
			}
			StringBuilder stringBuilder = new StringBuilder(num);
			StringWriter writer = null;
			char[] buffer = null;
			if (positions != null)
			{
				foreach (JsonPosition position in positions)
				{
					position.WriteTo(stringBuilder, ref writer, ref buffer);
				}
			}
			currentPosition?.WriteTo(stringBuilder, ref writer, ref buffer);
			return stringBuilder.ToString();
		}

		internal static string FormatMessage(IJsonLineInfo? lineInfo, string path, string message)
		{
			if (!message.EndsWith(Environment.NewLine, StringComparison.Ordinal))
			{
				message = message.Trim();
				if (!StringUtils.EndsWith(message, '.'))
				{
					message += ".";
				}
				message += " ";
			}
			message += "Path '{0}'".FormatWith(CultureInfo.InvariantCulture, path);
			if (lineInfo != null && lineInfo.HasLineInfo())
			{
				message += ", line {0}, position {1}".FormatWith(CultureInfo.InvariantCulture, lineInfo.LineNumber, lineInfo.LinePosition);
			}
			message += ".";
			return message;
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
	public sealed class JsonPropertyAttribute : Attribute
	{
		internal NullValueHandling? _nullValueHandling;

		internal DefaultValueHandling? _defaultValueHandling;

		internal ReferenceLoopHandling? _referenceLoopHandling;

		internal ObjectCreationHandling? _objectCreationHandling;

		internal TypeNameHandling? _typeNameHandling;

		internal bool? _isReference;

		internal int? _order;

		internal Required? _required;

		internal bool? _itemIsReference;

		internal ReferenceLoopHandling? _itemReferenceLoopHandling;

		internal TypeNameHandling? _itemTypeNameHandling;

		public Type? ItemConverterType { get; set; }

		public object[]? ItemConverterParameters { get; set; }

		public Type? NamingStrategyType { get; set; }

		public object[]? NamingStrategyParameters { get; set; }

		public NullValueHandling NullValueHandling
		{
			get
			{
				return _nullValueHandling.GetValueOrDefault();
			}
			set
			{
				_nullValueHandling = value;
			}
		}

		public DefaultValueHandling DefaultValueHandling
		{
			get
			{
				return _defaultValueHandling.GetValueOrDefault();
			}
			set
			{
				_defaultValueHandling = value;
			}
		}

		public ReferenceLoopHandling ReferenceLoopHandling
		{
			get
			{
				return _referenceLoopHandling.GetValueOrDefault();
			}
			set
			{
				_referenceLoopHandling = value;
			}
		}

		public ObjectCreationHandling ObjectCreationHandling
		{
			get
			{
				return _objectCreationHandling.GetValueOrDefault();
			}
			set
			{
				_objectCreationHandling = value;
			}
		}

		public TypeNameHandling TypeNameHandling
		{
			get
			{
				return _typeNameHandling.GetValueOrDefault();
			}
			set
			{
				_typeNameHandling = value;
			}
		}

		public bool IsReference
		{
			get
			{
				return _isReference.GetValueOrDefault();
			}
			set
			{
				_isReference = value;
			}
		}

		public int Order
		{
			get
			{
				return _order.GetValueOrDefault();
			}
			set
			{
				_order = value;
			}
		}

		public Required Required
		{
			get
			{
				return _required.GetValueOrDefault();
			}
			set
			{
				_required = value;
			}
		}

		public string? PropertyName { get; set; }

		public ReferenceLoopHandling ItemReferenceLoopHandling
		{
			get
			{
				return _itemReferenceLoopHandling.GetValueOrDefault();
			}
			set
			{
				_itemReferenceLoopHandling = value;
			}
		}

		public TypeNameHandling ItemTypeNameHandling
		{
			get
			{
				return _itemTypeNameHandling.GetValueOrDefault();
			}
			set
			{
				_itemTypeNameHandling = value;
			}
		}

		public bool ItemIsReference
		{
			get
			{
				return _itemIsReference.GetValueOrDefault();
			}
			set
			{
				_itemIsReference = value;
			}
		}

		public JsonPropertyAttribute()
		{
		}

		public JsonPropertyAttribute(string propertyName)
		{
			PropertyName = propertyName;
		}
	}
	public abstract class JsonReader : IDisposable
	{
		protected internal enum State
		{
			Start,
			Complete,
			Property,
			ObjectStart,
			Object,
			ArrayStart,
			Array,
			Closed,
			PostValue,
			ConstructorStart,
			Constructor,
			Error,
			Finished
		}

		private JsonToken _tokenType;

		private object? _value;

		internal char _quoteChar;

		internal State _currentState;

		private JsonPosition _currentPosition;

		private CultureInfo? _culture;

		private DateTimeZoneHandling _dateTimeZoneHandling;

		private int? _maxDepth;

		private bool _hasExceededMaxDepth;

		internal DateParseHandling _dateParseHandling;

		internal FloatParseHandling _floatParseHandling;

		private string? _dateFormatString;

		private List<JsonPosition>? _stack;

		protected State CurrentState => _currentState;

		public bool CloseInput { get; set; }

		public bool SupportMultipleContent { get; set; }

		public virtual char QuoteChar
		{
			get
			{
				return _quoteChar;
			}
			protected internal set
			{
				_quoteChar = value;
			}
		}

		public DateTimeZoneHandling DateTimeZoneHandling
		{
			get
			{
				return _dateTimeZoneHandling;
			}
			set
			{
				if (value < DateTimeZoneHandling.Local || value > DateTimeZoneHandling.RoundtripKind)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_dateTimeZoneHandling = value;
			}
		}

		public DateParseHandling DateParseHandling
		{
			get
			{
				return _dateParseHandling;
			}
			set
			{
				if (value < DateParseHandling.None || value > DateParseHandling.DateTimeOffset)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_dateParseHandling = value;
			}
		}

		public FloatParseHandling FloatParseHandling
		{
			get
			{
				return _floatParseHandling;
			}
			set
			{
				if (value < FloatParseHandling.Double || value > FloatParseHandling.Decimal)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_floatParseHandling = value;
			}
		}

		public string? DateFormatString
		{
			get
			{
				return _dateFormatString;
			}
			set
			{
				_dateFormatString = value;
			}
		}

		public int? MaxDepth
		{
			get
			{
				return _maxDepth;
			}
			set
			{
				if (value <= 0)
				{
					throw new ArgumentException("Value must be positive.", "value");
				}
				_maxDepth = value;
			}
		}

		public virtual JsonToken TokenType => _tokenType;

		public virtual object? Value => _value;

		public virtual Type? ValueType => _value?.GetType();

		public virtual int Depth
		{
			get
			{
				int num = _stack?.Count ?? 0;
				if (JsonTokenUtils.IsStartToken(TokenType) || _currentPosition.Type == JsonContainerType.None)
				{
					return num;
				}
				return num + 1;
			}
		}

		public virtual string Path
		{
			get
			{
				if (_currentPosition.Type == JsonContainerType.None)
				{
					return string.Empty;
				}
				JsonPosition? currentPosition = ((_currentState != State.ArrayStart && _currentState != State.ConstructorStart && _currentState != State.ObjectStart) ? new JsonPosition?(_currentPosition) : null);
				return JsonPosition.BuildPath(_stack, currentPosition);
			}
		}

		public CultureInfo Culture
		{
			get
			{
				return _culture ?? CultureInfo.InvariantCulture;
			}
			set
			{
				_culture = value;
			}
		}

		public virtual Task<bool> ReadAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<bool>() ?? Read().ToAsync();
		}

		public async Task SkipAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			if (TokenType == JsonToken.PropertyName)
			{
				await ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
			}
			if (JsonTokenUtils.IsStartToken(TokenType))
			{
				int depth = Depth;
				while (await ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false) && depth < Depth)
				{
				}
			}
		}

		internal async Task ReaderReadAndAssertAsync(CancellationToken cancellationToken)
		{
			if (!(await ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false)))
			{
				throw CreateUnexpectedEndException();
			}
		}

		public virtual Task<bool?> ReadAsBooleanAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<bool?>() ?? Task.FromResult(ReadAsBoolean());
		}

		public virtual Task<byte[]?> ReadAsBytesAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<byte[]>() ?? Task.FromResult(ReadAsBytes());
		}

		internal async Task<byte[]?> ReadArrayIntoByteArrayAsync(CancellationToken cancellationToken)
		{
			List<byte> buffer = new List<byte>();
			do
			{
				if (!(await ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false)))
				{
					SetToken(JsonToken.None);
				}
			}
			while (!ReadArrayElementIntoByteArrayReportDone(buffer));
			byte[] array = buffer.ToArray();
			SetToken(JsonToken.Bytes, array, updateIndex: false);
			return array;
		}

		public virtual Task<DateTime?> ReadAsDateTimeAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<DateTime?>() ?? Task.FromResult(ReadAsDateTime());
		}

		public virtual Task<DateTimeOffset?> ReadAsDateTimeOffsetAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<DateTimeOffset?>() ?? Task.FromResult(ReadAsDateTimeOffset());
		}

		public virtual Task<decimal?> ReadAsDecimalAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<decimal?>() ?? Task.FromResult(ReadAsDecimal());
		}

		public virtual Task<double?> ReadAsDoubleAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return Task.FromResult(ReadAsDouble());
		}

		public virtual Task<int?> ReadAsInt32Async(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<int?>() ?? Task.FromResult(ReadAsInt32());
		}

		public virtual Task<string?> ReadAsStringAsync(CancellationToken cancellationToken = default(CancellationToken))
		{
			return cancellationToken.CancelIfRequestedAsync<string>() ?? Task.FromResult(ReadAsString());
		}

		internal async Task<bool> ReadAndMoveToContentAsync(CancellationToken cancellationToken)
		{
			bool flag = await ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
			if (flag)
			{
				flag = await MoveToContentAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
			}
			return flag;
		}

		internal Task<bool> MoveToContentAsync(CancellationToken cancellationToken)
		{
			JsonToken tokenType = TokenType;
			if (tokenType == JsonToken.None || tokenType == JsonToken.Comment)
			{
				return MoveToContentFromNonContentAsync(cancellationToken);
			}
			return AsyncUtils.True;
		}

		private async Task<bool> MoveToContentFromNonContentAsync(CancellationToken cancellationToken)
		{
			JsonToken tokenType;
			do
			{
				if (!(await ReadAsync(cancellationToken).ConfigureAwait(continueOnCapturedContext: false)))
				{
					return false;
				}
				tokenType = TokenType;
			}
			while (tokenType == JsonToken.None || tokenType == JsonToken.Comment);
			return true;
		}

		internal JsonPosition GetPosition(int depth)
		{
			if (_stack != null && depth < _stack.Count)
			{
				return _stack[depth];
			}
			return _currentPosition;
		}

		protected JsonReader()
		{
			_currentState = State.Start;
			_dateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
			_dateParseHandling = DateParseHandling.DateTime;
			_floatParseHandling = FloatParseHandling.Double;
			_maxDepth = 64;
			CloseInput = true;
		}

		private void Push(JsonContainerType value)
		{
			UpdateScopeWithFinishedValue();
			if (_currentPosition.Type == JsonContainerType.None)
			{
				_currentPosition = new JsonPosition(value);
				return;
			}
			if (_stack == null)
			{
				_stack = new List<JsonPosition>();
			}
			_stack.Add(_currentPosition);
			_currentPosition = new JsonPosition(value);
			if (!_maxDepth.HasValue || !(Depth + 1 > _maxDepth) || _hasExceededMaxDepth)
			{
				return;
			}
			_hasExceededMaxDepth = true;
			throw JsonReaderException.Create(this, "The reader's MaxDepth of {0} has been exceeded.".FormatWith(CultureInfo.InvariantCulture, _maxDepth));
		}

		private JsonContainerType Pop()
		{
			JsonPosition currentPosition;
			if (_stack != null && _stack.Count > 0)
			{
				currentPosition = _currentPosition;
				_currentPosition = _stack[_stack.Count - 1];
				_stack.RemoveAt(_stack.Count - 1);
			}
			else
			{
				currentPosition = _currentPosition;
				_currentPosition = default(JsonPosition);
			}
			if (_maxDepth.HasValue && Depth <= _maxDepth)
			{
				_hasExceededMaxDepth = false;
			}
			return currentPosition.Type;
		}

		private JsonContainerType Peek()
		{
			return _currentPosition.Type;
		}

		public abstract bool Read();

		public virtual int? ReadAsInt32()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Integer:
			case JsonToken.Float:
			{
				object value = Value;
				if (value is int)
				{
					return (int)value;
				}
				int num;
				if (value is BigInteger bigInteger)
				{
					num = (int)bigInteger;
				}
				else
				{
					try
					{
						num = Convert.ToInt32(value, CultureInfo.InvariantCulture);
					}
					catch (Exception ex)
					{
						throw JsonReaderException.Create(this, "Could not convert to integer: {0}.".FormatWith(CultureInfo.InvariantCulture, value), ex);
					}
				}
				SetToken(JsonToken.Integer, num, updateIndex: false);
				return num;
			}
			case JsonToken.String:
			{
				string s = (string)Value;
				return ReadInt32String(s);
			}
			default:
				throw JsonReaderException.Create(this, "Error reading integer. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		internal int? ReadInt32String(string? s)
		{
			if (StringUtils.IsNullOrEmpty(s))
			{
				SetToken(JsonToken.Null, null, updateIndex: false);
				return null;
			}
			if (int.TryParse(s, NumberStyles.Integer, Culture, out var result))
			{
				SetToken(JsonToken.Integer, result, updateIndex: false);
				return result;
			}
			SetToken(JsonToken.String, s, updateIndex: false);
			throw JsonReaderException.Create(this, "Could not convert string to integer: {0}.".FormatWith(CultureInfo.InvariantCulture, s));
		}

		public virtual string? ReadAsString()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.String:
				return (string)Value;
			default:
				if (JsonTokenUtils.IsPrimitiveToken(contentToken))
				{
					object value = Value;
					if (value != null)
					{
						string text = ((!(value is IFormattable formattable)) ? ((value is Uri uri) ? uri.OriginalString : value.ToString()) : formattable.ToString(null, Culture));
						SetToken(JsonToken.String, text, updateIndex: false);
						return text;
					}
				}
				throw JsonReaderException.Create(this, "Error reading string. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		public virtual byte[]? ReadAsBytes()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.StartObject:
			{
				ReadIntoWrappedTypeObject();
				byte[] array2 = ReadAsBytes();
				ReaderReadAndAssert();
				if (TokenType != JsonToken.EndObject)
				{
					throw JsonReaderException.Create(this, "Error reading bytes. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, TokenType));
				}
				SetToken(JsonToken.Bytes, array2, updateIndex: false);
				return array2;
			}
			case JsonToken.String:
			{
				string text = (string)Value;
				Guid g;
				byte[] array3 = ((text.Length == 0) ? CollectionUtils.ArrayEmpty<byte>() : ((!ConvertUtils.TryConvertGuid(text, out g)) ? Convert.FromBase64String(text) : g.ToByteArray()));
				SetToken(JsonToken.Bytes, array3, updateIndex: false);
				return array3;
			}
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Bytes:
				if (Value is Guid guid)
				{
					byte[] array = guid.ToByteArray();
					SetToken(JsonToken.Bytes, array, updateIndex: false);
					return array;
				}
				return (byte[])Value;
			case JsonToken.StartArray:
				return ReadArrayIntoByteArray();
			default:
				throw JsonReaderException.Create(this, "Error reading bytes. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		internal byte[] ReadArrayIntoByteArray()
		{
			List<byte> list = new List<byte>();
			do
			{
				if (!Read())
				{
					SetToken(JsonToken.None);
				}
			}
			while (!ReadArrayElementIntoByteArrayReportDone(list));
			byte[] array = list.ToArray();
			SetToken(JsonToken.Bytes, array, updateIndex: false);
			return array;
		}

		private bool ReadArrayElementIntoByteArrayReportDone(List<byte> buffer)
		{
			switch (TokenType)
			{
			case JsonToken.None:
				throw JsonReaderException.Create(this, "Unexpected end when reading bytes.");
			case JsonToken.Integer:
				buffer.Add(Convert.ToByte(Value, CultureInfo.InvariantCulture));
				return false;
			case JsonToken.EndArray:
				return true;
			case JsonToken.Comment:
				return false;
			default:
				throw JsonReaderException.Create(this, "Unexpected token when reading bytes: {0}.".FormatWith(CultureInfo.InvariantCulture, TokenType));
			}
		}

		public virtual double? ReadAsDouble()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Integer:
			case JsonToken.Float:
			{
				object value = Value;
				if (value is double)
				{
					return (double)value;
				}
				double num = ((!(value is BigInteger bigInteger)) ? Convert.ToDouble(value, CultureInfo.InvariantCulture) : ((double)bigInteger));
				SetToken(JsonToken.Float, num, updateIndex: false);
				return num;
			}
			case JsonToken.String:
				return ReadDoubleString((string)Value);
			default:
				throw JsonReaderException.Create(this, "Error reading double. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		internal double? ReadDoubleString(string? s)
		{
			if (StringUtils.IsNullOrEmpty(s))
			{
				SetToken(JsonToken.Null, null, updateIndex: false);
				return null;
			}
			if (double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, Culture, out var result))
			{
				SetToken(JsonToken.Float, result, updateIndex: false);
				return result;
			}
			SetToken(JsonToken.String, s, updateIndex: false);
			throw JsonReaderException.Create(this, "Could not convert string to double: {0}.".FormatWith(CultureInfo.InvariantCulture, s));
		}

		public virtual bool? ReadAsBoolean()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Integer:
			case JsonToken.Float:
			{
				bool flag = ((!(Value is BigInteger bigInteger)) ? Convert.ToBoolean(Value, CultureInfo.InvariantCulture) : (bigInteger != 0L));
				SetToken(JsonToken.Boolean, flag, updateIndex: false);
				return flag;
			}
			case JsonToken.String:
				return ReadBooleanString((string)Value);
			case JsonToken.Boolean:
				return (bool)Value;
			default:
				throw JsonReaderException.Create(this, "Error reading boolean. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		internal bool? ReadBooleanString(string? s)
		{
			if (StringUtils.IsNullOrEmpty(s))
			{
				SetToken(JsonToken.Null, null, updateIndex: false);
				return null;
			}
			if (bool.TryParse(s, out var result))
			{
				SetToken(JsonToken.Boolean, result, updateIndex: false);
				return result;
			}
			SetToken(JsonToken.String, s, updateIndex: false);
			throw JsonReaderException.Create(this, "Could not convert string to boolean: {0}.".FormatWith(CultureInfo.InvariantCulture, s));
		}

		public virtual decimal? ReadAsDecimal()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Integer:
			case JsonToken.Float:
			{
				object value = Value;
				if (value is decimal)
				{
					return (decimal)value;
				}
				decimal num;
				if (value is BigInteger bigInteger)
				{
					num = (decimal)bigInteger;
				}
				else
				{
					try
					{
						num = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
					}
					catch (Exception ex)
					{
						throw JsonReaderException.Create(this, "Could not convert to decimal: {0}.".FormatWith(CultureInfo.InvariantCulture, value), ex);
					}
				}
				SetToken(JsonToken.Float, num, updateIndex: false);
				return num;
			}
			case JsonToken.String:
				return ReadDecimalString((string)Value);
			default:
				throw JsonReaderException.Create(this, "Error reading decimal. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		internal decimal? ReadDecimalString(string? s)
		{
			if (StringUtils.IsNullOrEmpty(s))
			{
				SetToken(JsonToken.Null, null, updateIndex: false);
				return null;
			}
			if (decimal.TryParse(s, NumberStyles.Number, Culture, out var result))
			{
				SetToken(JsonToken.Float, result, updateIndex: false);
				return result;
			}
			if (ConvertUtils.DecimalTryParse(s.ToCharArray(), 0, s.Length, out result) == ParseResult.Success)
			{
				SetToken(JsonToken.Float, result, updateIndex: false);
				return result;
			}
			SetToken(JsonToken.String, s, updateIndex: false);
			throw JsonReaderException.Create(this, "Could not convert string to decimal: {0}.".FormatWith(CultureInfo.InvariantCulture, s));
		}

		public virtual DateTime? ReadAsDateTime()
		{
			switch (GetContentToken())
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Date:
				if (Value is DateTimeOffset dateTimeOffset)
				{
					SetToken(JsonToken.Date, dateTimeOffset.DateTime, updateIndex: false);
				}
				return (DateTime)Value;
			case JsonToken.String:
				return ReadDateTimeString((string)Value);
			default:
				throw JsonReaderException.Create(this, "Error reading date. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, TokenType));
			}
		}

		internal DateTime? ReadDateTimeString(string? s)
		{
			if (StringUtils.IsNullOrEmpty(s))
			{
				SetToken(JsonToken.Null, null, updateIndex: false);
				return null;
			}
			if (DateTimeUtils.TryParseDateTime(s, DateTimeZoneHandling, _dateFormatString, Culture, out var dt))
			{
				dt = DateTimeUtils.EnsureDateTime(dt, DateTimeZoneHandling);
				SetToken(JsonToken.Date, dt, updateIndex: false);
				return dt;
			}
			if (DateTime.TryParse(s, Culture, DateTimeStyles.RoundtripKind, out dt))
			{
				dt = DateTimeUtils.EnsureDateTime(dt, DateTimeZoneHandling);
				SetToken(JsonToken.Date, dt, updateIndex: false);
				return dt;
			}
			throw JsonReaderException.Create(this, "Could not convert string to DateTime: {0}.".FormatWith(CultureInfo.InvariantCulture, s));
		}

		public virtual DateTimeOffset? ReadAsDateTimeOffset()
		{
			JsonToken contentToken = GetContentToken();
			switch (contentToken)
			{
			case JsonToken.None:
			case JsonToken.Null:
			case JsonToken.EndArray:
				return null;
			case JsonToken.Date:
				if (Value is DateTime dateTime)
				{
					SetToken(JsonToken.Date, new DateTimeOffset(dateTime), updateIndex: false);
				}
				return (DateTimeOffset)Value;
			case JsonToken.String:
			{
				string s = (string)Value;
				return ReadDateTimeOffsetString(s);
			}
			default:
				throw JsonReaderException.Create(this, "Error reading date. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, contentToken));
			}
		}

		internal DateTimeOffset? ReadDateTimeOffsetString(string? s)
		{
			if (StringUtils.IsNullOrEmpty(s))
			{
				SetToken(JsonToken.Null, null, updateIndex: false);
				return null;
			}
			if (DateTimeUtils.TryParseDateTimeOffset(s, _dateFormatString, Culture, out var dt))
			{
				SetToken(JsonToken.Date, dt, updateIndex: false);
				return dt;
			}
			if (DateTimeOffset.TryParse(s, Culture, DateTimeStyles.RoundtripKind, out dt))
			{
				SetToken(JsonToken.Date, dt, updateIndex: false);
				return dt;
			}
			SetToken(JsonToken.String, s, updateIndex: false);
			throw JsonReaderException.Create(this, "Could not convert string to DateTimeOffset: {0}.".FormatWith(CultureInfo.InvariantCulture, s));
		}

		internal void ReaderReadAndAssert()
		{
			if (!Read())
			{
				throw CreateUnexpectedEndException();
			}
		}

		internal JsonReaderException CreateUnexpectedEndException()
		{
			return JsonReaderException.Create(this, "Unexpected end when reading JSON.");
		}

		internal void ReadIntoWrappedTypeObject()
		{
			ReaderReadAndAssert();
			if (Value != null && Value.ToString() == "$type")
			{
				ReaderReadAndAssert();
				if (Value != null && Value.ToString().StartsWith("System.Byte[]", StringComparison.Ordinal))
				{
					ReaderReadAndAssert();
					if (Value.ToString() == "$value")
					{
						return;
					}
				}
			}
			throw JsonReaderException.Create(this, "Error reading bytes. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, JsonToken.StartObject));
		}

		public void Skip()
		{
			if (TokenType == JsonToken.PropertyName)
			{
				Read();
			}
			if (JsonTokenUtils.IsStartToken(TokenType))
			{
				int depth = Depth;
				while (Read() && depth < Depth)
				{
				}
			}
		}

		protected void SetToken(JsonToken newToken)
		{
			SetToken(newToken, null, updateIndex: true);
		}

		protected void SetToken(JsonToken newToken, object? value)
		{
			SetToken(newToken, value, updateIndex: true);
		}

		protected void SetToken(JsonToken newToken, object? value, bool updateIndex)
		{
			_tokenType = newToken;
			_value = value;
			switch (newToken)
			{
			case JsonToken.StartObject:
				_currentState = State.ObjectStart;
				Push(JsonContainerType.Object);
				break;
			case JsonToken.StartArray:
				_currentState = State.ArrayStart;
				Push(JsonContainerType.Array);
				break;
			case JsonToken.StartConstructor:
				_currentState = State.ConstructorStart;
				Push(JsonContainerType.Constructor);
				break;
			case JsonToken.EndObject:
				ValidateEnd(JsonToken.EndObject);
				break;
			case JsonToken.EndArray:
				ValidateEnd(JsonToken.EndArray);
				break;
			case JsonToken.EndConstructor:
				ValidateEnd(JsonToken.EndConstructor);
				break;
			case JsonToken.PropertyName:
				_currentState = State.Property;
				_currentPosition.PropertyName = (string)value;
				break;
			case JsonToken.Raw:
			case JsonToken.Integer:
			case JsonToken.Float:
			case JsonToken.String:
			case JsonToken.Boolean:
			case JsonToken.Null:
			case JsonToken.Undefined:
			case JsonToken.Date:
			case JsonToken.Bytes:
				SetPostValueState(updateIndex);
				break;
			case JsonToken.Comment:
				break;
			}
		}

		internal void SetPostValueState(bool updateIndex)
		{
			if (Peek() != 0 || SupportMultipleContent)
			{
				_currentState = State.PostValue;
			}
			else
			{
				SetFinished();
			}
			if (updateIndex)
			{
				UpdateScopeWithFinishedValue();
			}
		}

		private void UpdateScopeWithFinishedValue()
		{
			if (_currentPosition.HasIndex)
			{
				_currentPosition.Position++;
			}
		}

		private void ValidateEnd(JsonToken endToken)
		{
			JsonContainerType jsonContainerType = Pop();
			if (GetTypeForCloseToken(endToken) != jsonContainerType)
			{
				throw JsonReaderException.Create(this, "JsonToken {0} is not valid for closing JsonType {1}.".FormatWith(CultureInfo.InvariantCulture, endToken, jsonContainerType));
			}
			if (Peek() != 0 || SupportMultipleContent)
			{
				_currentState = State.PostValue;
			}
			else
			{
				SetFinished();
			}
		}

		protected void SetStateBasedOnCurrent()
		{
			JsonContainerType jsonContainerType = Peek();
			switch (jsonContainerType)
			{
			case JsonContainerType.Object:
				_currentState = State.Object;
				break;
			case JsonContainerType.Array:
				_currentState = State.Array;
				break;
			case JsonContainerType.Constructor:
				_currentState = State.Constructor;
				break;
			case JsonContainerType.None:
				SetFinished();
				break;
			default:
				throw JsonReaderException.Create(this, "While setting the reader state back to current object an unexpected JsonType was encountered: {0}".FormatWith(CultureInfo.InvariantCulture, jsonContainerType));
			}
		}

		private void SetFinished()
		{
			_currentState = ((!SupportMultipleContent) ? State.Finished : State.Start);
		}

		private JsonContainerType GetTypeForCloseToken(JsonToken token)
		{
			return token switch
			{
				JsonToken.EndObject => JsonContainerType.Object, 
				JsonToken.EndArray => JsonContainerType.Array, 
				JsonToken.EndConstructor => JsonContainerType.Constructor, 
				_ => throw JsonReaderException.Create(this, "Not a valid close JsonToken: {0}".FormatWith(CultureInfo.InvariantCulture, token)), 
			};
		}

		void IDisposable.Dispose()
		{
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}

		protected virtual void Dispose(bool disposing)
		{
			if (_currentState != State.Closed && disposing)
			{
				Close();
			}
		}

		public virtual void Close()
		{
			_currentState = State.Closed;
			_tokenType = JsonToken.None;
			_value = null;
		}

		internal void ReadAndAssert()
		{
			if (!Read())
			{
				throw JsonSerializationException.Create(this, "Unexpected end when reading JSON.");
			}
		}

		internal void ReadForTypeAndAssert(JsonContract? contract, bool hasConverter)
		{
			if (!ReadForType(contract, hasConverter))
			{
				throw JsonSerializationException.Create(this, "Unexpected end when reading JSON.");
			}
		}

		internal bool ReadForType(JsonContract? contract, bool hasConverter)
		{
			if (hasConverter)
			{
				return Read();
			}
			switch (contract?.InternalReadType ?? ReadType.Read)
			{
			case ReadType.Read:
				return ReadAndMoveToContent();
			case ReadType.ReadAsInt32:
				ReadAsInt32();
				break;
			case ReadType.ReadAsInt64:
			{
				bool result = ReadAndMoveToContent();
				if (TokenType == JsonToken.Undefined)
				{
					throw JsonReaderException.Create(this, "An undefined token is not a valid {0}.".FormatWith(CultureInfo.InvariantCulture, contract?.UnderlyingType ?? typeof(long)));
				}
				return result;
			}
			case ReadType.ReadAsDecimal:
				ReadAsDecimal();
				break;
			case ReadType.ReadAsDouble:
				ReadAsDouble();
				break;
			case ReadType.ReadAsBytes:
				ReadAsBytes();
				break;
			case ReadType.ReadAsBoolean:
				ReadAsBoolean();
				break;
			case ReadType.ReadAsString:
				ReadAsString();
				break;
			case ReadType.ReadAsDateTime:
				ReadAsDateTime();
				break;
			case ReadType.ReadAsDateTimeOffset:
				ReadAsDateTimeOffset();
				break;
			default:
				throw new ArgumentOutOfRangeException();
			}
			return TokenType != JsonToken.None;
		}

		internal bool ReadAndMoveToContent()
		{
			if (Read())
			{
				return MoveToContent();
			}
			return false;
		}

		internal bool MoveToContent()
		{
			JsonToken tokenType = TokenType;
			while (tokenType == JsonToken.None || tokenType == JsonToken.Comment)
			{
				if (!Read())
				{
					return false;
				}
				tokenType = TokenType;
			}
			return true;
		}

		private JsonToken GetContentToken()
		{
			JsonToken tokenType;
			do
			{
				if (!Read())
				{
					SetToken(JsonToken.None);
					return JsonToken.None;
				}
				tokenType = TokenType;
			}
			while (tokenType == JsonToken.Comment);
			return tokenType;
		}
	}
	[Serializable]
	public class JsonReaderException : JsonException
	{
		public int LineNumber { get; }

		public int LinePosition { get; }

		public string? Path { get; }

		public JsonReaderException()
		{
		}

		public JsonReaderException(string message)
			: base(message)
		{
		}

		public JsonReaderException(string message, Exception innerException)
			: base(message, innerException)
		{
		}

		public JsonReaderException(SerializationInfo info, StreamingContext context)
			: base(info, context)
		{
		}

		public JsonReaderException(string message, string path, int lineNumber, int linePosition, Exception? innerException)
			: base(message, innerException)
		{
			Path = path;
			LineNumber = lineNumber;
			LinePosition = linePosition;
		}

		internal static JsonReaderException Create(JsonReader reader, string message)
		{
			return Create(reader, message, null);
		}

		internal static JsonReaderException Create(JsonReader reader, string message, Exception? ex)
		{
			return Create(reader as IJsonLineInfo, reader.Path, message, ex);
		}

		internal static JsonReaderException Create(IJsonLineInfo? lineInfo, string path, string message, Exception? ex)
		{
			message = JsonPosition.FormatMessage(lineInfo, path, message);
			int lineNumber;
			int linePosition;
			if (lineInfo != null && lineInfo.HasLineInfo())
			{
				lineNumber = lineInfo.LineNumber;
				linePosition = lineInfo.LinePosition;
			}
			else
			{
				lineNumber = 0;
				linePosition = 0;
			}
			return new JsonReaderException(message, path, lineNumber, linePosition, ex);
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
	public sealed class JsonRequiredAttribute : Attribute
	{
	}
	[Serializable]
	public class JsonSerializationException : JsonException
	{
		public int LineNumber { get; }

		public int LinePosition { get; }

		public string? Path { get; }

		public JsonSerializationException()
		{
		}

		public JsonSerializationException(string message)
			: base(message)
		{
		}

		public JsonSerializationException(string message, Exception innerException)
			: base(message, innerException)
		{
		}

		public JsonSerializationException(SerializationInfo info, StreamingContext context)
			: base(info, context)
		{
		}

		public JsonSerializationException(string message, string path, int lineNumber, int linePosition, Exception? innerException)
			: base(message, innerException)
		{
			Path = path;
			LineNumber = lineNumber;
			LinePosition = linePosition;
		}

		internal static JsonSerializationException Create(JsonReader reader, string message)
		{
			return Create(reader, message, null);
		}

		internal static JsonSerializationException Create(JsonReader reader, string message, Exception? ex)
		{
			return Create(reader as IJsonLineInfo, reader.Path, message, ex);
		}

		internal static JsonSerializationException Create(IJsonLineInfo? lineInfo, string path, string message, Exception? ex)
		{
			message = JsonPosition.FormatMessage(lineInfo, path, message);
			int lineNumber;
			int linePosition;
			if (lineInfo != null && lineInfo.HasLineInfo())
			{
				lineNumber = lineInfo.LineNumber;
				linePosition = lineInfo.LinePosition;
			}
			else
			{
				lineNumber = 0;
				linePosition = 0;
			}
			return new JsonSerializationException(message, path, lineNumber, linePosition, ex);
		}
	}
	public class JsonSerializer
	{
		internal TypeNameHandling _typeNameHandling;

		internal TypeNameAssemblyFormatHandling _typeNameAssemblyFormatHandling;

		internal PreserveReferencesHandling _preserveReferencesHandling;

		internal ReferenceLoopHandling _referenceLoopHandling;

		internal MissingMemberHandling _missingMemberHandling;

		internal ObjectCreationHandling _objectCreationHandling;

		internal NullValueHandling _nullValueHandling;

		internal DefaultValueHandling _defaultValueHandling;

		internal ConstructorHandling _constructorHandling;

		internal MetadataPropertyHandling _metadataPropertyHandling;

		internal JsonConverterCollection? _converters;

		internal IContractResolver _contractResolver;

		internal ITraceWriter? _traceWriter;

		internal IEqualityComparer? _equalityComparer;

		internal ISerializationBinder _serializationBinder;

		internal StreamingContext _context;

		private IReferenceResolver? _referenceResolver;

		private Formatting? _formatting;

		private DateFormatHandling? _dateFormatHandling;

		private DateTimeZoneHandling? _dateTimeZoneHandling;

		private DateParseHandling? _dateParseHandling;

		private FloatFormatHandling? _floatFormatHandling;

		private FloatParseHandling? _floatParseHandling;

		private StringEscapeHandling? _stringEscapeHandling;

		private CultureInfo _culture;

		private int? _maxDepth;

		private bool _maxDepthSet;

		private bool? _checkAdditionalContent;

		private string? _dateFormatString;

		private bool _dateFormatStringSet;

		public virtual IReferenceResolver? ReferenceResolver
		{
			get
			{
				return GetReferenceResolver();
			}
			set
			{
				if (value == null)
				{
					throw new ArgumentNullException("value", "Reference resolver cannot be null.");
				}
				_referenceResolver = value;
			}
		}

		[Obsolete("Binder is obsolete. Use SerializationBinder instead.")]
		public virtual SerializationBinder Binder
		{
			get
			{
				if (_serializationBinder is SerializationBinder result)
				{
					return result;
				}
				if (_serializationBinder is SerializationBinderAdapter serializationBinderAdapter)
				{
					return serializationBinderAdapter.SerializationBinder;
				}
				throw new InvalidOperationException("Cannot get SerializationBinder because an ISerializationBinder was previously set.");
			}
			set
			{
				if (value == null)
				{
					throw new ArgumentNullException("value", "Serialization binder cannot be null.");
				}
				_serializationBinder = (value as ISerializationBinder) ?? new SerializationBinderAdapter(value);
			}
		}

		public virtual ISerializationBinder SerializationBinder
		{
			get
			{
				return _serializationBinder;
			}
			set
			{
				if (value == null)
				{
					throw new ArgumentNullException("value", "Serialization binder cannot be null.");
				}
				_serializationBinder = value;
			}
		}

		public virtual ITraceWriter? TraceWriter
		{
			get
			{
				return _traceWriter;
			}
			set
			{
				_traceWriter = value;
			}
		}

		public virtual IEqualityComparer? EqualityComparer
		{
			get
			{
				return _equalityComparer;
			}
			set
			{
				_equalityComparer = value;
			}
		}

		public virtual TypeNameHandling TypeNameHandling
		{
			get
			{
				return _typeNameHandling;
			}
			set
			{
				if (value < TypeNameHandling.None || value > TypeNameHandling.Auto)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_typeNameHandling = value;
			}
		}

		[Obsolete("TypeNameAssemblyFormat is obsolete. Use TypeNameAssemblyFormatHandling instead.")]
		public virtual FormatterAssemblyStyle TypeNameAssemblyFormat
		{
			get
			{
				return (FormatterAssemblyStyle)_typeNameAssemblyFormatHandling;
			}
			set
			{
				if (value < FormatterAssemblyStyle.Simple || value > FormatterAssemblyStyle.Full)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_typeNameAssemblyFormatHandling = (TypeNameAssemblyFormatHandling)value;
			}
		}

		public virtual TypeNameAssemblyFormatHandling TypeNameAssemblyFormatHandling
		{
			get
			{
				return _typeNameAssemblyFormatHandling;
			}
			set
			{
				if (value < TypeNameAssemblyFormatHandling.Simple || value > TypeNameAssemblyFormatHandling.Full)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_typeNameAssemblyFormatHandling = value;
			}
		}

		public virtual PreserveReferencesHandling PreserveReferencesHandling
		{
			get
			{
				return _preserveReferencesHandling;
			}
			set
			{
				if (value < PreserveReferencesHandling.None || value > PreserveReferencesHandling.All)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_preserveReferencesHandling = value;
			}
		}

		public virtual ReferenceLoopHandling ReferenceLoopHandling
		{
			get
			{
				return _referenceLoopHandling;
			}
			set
			{
				if (value < ReferenceLoopHandling.Error || value > ReferenceLoopHandling.Serialize)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_referenceLoopHandling = value;
			}
		}

		public virtual MissingMemberHandling MissingMemberHandling
		{
			get
			{
				return _missingMemberHandling;
			}
			set
			{
				if (value < MissingMemberHandling.Ignore || value > MissingMemberHandling.Error)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_missingMemberHandling = value;
			}
		}

		public virtual NullValueHandling NullValueHandling
		{
			get
			{
				return _nullValueHandling;
			}
			set
			{
				if (value < NullValueHandling.Include || value > NullValueHandling.Ignore)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_nullValueHandling = value;
			}
		}

		public virtual DefaultValueHandling DefaultValueHandling
		{
			get
			{
				return _defaultValueHandling;
			}
			set
			{
				if (value < DefaultValueHandling.Include || value > DefaultValueHandling.IgnoreAndPopulate)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_defaultValueHandling = value;
			}
		}

		public virtual ObjectCreationHandling ObjectCreationHandling
		{
			get
			{
				return _objectCreationHandling;
			}
			set
			{
				if (value < ObjectCreationHandling.Auto || value > ObjectCreationHandling.Replace)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_objectCreationHandling = value;
			}
		}

		public virtual ConstructorHandling ConstructorHandling
		{
			get
			{
				return _constructorHandling;
			}
			set
			{
				if (value < ConstructorHandling.Default || value > ConstructorHandling.AllowNonPublicDefaultConstructor)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_constructorHandling = value;
			}
		}

		public virtual MetadataPropertyHandling MetadataPropertyHandling
		{
			get
			{
				return _metadataPropertyHandling;
			}
			set
			{
				if (value < MetadataPropertyHandling.Default || value > MetadataPropertyHandling.Ignore)
				{
					throw new ArgumentOutOfRangeException("value");
				}
				_metadataPropertyHandling = value;
			}
		}

		public virtual JsonConverterCollection Converters
		{
			get
			{
				if (_converters == null)
				{
					_converters = new JsonConverterCollection();
				}
				return _converters;
			}
		}

		public virtual IContractResolver ContractResolver
		{
			get
			{
				return _contractResolver;
			}
			set
			{
				_contractResolver = value ?? DefaultContractResolver.Instance;
			}
		}

		public virtual StreamingContext Context
		{
			get
			{
				return _context;
			}
			set
			{
				_context = value;
			}
		}

		public virtual Formatting Formatting
		{
			get
			{
				return _formatting.GetValueOrDefault();
			}
			set
			{
				_formatting = value;
			}
		}

		public virtual DateFormatHandling DateFormatHandling
		{
			get
			{
				return _dateFormatHandling.GetValueOrDefault();
			}
			set
			{
				_dateFormatHandling = value;
			}
		}

		public virtual DateTimeZoneHandling DateTimeZoneHandling
		{
			get
			{
				return _dateTimeZoneHandling ?? DateTimeZoneHandling.RoundtripKind;
			}
			set
			{
				_dateTimeZoneHandling = value;
			}
		}

		public virtual DateParseHandling DateParseHandling
		{
			get
			{
				return _dateParseHandling ?? DateParseHandling.DateTime;
			}
			set
			{
				_dateParseHandling = value;
			}
		}

		public virtual FloatParseHandling FloatParseHandling
		{
			get
			{
				return _floatParseHandling.GetValueOrDefault();
			}
			set
			{
				_floatParseHandling = value;
			}
		}

		public virtual FloatFormatHandling FloatFormatHandling
		{
			get
			{
				return _floatFormatHandling.GetValueOrDefault();
			}
			set
			{
				_floatFormatHandling = value;
			}
		}

		public virtual StringEscapeHandling StringEscapeHandling
		{
			get
			{
				return _stringEscapeHandling.GetValueOrDefault();
			}
			set
			{
				_stringEscapeHandling = value;
			}
		}

		public virtual string DateFormatString
		{
			get
			{
				return _dateFormatString ?? "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
			}
			set
			{
				_dateFormatString = value;
				_dateFormatStringSet = true;
			}
		}

		public virtual CultureInfo Culture
		{
			get
			{
				return _culture ?? JsonSerializerSettings.DefaultCulture;
			}
			set
			{
				_culture = value;
			}
		}

		public virtual int? MaxDepth
		{
			get
			{
				return _maxDepth;
			}
			set
			{
				if (value <= 0)
				{
					throw new ArgumentException("Value must be positive.", "value");
				}
				_maxDepth = value;
				_maxDepthSet = true;
			}
		}

		public virtual bool CheckAdditionalContent
		{
			get
			{
				return _checkAdditionalContent.GetValueOrDefault();
			}
			set
			{
				_checkAdditionalContent = value;
			}
		}

		public virtual event EventHandler<Newtonsoft.Json.Serialization.ErrorEventArgs>? Error;

		internal bool IsCheckAdditionalContentSet()
		{
			return _checkAdditionalContent.HasValue;
		}

		public JsonSerializer()
		{
			_referenceLoopHandling = ReferenceLoopHandling.Error;
			_missingMemberHandling = MissingMemberHandling.Ignore;
			_nullValueHandling = NullValueHandling.Include;
			_defaultValueHandling = DefaultValueHandling.Include;
			_objectCreationHandling = ObjectCreationHandling.Auto;
			_preserveReferencesHandling = PreserveReferencesHandling.None;
			_constructorHandling = ConstructorHandling.Default;
			_typeNameHandling = TypeNameHandling.None;
			_metadataPropertyHandling = MetadataPropertyHandling.Default;
			_context = JsonSerializerSettings.DefaultContext;
			_serializationBinder = DefaultSerializationBinder.Instance;
			_culture = JsonSerializerSettings.DefaultCulture;
			_contractResolver = DefaultContractResolver.Instance;
		}

		public static JsonSerializer Create()
		{
			return new JsonSerializer();
		}

		public static JsonSerializer Create(JsonSerializerSettings? settings)
		{
			JsonSerializer jsonSerializer = Create();
			if (settings != null)
			{
				ApplySerializerSettings(jsonSerializer, settings);
			}
			return jsonSerializer;
		}

		public static JsonSerializer CreateDefault()
		{
			return Create(JsonConvert.DefaultSettings?.Invoke());
		}

		public static JsonSerializer CreateDefault(JsonSerializerSettings? settings)
		{
			JsonSerializer jsonSerializer = CreateDefault();
			if (settings != null)
			{
				ApplySerializerSettings(jsonSerializer, settings);
			}
			return jsonSerializer;
		}

		private static void ApplySerializerSettings(JsonSerializer serializer, JsonSerializerSettings settings)
		{
			if (!CollectionUtils.IsNullOrEmpty(settings.Converters))
			{
				for (int i = 0; i < settings.Converters.Count; i++)
				{
					serializer.Converters.Insert(i, settings.Converters[i]);
				}
			}
			if (settings._typeNameHandling.HasValue)
			{
				serializer.TypeNameHandling = settings.TypeNameHandling;
			}
			if (settings._metadataPropertyHandling.HasValue)
			{
				serializer.MetadataPropertyHandling = settings.MetadataPropertyHandling;
			}
			if (settings._typeNameAssemblyFormatHandling.HasValue)
			{
				serializer.TypeNameAssemblyFormatHandling = settings.TypeNameAssemblyFormatHandling;
			}
			if (settings._preserveReferencesHandling.HasValue)
			{
				serializer.PreserveReferencesHandling = settings.PreserveReferencesHandling;
			}
			if (settings._referenceLoopHandling.HasValue)
			{
				serializer.ReferenceLoopHandling = settings.ReferenceLoopHandling;
			}
			if (settings._missingMemberHandling.HasValue)
			{
				serializer.MissingMemberHandling = settings.MissingMemberHandling;
			}
			if (settings._objectCreationHandling.HasValue)
			{
				serializer.ObjectCreationHandling = settings.ObjectCreationHandling;
			}
			if (settings._nullValueHandling.HasValue)
			{
				serializer.NullValueHandling = settings.NullValueHandling;
			}
			if (settings._defaultValueHandling.HasValue)
			{
				serializer.DefaultValueHandling = settings.DefaultValueHandling;
			}
			if (settings._constructorHandling.HasValue)
			{
				serializer.ConstructorHandling = settings.ConstructorHandling;
			}
			if (settings._context.HasValue)
			{
				serializer.Context = settings.Context;
			}
			if (settings._checkAdditionalContent.HasValue)
			{
				serializer._checkAdditionalContent = settings._checkAdditionalContent;
			}
			if (settings.Error != null)
			{
				serializer.Error += settings.Error;
			}
			if (settings.ContractResolver != null)
			{
				serializer.ContractResolver = settings.ContractResolver;
			}
			if (settings.ReferenceResolverProvider != null)
			{
				serializer.ReferenceResolver = settings.ReferenceResolverProvider();
			}
			if (settings.TraceWriter != null)
			{
				serializer.TraceWriter = settings.TraceWriter;
			}
			if (settings.EqualityComparer != null)
			{
				serializer.EqualityComparer = settings.EqualityComparer;
			}
			if (settings.SerializationBinder != null)
			{
				serializer.SerializationBinder = settings.SerializationBinder;
			}
			if (settings._formatting.HasValue)
			{
				serializer._formatting = settings._formatting;
			}
			if (settings._dateFormatHandling.HasValue)
			{
				serializer._dateFormatHandling = settings._dateFormatHandling;
			}
			if (settings._dateTimeZoneHandling.HasValue)
			{
				serializer._dateTimeZoneHandling = settings._dateTimeZoneHandling;
			}
			if (settings._dateParseHandling.HasValue)
			{
				serializer._dateParseHandling = settings._dateParseHandling;
			}
			if (settings._dateFormatStringSet)
			{
				serializer._dateFormatString = settings._dateFormatString;
				serializer._dateFormatStringSet = settings._dateFormatStringSet;
			}
			if (settings._floatFormatHandling.HasValue)
			{
				serializer._floatFormatHandling = settings._floatFormatHandling;
			}
			if (settings._floatParseHandling.HasValue)
			{
				serializer._floatParseHandling = settings._floatParseHandling;
			}
			if (settings._stringEscapeHandling.HasValue)
			{
				serializer._stringEscapeHandling = settings._stringEscapeHandling;
			}
			if (settings._culture != null)
			{
				serializer._culture = settings._culture;
			}
			if (settings._maxDepthSet)
			{
				serializer._maxDepth = settings._maxDepth;
				serializer._maxDepthSet = settings._maxDepthSet;
			}
		}

		[DebuggerStepThrough]
		public void Populate(TextReader reader, object target)
		{
			Populate(new JsonTextReader(reader), target);
		}

		[DebuggerStepThrough]
		public void Populate(JsonReader reader, object target)
		{
			PopulateInternal(reader, target);
		}

		internal virtual void PopulateInternal(JsonReader reader, object target)
		{
			ValidationUtils.ArgumentNotNull(reader, "reader");
			ValidationUtils.ArgumentNotNull(target, "target");
			SetupReader(reader, out CultureInfo previousCulture, out DateTimeZoneHandling? previousDateTimeZoneHandling, out DateParseHandling? previousDateParseHandling, out FloatParseHandling? previousFloatParseHandling, out int? previousMaxDepth, out string previousDateFormatString);
			TraceJsonReader traceJsonReader = ((TraceWriter != null && TraceWriter.LevelFilter >= TraceLevel.Verbose) ? CreateTraceJsonReader(reader) : null);
			new JsonSerializerInternalReader(this).Populate(traceJsonReader ?? reader, target);
			if (traceJsonReader != null)
			{
				TraceWriter.Trace(TraceLevel.Verbose, traceJsonReader.GetDeserializedJsonMessage(), null);
			}
			ResetReader(reader, previousCulture, previousDateTimeZoneHandling, previousDateParseHandling, previousFloatParseHandling, previousMaxDepth, previousDateFormatString);
		}

		[DebuggerStepThrough]
		public object? Deserialize(JsonReader reader)
		{
			return Deserialize(reader, null);
		}

		[DebuggerStepThrough]
		public object? Deserialize(TextReader reader, Type objectType)
		{
			return Deserialize(new JsonTextReader(reader), objectType);
		}

		[DebuggerStepThrough]
		public T? Deserialize<T>(JsonReader reader)
		{
			return (T)Deserialize(reader, typeof(T));
		}

		[DebuggerStepThrough]
		public object? Deserialize(JsonReader reader, Type? objectType)
		{
			return DeserializeInternal(reader, objectType);
		}

		internal virtual object? DeserializeInternal(JsonReader reader, Type? objectType)
		{
			ValidationUtils.ArgumentNotNull(reader, "reader");
			SetupReader(reader, out CultureInfo previousCulture, out DateTimeZoneHandling? previousDateTimeZoneHandling, out DateParseHandling? previousDateParseHandling, out FloatParseHandling? previousFloatParseHandling, out int? previousMaxDepth, out string previousDateFormatString);
			TraceJsonReader traceJsonReader = ((TraceWriter != null && TraceWriter.LevelFilter >= TraceLevel.Verbose) ? CreateTraceJsonReader(reader) : null);
			object? result = new JsonSerializerInternalReader(this).Deserialize(traceJsonReader ?? reader, objectType, CheckAdditionalContent);
			if (traceJsonReader != null)
			{
				TraceWriter.Trace(TraceLevel.Verbose, traceJsonReader.GetDeserializedJsonMessage(), null);
			}
			ResetReader(reader, previousCulture, previousDateTimeZoneHandling, previousDateParseHandling, previousFloatParseHandling, previousMaxDepth, previousDateFormatString);
			return result;
		}

		internal void SetupReader(JsonReader reader, out CultureInfo? previousCulture, out DateTimeZoneHandling? previousDateTimeZoneHandling, out DateParseHandling? previousDateParseHandling, out FloatParseHandling? previousFloatParseHandling, out int? previousMaxDepth, out string? previousDateFormatString)
		{
			if (_culture != null && !_culture.Equals(reader.Culture))
			{
				previousCulture = reader.Culture;
				reader.Culture = _culture;
			}
			else
			{
				previousCulture = null;
			}
			if (_dateTimeZoneHandling.HasValue && reader.DateTimeZoneHandling != _dateTimeZoneHandling)
			{
				previousDateTimeZoneHandling = reader.DateTimeZoneHandling;
				reader.DateTimeZoneHandling = _dateTimeZoneHandling.GetValueOrDefault();
			}
			else
			{
				previousDateTimeZoneHandling = null;
			}
			if (_dateParseHandling.HasValue && reader.DateParseHandling != _dateParseHandling)
			{
				previousDateParseHandling = reader.DateParseHandling;
				reader.DateParseHandling = _dateParseHandling.GetValueOrDefault();
			}
			else
			{
				previousDateParseHandling = null;
			}
			if (_floatParseHandling.HasValue && reader.FloatParseHandling != _floatParseHandling)
			{
				previousFloatParseHandling = reader.FloatParseHandling;
				reader.FloatParseHandling = _floatParseHandling.GetValueOrDefault();
			}
			else
			{
				previousFloatParseHandling = null;
			}
			if (_maxDepthSet && reader.MaxDepth != _maxDepth)
			{
				previousMaxDepth = reader.MaxDepth;
				reader.MaxDepth = _maxDepth;
			}
			else
			{
				previousMaxDepth = null;
			}
			if (_dateFormatStringSet && reader.DateFormatString != _dateFormatString)
			{
				previousDateFormatString = reader.DateFormatString;
				reader.DateFormatString = _dateFormatString;
			}
			else
			{
				previousDateFormatString = null;
			}
			if (reader is JsonTextReader jsonTextReader && jsonTextReader.PropertyNameTable == null && _contractResolver is DefaultContractResolver defaultContractResolver)
			{
				jsonTextReader.PropertyNameTable = defaultContractResolver.GetNameTable();
			}
		}

		private void ResetReader(JsonReader reader, CultureInfo? previousCulture, DateTimeZoneHandling? previousDateTimeZoneHandling, DateParseHandling? previousDateParseHandling, FloatParseHandling? previousFloatParseHandling, int? previousMaxDepth, string? previousDateFormatString)
		{
			if (previousCulture != null)
			{
				reader.Culture = previousCulture;
			}
			if (previousDateTimeZoneHandling.HasValue)
			{
				reader.DateTimeZoneHandling = previousDateTimeZoneHandling.GetValueOrDefault();
			}
			if (previousDateParseHandling.HasValue)
			{
				reader.DateParseHandling = previousDateParseHandling.GetValueOrDefault();
			}
			if (previousFloatParseHandling.HasValue)
			{
				reader.FloatParseHandling = previousFloatParseHandling.GetValueOrDefault();
			}
			if (_maxDepthSet)
			{
				reader.MaxDepth = previousMaxDepth;
			}
			if (_dateFormatStringSet)
			{
				reader.DateFormatString = previousDateFormatString;
			}
			if (reader is JsonTextReader jsonTextReader && jsonTextReader.PropertyNameTable != null && _contractResolver is DefaultContractResolver defaultContractResolver && jsonTextReader.PropertyNameTable == defaultContractResolver.GetNameTable())
			{
				jsonTextReader.PropertyNameTable = null;
			}
		}

		public void Serialize(TextWriter textWriter, object? value)
		{
			Serialize(new JsonTextWriter(textWriter), value);
		}

		public void Serialize(JsonWriter jsonWriter, object? value, Type? objectType)
		{
			SerializeInternal(jsonWriter, value, objectType);
		}

		public void Serialize(TextWriter textWriter, object? value, Type objectType)
		{
			Serialize(new JsonTextWriter(textWriter), value, objectType);
		}

		public void Serialize(JsonWriter jsonWriter, object? value)
		{
			SerializeInternal(jsonWriter, value, null);
		}

		private TraceJsonReader CreateTraceJsonReader(JsonReader reader)
		{
			TraceJsonReader traceJsonReader = new TraceJsonReader(reader);
			if (reader.TokenType != 0)
			{
				traceJsonReader.WriteCurrentToken();
			}
			return traceJsonReader;
		}

		internal virtual void SerializeInternal(JsonWriter jsonWriter, object? value, Type? objectType)
		{
			ValidationUtils.ArgumentNotNull(jsonWriter, "jsonWriter");
			Formatting? formatting = null;
			if (_formatting.HasValue && jsonWriter.Formatting != _formatting)
			{
				formatting = jsonWriter.Formatting;
				jsonWriter.Formatting = _formatting.GetValueOrDefault();
			}
			DateFormatHandling? dateFormatHandling = null;
			if (_dateFormatHandling.HasValue && jsonWriter.DateFormatHandling != _dateFormatHandling)
			{
				dateFormatHandling = jsonWriter.DateFormatHandling;
				jsonWriter.DateFormatHandling = _dateFormatHandling.GetValueOrDefault();
			}
			DateTimeZoneHandling? dateTimeZoneHandling = null;
			if (_dateTimeZoneHandling.HasValue && jsonWriter.DateTimeZoneHandling != _dateTimeZoneHandling)
			{
				dateTimeZoneHandling = jsonWriter.DateTimeZoneHandling;
				jsonWriter.DateTimeZoneHandling = _dateTimeZoneHandling.GetValueOrDefault();
			}
			FloatFormatHandling? floatFormatHandling = null;
			if (_floatFormatHandling.HasValue && jsonWriter.FloatFormatHandling != _floatFormatHandling)
			{
				floatFormatHandling = jsonWriter.FloatFormatHandling;
				jsonWriter.FloatFormatHandling = _floatFormatHandling.GetValueOrDefault();
			}
			StringEscapeHandling? stringEscapeHandling = null;
			if (_stringEscapeHandling.HasValue && jsonWriter.StringEscapeHandling != _stringEscapeHandling)
			{
				stringEscapeHandling = jsonWriter.StringEscapeHandling;
				jsonWriter.StringEscapeHandling = _stringEscapeHandling.GetValueOrDefault();
			}
			CultureInfo cultureInfo = null;
			if (_culture != null && !_culture.Equals(jsonWriter.Culture))
			{
				cultureInfo = jsonWriter.Culture;
				jsonWriter.Culture = _culture;
			}
			string dateFormatString = null;
			if (_dateFormatStringSet && jsonWriter.DateFormatString != _dateFormatString)
			{
				dateFormatString = jsonWriter.DateFormatString;
				jsonWriter.DateFormatString = _dateFormatString;
			}
			TraceJsonWriter traceJsonWriter = ((TraceWriter != null && TraceWriter.LevelFilter >= TraceLevel.Verbose) ? new TraceJsonWriter(jsonWriter) : null);
			new JsonSerializerInternalWriter(this).Serialize(traceJsonWriter ?? jsonWriter, value, objectType);
			if (traceJsonWriter != null)
			{
				TraceWriter.Trace(TraceLevel.Verbose, traceJsonWriter.GetSerializedJsonMessage(), null);
			}
			if (formatting.HasValue)
			{
				jsonWriter.Formatting = formatting.GetValueOrDefault();
			}
			if (dateFormatHandling.HasValue)
			{
				jsonWriter.DateFormatHandling = dateFormatHandling.GetValueOrDefault();
			}
			if (dateTimeZoneHandling.HasValue)
			{
				jsonWriter.DateTimeZoneHandling = dateTimeZoneHandling.GetValueOrDefault();
			}
			if (floatFormatHandling.HasValue)
			{
				jsonWriter.FloatFormatHandling = floatFormatHandling.GetValueOrDefault();
			}
			if (stringEscapeHandling.HasValue)
			{
				jsonWriter.StringEscapeHandling = stringEscapeHandling.GetValueOrDefault();
			}
			if (_dateFormatStringSet)
			{
				jsonWriter.DateFormatString = dateFormatString;
			}
			if (cultureInfo != null)
			{
				jsonWriter.Culture = cultureInfo;
			}
		}

		internal IReferenceResolver GetReferenceResolver()
		{
			if (_referenceResolver == null)
			{
				_referenceResolver = new DefaultReferenceResolver();
			}
			return _referenceResolver;
		}

		internal JsonConverter? GetMatchingConverter(Type type)
		{
			return GetMatchingConverter(_converters, type);
		}

		internal static JsonConverter? GetMatchingConverter(IList<JsonConverter>? converters, Type objectType)
		{
			if (converters != null)
			{
				for (int i = 0; i < converters.Count; i++)
				{
					JsonConverter jsonConverter = converters[i];
					if (jsonConverter.CanConvert(objectType))
					{
						return jsonConverter;
					}
				}
			}
			return null;
		}

		internal void OnError(Newtonsoft.Json.Serialization.ErrorEventArgs e)
		{
			this.Error?.Invoke(this, e);
		}
	}
	public class JsonSerializerSettings
	{
		internal const ReferenceLoopHandling DefaultReferenceLoopHandling = ReferenceLoopHandling.Error;

		internal const MissingMemberHandling DefaultMissingMemberHandling = MissingMemberHandling.Ignore;

		internal const NullValueHandling DefaultNullValueHandling = NullValueHandling.Include;

		internal const DefaultValueHandling DefaultDefaultValueHandling = DefaultValueHandling.Include;

		internal const ObjectCreationHandling DefaultObjectCreationHandling = ObjectCreationHandling.Auto;

		internal const PreserveReferencesHandling DefaultPreserveReferencesHandling = PreserveReferencesHandling.None;

		internal const ConstructorHandling DefaultConstructorHandling = ConstructorHandling.Default;

		internal const TypeNameHandling DefaultTypeNameHandling = TypeNameHandling.None;

		internal const MetadataPropertyHandling DefaultMetadataPropertyHandling = MetadataPropertyHandling.Default;

		internal static readonly StreamingContext DefaultContext;

		internal const Formatting DefaultFormatting = Formatting.None;

		internal const DateFormatHandling DefaultDateFormatHandling = DateFormatHandling.IsoDateFormat;

		internal const DateTimeZoneHandling DefaultDateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;

		internal const DateParseHandling DefaultDateParseHandling = DateParseHandling.DateTime;

		internal const FloatParseHandling DefaultFloatParseHandling = FloatParseHandling.Double;

		internal const FloatFormatHandling DefaultFloatFormatHandling = FloatFormatHandling.String;

		internal const StringEscapeHandling DefaultStringEscapeHandling = StringEscapeHandling.Default;

		internal const TypeNameAssemblyFormatHandling DefaultTypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple;

		internal static readonly CultureInfo DefaultCulture;

		internal const bool DefaultCheckAdditionalContent = false;

		internal const string DefaultDateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";

		internal const int DefaultMaxDepth = 64;

		internal Formatting? _formatting;

		internal DateFormatHandling? _dateFormatHandling;

		internal DateTimeZoneHandling? _dateTimeZoneHandling;

		internal DateParseHandling? _dateParseHandling;

		internal FloatFormatHandling? _floatFormatHandling;

		internal FloatParseHandling? _floatParseHandling;

		internal StringEscapeHandling? _stringEscapeHandling;

		internal CultureInfo? _culture;

		internal bool? _checkAdditionalContent;

		internal int? _maxDepth;

		internal bool _maxDepthSet;

		internal string? _dateFormatString;

		internal bool _dateFormatStringSet;

		internal TypeNameAssemblyFormatHandling? _typeNameAssemblyFormatHandling;

		internal DefaultValueHandling? _defaultValueHandling;

		internal PreserveReferencesHandling? _preserveReferencesHandling;

		internal NullValueHandling? _nullValueHandling;

		internal ObjectCreationHandling? _objectCreationHandling;

		internal MissingMemberHandling? _missingMemberHandling;

		internal ReferenceLoopHandling? _referenceLoopHandling;

		internal StreamingContext? _context;

		internal ConstructorHandling? _constructorHandling;

		internal TypeNameHandling? _typeNameHandling;

		internal MetadataPropertyHandling? _metadataPropertyHandling;

		public ReferenceLoopHandling ReferenceLoopHandling
		{
			get
			{
				return _referenceLoopHandling.GetValueOrDefault();
			}
			set
			{
				_referenceLoopHandling = value;
			}
		}

		public MissingMemberHandling MissingMemberHandling
		{
			get
			{
				return _missingMemberHandling.GetValueOrDefault();
			}
			set
			{
				_missingMemberHandling = value;
			}
		}

		public ObjectCreationHandling ObjectCreationHandling
		{
			get
			{
				return _objectCreationHandling.GetValueOrDefault();
			}
			set
			{
				_objectCreationHandling = value;
			}
		}

		public NullValueHandling NullValueHandling
		{
			get
			{
				return _nullValueHandling.GetValueOrDefault();
			}
			set
			{
				_nullValueHandling = value;
			}
		}

		public DefaultValueHandling DefaultValueHandling
		{
			get
			{
				return _defaultValueHandling.GetValueOrDefault();
			}
			set
			{
				_defaultValueHandling = value;
			}
		}

		public IList<JsonConverter> Converters { get; set; }

		public PreserveReferencesHandling PreserveReferencesHandling
		{
			get
			{
				return _preserveReferencesHandling.GetValueOrDef

UniGLTF.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using UniGLTF;
using UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier;
using UniGLTF.UniUnlit;
using UniGLTF.Utils;
using UniGLTF.Zip;
using UniJSON;
using Unity.Collections;
using UnityEngine;
using UnityEngine.Rendering;
using VRMShaders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
public class RenderPipelineMaterialDescriptorGeneratorUtility
{
	protected static RenderPipelineTypes GetRenderPipelineType()
	{
		RenderPipeline currentPipeline = RenderPipelineManager.currentPipeline;
		if (currentPipeline == null)
		{
			return RenderPipelineTypes.BuiltinRenderPipeline;
		}
		if (((object)currentPipeline).GetType().Name.Contains("HDRenderPipeline"))
		{
			return RenderPipelineTypes.HighDefinitionRenderPipeline;
		}
		if (((object)currentPipeline).GetType().Name.Contains("UniversalRenderPipeline"))
		{
			return RenderPipelineTypes.UniversalRenderPipeline;
		}
		return RenderPipelineTypes.Unknown;
	}

	public static IMaterialDescriptorGenerator GetValidGLTFMaterialDescriptorGenerator()
	{
		return GetRenderPipelineType() switch
		{
			RenderPipelineTypes.UniversalRenderPipeline => new UrpGltfMaterialDescriptorGenerator(), 
			RenderPipelineTypes.BuiltinRenderPipeline => new BuiltInGltfMaterialDescriptorGenerator(), 
			_ => null, 
		};
	}
}
public static class TriangleUtil
{
	public static IEnumerable<int> FlipTriangle(IEnumerable<byte> src)
	{
		return FlipTriangle(src.Select((Func<byte, int>)((byte x) => x)));
	}

	public static IEnumerable<int> FlipTriangle(IEnumerable<ushort> src)
	{
		return FlipTriangle(src.Select((Func<ushort, int>)((ushort x) => x)));
	}

	public static IEnumerable<int> FlipTriangle(IEnumerable<uint> src)
	{
		return FlipTriangle(src.Select((uint x) => (int)x));
	}

	public static IEnumerable<int> FlipTriangle(IEnumerable<int> src)
	{
		IEnumerator<int> it = src.GetEnumerator();
		while (it.MoveNext())
		{
			int i0 = it.Current;
			if (!it.MoveNext())
			{
				break;
			}
			int i1 = it.Current;
			if (!it.MoveNext())
			{
				break;
			}
			yield return it.Current;
			yield return i1;
			yield return i0;
		}
	}
}
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[11385]
		{
			0, 0, 0, 4, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 65, 114, 114, 97, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 63, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 67, 111, 108, 111, 114, 67,
			111, 110, 118, 101, 114, 115, 105, 111, 110, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 52,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 103, 108, 84, 70, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 53,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 73, 110, 100, 101, 120,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			56, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 92, 78, 117, 109, 101,
			114, 105, 99, 115, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			83, 116, 114, 105, 110, 103, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 85, 110, 105, 116, 121, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 66, 105, 110, 100, 112, 111,
			115, 101, 71, 105, 122, 109, 111, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 66, 111, 110, 101, 77, 101,
			115, 104, 69, 114, 97, 115, 101, 114, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 53, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 92, 66, 111, 110, 101, 78,
			111, 114, 109, 97, 108, 105, 122, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 50,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 101, 115, 104, 85, 116,
			105, 108, 105, 116, 121, 92, 77, 101, 115, 104,
			69, 120, 99, 108, 117, 100, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 77, 101, 115, 104, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 60, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 92, 77, 101, 115, 104, 73,
			110, 116, 101, 103, 114, 97, 116, 105, 111, 110,
			82, 101, 115, 117, 108, 116, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 92, 77, 101, 115, 104, 73, 110, 116,
			101, 103, 114, 97, 116, 111, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 60, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 92, 77, 101, 115, 104, 73, 110,
			116, 101, 103, 114, 97, 116, 111, 114, 85, 116,
			105, 108, 105, 116, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 95, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 65, 110, 100, 69, 120,
			116, 114, 97, 115, 92, 69, 109, 105, 115, 115,
			105, 118, 101, 77, 117, 108, 116, 105, 112, 108,
			105, 101, 114, 92, 68, 101, 115, 101, 114, 105,
			97, 108, 105, 122, 101, 114, 46, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 89, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 70, 111, 114, 109, 97, 116, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 65, 110,
			100, 69, 120, 116, 114, 97, 115, 92, 69, 109,
			105, 115, 115, 105, 118, 101, 77, 117, 108, 116,
			105, 112, 108, 105, 101, 114, 92, 70, 111, 114,
			109, 97, 116, 46, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 93, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 65, 110, 100, 69, 120,
			116, 114, 97, 115, 92, 69, 109, 105, 115, 115,
			105, 118, 101, 77, 117, 108, 116, 105, 112, 108,
			105, 101, 114, 92, 83, 101, 114, 105, 97, 108,
			105, 122, 101, 114, 46, 103, 46, 99, 115, 0,
			0, 0, 4, 0, 0, 0, 75, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 70,
			111, 114, 109, 97, 116, 92, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 65, 110, 100, 69,
			120, 116, 114, 97, 115, 92, 103, 108, 116, 102,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 90,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 70, 111, 114, 109, 97, 116, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 65,
			110, 100, 69, 120, 116, 114, 97, 115, 92, 103,
			108, 116, 102, 95, 109, 101, 115, 104, 95, 101,
			120, 116, 114, 97, 115, 95, 116, 97, 114, 103,
			101, 116, 78, 97, 109, 101, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 93, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 65, 110, 100,
			69, 120, 116, 114, 97, 115, 92, 75, 72, 82,
			95, 109, 97, 116, 101, 114, 105, 97, 108, 115,
			95, 101, 109, 105, 115, 115, 105, 118, 101, 95,
			115, 116, 114, 101, 110, 103, 116, 104, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 81, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 70, 111, 114, 109, 97, 116, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 65, 110,
			100, 69, 120, 116, 114, 97, 115, 92, 75, 72,
			82, 95, 109, 97, 116, 101, 114, 105, 97, 108,
			115, 95, 117, 110, 108, 105, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 80, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 65, 110, 100,
			69, 120, 116, 114, 97, 115, 92, 75, 72, 82,
			95, 116, 101, 120, 116, 117, 114, 101, 95, 98,
			97, 115, 105, 115, 117, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 83, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 65, 110, 100, 69, 120,
			116, 114, 97, 115, 92, 75, 72, 82, 95, 116,
			101, 120, 116, 117, 114, 101, 95, 116, 114, 97,
			110, 115, 102, 111, 114, 109, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 50, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 70,
			111, 114, 109, 97, 116, 92, 103, 108, 98, 84,
			121, 112, 101, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 48, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 69, 110, 117, 109,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			46, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 70, 111, 114, 109, 97, 116, 92,
			103, 108, 84, 70, 46, 99, 115, 0, 0, 0,
			4, 0, 0, 0, 55, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 65, 115, 115, 101, 116, 115, 46, 99, 115,
			0, 0, 0, 6, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 66, 117, 102, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 67, 97, 109, 101, 114, 97, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 60, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 71, 108, 116,
			102, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 46, 103, 46, 99, 115, 0, 0,
			0, 8, 0, 0, 0, 54, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 103, 108, 84, 70, 77,
			97, 116, 101, 114, 105, 97, 108, 46, 99, 115,
			0, 0, 0, 4, 0, 0, 0, 50, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 77, 101, 115, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 50, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 70, 111,
			114, 109, 97, 116, 92, 103, 108, 84, 70, 78,
			111, 100, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 58, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 70, 111, 114, 109,
			97, 116, 92, 71, 108, 116, 102, 83, 101, 114,
			105, 97, 108, 105, 122, 101, 114, 46, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 50,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 70, 111, 114, 109, 97, 116, 92, 103,
			108, 84, 70, 83, 107, 105, 110, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 53, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 84, 101, 120, 116, 117, 114, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 50, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 70, 111, 114, 109, 97, 116, 92, 73, 83,
			116, 111, 114, 97, 103, 101, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 61, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 70,
			111, 114, 109, 97, 116, 92, 74, 115, 111, 110,
			83, 99, 104, 101, 109, 97, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 71, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 65, 110, 105, 109, 97, 116, 105, 111, 110,
			73, 79, 92, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 73, 109, 112, 111, 114, 116, 101, 114,
			85, 116, 105, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 68, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 73,
			79, 92, 73, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			53, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 65, 114, 114, 97,
			121, 66, 121, 116, 101, 66, 117, 102, 102, 101,
			114, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 46, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 65, 114, 114,
			97, 121, 80, 105, 110, 46, 99, 115, 0, 0,
			0, 4, 0, 0, 0, 42, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 65, 120, 101, 115, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 52, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 66, 117, 102, 102, 101, 114, 65, 99, 99,
			101, 115, 115, 111, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 43, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 66, 121, 116, 101, 51, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 43, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 66, 121, 116, 101, 52, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 49, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 66, 121, 116, 101, 115, 82, 101,
			97, 100, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 55, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			69, 120, 112, 111, 114, 116, 105, 110, 103, 71,
			108, 116, 102, 68, 97, 116, 97, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 55, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 70, 105, 108, 101, 83, 121, 115,
			116, 101, 109, 83, 116, 111, 114, 97, 103, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			49, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 103, 108, 98, 73,
			109, 112, 111, 114, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 46, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 71, 108, 116, 102, 68, 97, 116,
			97, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 50, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 103, 108, 116,
			102, 69, 120, 112, 111, 114, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 56,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 71, 108, 116, 102, 69,
			120, 112, 111, 114, 116, 83, 101, 116, 116, 105,
			110, 103, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 50, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 71,
			108, 116, 102, 74, 115, 111, 110, 85, 116, 105,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 49, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 71, 108, 116,
			102, 85, 116, 105, 108, 105, 116, 121, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 53, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 73, 109, 112, 111, 114, 116,
			101, 114, 67, 111, 110, 116, 101, 120, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 63,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 67, 111, 110, 116, 101, 120, 116,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			61, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 73, 109, 112, 111,
			114, 116, 101, 114, 67, 111, 110, 116, 101, 120,
			116, 83, 112, 101, 101, 100, 76, 111, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 93,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 79, 92, 66, 117, 105, 108,
			116, 73, 110, 82, 80, 92, 69, 120, 112, 111,
			114, 116, 92, 66, 117, 105, 108, 116, 73, 110,
			71, 108, 116, 102, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			107, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 79, 92, 66, 117, 105,
			108, 116, 73, 110, 82, 80, 92, 69, 120, 112,
			111, 114, 116, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 66, 117, 105, 108, 116, 73,
			110, 70, 97, 108, 108, 98, 97, 99, 107, 77,
			97, 116, 101, 114, 105, 97, 108, 69, 120, 112,
			111, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 111, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 73,
			79, 92, 66, 117, 105, 108, 116, 73, 110, 82,
			80, 92, 69, 120, 112, 111, 114, 116, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 115, 92, 66,
			117, 105, 108, 116, 73, 110, 71, 101, 110, 101,
			114, 105, 99, 85, 110, 108, 105, 116, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 107, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 66, 117, 105, 108, 116, 73, 110, 82, 80,
			92, 69, 120, 112, 111, 114, 116, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 115, 92, 66, 117,
			105, 108, 116, 73, 110, 83, 116, 97, 110, 100,
			97, 114, 100, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 107,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 79, 92, 66, 117, 105, 108,
			116, 73, 110, 82, 80, 92, 69, 120, 112, 111,
			114, 116, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 115, 92, 66, 117, 105, 108, 116, 73, 110,
			85, 110, 105, 85, 110, 108, 105, 116, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 104, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 66, 117, 105, 108, 116, 73, 110, 82, 80,
			92, 73, 109, 112, 111, 114, 116, 92, 66, 117,
			105, 108, 116, 73, 110, 71, 108, 116, 102, 77,
			97, 116, 101, 114, 105, 97, 108, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 110, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 79, 92, 66, 117, 105, 108, 116, 73, 110,
			82, 80, 92, 73, 109, 112, 111, 114, 116, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 115, 92,
			66, 117, 105, 108, 116, 73, 110, 71, 108, 116,
			102, 68, 101, 102, 97, 117, 108, 116, 77, 97,
			116, 101, 114, 105, 97, 108, 73, 109, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 106, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 66, 117, 105, 108, 116, 73, 110, 82, 80,
			92, 73, 109, 112, 111, 114, 116, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 115, 92, 66, 117,
			105, 108, 116, 73, 110, 71, 108, 116, 102, 80,
			98, 114, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 108, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 66, 117, 105, 108, 116,
			73, 110, 82, 80, 92, 73, 109, 112, 111, 114,
			116, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 92, 66, 117, 105, 108, 116, 73, 110, 71,
			108, 116, 102, 85, 110, 108, 105, 116, 77, 97,
			116, 101, 114, 105, 97, 108, 73, 109, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 72, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 71, 108, 116, 102, 77, 97, 116, 101, 114,
			105, 97, 108, 69, 120, 112, 111, 114, 116, 85,
			116, 105, 108, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 72, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 71, 108, 116, 102, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 109, 112, 111, 114, 116, 85,
			116, 105, 108, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 77, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 79,
			92, 73, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			71, 101, 110, 101, 114, 97, 116, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 66,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 79, 92, 73, 77, 97, 116,
			101, 114, 105, 97, 108, 69, 120, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 80, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 109,
			112, 111, 114, 116, 101, 114, 80, 97, 114, 97,
			109, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 88, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 79, 92, 82, 101,
			110, 100, 101, 114, 80, 105, 112, 101, 108, 105,
			110, 101, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			85, 116, 105, 108, 105, 116, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 65, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 73, 79, 92, 84, 101, 120, 116, 117, 114,
			101, 84, 114, 97, 110, 115, 102, 111, 114, 109,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			100, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 79, 92, 85, 82, 80,
			92, 73, 109, 112, 111, 114, 116, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 115, 92, 85, 114,
			112, 71, 108, 116, 102, 68, 101, 102, 97, 117,
			108, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 96, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 85, 82, 80, 92, 73,
			109, 112, 111, 114, 116, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 115, 92, 85, 114, 112, 71,
			108, 116, 102, 80, 98, 114, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 109, 112, 111, 114, 116,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 94, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 73, 79, 92, 85,
			82, 80, 92, 73, 109, 112, 111, 114, 116, 92,
			85, 114, 112, 71, 108, 116, 102, 77, 97, 116,
			101, 114, 105, 97, 108, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 71, 101, 110, 101, 114,
			97, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 63, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 101, 115, 104, 73, 79, 92, 66, 108, 101,
			110, 100, 83, 104, 97, 112, 101, 69, 120, 112,
			111, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 61, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 101, 115, 104, 73, 79, 92, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 70, 105,
			108, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 59, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 101, 115, 104, 73, 79, 92, 74, 111, 105,
			110, 116, 115, 65, 99, 99, 101, 115, 115, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 53, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 101, 115,
			104, 73, 79, 92, 77, 101, 115, 104, 68, 97,
			116, 97, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 77, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 101,
			115, 104, 73, 79, 92, 77, 101, 115, 104, 69,
			120, 112, 111, 114, 116, 101, 114, 95, 68, 105,
			118, 105, 100, 101, 100, 86, 101, 114, 116, 101,
			120, 66, 117, 102, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 76, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 77, 101, 115, 104, 73, 79, 92,
			77, 101, 115, 104, 69, 120, 112, 111, 114, 116,
			101, 114, 95, 83, 104, 97, 114, 101, 100, 86,
			101, 114, 116, 101, 120, 66, 117, 102, 102, 101,
			114, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 59, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 101, 115,
			104, 73, 79, 92, 77, 101, 115, 104, 69, 120,
			112, 111, 114, 116, 73, 110, 102, 111, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 59, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 101, 115, 104, 73, 79,
			92, 77, 101, 115, 104, 69, 120, 112, 111, 114,
			116, 85, 116, 105, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 57, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 77, 101, 115, 104, 73, 79, 92, 77, 101,
			115, 104, 85, 112, 108, 111, 97, 100, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			56, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 77, 101, 115, 104,
			73, 79, 92, 77, 101, 115, 104, 86, 101, 114,
			116, 101, 120, 48, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 56, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			77, 101, 115, 104, 73, 79, 92, 77, 101, 115,
			104, 86, 101, 114, 116, 101, 120, 49, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 56, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 101, 115, 104, 73, 79,
			92, 77, 101, 115, 104, 86, 101, 114, 116, 101,
			120, 50, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 62, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 101,
			115, 104, 73, 79, 92, 77, 101, 115, 104, 86,
			101, 114, 116, 101, 120, 85, 116, 105, 108, 105,
			116, 121, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 62, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 101,
			115, 104, 73, 79, 92, 77, 101, 115, 104, 87,
			105, 116, 104, 77, 97, 116, 101, 114, 105, 97,
			108, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 59, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 77, 101,
			115, 104, 73, 79, 92, 80, 111, 115, 105, 116,
			105, 111, 110, 77, 105, 110, 77, 97, 120, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 64,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 77, 101, 115, 104, 73,
			79, 92, 80, 114, 105, 109, 105, 116, 105, 118,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 57, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 101, 115,
			104, 73, 79, 92, 83, 107, 105, 110, 110, 105,
			110, 103, 73, 110, 102, 111, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 57, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 77, 101, 115, 104, 73, 79, 92, 84,
			114, 105, 97, 110, 103, 108, 101, 85, 116, 105,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 61, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 77, 101, 115,
			104, 73, 79, 92, 86, 101, 114, 116, 101, 120,
			67, 111, 108, 111, 114, 83, 116, 97, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			60, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 77, 101, 115, 104,
			73, 79, 92, 87, 101, 105, 103, 104, 116, 115,
			65, 99, 99, 101, 115, 115, 111, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 52, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 70, 108, 97, 103, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 61, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 77, 111, 110, 111, 66, 101,
			104, 97, 118, 105, 111, 117, 114, 67, 111, 109,
			112, 97, 114, 97, 116, 111, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 78, 97, 116, 105, 118, 101, 65,
			114, 114, 97, 121, 77, 97, 110, 97, 103, 101,
			114, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 50, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 78, 111, 100,
			101, 73, 109, 112, 111, 114, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 63,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 80, 97, 114, 115, 101,
			114, 92, 65, 117, 116, 111, 71, 108, 116, 102,
			70, 105, 108, 101, 80, 97, 114, 115, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			60, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 80, 97, 114, 115,
			101, 114, 92, 71, 108, 98, 66, 105, 110, 97,
			114, 121, 80, 97, 114, 115, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 58, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 80, 97, 114, 115, 101, 114,
			92, 71, 108, 98, 70, 105, 108, 101, 80, 97,
			114, 115, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 62, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			80, 97, 114, 115, 101, 114, 92, 71, 108, 98,
			76, 111, 119, 76, 101, 118, 101, 108, 80, 97,
			114, 115, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 76, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			80, 97, 114, 115, 101, 114, 92, 71, 108, 116,
			102, 70, 105, 108, 101, 87, 105, 116, 104, 82,
			101, 115, 111, 117, 114, 99, 101, 70, 105, 108,
			101, 115, 80, 97, 114, 115, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 70, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 80, 97, 114, 115, 101, 114,
			92, 90, 105, 112, 65, 114, 99, 104, 105, 118,
			101, 100, 71, 108, 116, 102, 70, 105, 108, 101,
			80, 97, 114, 115, 101, 114, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 50, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 80, 114, 111, 103, 114, 101, 115, 115,
			73, 110, 102, 111, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 73, 79, 92,
			83, 97, 102, 101, 77, 97, 114, 115, 104, 97,
			108, 67, 111, 112, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 44, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 73, 79,
			92, 83, 66, 121, 116, 101, 52, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 47, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 83, 107, 105, 110, 74, 111, 105,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 73, 79, 92, 84, 101,
			120, 116, 117, 114, 101, 73, 79, 92, 71, 108,
			116, 102, 80, 98, 114, 84, 101, 120, 116, 117,
			114, 101, 73, 109, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			78, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 84, 101, 120, 116,
			117, 114, 101, 73, 79, 92, 71, 108, 116, 102,
			84, 101, 120, 116, 117, 114, 101, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 67, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 84, 101, 120, 116, 117, 114, 101, 73,
			79, 92, 71, 108, 116, 102, 84, 101, 120, 116,
			117, 114, 101, 69, 120, 112, 111, 114, 116, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 67, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 73, 79, 92, 84, 101, 120,
			116, 117, 114, 101, 73, 79, 92, 71, 108, 116,
			102, 84, 101, 120, 116, 117, 114, 101, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 75, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 84, 101, 120, 116, 117, 114, 101, 73,
			79, 92, 73, 84, 101, 120, 116, 117, 114, 101,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			71, 101, 110, 101, 114, 97, 116, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 66,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 73, 79, 92, 84, 101, 120, 116, 117,
			114, 101, 73, 79, 92, 84, 101, 120, 116, 117,
			114, 101, 83, 97, 109, 112, 108, 101, 114, 85,
			116, 105, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 47, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 85,
			110, 105, 116, 121, 80, 97, 116, 104, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 51, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 73, 79, 92, 85, 114, 105, 66, 121, 116,
			101, 66, 117, 102, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 45, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			73, 79, 92, 85, 83, 104, 111, 114, 116, 50,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			45, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 73, 79, 92, 85, 83, 104, 111,
			114, 116, 51, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 45, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 73, 79, 92, 85,
			83, 104, 111, 114, 116, 52, 46, 99, 115, 0,
			0, 0, 6, 0, 0, 0, 55, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 73,
			79, 92, 90, 105, 112, 65, 114, 99, 104, 105,
			118, 101, 83, 116, 111, 114, 97, 103, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 54,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 71,
			108, 116, 102, 73, 110, 115, 116, 97, 110, 99,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 51, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 85, 110, 105, 71, 76, 84,
			70, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			49, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 85, 110, 105, 71, 76, 84, 70,
			86, 101, 114, 115, 105, 111, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 57, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			85, 110, 105, 71, 76, 84, 70, 86, 101, 114,
			115, 105, 111, 110, 95, 112, 97, 114, 116, 105,
			97, 108, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 56, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 86, 97, 108, 105, 100,
			97, 116, 105, 111, 110, 92, 86, 97, 108, 105,
			100, 97, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 45, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 66,
			121, 116, 101, 66, 117, 102, 102, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 47,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 67, 111, 110, 99, 114, 101, 116, 101,
			67, 97, 115, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 49, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 67, 111, 110,
			99, 114, 101, 116, 101, 67, 97, 115, 116, 46,
			103, 46, 99, 115, 0, 0, 0, 4, 0, 0,
			0, 45, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 69, 120, 99, 101, 112, 116,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 68, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 92, 65, 114,
			114, 97, 121, 83, 101, 103, 109, 101, 110, 116,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			60, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 66, 121, 116, 101, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 70, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 74, 83, 79, 78,
			92, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 68, 97, 116, 101, 84, 105, 109, 101,
			79, 102, 102, 115, 101, 116, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 60, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			69, 110, 117, 109, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 62, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 92, 80, 97,
			114, 115, 101, 114, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 92, 84, 121,
			112, 101, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 54, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			74, 83, 79, 78, 92, 70, 111, 114, 109, 97,
			116, 116, 101, 114, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 73, 70, 105,
			108, 101, 83, 121, 115, 116, 101, 109, 65, 99,
			99, 101, 115, 115, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 45, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 73,
			70, 111, 114, 109, 97, 116, 116, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 52,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 73, 83, 116, 111, 114, 101, 92, 66,
			121, 116, 101, 115, 83, 116, 111, 114, 101, 46,
			99, 115, 0, 0, 0, 4, 0, 0, 0, 51,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 74, 83, 79,
			78, 92, 73, 83, 116, 111, 114, 101, 92, 66,
			121, 116, 101, 85, 110, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 48, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 74, 83, 79, 78,
			92, 73, 83, 116, 111, 114, 101, 92, 73, 83,
			116, 111, 114, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 73, 83, 116,
			111, 114, 101, 92, 83, 116, 114, 101, 97, 109,
			83, 116, 111, 114, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 60, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 73, 83,
			116, 111, 114, 101, 92, 83, 116, 114, 105, 110,
			103, 66, 117, 105, 108, 100, 101, 114, 83, 116,
			111, 114, 101, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 53, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 74, 83, 79, 78, 92, 74, 115, 111, 110,
			92, 74, 115, 111, 110, 70, 111, 114, 109, 97,
			116, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 50, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 74, 83, 79, 78, 92, 74, 115, 111,
			110, 92, 74, 115, 111, 110, 80, 97, 114, 115,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 50, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			74, 83, 79, 78, 92, 74, 115, 111, 110, 92,
			74, 115, 111, 110, 83, 116, 114, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			49, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 74, 115, 111, 110, 92, 74, 115,
			111, 110, 86, 97, 108, 117, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 60, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 74, 83, 79, 78, 92,
			76, 105, 115, 116, 84, 114, 101, 101, 78, 111,
			100, 101, 92, 76, 105, 115, 116, 84, 114, 101,
			101, 78, 111, 100, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 75, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 76, 105,
			115, 116, 84, 114, 101, 101, 78, 111, 100, 101,
			92, 76, 105, 115, 116, 84, 114, 101, 101, 78,
			111, 100, 101, 65, 114, 114, 97, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 70, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 74, 83, 79, 78,
			92, 76, 105, 115, 116, 84, 114, 101, 101, 78,
			111, 100, 101, 92, 76, 105, 115, 116, 84, 114,
			101, 101, 78, 111, 100, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 76, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 76,
			105, 115, 116, 84, 114, 101, 101, 78, 111, 100,
			101, 92, 76, 105, 115, 116, 84, 114, 101, 101,
			78, 111, 100, 101, 79, 98, 106, 101, 99, 116,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			57, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 85, 116, 102, 56, 83, 116, 114,
			105, 110, 103, 92, 73, 85, 116, 102, 56, 83,
			116, 114, 105, 110, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 58, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 85, 116,
			102, 56, 83, 116, 114, 105, 110, 103, 92, 85,
			116, 102, 56, 73, 116, 101, 114, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 56, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 74,
			83, 79, 78, 92, 85, 116, 102, 56, 83, 116,
			114, 105, 110, 103, 92, 85, 116, 102, 56, 83,
			116, 114, 105, 110, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 63, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 74, 83, 79, 78, 92, 85, 116,
			102, 56, 83, 116, 114, 105, 110, 103, 92, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 66,
			117, 105, 108, 100, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 66, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 74, 83, 79, 78, 92, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 92,
			85, 116, 102, 56, 83, 116, 114, 105, 110, 103,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			74, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 74, 83,
			79, 78, 92, 85, 116, 102, 56, 83, 116, 114,
			105, 110, 103, 92, 85, 116, 102, 56, 83, 116,
			114, 105, 110, 103, 83, 112, 108, 105, 116, 116,
			101, 114, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115
		};
		result.TypesData = new byte[7720]
		{
			1, 0, 0, 0, 11, 85, 110, 105, 71, 76,
			84, 70, 124, 80, 105, 110, 1, 0, 0, 0,
			11, 85, 110, 105, 71, 76, 84, 70, 124, 80,
			105, 110, 0, 0, 0, 0, 23, 85, 110, 105,
			71, 76, 84, 70, 124, 65, 114, 114, 97, 121,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 30, 85, 110, 105, 71, 76,
			84, 70, 124, 65, 114, 114, 97, 121, 83, 101,
			103, 109, 101, 110, 116, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 33,
			85, 110, 105, 71, 76, 84, 70, 124, 67, 111,
			108, 111, 114, 67, 111, 110, 118, 101, 114, 115,
			105, 111, 110, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 22, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 35, 85, 110, 105, 71, 76,
			84, 70, 46, 103, 108, 84, 70, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 124, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 86, 101, 99,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 73, 110, 100, 101, 120, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 26, 85, 110, 105, 71, 76, 84, 70,
			124, 78, 117, 109, 101, 114, 105, 99, 115, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 24, 85, 110, 105, 71, 76, 84,
			70, 124, 83, 116, 114, 105, 110, 103, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 14, 85, 110, 105, 71, 76, 84, 70,
			124, 80, 111, 115, 82, 111, 116, 0, 0, 0,
			0, 18, 85, 110, 105, 71, 76, 84, 70, 124,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 85, 110, 105, 116, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 33, 85, 110, 105, 71, 76, 84, 70,
			46, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 124, 66, 105, 110, 100, 112, 111, 115,
			101, 71, 105, 122, 109, 111, 0, 0, 0, 0,
			34, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 66, 111, 110, 101, 77, 101, 115, 104, 69,
			114, 97, 115, 101, 114, 0, 0, 0, 0, 51,
			85, 110, 105, 71, 76, 84, 70, 46, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 46,
			66, 111, 110, 101, 77, 101, 115, 104, 69, 114,
			97, 115, 101, 114, 124, 69, 120, 99, 108, 117,
			100, 101, 66, 111, 110, 101, 73, 110, 100, 101,
			120, 0, 0, 0, 0, 44, 85, 110, 105, 71,
			76, 84, 70, 46, 77, 101, 115, 104, 85, 116,
			105, 108, 105, 116, 121, 46, 66, 111, 110, 101,
			77, 101, 115, 104, 69, 114, 97, 115, 101, 114,
			124, 69, 114, 97, 115, 101, 66, 111, 110, 101,
			0, 0, 0, 0, 34, 85, 110, 105, 71, 76,
			84, 70, 46, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 124, 66, 111, 110, 101, 78,
			111, 114, 109, 97, 108, 105, 122, 101, 114, 0,
			0, 0, 0, 51, 85, 110, 105, 71, 76, 84,
			70, 46, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 46, 66, 111, 110, 101, 78, 111,
			114, 109, 97, 108, 105, 122, 101, 114, 124, 66,
			108, 101, 110, 100, 83, 104, 97, 112, 101, 82,
			101, 112, 111, 114, 116, 0, 0, 0, 0, 66,
			85, 110, 105, 71, 76, 84, 70, 46, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 46,
			66, 111, 110, 101, 78, 111, 114, 109, 97, 108,
			105, 122, 101, 114, 43, 66, 108, 101, 110, 100,
			83, 104, 97, 112, 101, 82, 101, 112, 111, 114,
			116, 124, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 83, 116, 97, 116, 0, 0, 0, 0,
			31, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 85, 116, 105, 108, 105, 116, 121,
			124, 77, 101, 115, 104, 69, 120, 99, 108, 117,
			100, 101, 0, 0, 0, 0, 34, 85, 110, 105,
			71, 76, 84, 70, 46, 77, 101, 115, 104, 85,
			116, 105, 108, 105, 116, 121, 124, 77, 101, 115,
			104, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 27, 85, 110, 105, 71,
			76, 84, 70, 46, 77, 101, 115, 104, 85, 116,
			105, 108, 105, 116, 121, 124, 77, 101, 115, 104,
			77, 97, 112, 0, 0, 0, 0, 41, 85, 110,
			105, 71, 76, 84, 70, 46, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 124, 77, 101,
			115, 104, 73, 110, 116, 101, 103, 114, 97, 116,
			105, 111, 110, 82, 101, 115, 117, 108, 116, 0,
			0, 0, 0, 34, 85, 110, 105, 71, 76, 84,
			70, 46, 77, 101, 115, 104, 85, 116, 105, 108,
			105, 116, 121, 124, 77, 101, 115, 104, 73, 110,
			116, 101, 103, 114, 97, 116, 111, 114, 0, 0,
			0, 0, 42, 85, 110, 105, 71, 76, 84, 70,
			46, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 46, 77, 101, 115, 104, 73, 110, 116,
			101, 103, 114, 97, 116, 111, 114, 124, 83, 117,
			98, 77, 101, 115, 104, 0, 0, 0, 0, 45,
			85, 110, 105, 71, 76, 84, 70, 46, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 46,
			77, 101, 115, 104, 73, 110, 116, 101, 103, 114,
			97, 116, 111, 114, 124, 66, 108, 101, 110, 100,
			83, 104, 97, 112, 101, 0, 0, 0, 0, 41,
			85, 110, 105, 71, 76, 84, 70, 46, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 124,
			77, 101, 115, 104, 73, 110, 116, 101, 103, 114,
			97, 116, 111, 114, 85, 116, 105, 108, 105, 116,
			121, 0, 0, 0, 0, 73, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			109, 97, 116, 101, 114, 105, 97, 108, 115, 95,
			104, 100, 114, 95, 101, 109, 105, 115, 115, 105,
			118, 101, 77, 117, 108, 116, 105, 112, 108, 105,
			101, 114, 124, 71, 108, 116, 102, 68, 101, 115,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 0,
			0, 0, 0, 94, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 109, 97,
			116, 101, 114, 105, 97, 108, 115, 95, 104, 100,
			114, 95, 101, 109, 105, 115, 115, 105, 118, 101,
			77, 117, 108, 116, 105, 112, 108, 105, 101, 114,
			124, 86, 82, 77, 67, 95, 109, 97, 116, 101,
			114, 105, 97, 108, 115, 95, 104, 100, 114, 95,
			101, 109, 105, 115, 115, 105, 118, 101, 77, 117,
			108, 116, 105, 112, 108, 105, 101, 114, 0, 0,
			0, 0, 71, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 109, 97, 116,
			101, 114, 105, 97, 108, 115, 95, 104, 100, 114,
			95, 101, 109, 105, 115, 115, 105, 118, 101, 77,
			117, 108, 116, 105, 112, 108, 105, 101, 114, 124,
			71, 108, 116, 102, 83, 101, 114, 105, 97, 108,
			105, 122, 101, 114, 0, 0, 0, 0, 21, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			0, 0, 0, 0, 27, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 69, 120, 112, 111,
			114, 116, 0, 0, 0, 0, 27, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 73, 109,
			112, 111, 114, 116, 0, 0, 0, 0, 40, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 116,
			102, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			70, 111, 114, 109, 97, 116, 116, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 36, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 116, 102, 95, 109, 101, 115,
			104, 95, 101, 120, 116, 114, 97, 115, 95, 116,
			97, 114, 103, 101, 116, 78, 97, 109, 101, 115,
			0, 0, 0, 0, 44, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 95, 75, 72,
			82, 95, 109, 97, 116, 101, 114, 105, 97, 108,
			115, 95, 101, 109, 105, 115, 115, 105, 118, 101,
			95, 115, 116, 114, 101, 110, 103, 116, 104, 0,
			0, 0, 0, 32, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 84, 70, 95, 75, 72, 82,
			95, 109, 97, 116, 101, 114, 105, 97, 108, 115,
			95, 117, 110, 108, 105, 116, 0, 0, 0, 0,
			31, 85, 110, 105, 71, 76, 84, 70, 124, 103,
			108, 84, 70, 95, 75, 72, 82, 95, 116, 101,
			120, 116, 117, 114, 101, 95, 98, 97, 115, 105,
			115, 117, 0, 0, 0, 0, 34, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 95,
			75, 72, 82, 95, 116, 101, 120, 116, 117, 114,
			101, 95, 116, 114, 97, 110, 115, 102, 111, 114,
			109, 0, 0, 0, 0, 17, 85, 110, 105, 71,
			76, 84, 70, 124, 71, 108, 98, 72, 101, 97,
			100, 101, 114, 0, 0, 0, 0, 16, 85, 110,
			105, 71, 76, 84, 70, 124, 71, 108, 98, 67,
			104, 117, 110, 107, 0, 0, 0, 0, 11, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 98,
			0, 0, 0, 0, 33, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 84, 121, 112, 101, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 17, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 116, 102, 83, 99, 101, 110, 101,
			0, 0, 0, 0, 12, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 0, 0, 0,
			0, 27, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 84, 70, 65, 110, 105, 109, 97, 116,
			105, 111, 110, 84, 97, 114, 103, 101, 116, 0,
			0, 0, 0, 28, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 84, 70, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 67, 104, 97, 110, 110,
			101, 108, 0, 0, 0, 0, 28, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 83, 97,
			109, 112, 108, 101, 114, 0, 0, 0, 0, 21,
			85, 110, 105, 71, 76, 84, 70, 124, 103, 108,
			84, 70, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 0, 0, 0, 0, 18, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 65, 115,
			115, 101, 116, 115, 0, 0, 0, 0, 18, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 66, 117, 102, 102, 101, 114, 0, 0, 0,
			0, 22, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 84, 70, 66, 117, 102, 102, 101, 114,
			86, 105, 101, 119, 0, 0, 0, 0, 25, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 83, 112, 97, 114, 115, 101, 73, 110, 100,
			105, 99, 101, 115, 0, 0, 0, 0, 24, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 83, 112, 97, 114, 115, 101, 86, 97, 108,
			117, 101, 115, 0, 0, 0, 0, 18, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			83, 112, 97, 114, 115, 101, 0, 0, 0, 0,
			20, 85, 110, 105, 71, 76, 84, 70, 124, 103,
			108, 84, 70, 65, 99, 99, 101, 115, 115, 111,
			114, 0, 0, 0, 0, 24, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 79, 114,
			116, 104, 111, 103, 114, 97, 112, 104, 105, 99,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 80, 101, 114,
			115, 112, 101, 99, 116, 105, 118, 101, 0, 0,
			0, 0, 18, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 84, 70, 67, 97, 109, 101, 114,
			97, 0, 0, 0, 0, 24, 85, 110, 105, 71,
			76, 84, 70, 124, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 84, 101, 120,
			116, 117, 114, 101, 73, 110, 102, 111, 0, 0,
			0, 0, 40, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 84, 70, 77, 97, 116, 101, 114,
			105, 97, 108, 66, 97, 115, 101, 67, 111, 108,
			111, 114, 84, 101, 120, 116, 117, 114, 101, 73,
			110, 102, 111, 0, 0, 0, 0, 48, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			77, 97, 116, 101, 114, 105, 97, 108, 77, 101,
			116, 97, 108, 108, 105, 99, 82, 111, 117, 103,
			104, 110, 101, 115, 115, 84, 101, 120, 116, 117,
			114, 101, 73, 110, 102, 111, 0, 0, 0, 0,
			37, 85, 110, 105, 71, 76, 84, 70, 124, 103,
			108, 84, 70, 77, 97, 116, 101, 114, 105, 97,
			108, 78, 111, 114, 109, 97, 108, 84, 101, 120,
			116, 117, 114, 101, 73, 110, 102, 111, 0, 0,
			0, 0, 40, 85, 110, 105, 71, 76, 84, 70,
			124, 103, 108, 84, 70, 77, 97, 116, 101, 114,
			105, 97, 108, 79, 99, 99, 108, 117, 115, 105,
			111, 110, 84, 101, 120, 116, 117, 114, 101, 73,
			110, 102, 111, 0, 0, 0, 0, 39, 85, 110,
			105, 71, 76, 84, 70, 124, 103, 108, 84, 70,
			77, 97, 116, 101, 114, 105, 97, 108, 69, 109,
			105, 115, 115, 105, 118, 101, 84, 101, 120, 116,
			117, 114, 101, 73, 110, 102, 111, 0, 0, 0,
			0, 32, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 84, 70, 80, 98, 114, 77, 101, 116,
			97, 108, 108, 105, 99, 82, 111, 117, 103, 104,
			110, 101, 115, 115, 0, 0, 0, 0, 20, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 77, 97, 116, 101, 114, 105, 97, 108, 0,
			0, 0, 0, 22, 85, 110, 105, 71, 76, 84,
			70, 124, 103, 108, 84, 70, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 115, 0, 0, 0, 0,
			23, 85, 110, 105, 71, 76, 84, 70, 124, 103,
			108, 116, 102, 77, 111, 114, 112, 104, 84, 97,
			114, 103, 101, 116, 0, 0, 0, 0, 22, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 80, 114, 105, 109, 105, 116, 105, 118, 101,
			115, 0, 0, 0, 0, 16, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 77, 101,
			115, 104, 0, 0, 0, 0, 16, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 78,
			111, 100, 101, 0, 0, 0, 0, 22, 85, 110,
			105, 71, 76, 84, 70, 124, 71, 108, 116, 102,
			83, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 16, 85, 110, 105, 71, 76,
			84, 70, 124, 103, 108, 84, 70, 83, 107, 105,
			110, 0, 0, 0, 0, 26, 85, 110, 105, 71,
			76, 84, 70, 124, 103, 108, 84, 70, 84, 101,
			120, 116, 117, 114, 101, 83, 97, 109, 112, 108,
			101, 114, 0, 0, 0, 0, 17, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 84, 70, 73,
			109, 97, 103, 101, 0, 0, 0, 0, 19, 85,
			110, 105, 71, 76, 84, 70, 124, 103, 108, 84,
			70, 84, 101, 120, 116, 117, 114, 101, 0, 0,
			0, 0, 16, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 83, 116, 111, 114, 97, 103, 101, 0,
			0, 0, 0, 31, 85, 110, 105, 71, 76, 84,
			70, 124, 66, 97, 115, 101, 74, 115, 111, 110,
			83, 99, 104, 101, 109, 97, 65, 116, 116, 114,
			105, 98, 117, 116, 101, 0, 0, 0, 0, 27,
			85, 110, 105, 71, 76, 84, 70, 124, 74, 115,
			111, 110, 83, 99, 104, 101, 109, 97, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 0, 0, 0,
			0, 31, 85, 110, 105, 71, 76, 84, 70, 124,
			73, 116, 101, 109, 74, 115, 111, 110, 83, 99,
			104, 101, 109, 97, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 0, 0, 0, 0, 29, 85, 110,
			105, 71, 76, 84, 70, 124, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 73, 109, 112, 111, 114,
			116, 101, 114, 85, 116, 105, 108, 0, 0, 0,
			0, 26, 85, 110, 105, 71, 76, 84, 70, 124,
			73, 65, 110, 105, 109, 97, 116, 105, 111, 110,
			69, 120, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 23, 85, 110, 105, 71, 76, 84, 70,
			124, 65, 114, 114, 97, 121, 66, 121, 116, 101,
			66, 117, 102, 102, 101, 114, 1, 0, 0, 0,
			16, 85, 110, 105, 71, 76, 84, 70, 124, 65,
			114, 114, 97, 121, 80, 105, 110, 1, 0, 0,
			0, 16, 85, 110, 105, 71, 76, 84, 70, 124,
			65, 114, 114, 97, 121, 80, 105, 110, 0, 0,
			0, 0, 26, 85, 110, 105, 71, 76, 84, 70,
			124, 65, 114, 114, 97, 121, 80, 105, 110, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 21, 85, 110, 105, 71, 76, 84,
			70, 124, 73, 65, 120, 105, 115, 73, 110, 118,
			101, 114, 116, 101, 114, 0, 0, 0, 0, 16,
			85, 110, 105, 71, 76, 84, 70, 124, 82, 101,
			118, 101, 114, 115, 101, 90, 0, 0, 0, 0,
			16, 85, 110, 105, 71, 76, 84, 70, 124, 82,
			101, 118, 101, 114, 115, 101, 88, 0, 0, 0,
			0, 24, 85, 110, 105, 71, 76, 84, 70, 124,
			65, 120, 105, 115, 101, 115, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			34, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 65, 99, 99, 101, 115, 115, 111,
			114, 84, 121, 112, 101, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 35,
			85, 110, 105, 71, 76, 84, 70, 124, 71, 108,
			116, 102, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 84, 121, 112, 101, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 22,
			85, 110, 105, 71, 76, 84, 70, 124, 66, 117,
			102, 102, 101, 114, 65, 99, 99, 101, 115, 115,
			111, 114, 0, 0, 0, 0, 13, 85, 110, 105,
			71, 76, 84, 70, 124, 66, 121, 116, 101, 51,
			0, 0, 0, 0, 13, 85, 110, 105, 71, 76,
			84, 70, 124, 66, 121, 116, 101, 52, 0, 0,
			0, 0, 19, 85, 110, 105, 71, 76, 84, 70,
			124, 66, 121, 116, 101, 115, 82, 101, 97, 100,
			101, 114, 0, 0, 0, 0, 25, 85, 110, 105,
			71, 76, 84, 70, 124, 69, 120, 112, 111, 114,
			116, 105, 110, 103, 71, 108, 116, 102, 68, 97,
			116, 97, 0, 0, 0, 0, 25, 85, 110, 105,
			71, 76, 84, 70, 124, 70, 105, 108, 101, 83,
			121, 115, 116, 101, 109, 83, 116, 111, 114, 97,
			103, 101, 0, 0, 0, 0, 19, 85, 110, 105,
			71, 76, 84, 70, 124, 103, 108, 98, 73, 109,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			16, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 68, 97, 116, 97, 0, 0, 0,
			0, 20, 85, 110, 105, 71, 76, 84, 70, 124,
			103, 108, 116, 102, 69, 120, 112, 111, 114, 116,
			101, 114, 0, 0, 0, 0, 26, 85, 110, 105,
			71, 76, 84, 70, 124, 71, 108, 116, 102, 69,
			120, 112, 111, 114, 116, 83, 101, 116, 116, 105,
			110, 103, 115, 0, 0, 0, 0, 20, 85, 110,
			105, 71, 76, 84, 70, 124, 71, 108, 116, 102,
			74, 115, 111, 110, 85, 116, 105, 108, 0, 0,
			0, 0, 19, 85, 110, 105, 71, 76, 84, 70,
			124, 71, 108, 116, 102, 85, 116, 105, 108, 105,
			116, 121, 0, 0, 0, 0, 23, 85, 110, 105,
			71, 76, 84, 70, 124, 73, 109, 112, 111, 114,
			116, 101, 114, 67, 111, 110, 116, 101, 120, 116,
			0, 0, 0, 0, 33, 85, 110, 105, 71, 76,
			84, 70, 124, 73, 109, 112, 111, 114, 116, 101,
			114, 67, 111, 110, 116, 101, 120, 116, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 31, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 109, 112, 111, 114, 116, 101, 114, 67,
			111, 110, 116, 101, 120, 116, 83, 112, 101, 101,
			100, 76, 111, 103, 0, 0, 0, 0, 42, 85,
			110, 105, 71, 76, 84, 70, 46, 73, 109, 112,
			111, 114, 116, 101, 114, 67, 111, 110, 116, 101,
			120, 116, 83, 112, 101, 101, 100, 76, 111, 103,
			124, 75, 101, 121, 69, 108, 97, 112, 115, 101,
			100, 0, 0, 0, 0, 44, 85, 110, 105, 71,
			76, 84, 70, 46, 73, 109, 112, 111, 114, 116,
			101, 114, 67, 111, 110, 116, 101, 120, 116, 83,
			112, 101, 101, 100, 76, 111, 103, 124, 77, 101,
			97, 115, 117, 114, 101, 83, 99, 111, 112, 101,
			0, 0, 0, 0, 35, 85, 110, 105, 71, 76,
			84, 70, 124, 66, 117, 105, 108, 116, 73, 110,
			71, 108, 116, 102, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 39, 85, 110, 105, 71, 76,
			84, 70, 124, 66, 117, 105, 108, 116, 73, 110,
			70, 97, 108, 108, 98, 97, 99, 107, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 112, 111,
			114, 116, 101, 114, 0, 0, 0, 0, 43, 85,
			110, 105, 71, 76, 84, 70, 124, 66, 117, 105,
			108, 116, 73, 110, 71, 101, 110, 101, 114, 105,
			99, 85, 110, 108, 105, 116, 77, 97, 116, 101,
			114, 105, 97, 108, 69, 120, 112, 111, 114, 116,
			101, 114, 0, 0, 0, 0, 39, 85, 110, 105,
			71, 76, 84, 70, 124, 66, 117, 105, 108, 116,
			73, 110, 83, 116, 97, 110, 100, 97, 114, 100,
			77, 97, 116, 101, 114, 105, 97, 108, 69, 120,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			39, 85, 110, 105, 71, 76, 84, 70, 124, 66,
			117, 105, 108, 116, 73, 110, 85, 110, 105, 85,
			110, 108, 105, 116, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 46, 85, 110, 105, 71, 76,
			84, 70, 124, 66, 117, 105, 108, 116, 73, 110,
			71, 108, 116, 102, 77, 97, 116, 101, 114, 105,
			97, 108, 68, 101, 115, 99, 114, 105, 112, 116,
			111, 114, 71, 101, 110, 101, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 42, 85, 110, 105, 71,
			76, 84, 70, 124, 66, 117, 105, 108, 116, 73,
			110, 71, 108, 116, 102, 68, 101, 102, 97, 117,
			108, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 38, 85, 110, 105, 71, 76, 84, 70,
			124, 66, 117, 105, 108, 116, 73, 110, 71, 108,
			116, 102, 80, 98, 114, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 109, 112, 111, 114, 116, 101,
			114, 0, 0, 0, 0, 40, 85, 110, 105, 71,
			76, 84, 70, 124, 66, 117, 105, 108, 116, 73,
			110, 71, 108, 116, 102, 85, 110, 108, 105, 116,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 109,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			31, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 85, 116, 105,
			108, 115, 0, 0, 0, 0, 31, 85, 110, 105,
			71, 76, 84, 70, 124, 71, 108, 116, 102, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 109, 112,
			111, 114, 116, 85, 116, 105, 108, 115, 0, 0,
			0, 0, 36, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			71, 101, 110, 101, 114, 97, 116, 111, 114, 0,
			0, 0, 0, 25, 85, 110, 105, 71, 76, 84,
			70, 124, 73, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 101, 114, 0,
			0, 0, 0, 39, 85, 110, 105, 71, 76, 84,
			70, 124, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 80, 97,
			114, 97, 109, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 49, 124, 82,
			101, 110, 100, 101, 114, 80, 105, 112, 101, 108,
			105, 110, 101, 77, 97, 116, 101, 114, 105, 97,
			108, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 71, 101, 110, 101, 114, 97, 116, 111, 114,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 24, 85, 110, 105, 71, 76, 84, 70, 124,
			84, 101, 120, 116, 117, 114, 101, 84, 114, 97,
			110, 115, 102, 111, 114, 109, 0, 0, 0, 0,
			38, 85, 110, 105, 71, 76, 84, 70, 124, 85,
			114, 112, 71, 108, 116, 102, 68, 101, 102, 97,
			117, 108, 116, 77, 97, 116, 101, 114, 105, 97,
			108, 73, 109, 112, 111, 114, 116, 101, 114, 0,
			0, 0, 0, 34, 85, 110, 105, 71, 76, 84,
			70, 124, 85, 114, 112, 71, 108, 116, 102, 80,
			98, 114, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 42, 85, 110, 105, 71, 76, 84, 70,
			124, 85, 114, 112, 71, 108, 116, 102, 77, 97,
			116, 101, 114, 105, 97, 108, 68, 101, 115, 99,
			114, 105, 112, 116, 111, 114, 71, 101, 110, 101,
			114, 97, 116, 111, 114, 0, 0, 0, 0, 26,
			85, 110, 105, 71, 76, 84, 70, 124, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 69, 120,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			31, 85, 110, 105, 71, 76, 84, 70, 124, 73,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			69, 120, 112, 111, 114, 116, 70, 105, 108, 116,
			101, 114, 0, 0, 0, 0, 37, 85, 110, 105,
			71, 76, 84, 70, 124, 68, 101, 102, 117, 97,
			108, 116, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 69, 120, 112, 111, 114, 116, 70, 105,
			108, 116, 101, 114, 0, 0, 0, 0, 22, 85,
			110, 105, 71, 76, 84, 70, 124, 74, 111, 105,
			110, 116, 115, 65, 99, 99, 101, 115, 115, 111,
			114, 0, 0, 0, 0, 16, 85, 110, 105, 71,
			76, 84, 70, 124, 77, 101, 115, 104, 68, 97,
			116, 97, 0, 0, 0, 0, 40, 85, 110, 105,
			71, 76, 84, 70, 124, 77, 101, 115, 104, 69,
			120, 112, 111, 114, 116, 101, 114, 95, 68, 105,
			118, 105, 100, 101, 100, 86, 101, 114, 116, 101,
			120, 66, 117, 102, 102, 101, 114, 0, 0, 0,
			0, 39, 85, 110, 105, 71, 76, 84, 70, 124,
			77, 101, 115, 104, 69, 120, 112, 111, 114, 116,
			101, 114, 95, 83, 104, 97, 114, 101, 100, 86,
			101, 114, 116, 101, 120, 66, 117, 102, 102, 101,
			114, 0, 0, 0, 0, 22, 85, 110, 105, 71,
			76, 84, 70, 124, 77, 101, 115, 104, 69, 120,
			112, 111, 114, 116, 73, 110, 102, 111, 0, 0,
			0, 0, 22, 85, 110, 105, 71, 76, 84, 70,
			124, 77, 101, 115, 104, 69, 120, 112, 111, 114,
			116, 76, 105, 115, 116, 0, 0, 0, 0, 22,
			85, 110, 105, 71, 76, 84, 70, 124, 77, 101,
			115, 104, 69, 120, 112, 111, 114, 116, 85, 116,
			105, 108, 0, 0, 0, 0, 39, 85, 110, 105,
			71, 76, 84, 70, 46, 77, 101, 115, 104, 69,
			120, 112, 111, 114, 116, 85, 116, 105, 108, 124,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			66, 117, 102, 102, 101, 114, 0, 0, 0, 0,
			35, 85, 110, 105, 71, 76, 84, 70, 46, 77,
			101, 115, 104, 69, 120, 112, 111, 114, 116, 85,
			116, 105, 108, 124, 86, 101, 114, 116, 101, 120,
			66, 117, 102, 102, 101, 114, 0, 0, 0, 0,
			20, 85, 110, 105, 71, 76, 84, 70, 124, 77,
			101, 115, 104, 85, 112, 108, 111, 97, 100, 101,
			114, 0, 0, 0, 0, 19, 85, 110, 105, 71,
			76, 84, 70, 124, 77, 101, 115, 104, 86, 101,
			114, 116, 101, 120, 48, 0, 0, 0, 0, 19,
			85, 110, 105, 71, 76, 84, 70, 124, 77, 101,
			115, 104, 86, 101, 114, 116, 101, 120, 49, 0,
			0, 0, 0, 19, 85, 110, 105, 71, 76, 84,
			70, 124, 77, 101, 115, 104, 86, 101, 114, 116,
			101, 120, 50, 0, 0, 0, 0, 25, 85, 110,
			105, 71, 76, 84, 70, 124, 77, 101, 115, 104,
			86, 101, 114, 116, 101, 120, 85, 116, 105, 108,
			105, 116, 121, 0, 0, 0, 0, 25, 85, 110,
			105, 71, 76, 84, 70, 124, 77, 101, 115, 104,
			87, 105, 116, 104, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 0, 0, 0, 0, 23, 85, 110,
			105, 71, 76, 84, 70, 124, 65, 99, 99, 101,
			115, 115, 111, 114, 115, 66, 111, 117, 110, 100,
			115, 0, 0, 0, 0, 27, 85, 110, 105, 71,
			76, 84, 70, 124, 80, 114, 105, 109, 105, 116,
			105, 118, 101, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 20, 85, 110,
			105, 71, 76, 84, 70, 124, 83, 107, 105, 110,
			110, 105, 110, 103, 73, 110, 102, 111, 0, 0,
			0, 0, 13, 124, 84, 114, 105, 97, 110, 103,
			108, 101, 85, 116, 105, 108, 0, 0, 0, 0,
			26, 85, 110, 105, 71, 76, 84, 70, 124, 86,
			101, 114, 116, 101, 120, 67, 111, 108, 111, 114,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 23, 85, 110, 105, 71, 76, 84, 70, 124,
			87, 101, 105, 103, 104, 116, 115, 65, 99, 99,
			101, 115, 115, 111, 114, 0, 0, 0, 0, 22,
			85, 110, 105, 71, 76, 84, 70, 124, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 70, 108, 97,
			103, 115, 0, 0, 0, 0, 31, 85, 110, 105,
			71, 76, 84, 70, 124, 77, 111, 110, 111, 66,
			101, 104, 97, 118, 105, 111, 117, 114, 67, 111,
			109, 112, 97, 114, 97, 116, 111, 114, 0, 0,
			0, 0, 27, 85, 110, 105, 71, 76, 84, 70,
			124, 73, 78, 97, 116, 105, 118, 101, 65, 114,
			114, 97, 121, 77, 97, 110, 97, 103, 101, 114,
			0, 0, 0, 0, 26, 85, 110, 105, 71, 76,
			84, 70, 124, 78, 97, 116, 105, 118, 101, 65,
			114, 114, 97, 121, 77, 97, 110, 97, 103, 101,
			114, 0, 0, 0, 0, 20, 85, 110, 105, 71,
			76, 84, 70, 124, 78, 111, 100, 101, 73, 109,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			38, 85, 110, 105, 71, 76, 84, 70, 46, 78,
			111, 100, 101, 73, 109, 112, 111, 114, 116, 101,
			114, 124, 84, 114, 97, 110, 115, 102, 111, 114,
			109, 87, 105, 116, 104, 83, 107, 105, 110, 0,
			0, 0, 0, 26, 85, 110, 105, 71, 76, 84,
			70, 124, 65, 117, 116, 111, 71, 108, 116, 102,
			70, 105, 108, 101, 80, 97, 114, 115, 101, 114,
			0, 0, 0, 0, 23, 85, 110, 105, 71, 76,
			84, 70, 124, 71, 108, 98, 66, 105, 110, 97,
			114, 121, 80, 97, 114, 115, 101, 114, 0, 0,
			0, 0, 21, 85, 110, 105, 71, 76, 84, 70,
			124, 71, 108, 98, 70, 105, 108, 101, 80, 97,
			114, 115, 101, 114, 0, 0, 0, 0, 25, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 98,
			76, 111, 119, 76, 101, 118, 101, 108, 80, 97,
			114, 115, 101, 114, 0, 0, 0, 0, 39, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 116,
			102, 70, 105, 108, 101, 87, 105, 116, 104, 82,
			101, 115, 111, 117, 114, 99, 101, 70, 105, 108,
			101, 115, 80, 97, 114, 115, 101, 114, 0, 0,
			0, 0, 33, 85, 110, 105, 71, 76, 84, 70,
			124, 90, 105, 112, 65, 114, 99, 104, 105, 118,
			101, 100, 71, 108, 116, 102, 70, 105, 108, 101,
			80, 97, 114, 115, 101, 114, 0, 0, 0, 0,
			22, 85, 110, 105, 71, 76, 84, 70, 124, 69,
			120, 112, 111, 114, 116, 80, 114, 111, 103, 114,
			101, 115, 115, 0, 0, 0, 0, 20, 85, 110,
			105, 71, 76, 84, 70, 124, 78, 117, 108, 108,
			80, 114, 111, 103, 114, 101, 115, 115, 0, 0,
			0, 0, 23, 85, 110, 105, 71, 76, 84, 70,
			124, 83, 97, 102, 101, 77, 97, 114, 115, 104,
			97, 108, 67, 111, 112, 121, 0, 0, 0, 0,
			14, 85, 110, 105, 71, 76, 84, 70, 124, 83,
			66, 121, 116, 101, 52, 0, 0, 0, 0, 18,
			85, 110, 105, 71, 76, 84, 70, 124, 83, 107,
			105, 110, 74, 111, 105, 110, 116, 115, 0, 0,
			0, 0, 30, 85, 110, 105, 71, 76, 84, 70,
			124, 71, 108, 116, 102, 80, 98, 114, 84, 101,
			120, 116, 117, 114, 101, 73, 109, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 38, 85, 110,
			105, 71, 76, 84, 70, 124, 71, 108, 116, 102,
			84, 101, 120, 116, 117, 114, 101, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 0, 0, 0, 0,
			27, 85, 110, 105, 71, 76, 84, 70, 124, 71,
			108, 116, 102, 84, 101, 120, 116, 117, 114, 101,
			69, 120, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 27, 85, 110, 105, 71, 76, 84, 70,
			124, 71, 108, 116, 102, 84, 101, 120, 116, 117,
			114, 101, 73, 109, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 35, 85, 110, 105, 71, 76,
			84, 70, 124, 73, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 71, 101, 110, 101, 114, 97, 116, 111, 114,
			0, 0, 0, 0, 26, 85, 110, 105, 71, 76,
			84, 70, 124, 84, 101, 120, 116, 117, 114, 101,
			83, 97, 109, 112, 108, 101, 114, 85, 116, 105,
			108, 0, 0, 0, 0, 17, 85, 110, 105, 71,
			76, 84, 70, 124, 85, 110, 105, 116, 121, 80,
			97, 116, 104, 0, 0, 0, 0, 21, 85, 110,
			105, 71, 76, 84, 70, 124, 85, 114, 105, 66,
			121, 116, 101, 66, 117, 102, 102, 101, 114, 0,
			0, 0, 0, 15, 85, 110, 105, 71, 76, 84,
			70, 124, 85, 83, 104, 111, 114, 116, 50, 0,
			0, 0, 0, 15, 85, 110, 105, 71, 76, 84,
			70, 124, 85, 83, 104, 111, 114, 116, 51, 0,
			0, 0, 0, 15, 85, 110, 105, 71, 76, 84,
			70, 124, 85, 83, 104, 111, 114, 116, 52, 0,
			0, 0, 0, 29, 85, 110, 105, 71, 76, 84,
			70, 46, 90, 105, 112, 124, 90, 105, 112, 80,
			97, 114, 115, 101, 69, 120, 99, 101, 112, 116,
			105, 111, 110, 0, 0, 0, 0, 16, 85, 110,
			105, 71, 76, 84, 70, 46, 90, 105, 112, 124,
			69, 79, 67, 68, 0, 0, 0, 0, 24, 85,
			110, 105, 71, 76, 84, 70, 46, 90, 105, 112,
			124, 67, 111, 109, 109, 111, 110, 72, 101, 97,
			100, 101, 114, 0, 0, 0, 0, 38, 85, 110,
			105, 71, 76, 84, 70, 46, 90, 105, 112, 124,
			67, 101, 110, 116, 114, 97, 108, 68, 105, 114,
			101, 99, 116, 111, 114, 121, 70, 105, 108, 101,
			72, 101, 97, 100, 101, 114, 0, 0, 0, 0,
			27, 85, 110, 105, 71, 76, 84, 70, 46, 90,
			105, 112, 124, 76, 111, 99, 97, 108, 70, 105,
			108, 101, 72, 101, 97, 100, 101, 114, 0, 0,
			0, 0, 29, 85, 110, 105, 71, 76, 84, 70,
			46, 90, 105, 112, 124, 90, 105, 112, 65, 114,
			99, 104, 105, 118, 101, 83, 116, 111, 114, 97,
			103, 101, 0, 0, 0, 0, 27, 85, 110, 105,
			71, 76, 84, 70, 124, 82, 117, 110, 116, 105,
			109, 101, 71, 108, 116, 102, 73, 110, 115, 116,
			97, 110, 99, 101, 0, 0, 0, 0, 24, 85,
			110, 105, 71, 76, 84, 70, 124, 85, 110, 105,
			71, 76, 84, 70, 69, 120, 99, 101, 112, 116,
			105, 111, 110, 0, 0, 0, 0, 36, 85, 110,
			105, 71, 76, 84, 70, 124, 85, 110, 105, 71,
			76, 84, 70, 78, 111, 116, 83, 117, 112, 112,
			111, 114, 116, 101, 100, 69, 120, 99, 101, 112,
			116, 105, 111, 110, 0, 0, 0, 0, 25, 85,
			110, 105, 71, 76, 84, 70, 124, 71, 108, 98,
			80, 97, 114, 115, 101, 69, 120, 99, 101, 112,
			116, 105, 111, 110, 1, 0, 0, 0, 22, 85,
			110, 105, 71, 76, 84, 70, 124, 85, 110, 105,
			71, 76, 84, 70, 86, 101, 114, 115, 105, 111,
			110, 1, 0, 0, 0, 22, 85, 110, 105, 71,
			76, 84, 70, 124, 85, 110, 105, 71, 76, 84,
			70, 86, 101, 114, 115, 105, 111, 110, 0, 0,
			0, 0, 25, 85, 110, 105, 71, 76, 84, 70,
			124, 86, 97, 108, 105, 100, 97, 116, 105, 111,
			110, 67, 111, 110, 116, 101, 120, 116, 0, 0,
			0, 0, 18, 85, 110, 105, 71, 76, 84, 70,
			124, 86, 97, 108, 105, 100, 97, 116, 105, 111,
			110, 0, 0, 0, 0, 18, 85, 110, 105, 74,
			83, 79, 78, 124, 66, 121, 116, 101, 66, 117,
			102, 102, 101, 114, 1, 0, 0, 0, 20, 85,
			110, 105, 74, 83, 79, 78, 124, 67, 111, 110,
			99, 114, 101, 116, 101, 67, 97, 115, 116, 1,
			0, 0, 0, 20, 85, 110, 105, 74, 83, 79,
			78, 124, 67, 111, 110, 99, 114, 101, 116, 101,
			67, 97, 115, 116, 0, 0, 0, 0, 26, 85,
			110, 105, 74, 83, 79, 78, 124, 84, 114, 101,
			101, 86, 97, 108, 117, 101, 69, 120, 99, 101,
			112, 116, 105, 111, 110, 0, 0, 0, 0, 23,
			85, 110, 105, 74, 83, 79, 78, 124, 80, 97,
			114, 115, 101, 114, 69, 120, 99, 101, 112, 116,
			105, 111, 110, 0, 0, 0, 0, 32, 85, 110,
			105, 74, 83, 79, 78, 124, 68, 101, 115, 101,
			114, 105, 97, 108, 105, 122, 97, 116, 105, 111,
			110, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 26, 85, 110, 105, 74, 83,
			79, 78, 124, 70, 111, 114, 109, 97, 116, 116,
			101, 114, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 30, 85, 110, 105, 74,
			83, 79, 78, 124, 65, 114, 114, 97, 121, 83,
			101, 103, 109, 101, 110, 116, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			22, 85, 110, 105, 74, 83, 79, 78, 124, 66,
			121, 116, 101, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 32, 85, 110,
			105, 74, 83, 79, 78, 124, 68, 97, 116, 101,
			84, 105, 109, 101, 79, 102, 102, 115, 101, 116,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 22, 85, 110, 105, 74, 83,
			79, 78, 124, 69, 110, 117, 109, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 24, 85, 110, 105, 74, 83, 79, 78, 124,
			83, 116, 114, 105, 110, 103, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			22, 85, 110, 105, 74, 83, 79, 78, 124, 84,
			121, 112, 101, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 27, 85, 110,
			105, 74, 83, 79, 78, 124, 70, 111, 114, 109,
			97, 116, 116, 101, 114, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 27,
			85, 110, 105, 74, 83, 79, 78, 124, 73, 70,
			105, 108, 101, 83, 121, 115, 116, 101, 109, 65,
			99, 99, 101, 115, 115, 111, 114, 0, 0, 0,
			0, 26, 85, 110, 105, 74, 83, 79, 78, 124,
			70, 105, 108, 101, 83, 121, 115, 116, 101, 109,
			65, 99, 99, 101, 115, 115, 111, 114, 0, 0,
			0, 0, 18, 85, 110, 105, 74, 83, 79, 78,
			124, 73, 70, 111, 114, 109, 97, 116, 116, 101,
			114, 0, 0, 0, 0, 18, 85, 110, 105, 74,
			83, 79, 78, 124, 66, 121, 116, 101, 115, 83,
			116, 111, 114, 101, 0, 0, 0, 0, 17, 85,
			110, 105, 74, 83, 79, 78, 124, 66, 121, 116,
			101, 85, 110, 105, 111, 110, 0, 0, 0, 0,
			27, 85, 110, 105, 74, 83, 79, 78, 46, 66,
			121, 116, 101, 85, 110, 105, 111, 110, 124, 87,
			111, 114, 100, 86, 97, 108, 117, 101, 0, 0,
			0, 0, 28, 85, 110, 105, 74, 83, 79, 78,
			46, 66, 121, 116, 101, 85, 110, 105, 111, 110,
			124, 68, 87, 111, 114, 100, 86, 97, 108, 117,
			101, 0, 0, 0, 0, 28, 85, 110, 105, 74,
			83, 79, 78, 46, 66, 121, 116, 101, 85, 110,
			105, 111, 110, 124, 81, 87, 111, 114, 100, 86,
			97, 108, 117, 101, 0, 0, 0, 0, 14, 85,
			110, 105, 74, 83, 79, 78, 124, 73, 83, 116,
			111, 114, 101, 0, 0, 0, 0, 24, 85, 110,
			105, 74, 83, 79, 78, 124, 73, 83, 116, 111,
			114, 101, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 19, 85, 110, 105,
			74, 83, 79, 78, 124, 83, 116, 114, 101, 97,
			109, 83, 116, 111, 114, 101, 0, 0, 0, 0,
			26, 85, 110, 105, 74, 83, 79, 78, 124, 83,
			116, 114, 105, 110, 103, 66, 117, 105, 108, 100,
			101, 114, 83, 116, 111, 114, 101, 0, 0, 0,
			0, 21, 85, 110, 105, 74, 83, 79, 78, 124,
			74, 115, 111, 110, 70, 111, 114, 109, 97, 116,
			116, 101, 114, 0, 0, 0, 0, 29, 85, 110,
			105, 74, 83, 79, 78, 46, 74, 115, 111, 110,
			70, 111, 114, 109, 97, 116, 116, 101, 114, 124,
			67, 111, 110, 116, 101, 120, 116, 0, 0, 0,
			0, 18, 85, 110, 105, 74, 83, 79, 78, 124,
			74, 115, 111, 110, 80, 97, 114, 115, 101, 114,
			0, 0, 0, 0, 18, 85, 110, 105, 74, 83,
			79, 78, 124, 74, 115, 111, 110, 83, 116, 114,
			105, 110, 103, 0, 0, 0, 0, 17, 85, 110,
			105, 74, 83, 79, 78, 124, 74, 115, 111, 110,
			86, 97, 108, 117, 101, 0, 0, 0, 0, 16,
			85, 110, 105, 74, 83, 79, 78, 124, 74, 115,
			111, 110, 78, 111, 100, 101, 0, 0, 0, 0,
			35, 85, 110, 105, 74, 83, 79, 78, 124, 76,
			105, 115, 116, 84, 114, 101, 101, 78, 111, 100,
			101, 65, 114, 114, 97, 121, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			30, 85, 110, 105, 74, 83, 79, 78, 124, 76,
			105, 115, 116, 84, 114, 101, 101, 78, 111, 100,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 34, 85, 110, 105, 74,
			83, 79, 78, 124, 73, 86, 97, 108, 117, 101,
			78, 111, 100, 101, 79, 98, 106, 101, 99, 116,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 19, 85, 110, 105, 74, 83,
			79, 78, 124, 73, 85, 116, 102, 56, 83, 116,
			114, 105, 110, 103, 0, 0, 0, 0, 19, 85,
			110, 105, 74, 83, 79, 78, 124, 85, 116, 102,
			56, 83, 116, 114, 105, 110, 103, 52, 0, 0,
			0, 0, 20, 85, 110, 105, 74, 83, 79, 78,
			124, 85, 116, 102, 56, 73, 116, 101, 114, 97,
			116, 111, 114, 0, 0, 0, 0, 18, 85, 110,
			105, 74, 83, 79, 78, 124, 85, 116, 102, 56,
			83, 116, 114, 105, 110, 103, 0, 0, 0, 0,
			25, 85, 110, 105, 74, 83, 79, 78, 124, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 66,
			117, 105, 108, 100, 101, 114, 0, 0, 0, 0,
			28, 85, 110, 105, 74, 83, 79, 78, 124, 85,
			116, 102, 56, 83, 116, 114, 105, 110, 103, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 36, 85, 110, 105, 74, 83, 79,
			78, 124, 85, 116, 102, 56, 83, 116, 114, 105,
			110, 103, 83, 112, 108, 105, 116, 116, 101, 114,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115
		};
		result.TotalFiles = 162;
		result.TotalTypes = 239;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniJSON
{
	public class ByteBuffer
	{
		private byte[] m_buffer;

		private int m_used;

		public ArraySegment<byte> Bytes => new ArraySegment<byte>(m_buffer, 0, Count);

		public int Count => m_used;

		public int Remain
		{
			get
			{
				if (m_buffer == null)
				{
					return 0;
				}
				return m_buffer.Length - m_used;
			}
		}

		public ByteBuffer()
		{
		}

		public ByteBuffer(byte[] buffer)
		{
			m_buffer = buffer;
		}

		private void Ensure(int size)
		{
			if (m_buffer == null || size >= m_buffer.Length - m_used)
			{
				byte[] array = new byte[m_used + size];
				if (m_buffer != null && m_used > 0)
				{
					Buffer.BlockCopy(m_buffer, 0, array, 0, m_used);
				}
				m_buffer = array;
			}
		}

		public void Push(byte b)
		{
			Ensure(1);
			m_buffer[m_used++] = b;
		}

		public void Push(byte[] buffer)
		{
			Push(new ArraySegment<byte>(buffer));
		}

		public void Push(ArraySegment<byte> buffer)
		{
			Ensure(buffer.Count);
			Buffer.BlockCopy(buffer.Array, buffer.Offset, m_buffer, m_used, buffer.Count);
			m_used += buffer.Count;
		}

		public void Unshift(int size)
		{
			if (size > m_used)
			{
				throw new ArgumentException();
			}
			if (m_used - size < size)
			{
				Buffer.BlockCopy(m_buffer, m_used, m_buffer, 0, m_used - size);
				m_used -= size;
			}
			else
			{
				byte[] array = new byte[m_used];
				Buffer.BlockCopy(m_buffer, size, array, 0, m_used - size);
				m_buffer = array;
			}
		}
	}
	public static class ConcreteCast
	{
		public static string GetMethodName(Type src, Type dst)
		{
			return $"Cast{src.Name}To{dst.Name}";
		}

		public static MethodInfo GetMethod(Type src, Type dst)
		{
			string methodName = GetMethodName(src, dst);
			return typeof(ConcreteCast).GetMethod(methodName, BindingFlags.Static | BindingFlags.Public);
		}

		public static byte CastByteToByte(byte src)
		{
			return src;
		}

		public static ushort CastByteToUInt16(byte src)
		{
			return src;
		}

		public static uint CastByteToUInt32(byte src)
		{
			return src;
		}

		public static ulong CastByteToUInt64(byte src)
		{
			return src;
		}

		public static sbyte CastByteToSByte(byte src)
		{
			return (sbyte)src;
		}

		public static short CastByteToInt16(byte src)
		{
			return src;
		}

		public static int CastByteToInt32(byte src)
		{
			return src;
		}

		public static long CastByteToInt64(byte src)
		{
			return src;
		}

		public static float CastByteToSingle(byte src)
		{
			return (int)src;
		}

		public static double CastByteToDouble(byte src)
		{
			return (int)src;
		}

		public static byte CastUInt16ToByte(ushort src)
		{
			return (byte)src;
		}

		public static ushort CastUInt16ToUInt16(ushort src)
		{
			return src;
		}

		public static uint CastUInt16ToUInt32(ushort src)
		{
			return src;
		}

		public static ulong CastUInt16ToUInt64(ushort src)
		{
			return src;
		}

		public static sbyte CastUInt16ToSByte(ushort src)
		{
			return (sbyte)src;
		}

		public static short CastUInt16ToInt16(ushort src)
		{
			return (short)src;
		}

		public static int CastUInt16ToInt32(ushort src)
		{
			return src;
		}

		public static long CastUInt16ToInt64(ushort src)
		{
			return src;
		}

		public static float CastUInt16ToSingle(ushort src)
		{
			return (int)src;
		}

		public static double CastUInt16ToDouble(ushort src)
		{
			return (int)src;
		}

		public static byte CastUInt32ToByte(uint src)
		{
			return (byte)src;
		}

		public static ushort CastUInt32ToUInt16(uint src)
		{
			return (ushort)src;
		}

		public static uint CastUInt32ToUInt32(uint src)
		{
			return src;
		}

		public static ulong CastUInt32ToUInt64(uint src)
		{
			return src;
		}

		public static sbyte CastUInt32ToSByte(uint src)
		{
			return (sbyte)src;
		}

		public static short CastUInt32ToInt16(uint src)
		{
			return (short)src;
		}

		public static int CastUInt32ToInt32(uint src)
		{
			return (int)src;
		}

		public static long CastUInt32ToInt64(uint src)
		{
			return src;
		}

		public static float CastUInt32ToSingle(uint src)
		{
			return src;
		}

		public static double CastUInt32ToDouble(uint src)
		{
			return src;
		}

		public static byte CastUInt64ToByte(ulong src)
		{
			return (byte)src;
		}

		public static ushort CastUInt64ToUInt16(ulong src)
		{
			return (ushort)src;
		}

		public static uint CastUInt64ToUInt32(ulong src)
		{
			return (uint)src;
		}

		public static ulong CastUInt64ToUInt64(ulong src)
		{
			return src;
		}

		public static sbyte CastUInt64ToSByte(ulong src)
		{
			return (sbyte)src;
		}

		public static short CastUInt64ToInt16(ulong src)
		{
			return (short)src;
		}

		public static int CastUInt64ToInt32(ulong src)
		{
			return (int)src;
		}

		public static long CastUInt64ToInt64(ulong src)
		{
			return (long)src;
		}

		public static float CastUInt64ToSingle(ulong src)
		{
			return src;
		}

		public static double CastUInt64ToDouble(ulong src)
		{
			return src;
		}

		public static byte CastSByteToByte(sbyte src)
		{
			return (byte)src;
		}

		public static ushort CastSByteToUInt16(sbyte src)
		{
			return (ushort)src;
		}

		public static uint CastSByteToUInt32(sbyte src)
		{
			return (uint)src;
		}

		public static ulong CastSByteToUInt64(sbyte src)
		{
			return (ulong)src;
		}

		public static sbyte CastSByteToSByte(sbyte src)
		{
			return src;
		}

		public static short CastSByteToInt16(sbyte src)
		{
			return src;
		}

		public static int CastSByteToInt32(sbyte src)
		{
			return src;
		}

		public static long CastSByteToInt64(sbyte src)
		{
			return src;
		}

		public static float CastSByteToSingle(sbyte src)
		{
			return src;
		}

		public static double CastSByteToDouble(sbyte src)
		{
			return src;
		}

		public static byte CastInt16ToByte(short src)
		{
			return (byte)src;
		}

		public static ushort CastInt16ToUInt16(short src)
		{
			return (ushort)src;
		}

		public static uint CastInt16ToUInt32(short src)
		{
			return (uint)src;
		}

		public static ulong CastInt16ToUInt64(short src)
		{
			return (ulong)src;
		}

		public static sbyte CastInt16ToSByte(short src)
		{
			return (sbyte)src;
		}

		public static short CastInt16ToInt16(short src)
		{
			return src;
		}

		public static int CastInt16ToInt32(short src)
		{
			return src;
		}

		public static long CastInt16ToInt64(short src)
		{
			return src;
		}

		public static float CastInt16ToSingle(short src)
		{
			return src;
		}

		public static double CastInt16ToDouble(short src)
		{
			return src;
		}

		public static byte CastInt32ToByte(int src)
		{
			return (byte)src;
		}

		public static ushort CastInt32ToUInt16(int src)
		{
			return (ushort)src;
		}

		public static uint CastInt32ToUInt32(int src)
		{
			return (uint)src;
		}

		public static ulong CastInt32ToUInt64(int src)
		{
			return (ulong)src;
		}

		public static sbyte CastInt32ToSByte(int src)
		{
			return (sbyte)src;
		}

		public static short CastInt32ToInt16(int src)
		{
			return (short)src;
		}

		public static int CastInt32ToInt32(int src)
		{
			return src;
		}

		public static long CastInt32ToInt64(int src)
		{
			return src;
		}

		public static float CastInt32ToSingle(int src)
		{
			return src;
		}

		public static double CastInt32ToDouble(int src)
		{
			return src;
		}

		public static byte CastInt64ToByte(long src)
		{
			return (byte)src;
		}

		public static ushort CastInt64ToUInt16(long src)
		{
			return (ushort)src;
		}

		public static uint CastInt64ToUInt32(long src)
		{
			return (uint)src;
		}

		public static ulong CastInt64ToUInt64(long src)
		{
			return (ulong)src;
		}

		public static sbyte CastInt64ToSByte(long src)
		{
			return (sbyte)src;
		}

		public static short CastInt64ToInt16(long src)
		{
			return (short)src;
		}

		public static int CastInt64ToInt32(long src)
		{
			return (int)src;
		}

		public static long CastInt64ToInt64(long src)
		{
			return src;
		}

		public static float CastInt64ToSingle(long src)
		{
			return src;
		}

		public static double CastInt64ToDouble(long src)
		{
			return src;
		}

		public static byte CastSingleToByte(float src)
		{
			return (byte)src;
		}

		public static ushort CastSingleToUInt16(float src)
		{
			return (ushort)src;
		}

		public static uint CastSingleToUInt32(float src)
		{
			return (uint)src;
		}

		public static ulong CastSingleToUInt64(float src)
		{
			return (ulong)src;
		}

		public static sbyte CastSingleToSByte(float src)
		{
			return (sbyte)src;
		}

		public static short CastSingleToInt16(float src)
		{
			return (short)src;
		}

		public static int CastSingleToInt32(float src)
		{
			return (int)src;
		}

		public static long CastSingleToInt64(float src)
		{
			return (long)src;
		}

		public static float CastSingleToSingle(float src)
		{
			return src;
		}

		public static double CastSingleToDouble(float src)
		{
			return src;
		}

		public static byte CastDoubleToByte(double src)
		{
			return (byte)src;
		}

		public static ushort CastDoubleToUInt16(double src)
		{
			return (ushort)src;
		}

		public static uint CastDoubleToUInt32(double src)
		{
			return (uint)src;
		}

		public static ulon

UniGLTF.Utils.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[242]
		{
			0, 0, 0, 1, 0, 0, 0, 54, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 116, 105, 108, 115, 92, 67, 97,
			99, 104, 101, 100, 69, 110, 117, 109, 92, 67,
			97, 99, 104, 101, 100, 69, 110, 117, 109, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 58,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 116, 105, 108, 115, 92,
			67, 97, 99, 104, 101, 100, 69, 110, 117, 109,
			92, 67, 97, 99, 104, 101, 100, 69, 110, 117,
			109, 84, 121, 112, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 51, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 116, 105, 108, 115, 92, 69, 117, 99, 108,
			105, 100, 101, 97, 110, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			116, 105, 108, 115, 92, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 83, 116, 97, 116, 101, 46,
			99, 115
		};
		result.TypesData = new byte[132]
		{
			0, 0, 0, 0, 24, 85, 110, 105, 71, 76,
			84, 70, 46, 85, 116, 105, 108, 115, 124, 67,
			97, 99, 104, 101, 100, 69, 110, 117, 109, 0,
			0, 0, 0, 28, 85, 110, 105, 71, 76, 84,
			70, 46, 85, 116, 105, 108, 115, 124, 67, 97,
			99, 104, 101, 100, 69, 110, 117, 109, 84, 121,
			112, 101, 0, 0, 0, 0, 32, 85, 110, 105,
			71, 76, 84, 70, 46, 85, 116, 105, 108, 115,
			124, 69, 117, 99, 108, 105, 100, 101, 97, 110,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 0,
			0, 0, 0, 28, 85, 110, 105, 71, 76, 84,
			70, 46, 85, 116, 105, 108, 115, 124, 84, 114,
			97, 110, 115, 102, 111, 114, 109, 83, 116, 97,
			116, 101
		};
		result.TotalFiles = 4;
		result.TotalTypes = 4;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.Utils;

public static class CachedEnum
{
	public static T Parse<T>(string name, bool ignoreCase = false) where T : struct, Enum
	{
		if (ignoreCase)
		{
			return CachedEnumType<T>.IgnoreCaseMap[name];
		}
		return CachedEnumType<T>.Map[name];
	}

	public static T ParseOrDefault<T>(string name, bool ignoreCase = false, T defaultValue = default(T)) where T : struct, Enum
	{
		try
		{
			return Parse<T>(name, ignoreCase);
		}
		catch (KeyNotFoundException)
		{
			return defaultValue;
		}
	}

	public static T[] GetValues<T>() where T : struct, Enum
	{
		return CachedEnumType<T>.Values;
	}
}
internal static class CachedEnumType<T> where T : struct, Enum
{
	public static IReadOnlyDictionary<string, T> Map { get; } = CreateStringEnumMap(ignoreCase: false);


	public static IReadOnlyDictionary<string, T> IgnoreCaseMap { get; } = CreateStringEnumMap(ignoreCase: true);


	public static T[] Values { get; } = (T[])Enum.GetValues(typeof(T));


	private static Dictionary<string, T> CreateStringEnumMap(bool ignoreCase)
	{
		Dictionary<string, T> dictionary = (ignoreCase ? new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase) : new Dictionary<string, T>());
		foreach (T value in Enum.GetValues(typeof(T)))
		{
			dictionary.Add(value.ToString(), value);
		}
		return dictionary;
	}
}
public readonly struct EuclideanTransform
{
	public readonly Quaternion Rotation;

	public readonly Vector3 Translation;

	public EuclideanTransform(Quaternion rotation, Vector3 translation)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		Rotation = rotation;
		Translation = translation;
	}

	public EuclideanTransform(Quaternion rotation)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		Rotation = rotation;
		Translation = Vector3.zero;
	}

	public EuclideanTransform(Vector3 translation)
	{
		//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)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		Rotation = Quaternion.identity;
		Translation = translation;
	}

	public EuclideanTransform(Matrix4x4 matrix)
	{
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		Rotation = ((Matrix4x4)(ref matrix)).rotation;
		Translation = Vector4.op_Implicit(((Matrix4x4)(ref matrix)).GetColumn(3));
	}
}
public readonly struct TransformState
{
	public Vector3 Position { get; }

	public Vector3 LocalPosition { get; }

	public Quaternion Rotation { get; }

	public Quaternion LocalRotation { get; }

	public Vector3 LocalScale { get; }

	public TransformState(Vector3 position, Vector3 localPosition, Quaternion rotation, Quaternion localRotation, Vector3 localScale)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		Position = position;
		LocalPosition = localPosition;
		Rotation = rotation;
		LocalRotation = localRotation;
		LocalScale = localScale;
	}

	public TransformState(Transform tf)
	{
		//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_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0073: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: 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)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//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_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)tf == (Object)null)
		{
			Position = Vector3.zero;
			LocalPosition = Vector3.zero;
			Rotation = Quaternion.identity;
			LocalRotation = Quaternion.identity;
			LocalScale = Vector3.one;
		}
		else
		{
			Position = tf.position;
			LocalPosition = tf.localPosition;
			Rotation = tf.rotation;
			LocalRotation = tf.localRotation;
			LocalScale = tf.localScale;
		}
	}
}

UniHumanoid.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using UniGLTF.Utils;
using UnityEngine;
using UnityEngine.Serialization;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1970]
		{
			0, 0, 0, 1, 0, 0, 0, 59, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 65, 110, 105, 109, 97, 116,
			105, 111, 110, 67, 108, 105, 112, 85, 116, 105,
			108, 105, 116, 121, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 56, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 65, 118, 97, 116, 97, 114, 68, 101, 115,
			99, 114, 105, 112, 116, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 54, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 66, 111, 110, 101, 71,
			105, 122, 109, 111, 68, 114, 97, 119, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			50, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 92, 66, 111, 110,
			101, 77, 97, 112, 112, 105, 110, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 46, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 66, 118, 104, 66, 111,
			110, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 64, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			69, 110, 117, 109, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 70, 111, 114, 99, 101, 85, 110, 105, 113,
			117, 101, 78, 97, 109, 101, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 49, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 70, 111, 114, 109, 97, 116, 92,
			66, 118, 104, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 56, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 92,
			70, 111, 114, 109, 97, 116, 92, 66, 118, 104,
			67, 104, 97, 110, 110, 101, 108, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 61, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 70, 111, 114, 109, 97, 116,
			92, 66, 118, 104, 67, 104, 97, 110, 110, 101,
			108, 67, 117, 114, 118, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 70, 111, 114, 109, 97, 116, 92,
			66, 118, 104, 69, 110, 100, 83, 105, 116, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			58, 92, 65, 115, 115, 101, 116, 115, 92, 85,
			110, 105, 71, 76, 84, 70, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 92, 70, 111, 114,
			109, 97, 116, 92, 66, 118, 104, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 70, 111, 114, 109, 97, 116, 92,
			66, 118, 104, 78, 111, 100, 101, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 47, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 72, 117, 109, 97, 110, 111,
			105, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 53, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 72,
			117, 109, 97, 110, 111, 105, 100, 76, 111, 97,
			100, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 52, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 92,
			72, 117, 109, 97, 110, 80, 111, 115, 101, 67,
			108, 105, 112, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 56, 92, 65, 115, 115, 101, 116,
			115, 92, 85, 110, 105, 71, 76, 84, 70, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 92,
			72, 117, 109, 97, 110, 80, 111, 115, 101, 84,
			114, 97, 110, 115, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 44, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 73, 66, 111, 110, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 58,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 92, 73, 79, 92, 66,
			118, 104, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 67, 108, 105, 112, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 53, 92, 65, 115, 115,
			101, 116, 115, 92, 85, 110, 105, 71, 76, 84,
			70, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 92, 73, 79, 92, 66, 118, 104, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 60, 92, 65, 115,
			115, 101, 116, 115, 92, 85, 110, 105, 71, 76,
			84, 70, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 73, 79, 92, 66, 118, 104, 73,
			109, 112, 111, 114, 116, 101, 114, 67, 111, 110,
			116, 101, 120, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 66, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 73, 79, 92, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 92, 66, 118, 104, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 68, 92,
			65, 115, 115, 101, 116, 115, 92, 85, 110, 105,
			71, 76, 84, 70, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 73, 79, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 85,
			110, 105, 116, 121, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 50, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 77, 117, 115, 99, 108, 101, 68, 101, 98,
			117, 103, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 54, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 77,
			117, 115, 99, 108, 101, 73, 110, 115, 112, 101,
			99, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 85, 110, 105, 71, 76, 84, 70,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			92, 80, 111, 115, 101, 77, 111, 100, 105, 102,
			105, 101, 114, 92, 72, 97, 110, 100, 80, 111,
			115, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 59, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 80,
			111, 115, 101, 77, 111, 100, 105, 102, 105, 101,
			114, 92, 72, 97, 110, 100, 82, 105, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 65,
			92, 65, 115, 115, 101, 116, 115, 92, 85, 110,
			105, 71, 76, 84, 70, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 92, 80, 111, 115, 101,
			77, 111, 100, 105, 102, 105, 101, 114, 92, 73,
			80, 111, 115, 101, 77, 111, 100, 105, 102, 105,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 47, 92, 65, 115, 115, 101, 116, 115,
			92, 85, 110, 105, 71, 76, 84, 70, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 92, 83,
			107, 101, 108, 101, 116, 111, 110, 46, 99, 115,
			0, 0, 0, 4, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 85, 110, 105, 71,
			76, 84, 70, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 92, 83, 107, 101, 108, 101, 116,
			111, 110, 69, 115, 116, 105, 109, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 4, 0, 0,
			0, 58, 92, 65, 115, 115, 101, 116, 115, 92,
			85, 110, 105, 71, 76, 84, 70, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 92, 83, 107,
			101, 108, 101, 116, 111, 110, 77, 101, 115, 104,
			85, 116, 105, 108, 105, 116, 121, 46, 99, 115
		};
		result.TypesData = new byte[1462]
		{
			0, 0, 0, 0, 32, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 67, 108, 105, 112,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 21, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 111, 110, 101, 76, 105,
			109, 105, 116, 0, 0, 0, 0, 29, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 124,
			65, 118, 97, 116, 97, 114, 68, 101, 115, 99,
			114, 105, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 27, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 111, 110, 101, 71, 105,
			122, 109, 111, 68, 114, 97, 119, 101, 114, 0,
			0, 0, 0, 23, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 124, 66, 111, 110, 101,
			77, 97, 112, 112, 105, 110, 103, 0, 0, 0,
			0, 19, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 66, 111, 110,
			101, 0, 0, 0, 0, 26, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 124, 69, 110,
			117, 109, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 27, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 70,
			111, 114, 99, 101, 85, 110, 105, 113, 117, 101,
			78, 97, 109, 101, 0, 0, 0, 0, 15, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 66, 118, 104, 0, 0, 0, 0, 32, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			46, 66, 118, 104, 124, 80, 97, 116, 104, 87,
			105, 116, 104, 80, 114, 111, 112, 101, 114, 116,
			121, 0, 0, 0, 0, 32, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 124, 66, 118,
			104, 67, 104, 97, 110, 110, 101, 108, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 27, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 66, 118, 104, 67, 104,
			97, 110, 110, 101, 108, 67, 117, 114, 118, 101,
			0, 0, 0, 0, 22, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 66, 118, 104,
			69, 110, 100, 83, 105, 116, 101, 0, 0, 0,
			0, 24, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 0, 0, 0, 0,
			19, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 66, 118, 104, 78, 111, 100, 101,
			0, 0, 0, 0, 20, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 72, 117, 109,
			97, 110, 111, 105, 100, 0, 0, 0, 0, 31,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 46, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 86, 97, 108, 105, 100, 97, 116, 105, 111,
			110, 0, 0, 0, 0, 26, 85, 110, 105, 72,
			117, 109, 97, 110, 111, 105, 100, 124, 72, 117,
			109, 97, 110, 111, 105, 100, 76, 111, 97, 100,
			101, 114, 0, 0, 0, 0, 25, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 72,
			117, 109, 97, 110, 80, 111, 115, 101, 67, 108,
			105, 112, 0, 0, 0, 0, 29, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 72,
			117, 109, 97, 110, 80, 111, 115, 101, 84, 114,
			97, 110, 115, 102, 101, 114, 0, 0, 0, 0,
			17, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 73, 66, 111, 110, 101, 0, 0,
			0, 0, 27, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 73, 66, 111, 110, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 24, 85, 110, 105, 72, 117,
			109, 97, 110, 111, 105, 100, 124, 66, 118, 104,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 33, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 46, 66, 118, 104, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 124, 67,
			117, 114, 118, 101, 83, 101, 116, 0, 0, 0,
			0, 23, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 73, 109, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 27,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 124, 73, 109, 112, 111, 114, 116, 101, 114,
			67, 111, 110, 116, 101, 120, 116, 0, 0, 0,
			0, 30, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 73, 109, 112,
			111, 114, 116, 101, 114, 67, 111, 110, 116, 101,
			120, 116, 0, 0, 0, 0, 25, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 66,
			118, 104, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 27, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 124, 85,
			110, 105, 116, 121, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 23, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 77, 117, 115, 99, 108, 101, 68, 101, 98,
			117, 103, 0, 0, 0, 0, 30, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 46, 77,
			117, 115, 99, 108, 101, 68, 101, 98, 117, 103,
			124, 77, 117, 115, 99, 108, 101, 0, 0, 0,
			0, 27, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 77, 117, 115, 99, 108, 101,
			73, 110, 115, 112, 101, 99, 116, 111, 114, 0,
			0, 0, 0, 28, 85, 110, 105, 72, 117, 109,
			97, 110, 111, 105, 100, 124, 72, 97, 110, 100,
			80, 111, 115, 101, 77, 111, 100, 105, 102, 105,
			101, 114, 0, 0, 0, 0, 37, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 46, 72,
			97, 110, 100, 80, 111, 115, 101, 77, 111, 100,
			105, 102, 105, 101, 114, 124, 72, 97, 110, 100,
			80, 111, 115, 101, 0, 0, 0, 0, 19, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			124, 72, 97, 110, 100, 82, 105, 103, 0, 0,
			0, 0, 25, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 73, 80, 111, 115, 101,
			77, 111, 100, 105, 102, 105, 101, 114, 0, 0,
			0, 0, 20, 85, 110, 105, 72, 117, 109, 97,
			110, 111, 105, 100, 124, 83, 107, 101, 108, 101,
			116, 111, 110, 0, 0, 0, 0, 29, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 124,
			73, 83, 107, 101, 108, 101, 116, 111, 110, 68,
			101, 116, 101, 99, 116, 111, 114, 0, 0, 0,
			0, 32, 85, 110, 105, 72, 117, 109, 97, 110,
			111, 105, 100, 124, 66, 118, 104, 83, 107, 101,
			108, 101, 116, 111, 110, 69, 115, 116, 105, 109,
			97, 116, 111, 114, 0, 0, 0, 0, 36, 85,
			110, 105, 72, 117, 109, 97, 110, 111, 105, 100,
			46, 66, 118, 104, 83, 107, 101, 108, 101, 116,
			111, 110, 69, 115, 116, 105, 109, 97, 116, 111,
			114, 124, 65, 114, 109, 0, 0, 0, 0, 36,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 46, 66, 118, 104, 83, 107, 101, 108, 101,
			116, 111, 110, 69, 115, 116, 105, 109, 97, 116,
			111, 114, 124, 76, 101, 103, 0, 0, 0, 0,
			31, 85, 110, 105, 72, 117, 109, 97, 110, 111,
			105, 100, 124, 83, 107, 101, 108, 101, 116, 111,
			110, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 0, 0, 0, 0, 38, 85, 110, 105,
			72, 117, 109, 97, 110, 111, 105, 100, 46, 83,
			107, 101, 108, 101, 116, 111, 110, 77, 101, 115,
			104, 85, 116, 105, 108, 105, 116, 121, 124, 84,
			83, 82, 66, 111, 120, 0, 0, 0, 0, 43,
			85, 110, 105, 72, 117, 109, 97, 110, 111, 105,
			100, 46, 83, 107, 101, 108, 101, 116, 111, 110,
			77, 101, 115, 104, 85, 116, 105, 108, 105, 116,
			121, 124, 77, 101, 115, 104, 66, 117, 105, 108,
			100, 101, 114, 0, 0, 0, 0, 44, 85, 110,
			105, 72, 117, 109, 97, 110, 111, 105, 100, 46,
			83, 107, 101, 108, 101, 116, 111, 110, 77, 101,
			115, 104, 85, 116, 105, 108, 105, 116, 121, 124,
			66, 111, 110, 101, 72, 101, 97, 100, 84, 97,
			105, 108
		};
		result.TotalFiles = 31;
		result.TotalTypes = 45;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniHumanoid;

public static class AnimationClipUtility
{
	private static Dictionary<string, string> TraitPropMap = new Dictionary<string, string>
	{
		{ "Left Thumb 1 Stretched", "LeftHand.Thumb.1 Stretched" },
		{ "Left Thumb Spread", "LeftHand.Thumb Spread" },
		{ "Left Thumb 2 Stretched", "LeftHand.Thumb.2 Stretched" },
		{ "Left Thumb 3 Stretched", "LeftHand.Thumb.3 Stretched" },
		{ "Left Index 1 Stretched", "LeftHand.Index.1 Stretched" },
		{ "Left Index Spread", "LeftHand.Index Spread" },
		{ "Left Index 2 Stretched", "LeftHand.Index.2 Stretched" },
		{ "Left Index 3 Stretched", "LeftHand.Index.3 Stretched" },
		{ "Left Middle 1 Stretched", "LeftHand.Middle.1 Stretched" },
		{ "Left Middle Spread", "LeftHand.Middle Spread" },
		{ "Left Middle 2 Stretched", "LeftHand.Middle.2 Stretched" },
		{ "Left Middle 3 Stretched", "LeftHand.Middle.3 Stretched" },
		{ "Left Ring 1 Stretched", "LeftHand.Ring.1 Stretched" },
		{ "Left Ring Spread", "LeftHand.Ring Spread" },
		{ "Left Ring 2 Stretched", "LeftHand.Ring.2 Stretched" },
		{ "Left Ring 3 Stretched", "LeftHand.Ring.3 Stretched" },
		{ "Left Little 1 Stretched", "LeftHand.Little.1 Stretched" },
		{ "Left Little Spread", "LeftHand.Little Spread" },
		{ "Left Little 2 Stretched", "LeftHand.Little.2 Stretched" },
		{ "Left Little 3 Stretched", "LeftHand.Little.3 Stretched" },
		{ "Right Thumb 1 Stretched", "RightHand.Thumb.1 Stretched" },
		{ "Right Thumb Spread", "RightHand.Thumb Spread" },
		{ "Right Thumb 2 Stretched", "RightHand.Thumb.2 Stretched" },
		{ "Right Thumb 3 Stretched", "RightHand.Thumb.3 Stretched" },
		{ "Right Index 1 Stretched", "RightHand.Index.1 Stretched" },
		{ "Right Index Spread", "RightHand.Index Spread" },
		{ "Right Index 2 Stretched", "RightHand.Index.2 Stretched" },
		{ "Right Index 3 Stretched", "RightHand.Index.3 Stretched" },
		{ "Right Middle 1 Stretched", "RightHand.Middle.1 Stretched" },
		{ "Right Middle Spread", "RightHand.Middle Spread" },
		{ "Right Middle 2 Stretched", "RightHand.Middle.2 Stretched" },
		{ "Right Middle 3 Stretched", "RightHand.Middle.3 Stretched" },
		{ "Right Ring 1 Stretched", "RightHand.Ring.1 Stretched" },
		{ "Right Ring Spread", "RightHand.Ring Spread" },
		{ "Right Ring 2 Stretched", "RightHand.Ring.2 Stretched" },
		{ "Right Ring 3 Stretched", "RightHand.Ring.3 Stretched" },
		{ "Right Little 1 Stretched", "RightHand.Little.1 Stretched" },
		{ "Right Little Spread", "RightHand.Little Spread" },
		{ "Right Little 2 Stretched", "RightHand.Little.2 Stretched" },
		{ "Right Little 3 Stretched", "RightHand.Little.3 Stretched" }
	};

	public static AnimationClip CreateAnimationClipFromHumanPose(HumanPose pose)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Expected O, but got Unknown
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: 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_002e: Expected O, but got Unknown
		//IL_0054: 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_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0064: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Unknown result type (might be due to invalid IL or missing references)
		//IL_006f: Expected O, but got Unknown
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Expected O, but got Unknown
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f8: Expected O, but got Unknown
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0131: Unknown result type (might be due to invalid IL or missing references)
		//IL_0136: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Expected O, but got Unknown
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: Unknown result type (might be due to invalid IL or missing references)
		//IL_0171: Unknown result type (might be due to invalid IL or missing references)
		//IL_0176: Unknown result type (might be due to invalid IL or missing references)
		//IL_017b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Expected O, but got Unknown
		//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Expected O, but got Unknown
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_020f: Expected O, but got Unknown
		AnimationClip val = new AnimationClip();
		AnimationCurve val2 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyPosition.x)
		});
		string text = "RootT.x";
		val.SetCurve((string)null, typeof(Animator), text, val2);
		AnimationCurve val3 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyPosition.y)
		});
		string text2 = "RootT.y";
		val.SetCurve((string)null, typeof(Animator), text2, val3);
		AnimationCurve val4 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyPosition.z)
		});
		string text3 = "RootT.z";
		val.SetCurve((string)null, typeof(Animator), text3, val4);
		AnimationCurve val5 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.x)
		});
		string text4 = "RootQ.x";
		val.SetCurve((string)null, typeof(Animator), text4, val5);
		AnimationCurve val6 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.y)
		});
		string text5 = "RootQ.y";
		val.SetCurve((string)null, typeof(Animator), text5, val6);
		AnimationCurve val7 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.z)
		});
		string text6 = "RootQ.z";
		val.SetCurve((string)null, typeof(Animator), text6, val7);
		AnimationCurve val8 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
		{
			new Keyframe(0f, pose.bodyRotation.w)
		});
		string text7 = "RootQ.w";
		val.SetCurve((string)null, typeof(Animator), text7, val8);
		for (int i = 0; i < HumanTrait.MuscleCount; i++)
		{
			AnimationCurve val9 = new AnimationCurve((Keyframe[])(object)new Keyframe[1]
			{
				new Keyframe(0f, pose.muscles[i])
			});
			string text8 = HumanTrait.MuscleName[i];
			if (TraitPropMap.ContainsKey(text8))
			{
				text8 = TraitPropMap[text8];
			}
			val.SetCurve((string)null, typeof(Animator), text8, val9);
		}
		return val;
	}
}
[Serializable]
public struct BoneLimit
{
	public HumanBodyBones humanBone;

	public string boneName;

	public bool useDefaultValues;

	public Vector3 min;

	public Vector3 max;

	public Vector3 center;

	public float axisLength;

	private static readonly Dictionary<HumanBodyBones, string> cachedHumanBodyBonesToBoneTraitNameMap = ((IEnumerable<string>)HumanTrait.BoneName).ToDictionary((Func<string, HumanBodyBones>)((string traitName) => (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), traitName.Replace(" ", ""))), (Func<string, string>)((string traitName) => traitName));

	private static readonly Dictionary<string, HumanBodyBones> cachedBoneTraitNameToHumanBodyBonesMap = ((IEnumerable<string>)HumanTrait.BoneName).ToDictionary((Func<string, string>)((string traitName) => traitName), (Func<string, HumanBodyBones>)((string traitName) => (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), traitName.Replace(" ", ""))));

	public static BoneLimit From(HumanBone bone)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		BoneLimit result = default(BoneLimit);
		result.humanBone = cachedBoneTraitNameToHumanBodyBonesMap[((HumanBone)(ref bone)).humanName];
		result.boneName = ((HumanBone)(ref bone)).boneName;
		result.useDefaultValues = ((HumanLimit)(ref bone.limit)).useDefaultValues;
		result.min = ((HumanLimit)(ref bone.limit)).min;
		result.max = ((HumanLimit)(ref bone.limit)).max;
		result.center = ((HumanLimit)(ref bone.limit)).center;
		result.axisLength = ((HumanLimit)(ref bone.limit)).axisLength;
		return result;
	}

	public HumanBone ToHumanBone()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0053: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		HumanBone result = default(HumanBone);
		((HumanBone)(ref result)).boneName = boneName;
		((HumanBone)(ref result)).humanName = cachedHumanBodyBonesToBoneTraitNameMap[humanBone];
		HumanLimit limit = default(HumanLimit);
		((HumanLimit)(ref limit)).useDefaultValues = useDefaultValues;
		((HumanLimit)(ref limit)).axisLength = axisLength;
		((HumanLimit)(ref limit)).center = center;
		((HumanLimit)(ref limit)).max = max;
		((HumanLimit)(ref limit)).min = min;
		result.limit = limit;
		return result;
	}
}
[Serializable]
public class AvatarDescription : ScriptableObject
{
	public float armStretch = 0.05f;

	public float legStretch = 0.05f;

	public float upperArmTwist = 0.5f;

	public float lowerArmTwist = 0.5f;

	public float upperLegTwist = 0.5f;

	public float lowerLegTwist = 0.5f;

	public float feetSpacing;

	public bool hasTranslationDoF;

	public BoneLimit[] human;

	public HumanDescription ToHumanDescription(Transform root)
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: 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_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Unknown result type (might be due to invalid IL or missing references)
		Transform[] componentsInChildren = ((Component)root).GetComponentsInChildren<Transform>();
		SkeletonBone[] array = (SkeletonBone[])(object)new SkeletonBone[componentsInChildren.Length];
		int num = 0;
		Transform[] array2 = componentsInChildren;
		foreach (Transform t in array2)
		{
			array[num] = t.ToSkeletonBone();
			num++;
		}
		HumanBone[] array3 = (HumanBone[])(object)new HumanBone[human.Length];
		num = 0;
		BoneLimit[] array4 = human;
		foreach (BoneLimit boneLimit in array4)
		{
			array3[num] = boneLimit.ToHumanBone();
			num++;
		}
		HumanDescription result = default(HumanDescription);
		result.skeleton = array;
		result.human = array3;
		((HumanDescription)(ref result)).armStretch = armStretch;
		((HumanDescription)(ref result)).legStretch = legStretch;
		((HumanDescription)(ref result)).upperArmTwist = upperArmTwist;
		((HumanDescription)(ref result)).lowerArmTwist = lowerArmTwist;
		((HumanDescription)(ref result)).upperLegTwist = upperLegTwist;
		((HumanDescription)(ref result)).lowerLegTwist = lowerLegTwist;
		((HumanDescription)(ref result)).feetSpacing = feetSpacing;
		((HumanDescription)(ref result)).hasTranslationDoF = hasTranslationDoF;
		return result;
	}

	public Avatar CreateAvatar(Transform root)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		ForceUniqueName.Process(root);
		return AvatarBuilder.BuildHumanAvatar(((Component)root).gameObject, ToHumanDescription(root));
	}

	public Avatar CreateAvatarAndSetup(Transform root)
	{
		//IL_0095: Unknown result type (might be due to invalid IL or missing references)
		Avatar val = CreateAvatar(root);
		((Object)val).name = ((Object)this).name;
		Animator component = ((Component)root).GetComponent<Animator>();
		if ((Object)(object)component != (Object)null)
		{
			Dictionary<Transform, Vector3> dictionary = root.Traverse().ToDictionary((Transform x) => x, (Transform x) => x.position);
			component.avatar = val;
			foreach (Transform item in root.Traverse())
			{
				item.position = dictionary[item];
			}
		}
		HumanPoseTransfer component2 = ((Component)root).GetComponent<HumanPoseTransfer>();
		if ((Object)(object)component2 != (Object)null)
		{
			component2.Avatar = val;
		}
		return val;
	}

	public static AvatarDescription CreateFrom(HumanDescription description)
	{
		//IL_0079: Unknown result type (might be due to invalid IL or missing references)
		AvatarDescription avatarDescription = ScriptableObject.CreateInstance<AvatarDescription>();
		((Object)avatarDescription).name = "AvatarDescription";
		avatarDescription.armStretch = ((HumanDescription)(ref description)).armStretch;
		avatarDescription.legStretch = ((HumanDescription)(ref description)).legStretch;
		avatarDescription.feetSpacing = ((HumanDescription)(ref description)).feetSpacing;
		avatarDescription.hasTranslationDoF = ((HumanDescription)(ref description)).hasTranslationDoF;
		avatarDescription.lowerArmTwist = ((HumanDescription)(ref description)).lowerArmTwist;
		avatarDescription.lowerLegTwist = ((HumanDescription)(ref description)).lowerLegTwist;
		avatarDescription.upperArmTwist = ((HumanDescription)(ref description)).upperArmTwist;
		avatarDescription.upperLegTwist = ((HumanDescription)(ref description)).upperLegTwist;
		avatarDescription.human = description.human.Select(BoneLimit.From).ToArray();
		return avatarDescription;
	}

	public static AvatarDescription Create(AvatarDescription src = null)
	{
		AvatarDescription avatarDescription = ScriptableObject.CreateInstance<AvatarDescription>();
		((Object)avatarDescription).name = "AvatarDescription";
		if ((Object)(object)src != (Object)null)
		{
			avatarDescription.armStretch = src.armStretch;
			avatarDescription.legStretch = src.legStretch;
			avatarDescription.feetSpacing = src.feetSpacing;
			avatarDescription.upperArmTwist = src.upperArmTwist;
			avatarDescription.lowerArmTwist = src.lowerArmTwist;
			avatarDescription.upperLegTwist = src.upperLegTwist;
			avatarDescription.lowerLegTwist = src.lowerLegTwist;
		}
		else
		{
			avatarDescription.armStretch = 0.05f;
			avatarDescription.legStretch = 0.05f;
			avatarDescription.feetSpacing = 0f;
			avatarDescription.lowerArmTwist = 0.5f;
			avatarDescription.upperArmTwist = 0.5f;
			avatarDescription.upperLegTwist = 0.5f;
			avatarDescription.lowerLegTwist = 0.5f;
		}
		return avatarDescription;
	}

	public static AvatarDescription Create(Transform[] boneTransforms, Skeleton skeleton)
	{
		return Create(skeleton.Bones.Select((KeyValuePair<HumanBodyBones, int> x) => new KeyValuePair<HumanBodyBones, Transform>(x.Key, boneTransforms[x.Value])));
	}

	public static AvatarDescription Create(IEnumerable<KeyValuePair<HumanBodyBones, Transform>> skeleton)
	{
		AvatarDescription avatarDescription = Create();
		avatarDescription.SetHumanBones(skeleton);
		return avatarDescription;
	}

	public void SetHumanBones(IEnumerable<KeyValuePair<HumanBodyBones, Transform>> skeleton)
	{
		human = skeleton.Select(delegate(KeyValuePair<HumanBodyBones, Transform> x)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			BoneLimit result = default(BoneLimit);
			result.humanBone = x.Key;
			result.boneName = ((Object)x.Value).name;
			result.useDefaultValues = true;
			return result;
		}).ToArray();
	}
}
public class BoneGizmoDrawer : MonoBehaviour
{
	private const float size = 0.03f;

	private readonly Vector3 SIZE = new Vector3(0.03f, 0.03f, 0.03f);

	[SerializeField]
	public bool Draw = true;

	private void OnDrawGizmos()
	{
	}
}
public class BoneMapping : MonoBehaviour
{
	[SerializeField]
	public GameObject[] Bones = (GameObject[])(object)new GameObject[55];

	[SerializeField]
	public AvatarDescription Description;

	private void Reset()
	{
		GetBones();
	}

	private void GetBones()
	{
		//IL_0038: 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)
		//IL_003c: Invalid comparison between Unknown and I4
		//IL_003f: 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)
		Bones = (GameObject[])(object)new GameObject[55];
		Animator component = ((Component)this).GetComponent<Animator>();
		if (!((Object)(object)component != (Object)null) || !((Object)(object)component.avatar != (Object)null))
		{
			return;
		}
		HumanBodyBones[] values = CachedEnum.GetValues<HumanBodyBones>();
		foreach (HumanBodyBones val in values)
		{
			if ((int)val != 55)
			{
				Transform boneTransform = component.GetBoneTransform(val);
				if ((Object)(object)boneTransform != (Object)null)
				{
					Bones[val] = ((Component)boneTransform).gameObject;
				}
				continue;
			}
			break;
		}
	}

	public void GuessBoneMapping()
	{
		GameObject val = Bones[0];
		if ((Object)(object)val == (Object)null)
		{
			Debug.LogWarning((object)"require hips");
			return;
		}
		Skeleton skeleton = new BvhSkeletonEstimator().Detect(val.transform);
		Transform[] array = val.transform.Traverse().ToArray();
		for (int i = 0; i < 55; i++)
		{
			int boneIndex = skeleton.GetBoneIndex((HumanBodyBones)i);
			if (boneIndex >= 0)
			{
				Bones[i] = ((Component)array[boneIndex]).gameObject;
			}
		}
	}

	public void EnsureTPose()
	{
		//IL_009a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
		//IL_0103: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		Dictionary<HumanBodyBones, Transform> dictionary = (from x in Bones.Select((GameObject x, int i) => new { i, x })
			where (Object)(object)x.x != (Object)null
			select x).ToDictionary(x => (HumanBodyBones)x.i, x => x.x.transform);
		Vector3 val = dictionary[(HumanBodyBones)15].position - dictionary[(HumanBodyBones)13].position;
		Vector3 normalized = ((Vector3)(ref val)).normalized;
		dictionary[(HumanBodyBones)13].rotation = Quaternion.FromToRotation(normalized, Vector3.left) * dictionary[(HumanBodyBones)13].rotation;
		val = dictionary[(HumanBodyBones)16].position - dictionary[(HumanBodyBones)14].position;
		Vector3 normalized2 = ((Vector3)(ref val)).normalized;
		dictionary[(HumanBodyBones)14].rotation = Quaternion.FromToRotation(normalized2, Vector3.right) * dictionary[(HumanBodyBones)14].rotation;
	}

	public static void SetBonesToDescription(BoneMapping mapping, AvatarDescription description)
	{
		Dictionary<HumanBodyBones, Transform> humanBones = (from x in mapping.Bones.Select((GameObject x, int i) => new { i, x })
			where (Object)(object)x.x != (Object)null
			select x).ToDictionary(x => (HumanBodyBones)x.i, x => x.x.transform);
		description.SetHumanBones(humanBones);
	}

	private void Awake()
	{
		if (Bones == null || Bones.All((GameObject x) => (Object)(object)x == (Object)null))
		{
			GetBones();
		}
	}
}
public class BvhBone : IBone
{
	private List<IBone> _children = new List<IBone>();

	public string Name { get; private set; }

	public Vector3 SkeletonLocalPosition { get; private set; }

	public IBone Parent { get; private set; }

	public IList<IBone> Children => _children;

	public BvhBone(string name, Vector3 position)
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		Name = name;
		SkeletonLocalPosition = position;
	}

	public override string ToString()
	{
		return $"<BvhBone: {Name}>";
	}

	public void Build(Transform t)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0015: Expected O, but got Unknown
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		foreach (Transform item in t)
		{
			Transform val = item;
			BvhBone bvhBone = new BvhBone(((Object)val).name, SkeletonLocalPosition + val.localPosition);
			bvhBone.Parent = this;
			_children.Add(bvhBone);
			bvhBone.Build(val);
		}
	}

	public void Build(BvhNode node)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: 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)
		foreach (BvhNode child in node.Children)
		{
			BvhBone bvhBone = new BvhBone(child.Name, SkeletonLocalPosition + child.Offset.ToXReversedVector3());
			bvhBone.Parent = this;
			_children.Add(bvhBone);
			bvhBone.Build(child);
		}
	}

	public IEnumerable<BvhBone> Traverse()
	{
		yield return this;
		foreach (IBone child in Children)
		{
			foreach (IBone item in child.Traverse())
			{
				yield return (BvhBone)item;
			}
		}
	}
}
public static class EnumExtensions
{
	public static string ToStringFromEnum(this HumanBodyBones val, bool compareBoneTrait = false)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Expected I4, but got Unknown
		switch ((int)val)
		{
		case 0:
			return "Hips";
		case 1:
			return "LeftUpperLeg";
		case 2:
			return "RightUpperLeg";
		case 3:
			return "LeftLowerLeg";
		case 4:
			return "RightLowerLeg";
		case 5:
			return "LeftFoot";
		case 6:
			return "RightFoot";
		case 7:
			return "Spine";
		case 8:
			return "Chest";
		case 9:
			return "Neck";
		case 10:
			return "Head";
		case 11:
			return "LeftShoulder";
		case 12:
			return "RightShoulder";
		case 13:
			return "LeftUpperArm";
		case 14:
			return "RightUpperArm";
		case 15:
			return "LeftLowerArm";
		case 16:
			return "RightLowerArm";
		case 17:
			return "LeftHand";
		case 18:
			return "RightHand";
		case 19:
			return "LeftToes";
		case 20:
			return "RightToes";
		case 21:
			return "LeftEye";
		case 22:
			return "RightEye";
		case 23:
			return "Jaw";
		case 24:
			if (!compareBoneTrait)
			{
				return "LeftThumbProximal";
			}
			return "Left Thumb Proximal";
		case 25:
			if (!compareBoneTrait)
			{
				return "LeftThumbIntermediate";
			}
			return "Left Thumb Intermediate";
		case 26:
			if (!compareBoneTrait)
			{
				return "LeftThumbDistal";
			}
			return "Left Thumb Distal";
		case 27:
			if (!compareBoneTrait)
			{
				return "LeftIndexProximal";
			}
			return "Left Index Proximal";
		case 28:
			if (!compareBoneTrait)
			{
				return "LeftIndexIntermediate";
			}
			return "Left Index Intermediate";
		case 29:
			if (!compareBoneTrait)
			{
				return "LeftIndexDistal";
			}
			return "Left Index Distal";
		case 30:
			if (!compareBoneTrait)
			{
				return "LeftMiddleProximal";
			}
			return "Left Middle Proximal";
		case 31:
			if (!compareBoneTrait)
			{
				return "LeftMiddleIntermediate";
			}
			return "Left Middle Intermediate";
		case 32:
			if (!compareBoneTrait)
			{
				return "LeftMiddleDistal";
			}
			return "Left Middle Distal";
		case 33:
			if (!compareBoneTrait)
			{
				return "LeftRingProximal";
			}
			return "Left Ring Proximal";
		case 34:
			if (!compareBoneTrait)
			{
				return "LeftRingIntermediate";
			}
			return "Left Ring Intermediate";
		case 35:
			if (!compareBoneTrait)
			{
				return "LeftRingDistal";
			}
			return "Left Ring Distal";
		case 36:
			if (!compareBoneTrait)
			{
				return "LeftLittleProximal";
			}
			return "Left Little Proximal";
		case 37:
			if (!compareBoneTrait)
			{
				return "LeftLittleIntermediate";
			}
			return "Left Little Intermediate";
		case 38:
			if (!compareBoneTrait)
			{
				return "LeftLittleDistal";
			}
			return "Left Little Distal";
		case 39:
			if (!compareBoneTrait)
			{
				return "RightThumbProximal";
			}
			return "Right Thumb Proximal";
		case 40:
			if (!compareBoneTrait)
			{
				return "RightThumbIntermediate";
			}
			return "Right Thumb Intermediate";
		case 41:
			if (!compareBoneTrait)
			{
				return "RightThumbDistal";
			}
			return "Right Thumb Distal";
		case 42:
			if (!compareBoneTrait)
			{
				return "RightIndexProximal";
			}
			return "Right Index Proximal";
		case 43:
			if (!compareBoneTrait)
			{
				return "RightIndexIntermediate";
			}
			return "Right Index Intermediate";
		case 44:
			if (!compareBoneTrait)
			{
				return "RightIndexDistal";
			}
			return "Right Index Distal";
		case 45:
			if (!compareBoneTrait)
			{
				return "RightMiddleProximal";
			}
			return "Right Middle Proximal";
		case 46:
			if (!compareBoneTrait)
			{
				return "RightMiddleIntermediate";
			}
			return "Right Middle Intermediate";
		case 47:
			if (!compareBoneTrait)
			{
				return "RightMiddleDistal";
			}
			return "Right Middle Distal";
		case 48:
			if (!compareBoneTrait)
			{
				return "RightRingProximal";
			}
			return "Right Ring Proximal";
		case 49:
			if (!compareBoneTrait)
			{
				return "RightRingIntermediate";
			}
			return "Right Ring Intermediate";
		case 50:
			if (!compareBoneTrait)
			{
				return "RightRingDistal";
			}
			return "Right Ring Distal";
		case 51:
			if (!compareBoneTrait)
			{
				return "RightLittleProximal";
			}
			return "Right Little Proximal";
		case 52:
			if (!compareBoneTrait)
			{
				return "RightLittleIntermediate";
			}
			return "Right Little Intermediate";
		case 53:
			if (!compareBoneTrait)
			{
				return "RightLittleDistal";
			}
			return "Right Little Distal";
		case 54:
			return "UpperChest";
		case 55:
			return "LastBone";
		default:
			throw new InvalidOperationException();
		}
	}
}
internal class ForceUniqueName
{
	private HashSet<string> m_uniqueNameSet = new HashSet<string>();

	private int m_counter = 1;

	public static void Process(Transform root)
	{
		ForceUniqueName forceUniqueName = new ForceUniqueName();
		Transform[] componentsInChildren = ((Component)root).GetComponentsInChildren<Transform>();
		foreach (Transform t in componentsInChildren)
		{
			forceUniqueName.RenameIfDupName(t);
		}
	}

	public void RenameIfDupName(Transform t)
	{
		if (!m_uniqueNameSet.Contains(((Object)t).name))
		{
			m_uniqueNameSet.Add(((Object)t).name);
			return;
		}
		if ((Object)(object)t.parent != (Object)null && t.childCount == 0)
		{
			string text = ((Object)t.parent).name + "-" + ((Object)t).name;
			if (!m_uniqueNameSet.Contains(text))
			{
				Debug.LogWarning((object)("force rename !!: " + ((Object)t).name + " => " + text));
				((Object)t).name = text;
				m_uniqueNameSet.Add(text);
				return;
			}
		}
		for (int i = 0; i < 100; i++)
		{
			string text2 = $"{((Object)t).name}{m_counter++}";
			if (!m_uniqueNameSet.Contains(text2))
			{
				Debug.LogWarning((object)("force rename: " + ((Object)t).name + " => " + text2), (Object)(object)t);
				((Object)t).name = text2;
				m_uniqueNameSet.Add(text2);
				return;
			}
		}
		throw new NotImplementedException();
	}
}
public class Bvh
{
	public struct PathWithProperty
	{
		public string Path;

		public string Property;

		public bool IsLocation;
	}

	private int m_frames;

	public BvhNode Root { get; private set; }

	public TimeSpan FrameTime { get; private set; }

	public BvhChannelCurve[] Channels { get; private set; }

	public int FrameCount => m_frames;

	public bool TryGetPathWithPropertyFromChannel(BvhChannelCurve channel, out PathWithProperty pathWithProp)
	{
		int num = Channels.ToList().IndexOf(channel);
		if (num == -1)
		{
			pathWithProp = default(PathWithProperty);
			return false;
		}
		foreach (BvhNode item in Root.Traverse())
		{
			int num2 = 0;
			while (num2 < item.Channels.Length)
			{
				if (num == 0)
				{
					pathWithProp = new PathWithProperty
					{
						Path = GetPath(item),
						Property = item.Channels[num2].ToProperty(),
						IsLocation = item.Channels[num2].IsLocation()
					};
					return true;
				}
				num2++;
				num--;
			}
		}
		throw new BvhException("channel is not found");
	}

	public string GetPath(BvhNode node)
	{
		List<string> list = new List<string> { node.Name };
		BvhNode bvhNode = node;
		while (bvhNode != null)
		{
			bvhNode = GetParent(bvhNode);
			if (bvhNode != null)
			{
				list.Insert(0, bvhNode.Name);
			}
		}
		return string.Join("/", list.ToArray());
	}

	private BvhNode GetParent(BvhNode node)
	{
		foreach (BvhNode item in Root.Traverse())
		{
			if (item.Children.Contains(node))
			{
				return item;
			}
		}
		return null;
	}

	public BvhChannelCurve GetChannel(BvhNode target, BvhChannel channel)
	{
		int num = 0;
		foreach (BvhNode item in Root.Traverse())
		{
			int num2 = 0;
			while (num2 < item.Channels.Length)
			{
				if (item == target && item.Channels[num2] == channel)
				{
					return Channels[num];
				}
				num2++;
				num++;
			}
		}
		throw new BvhException("channel is not found");
	}

	public override string ToString()
	{
		return $"{Root.Traverse().Count()}nodes, {Channels.Length}channels, {m_frames}frames, {(double)m_frames * FrameTime.TotalSeconds:0.00}seconds";
	}

	public Bvh(BvhNode root, int frames, float seconds)
	{
		Root = root;
		FrameTime = TimeSpan.FromSeconds(seconds);
		m_frames = frames;
		int count = (from x in Root.Traverse()
			where x.Channels != null
			select x.Channels.Length).Sum();
		Channels = (from x in Enumerable.Range(0, count)
			select new BvhChannelCurve(frames)).ToArray();
	}

	public void ParseFrame(int frame, string line)
	{
		string[] array = (from x in line.Trim().Split()
			where !string.IsNullOrEmpty(x)
			select x).ToArray();
		if (array.Length != Channels.Length)
		{
			throw new BvhException("frame key count is not match channel count");
		}
		for (int i = 0; i < Channels.Length; i++)
		{
			Channels[i].SetKey(frame, float.Parse(array[i], CultureInfo.InvariantCulture));
		}
	}

	public static Bvh Parse(string src)
	{
		using StringReader stringReader = new StringReader(src);
		if (stringReader.ReadLine() != "HIERARCHY")
		{
			throw new BvhException("not start with HIERARCHY");
		}
		BvhNode bvhNode = ParseNode(stringReader);
		if (bvhNode == null)
		{
			return null;
		}
		int num = 0;
		float seconds = 0f;
		if (stringReader.ReadLine() == "MOTION")
		{
			string[] array = stringReader.ReadLine().Split(':');
			if (array[0] != "Frames")
			{
				throw new BvhException("Frames is not found");
			}
			num = int.Parse(array[1]);
			string[] array2 = stringReader.ReadLine().Split(':');
			if (array2[0] != "Frame Time")
			{
				throw new BvhException("Frame Time is not found");
			}
			seconds = float.Parse(array2[1], CultureInfo.InvariantCulture);
		}
		Bvh bvh = new Bvh(bvhNode, num, seconds);
		for (int i = 0; i < num; i++)
		{
			string line = stringReader.ReadLine();
			bvh.ParseFrame(i, line);
		}
		return bvh;
	}

	private static BvhNode ParseNode(StringReader r, int level = 0)
	{
		string text = r.ReadLine().Trim();
		string[] array = text.Split();
		if (array.Length != 2)
		{
			if (array.Length == 1 && array[0] == "}")
			{
				return null;
			}
			throw new BvhException($"split to {array.Length}({text})");
		}
		BvhNode bvhNode = null;
		if (array[0] == "ROOT")
		{
			if (level != 0)
			{
				throw new BvhException("nested ROOT");
			}
			bvhNode = new BvhNode(array[1]);
		}
		else if (array[0] == "JOINT")
		{
			if (level == 0)
			{
				throw new BvhException("should ROOT, but JOINT");
			}
			bvhNode = new BvhNode(array[1]);
		}
		else
		{
			if (!(array[0] == "End"))
			{
				throw new BvhException("unknown type: " + array[0]);
			}
			if (level == 0)
			{
				throw new BvhException("End in level 0");
			}
			bvhNode = new BvhEndSite();
		}
		if (r.ReadLine().Trim() != "{")
		{
			throw new BvhException("'{' is not found");
		}
		bvhNode.Parse(r);
		while (true)
		{
			BvhNode bvhNode2 = ParseNode(r, level + 1);
			if (bvhNode2 == null)
			{
				break;
			}
			if (!(bvhNode2 is BvhEndSite))
			{
				bvhNode.Children.Add(bvhNode2);
			}
		}
		return bvhNode;
	}
}
public enum BvhChannel
{
	Xposition,
	Yposition,
	Zposition,
	Xrotation,
	Yrotation,
	Zrotation
}
public static class BvhChannelExtensions
{
	public static string ToProperty(this BvhChannel ch)
	{
		return ch switch
		{
			BvhChannel.Xposition => "localPosition.x", 
			BvhChannel.Yposition => "localPosition.y", 
			BvhChannel.Zposition => "localPosition.z", 
			BvhChannel.Xrotation => "localEulerAnglesBaked.x", 
			BvhChannel.Yrotation => "localEulerAnglesBaked.y", 
			BvhChannel.Zrotation => "localEulerAnglesBaked.z", 
			_ => throw new BvhException("no property for " + ch), 
		};
	}

	public static bool IsLocation(this BvhChannel ch)
	{
		switch (ch)
		{
		case BvhChannel.Xposition:
		case BvhChannel.Yposition:
		case BvhChannel.Zposition:
			return true;
		case BvhChannel.Xrotation:
		case BvhChannel.Yrotation:
		case BvhChannel.Zrotation:
			return false;
		default:
			throw new BvhException("no property for " + ch);
		}
	}
}
public class BvhChannelCurve
{
	public float[] Keys { get; private set; }

	public BvhChannelCurve(int frameCount)
	{
		Keys = new float[frameCount];
	}

	public void SetKey(int frame, float value)
	{
		Keys[frame] = value;
	}
}
public class BvhEndSite : BvhNode
{
	public BvhEndSite()
		: base("")
	{
	}

	public override void Parse(StringReader r)
	{
		r.ReadLine();
	}
}
public class BvhException : Exception
{
	public BvhException(string msg)
		: base(msg)
	{
	}
}
public class BvhNode
{
	public string Name { get; private set; }

	public Vector3 Offset { get; private set; }

	public BvhChannel[] Channels { get; private set; }

	public List<BvhNode> Children { get; private set; }

	public BvhNode(string name)
	{
		Name = name;
		Children = new List<BvhNode>();
	}

	public int GetChannelIndex(BvhChannel channel)
	{
		for (int i = 0; i < Channels.Length; i++)
		{
			if (channel == Channels[i])
			{
				return i;
			}
		}
		throw new KeyNotFoundException();
	}

	public virtual void Parse(StringReader r)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		Offset = ParseOffset(r.ReadLine());
		Channels = ParseChannel(r.ReadLine());
	}

	private static Vector3 ParseOffset(string line)
	{
		//IL_0087: Unknown result type (might be due to invalid IL or missing references)
		string[] array = line.Trim().Split();
		if (array[0] != "OFFSET")
		{
			throw new BvhException("OFFSET is not found");
		}
		float[] array2 = (from x in array.Skip(1)
			where !string.IsNullOrEmpty(x)
			select float.Parse(x, CultureInfo.InvariantCulture)).ToArray();
		return new Vector3(array2[0], array2[1], array2[2]);
	}

	private static BvhChannel[] ParseChannel(string line)
	{
		string[] array = line.Trim().Split();
		if (array[0] != "CHANNELS")
		{
			throw new BvhException("CHANNELS is not found");
		}
		if (int.Parse(array[1]) + 2 != array.Length)
		{
			throw new BvhException("channel count is not match with split count");
		}
		return (from x in array.Skip(2)
			select (BvhChannel)Enum.Parse(typeof(BvhChannel), x)).ToArray();
	}

	public IEnumerable<BvhNode> Traverse()
	{
		yield return this;
		foreach (BvhNode child in Children)
		{
			foreach (BvhNode item in child.Traverse())
			{
				yield return item;
			}
		}
	}
}
[DisallowMultipleComponent]
public class Humanoid : MonoBehaviour
{
	public struct Validation
	{
		public readonly string Message;

		public readonly bool IsError;

		public Validation(string message, bool isError)
		{
			Message = message;
			IsError = isError;
		}
	}

	[SerializeField]
	private Transform m_Hips;

	[SerializeField]
	private Transform m_LeftUpperLeg;

	[SerializeField]
	private Transform m_RightUpperLeg;

	[SerializeField]
	private Transform m_LeftLowerLeg;

	[SerializeField]
	private Transform m_RightLowerLeg;

	[SerializeField]
	private Transform m_LeftFoot;

	[SerializeField]
	private Transform m_RightFoot;

	[SerializeField]
	private Transform m_LeftToes;

	[SerializeField]
	private Transform m_RightToes;

	[SerializeField]
	private Transform m_Spine;

	[SerializeField]
	private Transform m_Chest;

	[SerializeField]
	private Transform m_UpperChest;

	[SerializeField]
	private Transform m_Neck;

	[SerializeField]
	private Transform m_Head;

	[SerializeField]
	private Transform m_LeftEye;

	[SerializeField]
	private Transform m_RightEye;

	[SerializeField]
	private Transform m_Jaw;

	[SerializeField]
	private Transform m_LeftShoulder;

	[SerializeField]
	private Transform m_RightShoulder;

	[SerializeField]
	private Transform m_LeftUpperArm;

	[SerializeField]
	private Transform m_RightUpperArm;

	[SerializeField]
	private Transform m_LeftLowerArm;

	[SerializeField]
	private Transform m_RightLowerArm;

	[SerializeField]
	private Transform m_LeftHand;

	[SerializeField]
	private Transform m_RightHand;

	[SerializeField]
	private Transform m_LeftThumbProximal;

	[SerializeField]
	private Transform m_LeftThumbIntermediate;

	[SerializeField]
	private Transform m_LeftThumbDistal;

	[SerializeField]
	private Transform m_LeftIndexProximal;

	[SerializeField]
	private Transform m_LeftIndexIntermediate;

	[SerializeField]
	private Transform m_LeftIndexDistal;

	[SerializeField]
	private Transform m_LeftMiddleProximal;

	[SerializeField]
	private Transform m_LeftMiddleIntermediate;

	[SerializeField]
	private Transform m_LeftMiddleDistal;

	[SerializeField]
	private Transform m_LeftRingProximal;

	[SerializeField]
	private Transform m_LeftRingIntermediate;

	[SerializeField]
	private Transform m_LeftRingDistal;

	[SerializeField]
	private Transform m_LeftLittleProximal;

	[SerializeField]
	private Transform m_LeftLittleIntermediate;

	[SerializeField]
	private Transform m_LeftLittleDistal;

	[SerializeField]
	private Transform m_RightThumbProximal;

	[SerializeField]
	private Transform m_RightThumbIntermediate;

	[SerializeField]
	private Transform m_RightThumbDistal;

	[SerializeField]
	private Transform m_RightIndexProximal;

	[SerializeField]
	private Transform m_RightIndexIntermediate;

	[SerializeField]
	private Transform m_RightIndexDistal;

	[SerializeField]
	private Transform m_RightMiddleProximal;

	[SerializeField]
	private Transform m_RightMiddleIntermediate;

	[SerializeField]
	private Transform m_RightMiddleDistal;

	[SerializeField]
	private Transform m_RightRingProximal;

	[SerializeField]
	private Transform m_RightRingIntermediate;

	[SerializeField]
	private Transform m_RightRingDistal;

	[SerializeField]
	private Transform m_RightLittleProximal;

	[SerializeField]
	private Transform m_RightLittleIntermediate;

	[SerializeField]
	private Transform m_RightLittleDistal;

	public Transform Hips => m_Hips;

	public Transform LeftUpperLeg => m_LeftUpperLeg;

	public Transform RightUpperLeg => m_RightUpperLeg;

	public Transform LeftLowerLeg => m_LeftLowerLeg;

	public Transform RightLowerLeg => m_RightLowerLeg;

	public Transform LeftFoot => m_LeftFoot;

	public Transform RightFoot => m_RightFoot;

	public Transform LeftToes => m_LeftToes;

	public Transform RightToes => m_RightToes;

	public Transform Spine => m_Spine;

	public Transform Chest => m_Chest;

	public Transform UpperChest => m_UpperChest;

	public Transform Neck => m_Neck;

	public Transform Head => m_Head;

	public Transform LeftEye => m_LeftEye;

	public Transform RightEye => m_RightEye;

	public Transform Jaw => m_Jaw;

	public Transform LeftShoulder => m_LeftShoulder;

	public Transform RightShoulder => m_RightShoulder;

	public Transform LeftUpperArm => m_LeftUpperArm;

	public Transform RightUpperArm => m_RightUpperArm;

	public Transform LeftLowerArm => m_LeftLowerArm;

	public Transform RightLowerArm => m_RightLowerArm;

	public Transform LeftHand => m_LeftHand;

	public Transform RightHand => m_RightHand;

	public Transform LeftThumbProximal => m_LeftThumbProximal;

	public Transform LeftThumbIntermediate => m_LeftThumbIntermediate;

	public Transform LeftThumbDistal => m_LeftThumbDistal;

	public Transform LeftIndexProximal => m_LeftIndexProximal;

	public Transform LeftIndexIntermediate => m_LeftIndexIntermediate;

	public Transform LeftIndexDistal => m_LeftIndexDistal;

	public Transform LeftMiddleProximal => m_LeftMiddleProximal;

	public Transform LeftMiddleIntermediate => m_LeftMiddleIntermediate;

	public Transform LeftMiddleDistal => m_LeftMiddleDistal;

	public Transform LeftRingProximal => m_LeftRingProximal;

	public Transform LeftRingIntermediate => m_LeftRingIntermediate;

	public Transform LeftRingDistal => m_LeftRingDistal;

	public Transform LeftLittleProximal => m_LeftLittleProximal;

	public Transform LeftLittleIntermediate => m_LeftLittleIntermediate;

	public Transform LeftLittleDistal => m_LeftLittleDistal;

	public Transform RightThumbProximal => m_RightThumbProximal;

	public Transform RightThumbIntermediate => m_RightThumbIntermediate;

	public Transform RightThumbDistal => m_RightThumbDistal;

	public Transform RightIndexProximal => m_RightIndexProximal;

	public Transform RightIndexIntermediate => m_RightIndexIntermediate;

	public Transform RightIndexDistal => m_RightIndexDistal;

	public Transform RightMiddleProximal => m_RightMiddleProximal;

	public Transform RightMiddleIntermediate => m_RightMiddleIntermediate;

	public Transform RightMiddleDistal => m_RightMiddleDistal;

	public Transform RightRingProximal => m_RightRingProximal;

	public Transform RightRingIntermediate => m_RightRingIntermediate;

	public Transform RightRingDistal => m_RightRingDistal;

	public Transform RightLittleProximal => m_RightLittleProximal;

	public Transform RightLittleIntermediate => m_RightLittleIntermediate;

	public Transform RightLittleDistal => m_RightLittleDistal;

	public IEnumerable<(Transform, HumanBodyBones)> BoneMap
	{
		get
		{
			if ((Object)(object)Hips != (Object)null)
			{
				yield return (Hips, (HumanBodyBones)0);
			}
			if ((Object)(object)LeftUpperLeg != (Object)null)
			{
				yield return (LeftUpperLeg, (HumanBodyBones)1);
			}
			if ((Object)(object)RightUpperLeg != (Object)null)
			{
				yield return (RightUpperLeg, (HumanBodyBones)2);
			}
			if ((Object)(object)LeftLowerLeg != (Object)null)
			{
				yield return (LeftLowerLeg, (HumanBodyBones)3);
			}
			if ((Object)(object)RightLowerLeg != (Object)null)
			{
				yield return (RightLowerLeg, (HumanBodyBones)4);
			}
			if ((Object)(object)LeftFoot != (Object)null)
			{
				yield return (LeftFoot, (HumanBodyBones)5);
			}
			if ((Object)(object)RightFoot != (Object)null)
			{
				yield return (RightFoot, (HumanBodyBones)6);
			}
			if ((Object)(object)LeftToes != (Object)null)
			{
				yield return (LeftToes, (HumanBodyBones)19);
			}
			if ((Object)(object)RightToes != (Object)null)
			{
				yield return (RightToes, (HumanBodyBones)20);
			}
			if ((Object)(object)Spine != (Object)null)
			{
				yield return (Spine, (HumanBodyBones)7);
			}
			if ((Object)(object)Chest != (Object)null)
			{
				yield return (Chest, (HumanBodyBones)8);
			}
			if ((Object)(object)UpperChest != (Object)null)
			{
				yield return (UpperChest, (HumanBodyBones)54);
			}
			if ((Object)(object)Neck != (Object)null)
			{
				yield return (Neck, (HumanBodyBones)9);
			}
			if ((Object)(object)Head != (Object)null)
			{
				yield return (Head, (HumanBodyBones)10);
			}
			if ((Object)(object)LeftEye != (Object)null)
			{
				yield return (LeftEye, (HumanBodyBones)21);
			}
			if ((Object)(object)RightEye != (Object)null)
			{
				yield return (RightEye, (HumanBodyBones)22);
			}
			if ((Object)(object)Jaw != (Object)null)
			{
				yield return (Jaw, (HumanBodyBones)23);
			}
			if ((Object)(object)LeftShoulder != (Object)null)
			{
				yield return (LeftShoulder, (HumanBodyBones)11);
			}
			if ((Object)(object)RightShoulder != (Object)null)
			{
				yield return (RightShoulder, (HumanBodyBones)12);
			}
			if ((Object)(object)LeftUpperArm != (Object)null)
			{
				yield return (LeftUpperArm, (HumanBodyBones)13);
			}
			if ((Object)(object)RightUpperArm != (Object)null)
			{
				yield return (RightUpperArm, (HumanBodyBones)14);
			}
			if ((Object)(object)LeftLowerArm != (Object)null)
			{
				yield return (LeftLowerArm, (HumanBodyBones)15);
			}
			if ((Object)(object)RightLowerArm != (Object)null)
			{
				yield return (RightLowerArm, (HumanBodyBones)16);
			}
			if ((Object)(object)LeftHand != (Object)null)
			{
				yield return (LeftHand, (HumanBodyBones)17);
			}
			if ((Object)(object)RightHand != (Object)null)
			{
				yield return (RightHand, (HumanBodyBones)18);
			}
			if ((Object)(object)LeftThumbProximal != (Object)null)
			{
				yield return (LeftThumbProximal, (HumanBodyBones)24);
			}
			if ((Object)(object)LeftThumbIntermediate != (Object)null)
			{
				yield return (LeftThumbIntermediate, (HumanBodyBones)25);
			}
			if ((Object)(object)LeftThumbDistal != (Object)null)
			{
				yield return (LeftThumbDistal, (HumanBodyBones)26);
			}
			if ((Object)(object)LeftIndexProximal != (Object)null)
			{
				yield return (LeftIndexProximal, (HumanBodyBones)27);
			}
			if ((Object)(object)LeftIndexIntermediate != (Object)null)
			{
				yield return (LeftIndexIntermediate, (HumanBodyBones)28);
			}
			if ((Object)(object)LeftIndexDistal != (Object)null)
			{
				yield return (LeftIndexDistal, (HumanBodyBones)29);
			}
			if ((Object)(object)LeftMiddleProximal != (Object)null)
			{
				yield return (LeftMiddleProximal, (HumanBodyBones)30);
			}
			if ((Object)(object)LeftMiddleIntermediate != (Object)null)
			{
				yield return (LeftMiddleIntermediate, (HumanBodyBones)31);
			}
			if ((Object)(object)LeftMiddleDistal != (Object)null)
			{
				yield return (LeftMiddleDistal, (HumanBodyBones)32);
			}
			if ((Object)(object)LeftRingProximal != (Object)null)
			{
				yield return (LeftRingProximal, (HumanBodyBones)33);
			}
			if ((Object)(object)LeftRingIntermediate != (Object)null)
			{
				yield return (LeftRingIntermediate, (HumanBodyBones)34);
			}
			if ((Object)(object)LeftRingDistal != (Object)null)
			{
				yield return (LeftRingDistal, (HumanBodyBones)35);
			}
			if ((Object)(object)LeftLittleProximal != (Object)null)
			{
				yield return (LeftLittleProximal, (HumanBodyBones)36);
			}
			if ((Object)(object)LeftLittleIntermediate != (Object)null)
			{
				yield return (LeftLittleIntermediate, (HumanBodyBones)37);
			}
			if ((Object)(object)LeftLittleDistal != (Object)null)
			{
				yield return (LeftLittleDistal, (HumanBodyBones)38);
			}
			if ((Object)(object)RightThumbProximal != (Object)null)
			{
				yield return (RightThumbProximal, (HumanBodyBones)39);
			}
			if ((Object)(object)RightThumbIntermediate != (Object)null)
			{
				yield return (RightThumbIntermediate, (HumanBodyBones)40);
			}
			if ((Object)(object)RightThumbDistal != (Object)null)
			{
				yield return (RightThumbDistal, (HumanBodyBones)41);
			}
			if ((Object)(object)RightIndexProximal != (Object)null)
			{
				yield return (RightIndexProximal, (HumanBodyBones)42);
			}
			if ((Object)(object)RightIndexIntermediate != (Object)null)
			{
				yield return (RightIndexIntermediate, (HumanBodyBones)43);
			}
			if ((Object)(object)RightIndexDistal != (Object)null)
			{
				yield return (RightIndexDistal, (HumanBodyBones)44);
			}
			if ((Object)(object)RightMiddleProximal != (Object)null)
			{
				yield return (RightMiddleProximal, (HumanBodyBones)45);
			}
			if ((Object)(object)RightMiddleIntermediate != (Object)null)
			{
				yield return (RightMiddleIntermediate, (HumanBodyBones)46);
			}
			if ((Object)(object)RightMiddleDistal != (Object)null)
			{
				yield return (RightMiddleDistal, (HumanBodyBones)47);
			}
			if ((Object)(object)RightRingProximal != (Object)null)
			{
				yield return (RightRingProximal, (HumanBodyBones)48);
			}
			if ((Object)(object)RightRingIntermediate != (Object)null)
			{
				yield return (RightRingIntermediate, (HumanBodyBones)49);
			}
			if ((Object)(object)RightRingDistal != (Object)null)
			{
				yield return (RightRingDistal, (HumanBodyBones)50);
			}
			if ((Object)(object)RightLittleProximal != (Object)null)
			{
				yield return (RightLittleProximal, (HumanBodyBones)51);
			}
			if ((Object)(object)RightLittleIntermediate != (Object)null)
			{
				yield return (RightLittleIntermediate, (HumanBodyBones)52);
			}
			if ((Object)(object)RightLittleDistal != (Object)null)
			{
				yield return (RightLittleDistal, (HumanBodyBones)53);
			}
		}
	}

	private void Reset()
	{
		AssignBonesFromAnimator();
	}

	private IEnumerable<Validation> Required(params (string, Transform)[] props)
	{
		for (int i = 0; i < props.Length; i++)
		{
			(string, Transform) tuple = props[i];
			if ((Object)(object)tuple.Item2 == (Object)null)
			{
				var (text, _) = tuple;
				if (text.StartsWith("m_"))
				{
					text = text.Substring(2);
				}
				yield return new Validation(text + " is Required", isError: true);
			}
		}
	}

	private static Vector3 GetForward(Transform l, Transform r)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: 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_0036: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)l == (Object)null || (Object)(object)r == (Object)null)
		{
			return Vector3.zero;
		}
		Vector3 val = r.position - l.position;
		return Vector3.Cross(((Vector3)(ref val)).normalized, Vector3.up);
	}

	public Vector3 GetForward()
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		return GetForward(m_LeftUpperLeg, m_RightUpperLeg);
	}

	public IEnumerable<Validation> Validate()
	{
		foreach (Validation item in Required(("m_Hips", m_Hips), ("m_Spine", m_Spine), ("m_Head", m_Head), ("m_LeftUpperLeg", m_LeftUpperLeg), ("m_LeftLowerLeg", m_LeftLowerLeg), ("m_LeftFoot", m_LeftFoot), ("m_RightUpperLeg", m_RightUpperLeg), ("m_RightLowerLeg", m_RightLowerLeg), ("m_RightFoot", m_RightFoot), ("m_LeftUpperArm", m_LeftUpperArm), ("m_LeftLowerArm", m_LeftLowerArm), ("m_LeftHand", m_LeftHand), ("m_RightUpperArm", m_RightUpperArm), ("m_RightLowerArm", m_RightLowerArm), ("m_RightHand", m_RightHand)))
		{
			yield return item;
		}
	}

	public Avatar CreateAvatar()
	{
		return HumanoidLoader.LoadHumanoidAvatar(((Component)this).transform, BoneMap);
	}

	public Transform GetBoneTransform(HumanBodyBones bone)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Expected I4, but got Unknown
		return (Transform)((int)bone switch
		{
			0 => Hips, 
			1 => LeftUpperLeg, 
			2 => RightUpperLeg, 
			3 => LeftLowerLeg, 
			4 => RightLowerLeg, 
			5 => LeftFoot, 
			6 => RightFoot, 
			19 => LeftToes, 
			20 => RightToes, 
			7 => Spine, 
			8 => Chest, 
			54 => UpperChest, 
			9 => Neck, 
			10 => Head, 
			21 => LeftEye, 
			22 => RightEye, 
			23 => Jaw, 
			11 => LeftShoulder, 
			12 => RightShoulder, 
			13 => LeftUpperArm, 
			14 => RightUpperArm, 
			15 => LeftLowerArm, 
			16 => RightLowerArm, 
			17 => LeftHand, 
			18 => RightHand, 
			24 => LeftThumbProximal, 
			25 => LeftThumbIntermediate, 
			26 => LeftThumbDistal, 
			27 => LeftIndexProximal, 
			28 => LeftIndexIntermediate, 
			29 => LeftIndexDistal, 
			30 => LeftMiddleProximal, 
			31 => LeftMiddleIntermediate, 
			32 => LeftMiddleDistal, 
			33 => LeftRingProximal, 
			34 => LeftRingIntermediate, 
			35 => LeftRingDistal, 
			36 => LeftLittleProximal, 
			37 => LeftLittleIntermediate, 
			38 => LeftLittleDistal, 
			39 => RightThumbProximal, 
			40 => RightThumbIntermediate, 
			41 => RightThumbDistal, 
			42 => RightIndexProximal, 
			43 => RightIndexIntermediate, 
			44 => RightIndexDistal, 
			45 => RightMiddleProximal, 
			46 => RightMiddleIntermediate, 
			47 => RightMiddleDistal, 
			48 => RightRingProximal, 
			49 => RightRingIntermediate, 
			50 => RightRingDistal, 
			51 => RightLittleProximal, 
			52 => RightLittleIntermediate, 
			53 => RightLittleDistal, 
			_ => null, 
		});
	}

	public void AssignBones(IEnumerable<(HumanBodyBones, Transform)> nodes)
	{
		//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)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Invalid comparison between Unknown and I4
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: Expected I4, but got Unknown
		foreach (var (val, val2) in nodes)
		{
			if ((int)val != 55 && val2 != null)
			{
				switch ((int)val)
				{
				case 0:
					m_Hips = val2;
					break;
				case 1:
					m_LeftUpperLeg = val2;
					break;
				case 2:
					m_RightUpperLeg = val2;
					break;
				case 3:
					m_LeftLowerLeg = val2;
					break;
				case 4:
					m_RightLowerLeg = val2;
					break;
				case 5:
					m_LeftFoot = val2;
					break;
				case 6:
					m_RightFoot = val2;
					break;
				case 19:
					m_LeftToes = val2;
					break;
				case 20:
					m_RightToes = val2;
					break;
				case 7:
					m_Spine = val2;
					break;
				case 8:
					m_Chest = val2;
					break;
				case 54:
					m_UpperChest = val2;
					break;
				case 9:
					m_Neck = val2;
					break;
				case 10:
					m_Head = val2;
					break;
				case 21:
					m_LeftEye = val2;
					break;
				case 22:
					m_RightEye = val2;
					break;
				case 23:
					m_Jaw = val2;
					break;
				case 11:
					m_LeftShoulder = val2;
					break;
				case 12:
					m_RightShoulder = val2;
					break;
				case 13:
					m_LeftUpperArm = val2;
					break;
				case 14:
					m_RightUpperArm = val2;
					break;
				case 15:
					m_LeftLowerArm = val2;
					break;
				case 16:
					m_RightLowerArm = val2;
					break;
				case 17:
					m_LeftHand = val2;
					break;
				case 18:
					m_RightHand = val2;
					break;
				case 24:
					m_LeftThumbProximal = val2;
					break;
				case 25:
					m_LeftThumbIntermediate = val2;
					break;
				case 26:
					m_LeftThumbDistal = val2;
					break;
				case 27:
					m_LeftIndexProximal = val2;
					break;
				case 28:
					m_LeftIndexIntermediate = val2;
					break;
				case 29:
					m_LeftIndexDistal = val2;
					break;
				case 30:
					m_LeftMiddleProximal = val2;
					break;
				case 31:
					m_LeftMiddleIntermediate = val2;
					break;
				case 32:
					m_LeftMiddleDistal = val2;
					break;
				case 33:
					m_LeftRingProximal = val2;
					break;
				case 34:
					m_LeftRingIntermediate = val2;
					break;
				case 35:
					m_LeftRingDistal = val2;
					break;
				case 36:
					m_LeftLittleProximal = val2;
					break;
				case 37:
					m_LeftLittleIntermediate = val2;
					break;
				case 38:
					m_LeftLittleDistal = val2;
					break;
				case 39:
					m_RightThumbProximal = val2;
					break;
				case 40:
					m_RightThumbIntermediate = val2;
					break;
				case 41:
					m_RightThumbDistal = val2;
					break;
				case 42:
					m_RightIndexProximal = val2;
					break;
				case 43:
					m_RightIndexIntermediate = val2;
					break;
				case 44:
					m_RightIndexDistal = val2;
					break;
				case 45:
					m_RightMiddleProximal = val2;
					break;
				case 46:
					m_RightMiddleIntermediate = val2;
					break;
				case 47:
					m_RightMiddleDistal = val2;
					break;
				case 48:
					m_RightRingProximal = val2;
					break;
				case 49:
					m_RightRingIntermediate = val2;
					break;
				case 50:
					m_RightRingDistal = val2;
					break;
				case 51:
					m_RightLittleProximal = val2;
					break;
				case 52:
					m_RightLittleIntermediate = val2;
					break;
				case 53:
					m_RightLittleDistal = val2;
					break;
				}
			}
		}
	}

	public bool AssignBonesFromAnimator()
	{
		Animator animator = ((Component)this).GetComponent<Animator>();
		if ((Object)(object)animator == (Object)null)
		{
			return false;
		}
		Avatar avatar = animator.avatar;
		if ((Object)(object)avatar == (Object)null)
		{
			return false;
		}
		if (!avatar.isValid)
		{
			return false;
		}
		if (!avatar.isHuman)
		{
			return false;
		}
		HumanBodyBones[] values = CachedEnum.GetValues<HumanBodyBones>();
		AssignBones(values.Select((HumanBodyBones x) => ((HumanBodyBones, Transform))(((int)x == 55) ? ((HumanBodyBones)55, (Transform)null) : ((HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), ((object)(HumanBodyBones)(ref x)).ToString(), ignoreCase: true), animator.GetBoneTransform(x)))));
		return true;
	}

	public bool TryGetBoneForTransform(Transform t, out HumanBodyBones bone)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: 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_002d: Expected I4, but got Unknown
		foreach (var (val, val2) in BoneMap)
		{
			if ((Object)(object)val == (Object)(object)t)
			{
				bone = (HumanBodyBones)(int)val2;
				return true;
			}
		}
		bone = (HumanBodyBones)0;
		return false;
	}
}
public static class HumanoidLoader
{
	private static readonly Dictionary<HumanBodyBones, string> s_humanTranitBoneNameMap = HumanTrait.BoneName.ToDictionary((string x) => TraitToHumanBone(x), (string x) => x);

	public static Avatar LoadHumanoidAvatar(Transform root, IEnumerable<(Transform, HumanBodyBones)> boneMap)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d1: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
		ForceUniqueName.Process(root);
		HumanDescription val = default(HumanDescription);
		val.skeleton = (from x in ((Component)root).GetComponentsInChildren<Transform>()
			select x.ToSkeletonBone()).ToArray();
		val.human = boneMap.Select(delegate((Transform, HumanBodyBones) x)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			HumanBone result = default(HumanBone);
			((HumanBone)(ref result)).boneName = ((Object)x.Item1).name;
			((HumanBone)(ref result)).humanName = s_humanTranitBoneNameMap[x.Item2];
			HumanLimit limit = default(HumanLimit);
			((HumanLimit)(ref limit)).useDefaultValues = true;
			result.limit = limit;
			return result;
		}).ToArray();
		((HumanDescription)(ref val)).armStretch = 0.05f;
		((HumanDescription)(ref val)).legStretch = 0.05f;
		((HumanDescription)(ref val)).upperArmTwist = 0.5f;
		((HumanDescription)(ref val)).lowerArmTwist = 0.5f;
		((HumanDescription)(ref val)).upperLegTwist = 0.5f;
		((HumanDescription)(ref val)).lowerLegTwist = 0.5f;
		((HumanDescription)(ref val)).feetSpacing = 0f;
		((HumanDescription)(ref val)).hasTranslationDoF = false;
		HumanDescription val2 = val;
		return AvatarBuilder.BuildHumanAvatar(((Component)root).gameObject, val2);
	}

	private static HumanBodyBones TraitToHumanBone(string x)
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		return (HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), x.Replace(" ", ""), ignoreCase: true);
	}
}
public class HumanPoseClip : ScriptableObject
{
	public const string TPoseResourcePath = "UniHumanoid/T-Pose.pose";

	public Vector3 bodyPosition;

	public Quaternion bodyRotation;

	public float[] muscles;

	public HumanPose GetPose()
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		HumanPose result = default(HumanPose);
		result.bodyPosition = bodyPosition;
		result.bodyRotation = bodyRotation;
		result.muscles = muscles;
		return result;
	}

	public void ApplyPose(ref HumanPose pose)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		bodyPosition = pose.bodyPosition;
		bodyRotation = pose.bodyRotation;
		muscles = (float[])pose.muscles.Clone();
	}
}
public class HumanPoseTransfer : MonoBehaviour
{
	public enum HumanPoseTransferSourceType
	{
		None,
		HumanPoseTransfer,
		HumanPoseClip
	}

	[SerializeField]
	public HumanPoseTransferSourceType SourceType;

	[SerializeField]
	public Avatar Avatar;

	[SerializeField]
	public HumanPoseTransfer Source;

	[SerializeField]
	public HumanPoseClip PoseClip;

	private HumanPoseHandler m_handler;

	private HumanPose m_pose;

	private int m_lastFrameCount = -1;

	public HumanPose CreatePose()
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		HumanPoseHandler val = new HumanPoseHandler(Avatar, ((Component)this).transform);
		HumanPose result = default(HumanPose);
		val.GetHumanPose(ref result);
		return result;
	}

	public void SetPose(HumanPose pose)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		SetPose(Avatar, ((Component)this).transform, pose);
	}

	public static void SetPose(Avatar avatar, Transform transform, HumanPose pose)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		new HumanPoseHandler(avatar, transform).SetHumanPose(ref pose);
	}

	public static void SetTPose(Avatar avatar, Transform transform)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: 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)
		HumanPose pose = Resources.Load<HumanPoseClip>("UniHumanoid/T-Pose.pose").GetPose();
		SetPose(avatar, transform, pose);
	}

	private void Reset()
	{
		Animator component = ((Component)this).GetComponent<Animator>();
		if ((Object)(object)component != (Object)null)
		{
			Avatar = component.avatar;
		}
	}

	[ContextMenu("Set T-Pose")]
	private void SetTPose()
	{
		if (!((Object)(object)Avatar == (Object)null))
		{
			SetTPose(Avatar, ((Component)this).transform);
		}
	}

	public void OnEnable()
	{
		Animator component = ((Component)this).GetComponent<Animator>();
		if ((Object)(object)component != (Object)null)
		{
			Avatar = component.avatar;
		}
		Setup();
	}

	public void Setup()
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Expected O, but got Unknown
		if (!((Object)(object)Avatar == (Object)null))
		{
			m_handler = new HumanPoseHandler(Avatar, ((Component)this).transform);
		}
	}

	public bool GetPose(int frameCount, ref HumanPose pose)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: 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)
		if ((Object)(object)PoseClip != (Object)null)
		{
			pose = PoseClip.GetPose();
			return true;
		}
		if (m_handler == null)
		{
			pose = m_pose;
			return false;
		}
		if (frameCount != m_lastFrameCount)
		{
			m_handler.GetHumanPose(ref m_pose);
			m_lastFrameCount = frameCount;
		}
		pose = m_pose;
		return true;
	}

	private void Update()
	{
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		switch (SourceType)
		{
		case HumanPoseTransferSourceType.HumanPoseTransfer:
			if ((Object)(object)Source != (Object)null && m_handler != null && Source.GetPose(Time.frameCount, ref m_pose))
			{
				m_handler.SetHumanPose(ref m_pose);
			}
			break;
		case HumanPoseTransferSourceType.HumanPoseClip:
			if ((Object)(object)PoseClip != (Object)null)
			{
				HumanPose pose = PoseClip.GetPose();
				m_handler.SetHumanPose(ref pose);
			}
			break;
		case HumanPoseTransferSourceType.None:
			break;
		}
	}
}
public interface IBone
{
	string Name { get; }

	Vector3 SkeletonLocalPosition { get; }

	IBone Parent { get; }

	IList<IBone> Children { get; }
}
public static class IBoneExtensions
{
	public static IEnumerable<IBone> Traverse(this IBone self)
	{
		yield return self;
		foreach (IBone child in self.Children)
		{
			foreach (IBone item in child.Traverse())
			{
				yield return item;
			}
		}
	}

	public static Vector3 CenterOfDescendant(this IBone self)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: 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_0045: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = Vector3.zero;
		int num = 0;
		foreach (IBone item in self.Traverse())
		{
			val += item.SkeletonLocalPosition;
			num++;
		}
		return val / (float)num;
	}
}
public static class BvhAnimation
{
	private class CurveSet
	{
		private BvhNode Node;

		private Func<float, float, float, Quaternion> EulerToRotation;

		public BvhChannelCurve PositionX;

		public BvhChannelCurve PositionY;

		public BvhChannelCurve PositionZ;

		public BvhChannelCurve RotationX;

		public BvhChannelCurve RotationY;

		public BvhChannelCurve RotationZ;

		public CurveSet(BvhNode node)
		{
			Node = node;
		}

		public Vector3 GetPosition(int i)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			return new Vector3(PositionX.Keys[i], PositionY.Keys[i], PositionZ.Keys[i]);
		}

		public Quaternion GetRotation(int i)
		{
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if (EulerToRotation == null)
			{
				EulerToRotation = Node.GetEulerToRotation();
			}
			return EulerToRotation(RotationX.Keys[i], RotationY.Keys[i], RotationZ.Keys[i]);
		}

		private static void AddCurve(Bvh bvh, AnimationClip clip, BvhChannelCurve ch, float scaling)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			if (ch != null)
			{
				Bvh.PathWithProperty pathWithProp = default(Bvh.PathWithProperty);
				bvh.TryGetPathWithPropertyFromChannel(ch, out pathWithProp);
				AnimationCurve val = new AnimationCurve();
				for (int i = 0; i < bvh.FrameCount; i++)
				{
					float num = (float)((double)i * bvh.FrameTime.TotalSeconds);
					float num2 = ch.Keys[i] * scaling;
					val.AddKey(num, num2);
				}
				clip.SetCurve(pathWithProp.Path, typeof(Transform), pathWithProp.Property, val);
			}
		}

		public void AddCurves(Bvh bvh, AnimationClip clip, float scaling)
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Expected O, but got Unknown
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: 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)
			AddCurve(bvh, clip, PositionX, 0f - scaling);
			AddCurve(bvh, clip, PositionY, scaling);
			AddCurve(bvh, clip, PositionZ, scaling);
			Bvh.PathWithProperty pathWithProp = default(Bvh.PathWithProperty);
			bvh.TryGetPathWithPropertyFromChannel(RotationX, out pathWithProp);
			AnimationCurve val = new AnimationCurve();
			AnimationCurve val2 = new AnimationCurve();
			AnimationCurve val3 = new AnimationCurve();
			AnimationCurve val4 = new AnimationCurve();
			for (int i = 0; i < bvh.FrameCount; i++)
			{
				float num = (float)((double)i * bvh.FrameTime.TotalSeconds);
				Quaternion val5 = GetRotation(i).ReverseX();
				val.AddKey(num, val5.x);
				val2.AddKey(num, val5.y);
				val3.AddKey(num, val5.z);
				val4.AddKey(num, val5.w);
			}
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.x", val);
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.y", val2);
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.z", val3);
			clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.w", val4);
		}
	}

	public static AnimationClip CreateAnimationClip(Bvh bvh, float scaling)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0006: Expected O, but got Unknown
		AnimationClip val = new AnimationClip();
		val.legacy = true;
		Dictionary<BvhNode, CurveSet> dictionary = new Dictionary<BvhNode, CurveSet>();
		int num = 0;
		foreach (BvhNode item in bvh.Root.Traverse())
		{
			CurveSet curveSet2 = (dictionary[item] = new CurveSet(item));
			int num2 = 0;
			while (num2 < item.Channels.Length)
			{
				BvhChannelCurve bvhChannelCurve = bvh.Channels[num];
				switch (item.Channels[num2])
				{
				case BvhChannel.Xposition:
					curveSet2.PositionX = bvhChannelCurve;
					break;
				case BvhChannel.Yposition:
					curveSet2.PositionY = bvhChannelCurve;
					break;
				case BvhChannel.Zposition:
					curveSet2.PositionZ = bvhChannelCurve;
					break;
				case BvhChannel.Xrotation:
					curveSet2.RotationX = bvhChannelCurve;
					break;
				case BvhChannel.Yrotation:
					curveSet2.RotationY = bvhChannelCurve;
					break;
				case BvhChannel.Zrotation:
					curveSet2.RotationZ = bvhChannelCurve;
					break;
				default:
					throw new Exception();
				}
				num2++;
				num++;
			}
		}
		foreach (KeyValuePair<BvhNode, CurveSet> item2 in dictionary)
		{
			item2.Value.AddCurves(bvh, val, scaling);
		}
		val.EnsureQuaternionContinuity();
		return val;
	}
}
public static class BvhImporter
{
	[Obsolete("use BvhImporter.Parse(path), then BvhImporter.Load()")]
	public static void Import(BvhImporterContext context)
	{
		context.Parse(context.Path);
		context.Load();
	}
}
[Obsolete("use BvhImporterContext")]
public class ImporterContext : BvhImporterContext
{
}
public class BvhImporterContext
{
	private string m_path;

	public string Source;

	public Bvh Bvh;

	public GameObject Root;

	public List<Transform> Nodes = new List<Transform>();

	public AnimationClip Animation;

	public AvatarDescription AvatarDescription;

	public Avatar Avatar;

	public Mesh Mesh;

	public Material Material;

	public string Path
	{
		get
		{
			return m_path;
		}
		set
		{
			if (!(m_path == value))
			{
				m_path = value;
			}
		}
	}

	[Obsolete("use Load(path)")]
	public void Parse()
	{
		Parse(Path);
	}

	public void Parse(string path)
	{
		Parse(path, File.ReadAllText(path, Encoding.UTF8));
	}

	public void Parse(string path, string source)
	{
		Path = path;
		Source = source;
		Bvh = Bvh.Parse(Source);
	}

	public void Load()
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Expected O, but got Unknown
		//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
		Root = new GameObject(System.IO.Path.GetFileNameWithoutExtension(Path));
		Transform val = BuildHierarchy(Root.transform, Bvh.Root, 1f);
		Skeleton skeleton = Skeleton.Estimate(val);
		AvatarDescription avatarDescription = AvatarDescription.Create(val.Traverse().ToArray(), skeleton);
		int channelIndex = Bvh.Root.GetChannelIndex(BvhChannel.Yposition);
		float num = Bvh.Channels[channelIndex].Keys[0];
		float num2 = 1f;
		num2 = 1f / num;
		foreach (Transform item in Root.transform.Traverse())
		{
			item.localPosition *= num2;
		}
		float num3 = num * num2;
		val.position = new Vector3(0f, num3, 0f);
		Animation = BvhAnimation.CreateAnimationClip(Bvh, num2);
		((Object)Animation).name = ((Object)Root).name;
		Animation.legacy = true;
		Animation.wrapMode = (WrapMode)2;
		Animation obj = Root.AddComponent<Animation>();
		obj.AddClip(Animation, ((Object)Animation).name);
		obj.clip = Animation;
		obj.Play();
		Avatar = avatarDescription.CreateAvatar(Root.transform);
		((Object)Avatar).name = "Avatar";
		AvatarDescription = avatarDescription;
		Root.AddComponent<Animator>().avatar = Avatar;
		Root.AddComponent<HumanPoseTransfer>();
	}

	private static Transform BuildHierarchy(Transform parent, BvhNode node, float toMeter)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		//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)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		GameObject val = new GameObject(node.Name);
		val.transform.localPosition = node.Offset.ToXReversedVector3() * toMeter;
		val.transform.SetParent(parent, false);
		foreach (BvhNode child in node.Children)
		{
			BuildHierarchy(val.transform, child, toMeter);
		}
		return val.transform;
	}

	public void Destroy(bool destroySubAssets)
	{
		if ((Object)(object)Root != (Object)null)
		{
			Object.DestroyImmediate((Object)(object)Root);
		}
	}
}
public static class BvhExtensions
{
	public static Func<float, float, float, Quaternion> GetEulerToRotation(this BvhNode bvh)
	{
		BvhChannel[] order = bvh.Channels.Where((BvhChannel x) => x == BvhChannel.Xrotation || x == BvhChannel.Yrotation || x == BvhChannel.Zrotation).ToArray();
		return delegate(float x, float y, float z)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			Quaternion val = Quaternion.Euler(x, 0f, 0f);
			Quaternion val2 = Quaternion.Euler(0f, y, 0f);
			Quaternion val3 = Quaternion.Euler(0f, 0f, z);
			Quaternion val4 = Quaternion.identity;
			BvhChannel[] array = order;
			for (int i = 0; i < array.Length; i++)
			{
				val4 = (Quaternion)(array[i] switch
				{
					BvhChannel.Xrotation => val4 * val, 
					BvhChannel.Yrotation => val4 * val2, 
					BvhChannel.Zrotation => val4 * val3, 
					_ => throw new BvhException("no rotation"), 
				});
			}
			return val4;
		};
	}

	public static Vector3 ToVector3(this Vector3 s3)
	{
		//IL_0000: 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)
		//IL_000c: 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)
		return new Vector3(s3.x, s3.y, s3.z);
	}

	public static Vector3 ToXReversedVector3(this Vector3 s3)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		return new Vector3(0f - s3.x, s3.y, s3.z);
	}
}
public static class UnityExtensions
{
	public static Quaternion ReverseX(this Quaternion quaternion)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//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)
		float num = default(float);
		Vector3 val = default(Vector3);
		((Quaternion)(ref quaternion)).ToAngleAxis(ref num, ref val);
		return Quaternion.AngleAxis(0f - num, new Vector3(0f - val.x, val.y, val.z));
	}

	public static IEnumerable<Transform> GetChildren(this Transform parent)
	{
		foreach (Transform item in parent)
		{
			yield return item;
		}
	}

	public static IEnumerable<Transform> Traverse(this Transform parent)
	{
		yield return parent;
		foreach (Transform item in parent)
		{
			Transform parent2 = item;
			foreach (Transform item2 in parent2.Traverse())
			{
				yield return item2;
			}
		}
	}

	public static SkeletonBone ToSkeletonBone(this Transform t)
	{
		//IL_0002: Unknown result t

ValheimVRM.dll

Decompiled 3 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using Newtonsoft.Json;
using UniGLTF;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
using VRM;
using VRMShaders;
using ValheimVRM;
using ValheimVRM.vrmtf;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("ValheimVRM")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.2.1.0")]
[assembly: AssemblyInformationalVersion("1.2.1.0+1771301df4b3418c9bc67de43c0398df721217a7")]
[assembly: AssemblyProduct("ValheimVRM")]
[assembly: AssemblyTitle("ValheimVRM")]
[assembly: AssemblyVersion("1.2.1.0")]
public class VRMManager
{
	private static Dictionary<string, VRMModel> loaded_vrms = new Dictionary<string, VRMModel>();

	private static Dictionary<Player, VRMModel.Instance> instances = new Dictionary<Player, VRMModel.Instance>();

	private static Dictionary<Player, Dictionary<string, VRMModel.Instance>> overlay_instances = new Dictionary<Player, Dictionary<string, VRMModel.Instance>>();

	public static string ValheimVRMDir => Path.Combine(Environment.CurrentDirectory, "ValheimVRM");

	public static string PlayerSettingsPath(string playerName)
	{
		return Path.Combine(ValheimVRMDir, "settings_" + playerName + ".txt");
	}

	public static string PlayerSettingsJSONPath(string playerName)
	{
		return Path.Combine(ValheimVRMDir, playerName + ".json");
	}

	public static string PlayerVRMPath(string playerName)
	{
		return Path.Combine(ValheimVRMDir, playerName + ".vrm");
	}

	public static string PlayerUPFPath(string playerName)
	{
		return Path.Combine(ValheimVRMDir, playerName + ".upf");
	}

	public static List<VRMModel> GetLoadedModels()
	{
		return loaded_vrms.Values.ToList();
	}

	public static VRMModel.Instance GetVRMInstance(Player ply)
	{
		if ((Object)(object)ply == (Object)null)
		{
			return null;
		}
		instances.TryGetValue(ply, out var value);
		return value;
	}

	public static IEnumerable<VRMModel.Instance> GetInstancesOf(VRMModel model)
	{
		List<VRMModel.Instance> list = overlay_instances.SelectMany((KeyValuePair<Player, Dictionary<string, VRMModel.Instance>> x) => x.Value.Values).ToList();
		list.AddRange(instances.Values);
		return list.Where((VRMModel.Instance x) => x.IsValid && x.model == model);
	}

	public static VRMModel GetModelByName(string name, bool force_reload = false, VRMSettings settings_override = null, string settings_override_path = null)
	{
		VRMModel value = null;
		if (!force_reload && loaded_vrms.TryGetValue(name, out value))
		{
			if (Object.op_Implicit((Object)(object)value.VisualModel))
			{
				return value;
			}
			loaded_vrms.Remove(name);
		}
		value = new VRMModel(name);
		string path = PlayerSettingsJSONPath(name);
		string path2 = PlayerSettingsPath(name);
		if (settings_override != null && !File.Exists(path) && !File.Exists(path2))
		{
			value.Settings = settings_override;
			value.settings_path = settings_override_path;
		}
		else if (File.Exists(path))
		{
			value.LoadSettingsJSON(path);
		}
		else if (File.Exists(path2))
		{
			value.LoadSettings(path2);
		}
		switch (value.Settings.ModelType)
		{
		case "upf":
		case "prefab":
			value.LoadUPF(PlayerUPFPath(name));
			break;
		default:
			value.Load(PlayerVRMPath(name));
			break;
		}
		value.ApplySettings();
		loaded_vrms.Remove(name);
		loaded_vrms.Add(name, value);
		return value;
	}

	public static async Task<VRMModel> GetModelByNameAsync(string name, bool force_reload = false)
	{
		VRMModel mdl2 = null;
		if (!force_reload && loaded_vrms.TryGetValue(name, out mdl2))
		{
			if (Object.op_Implicit((Object)(object)mdl2.VisualModel))
			{
				return mdl2;
			}
			loaded_vrms.Remove(name);
		}
		mdl2 = new VRMModel(name);
		string path = PlayerSettingsJSONPath(name);
		string path2 = PlayerSettingsPath(name);
		if (File.Exists(path))
		{
			mdl2.LoadSettingsJSON(path);
		}
		else if (File.Exists(path2))
		{
			mdl2.LoadSettings(path2);
		}
		await mdl2.LoadAsync(PlayerVRMPath(name));
		mdl2.ApplySettings();
		loaded_vrms.Remove(name);
		loaded_vrms.Add(name, mdl2);
		return mdl2;
	}

	public static VRMModel.Instance LoadAndSetupByPlayerName(Player player, string vrm_name = null, string slot = "")
	{
		try
		{
			vrm_name = vrm_name ?? VRMUtils.GetPlayerName(player);
			if (!string.IsNullOrEmpty(vrm_name))
			{
				if (File.Exists(PlayerVRMPath(vrm_name)) | File.Exists(PlayerUPFPath(vrm_name)))
				{
					Debug.Log((object)("[ValheimVRM] found VRM file for " + vrm_name + "."));
					VRMModel vRMModel = null;
					if (slot != "")
					{
						VRMModel.Instance vRMInstance = GetVRMInstance(player);
						vRMModel = ((vRMInstance == null) ? GetModelByName(vrm_name) : GetModelByName(vrm_name, force_reload: false, vRMInstance.model.Settings, vRMInstance.model.settings_path));
					}
					else
					{
						vRMModel = GetModelByName(vrm_name);
					}
					if (slot != "")
					{
						if (overlay_instances.TryGetValue(player, out var value) && value.TryGetValue(slot, out var value2))
						{
							if (Object.op_Implicit((Object)(object)value2.gameObject))
							{
								Object.Destroy((Object)(object)value2.gameObject);
							}
							value.Remove(slot);
						}
						VRMModel.Instance instance = vRMModel.SetToPlayer(player, "VRMSlot" + slot);
						if (value == null)
						{
							value = new Dictionary<string, VRMModel.Instance>();
							overlay_instances.Add(player, value);
						}
						value.Remove(slot);
						value.Add(slot, instance);
						Debug.Log((object)("[ValheimVRM] set VRM overlay for slot " + slot + "."));
						return instance;
					}
					if (instances.TryGetValue(player, out var value3))
					{
						if (Object.op_Implicit((Object)(object)value3.gameObject))
						{
							Object.Destroy((Object)(object)value3.gameObject);
						}
						instances.Remove(player);
					}
					VRMModel.Instance instance2 = vRMModel.SetToPlayer(player);
					instances.Add(player, instance2);
					return instance2;
				}
				Debug.Log((object)("[ValheimVRM] no VRM file for " + vrm_name + "."));
			}
		}
		catch (Exception ex)
		{
			Debug.LogError((object)"Error setting VRM");
			Debug.LogException(ex);
		}
		return null;
	}

	public static async Task<VRMModel.Instance> LoadAndSetupByPlayerNameAsync(Player player, string vrm_name = null, string slot = "")
	{
		return LoadAndSetupByPlayerName(player, vrm_name, slot);
	}

	public static void RemoveFromSlotByName(Player player, string slot)
	{
		if (overlay_instances.TryGetValue(player, out var value) && value.TryGetValue(slot, out var value2))
		{
			if (Object.op_Implicit((Object)(object)value2.gameObject))
			{
				Object.Destroy((Object)(object)value2.gameObject);
			}
			bool flag = value.Remove(slot);
			Debug.Log((object)$"[ValheimVRM] removed VRM overlay from {((Object)player).name} slot {slot} result: {flag}.");
		}
		else
		{
			Debug.Log((object)("[ValheimVRM] nothing to remove from " + ((Object)player).name + " slot " + slot + "."));
		}
	}

	public static void AutoEquipByHash(VRMModel.Instance base_vrm_inst, VisSlot slot, int hash)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Invalid comparison between Unknown and I4
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Invalid comparison between Unknown and I4
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Invalid comparison between Unknown and I4
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_0079: Invalid comparison between Unknown and I4
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Invalid comparison between Unknown and I4
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a9: Invalid comparison between Unknown and I4
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Invalid comparison between Unknown and I4
		//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: Invalid comparison between Unknown and I4
		string slot2 = ((object)(VisSlot)(ref slot)).ToString();
		RemoveFromSlotByName(base_vrm_inst.player, slot2);
		if ((int)slot == 0)
		{
			base_vrm_inst.hideLeftHand = false;
		}
		else if ((int)slot == 1)
		{
			base_vrm_inst.hideRightHand = false;
		}
		else if ((int)slot == 2)
		{
			base_vrm_inst.hideLeftBack = false;
		}
		else if ((int)slot == 3)
		{
			base_vrm_inst.hideRightBack = false;
		}
		if (hash == 0)
		{
			return;
		}
		GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(hash);
		Debug.Log((object)("[ValheimVRM] ITEM PREFAB: " + ((Object)itemPrefab).name + " "));
		string value2;
		if ((int)slot == 2 || (int)slot == 3)
		{
			if (base_vrm_inst.model.Settings._ItemOverridesBack.TryGetValue(hash, out var value))
			{
				LoadAndSetupByPlayerNameAsync(base_vrm_inst.player, value, slot2);
				if ((int)slot == 2)
				{
					base_vrm_inst.hideLeftBack = true;
				}
				else if ((int)slot == 3)
				{
					base_vrm_inst.hideRightBack = true;
				}
			}
		}
		else if (base_vrm_inst.model.Settings._ItemOverrides.TryGetValue(hash, out value2))
		{
			LoadAndSetupByPlayerNameAsync(base_vrm_inst.player, value2, slot2);
			if ((int)slot == 0)
			{
				base_vrm_inst.hideLeftHand = true;
			}
			else if ((int)slot == 1)
			{
				base_vrm_inst.hideRightHand = true;
			}
		}
	}

	public static void ReloadSettingsByName(VRMModel vrm, string name)
	{
		string path = PlayerSettingsJSONPath(name);
		string path2 = PlayerSettingsPath(name);
		if (File.Exists(path))
		{
			vrm.LoadSettingsJSON(path);
		}
		else if (File.Exists(path2))
		{
			vrm.LoadSettings(path2);
		}
	}

	public static void Cleanup()
	{
		KeyValuePair<Player, Dictionary<string, VRMModel.Instance>>[] array = overlay_instances.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			KeyValuePair<Player, Dictionary<string, VRMModel.Instance>> keyValuePair = array[i];
			if (!Object.op_Implicit((Object)(object)keyValuePair.Key))
			{
				overlay_instances.Remove(keyValuePair.Key);
			}
		}
		KeyValuePair<Player, VRMModel.Instance>[] array2 = instances.ToArray();
		for (int i = 0; i < array2.Length; i++)
		{
			KeyValuePair<Player, VRMModel.Instance> keyValuePair2 = array2[i];
			if (!Object.op_Implicit((Object)(object)keyValuePair2.Key))
			{
				instances.Remove(keyValuePair2.Key);
			}
		}
		UnloadLooseVRMS();
	}

	public static void UnloadLooseVRMS()
	{
		KeyValuePair<string, VRMModel>[] array = loaded_vrms.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			KeyValuePair<string, VRMModel> keyValuePair = array[i];
			if (GetInstancesOf(keyValuePair.Value).Count() <= 0)
			{
				keyValuePair.Value.Dispose();
				loaded_vrms.Remove(keyValuePair.Key);
				Debug.Log((object)("[ValheimVRM] unloaded loose VRM " + keyValuePair.Value.Name + "."));
			}
		}
	}
}
namespace ValheimVRM
{
	public class AnimatorSync : MonoBehaviour
	{
		public Animator sourceAnimator;

		private Animator animator;

		private AnimatorControllerParameter[] apr;

		private bool filtered;

		public Transform HeadBone;

		private void OnEnable()
		{
			animator = ((Component)this).GetComponent<Animator>();
			apr = animator.parameters;
		}

		public void Setup(Animator animator, string head)
		{
			sourceAnimator = animator;
			HeadBone = UnityExtensions.FindDescendant(((Component)this).transform, head);
		}

		private void Update()
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: 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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Expected I4, but got Unknown
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Invalid comparison between Unknown and I4
			if (!filtered)
			{
				AnimatorControllerParameter[] xparams = sourceAnimator.parameters;
				apr = apr.Where((AnimatorControllerParameter x) => xparams.Any((AnimatorControllerParameter y) => y.nameHash == x.nameHash)).ToArray();
				filtered = true;
			}
			for (int i = 0; i < apr.Length; i++)
			{
				AnimatorControllerParameter val = apr[i];
				AnimatorControllerParameterType type = val.type;
				switch (type - 1)
				{
				case 3:
				{
					bool @bool = sourceAnimator.GetBool(val.nameHash);
					animator.SetBool(val.nameHash, @bool);
					continue;
				}
				case 2:
				{
					int integer = sourceAnimator.GetInteger(val.nameHash);
					animator.SetInteger(val.nameHash, integer);
					continue;
				}
				case 0:
				{
					float @float = sourceAnimator.GetFloat(val.nameHash);
					animator.SetFloat(val.nameHash, @float);
					continue;
				}
				case 1:
					continue;
				}
				if ((int)type == 9 && sourceAnimator.GetBool(val.nameHash))
				{
					animator.SetTrigger(val.nameHash);
				}
			}
		}
	}
	public class MToonColorSync : MonoBehaviour
	{
		private class MatColor
		{
			public Material mat;

			public Color color;

			public Color shadeColor;

			public Color emission;

			public bool hasColor;

			public bool hasShadeColor;

			public bool hasEmission;
		}

		private int _SunColor;

		private int _AmbientColor;

		private List<MatColor> matColors = new List<MatColor>();

		private void Awake()
		{
			_SunColor = Shader.PropertyToID("_SunColor");
			_AmbientColor = Shader.PropertyToID("_AmbientColor");
		}

		public void Setup(GameObject vrm)
		{
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			matColors.Clear();
			SkinnedMeshRenderer[] componentsInChildren = vrm.GetComponentsInChildren<SkinnedMeshRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				Material[] materials = ((Renderer)componentsInChildren[i]).materials;
				foreach (Material mat in materials)
				{
					if (!matColors.Exists((MatColor m) => (Object)(object)m.mat == (Object)(object)mat))
					{
						matColors.Add(new MatColor
						{
							mat = mat,
							color = (mat.HasProperty("_Color") ? mat.GetColor("_Color") : Color.white),
							shadeColor = (mat.HasProperty("_ShadeColor") ? mat.GetColor("_ShadeColor") : Color.white),
							emission = (mat.HasProperty("_EmissionColor") ? mat.GetColor("_EmissionColor") : Color.black),
							hasColor = mat.HasProperty("_Color"),
							hasShadeColor = mat.HasProperty("_ShadeColor"),
							hasEmission = mat.HasProperty("_EmissionColor")
						});
					}
				}
			}
		}

		private void Update()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: 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_00a3: 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_0090: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			Color globalColor = Shader.GetGlobalColor(_SunColor);
			Color globalColor2 = Shader.GetGlobalColor(_AmbientColor);
			Color val = globalColor + globalColor2;
			if (((Color)(ref val)).maxColorComponent > 0.7f)
			{
				val /= 0.3f + ((Color)(ref val)).maxColorComponent;
			}
			foreach (MatColor matColor in matColors)
			{
				Color val2 = matColor.color * val;
				val2.a = matColor.color.a;
				if (((Color)(ref val2)).maxColorComponent > 1f)
				{
					val2 /= ((Color)(ref val2)).maxColorComponent;
				}
				Color val3 = matColor.shadeColor * val;
				val3.a = matColor.shadeColor.a;
				if (((Color)(ref val3)).maxColorComponent > 1f)
				{
					val3 /= ((Color)(ref val3)).maxColorComponent;
				}
				Color val4 = matColor.emission * ((Color)(ref val)).grayscale;
				if (matColor.hasColor)
				{
					matColor.mat.SetColor("_Color", val2);
				}
				if (matColor.hasShadeColor)
				{
					matColor.mat.SetColor("_ShadeColor", val3);
				}
				if (matColor.hasEmission)
				{
					matColor.mat.SetColor("_EmissionColor", val4);
				}
			}
		}
	}
	[DefaultExecutionOrder(int.MaxValue)]
	public class VRMAnimationSync : MonoBehaviour
	{
		private Animator orgAnim;

		private Animator vrmAnim;

		private HumanPoseHandler orgPose;

		private HumanPoseHandler vrmPose;

		private HumanPose hp;

		private VRMSettings settings;

		private bool ragdoll;

		private Vector3? adjustPos;

		private static List<int> alreadyHashes = new List<int>();

		private const int FirstTime = -161139084;

		private const int Usually = 229373857;

		private const int FirstRise = -1536343465;

		private const int RiseUp = -805461806;

		private const int StartToSitDown = 890925016;

		private const int SittingIdle = -1544306596;

		private const int StandingUpFromSit = -805461806;

		private const int SittingChair = -1829310159;

		private const int SittingThrone = 1271596;

		private const int SittingShip = -675369009;

		private const int StartSleeping = 337039637;

		private const int Sleeping = -1603096;

		private const int GetUpFromBed = -496559199;

		private const int Crouch = -2015693266;

		private const int HoldingMast = -2110678410;

		private const int HoldingDragon = -2076823180;

		private static List<int> adjustHipHashes = new List<int> { -1829310159, 1271596, -675369009, -1603096 };

		public float offset { get; set; }

		public void Setup(Animator orgAnim, VRMSettings settings, bool isRagdoll = false, float offset = 0f)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			this.settings = settings;
			this.offset = offset;
			this.orgAnim = orgAnim;
			vrmAnim = ((Component)this).GetComponent<Animator>();
			vrmAnim.applyRootMotion = true;
			vrmAnim.updateMode = orgAnim.updateMode;
			vrmAnim.feetPivotActive = orgAnim.feetPivotActive;
			vrmAnim.layersAffectMassCenter = orgAnim.layersAffectMassCenter;
			vrmAnim.stabilizeFeet = orgAnim.stabilizeFeet;
			PoseHandlerCreate(orgAnim, vrmAnim);
		}

		private void PoseHandlerCreate(Animator org, Animator vrm)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Expected O, but got Unknown
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			OnDestroy();
			orgPose = new HumanPoseHandler(org.avatar, ((Component)org).transform);
			vrmPose = new HumanPoseHandler(vrm.avatar, ((Component)vrm).transform);
		}

		private void OnDestroy()
		{
			if (orgPose != null)
			{
				orgPose.Dispose();
			}
			if (vrmPose != null)
			{
				vrmPose.Dispose();
			}
		}

		private float CalcFootSub()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: 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_0068: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = orgAnim.GetBoneTransform((HumanBodyBones)6).position;
			Vector3 position2 = orgAnim.GetBoneTransform((HumanBodyBones)5).position;
			Vector3 val = (position + position2) * 0.5f;
			Vector3 position3 = vrmAnim.GetBoneTransform((HumanBodyBones)6).position;
			Vector3 position4 = vrmAnim.GetBoneTransform((HumanBodyBones)5).position;
			Vector3 val2 = (position3 + position4) * 0.5f;
			return (val - val2).y;
		}

		private Vector3 StateHashToOffset(int stateHash, out float interpSpeed)
		{
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			interpSpeed = Time.deltaTime * 5f;
			switch (stateHash)
			{
			case -1544306596:
			case 890925016:
				return settings.SittingIdleOffset;
			case -1829310159:
				return settings.SittingOnChairOffset;
			case 1271596:
				return settings.SittingOnThroneOffset;
			case -675369009:
				return settings.SittingOnShipOffset;
			case -2110678410:
				return settings.HoldingMastOffset;
			case -2076823180:
				return settings.HoldingDragonOffset;
			case -1603096:
				return settings.SleepingOffset;
			default:
				interpSpeed = 1f;
				return Vector3.zero;
			}
		}

		private void Update()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			((Component)vrmAnim).transform.localPosition = Vector3.zero;
			if (!ragdoll)
			{
				UpdateBones();
			}
			Transform transform = ((Component)vrmAnim).transform;
			transform.localPosition += Vector3.up * offset;
		}

		private void LateUpdate()
		{
			//IL_0011: 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_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: 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)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0262: Unknown result type (might be due to invalid IL or missing references)
			float num = 1f;
			((Component)vrmAnim).transform.localPosition = Vector3.zero;
			_ = orgAnim.GetBoneTransform((HumanBodyBones)0).position;
			orgPose.GetHumanPose(ref hp);
			vrmPose.SetHumanPose(ref hp);
			AnimatorStateInfo currentAnimatorStateInfo = orgAnim.GetCurrentAnimatorStateInfo(0);
			int shortNameHash = ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).shortNameHash;
			AnimatorStateInfo nextAnimatorStateInfo = orgAnim.GetNextAnimatorStateInfo(0);
			int shortNameHash2 = ((AnimatorStateInfo)(ref nextAnimatorStateInfo)).shortNameHash;
			adjustHipHashes.Contains(shortNameHash);
			Transform boneTransform = vrmAnim.GetBoneTransform((HumanBodyBones)0);
			Transform boneTransform2 = orgAnim.GetBoneTransform((HumanBodyBones)0);
			Vector3 val = Vector3.zero;
			if (!adjustHipHashes.Contains(shortNameHash))
			{
				Vector3 val2 = boneTransform2.position - boneTransform2.parent.position;
				val = val2 * num - val2;
			}
			float interpSpeed = Time.deltaTime * 5f;
			Vector3 val3 = StateHashToOffset(shortNameHash, out interpSpeed);
			if (val3 != Vector3.zero)
			{
				val += ((Component)boneTransform2).transform.rotation * val3;
			}
			Vector3 val4 = Vector3.zero;
			float num3;
			Vector3 val7;
			if (shortNameHash2 != 0)
			{
				if (!adjustHipHashes.Contains(shortNameHash2))
				{
					Vector3 val5 = boneTransform2.position - boneTransform2.parent.position;
					val4 = val5 * num - val5;
				}
				float interpSpeed2 = Time.deltaTime * 5f;
				Vector3 val6 = StateHashToOffset(shortNameHash2, out interpSpeed2);
				if (val6 != Vector3.zero)
				{
					val4 += ((Component)boneTransform2).transform.rotation * val6;
				}
				float num2 = Mathf.Clamp01(((AnimatorStateInfo)(ref nextAnimatorStateInfo)).normalizedTime * ((AnimatorStateInfo)(ref nextAnimatorStateInfo)).length / 0.5f);
				num3 = Mathf.Lerp(interpSpeed, interpSpeed2, num2);
				val7 = Vector3.Lerp(val, val4, num2);
			}
			else
			{
				num3 = interpSpeed;
				val7 = val;
			}
			adjustPos = (adjustPos.HasValue ? Vector3.Lerp(adjustPos.Value, val7, num3) : val);
			boneTransform.position += adjustPos.Value;
			if (!ragdoll)
			{
				UpdateBones();
			}
			Transform transform = ((Component)vrmAnim).transform;
			transform.localPosition += Vector3.up * offset;
		}

		private void UpdateBones()
		{
			for (int i = 1; i < 55; i++)
			{
				TransferBone((HumanBodyBones)i);
			}
		}

		private void TransferBone(HumanBodyBones humanbone)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Invalid comparison between Unknown and I4
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Invalid comparison between Unknown and I4
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Invalid comparison between Unknown and I4
			//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_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			if ((int)humanbone == 21 || (int)humanbone == 22)
			{
				return;
			}
			Transform boneTransform = orgAnim.GetBoneTransform(humanbone);
			Transform boneTransform2 = vrmAnim.GetBoneTransform(humanbone);
			if ((Object)(object)boneTransform != (Object)null && (Object)(object)boneTransform2 != (Object)null)
			{
				if ((int)humanbone == 5 || (int)humanbone == 6)
				{
					boneTransform.position = boneTransform2.position;
				}
				else
				{
					boneTransform.position = boneTransform2.position + Vector3.up * offset;
				}
			}
		}
	}
	public class VRMBlinkController : MonoBehaviour
	{
		private SkinnedMeshRenderer skinnedMeshRenderer;

		private int blendshapeid;

		private float next_blink;

		private float next_unblink;

		private float target_weight;

		private float weight;

		private float speed = 10f;

		public void Setup(SkinnedMeshRenderer target, string blendshape)
		{
			skinnedMeshRenderer = target;
			blendshapeid = skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex(blendshape);
		}

		public void Setup(SkinnedMeshRenderer target, int blendshapeid)
		{
			skinnedMeshRenderer = target;
			this.blendshapeid = blendshapeid;
		}

		private void LateUpdate()
		{
			float time = Time.time;
			if (next_blink < time)
			{
				target_weight = 1f;
				next_unblink = time + 0.1f;
				next_blink = time + Random.Range(1f, 5f);
			}
			if (next_unblink < time)
			{
				target_weight = 0f;
			}
			if (weight != target_weight)
			{
				weight = Mathf.MoveTowards(weight, target_weight, Time.deltaTime * speed);
				skinnedMeshRenderer.SetBlendShapeWeight(blendshapeid, weight * 100f);
			}
		}
	}
	public class VRMCharacterController : MonoBehaviour
	{
		[Serializable]
		public class StateMachine
		{
			public List<State> States = new List<State>();

			public List<Transition> Transitions = new List<Transition>();

			public string DefaultState;

			[NonSerialized]
			public State CurrentState;

			private Dictionary<string, State> state_dict = new Dictionary<string, State>();

			public void Build()
			{
				foreach (State state in States)
				{
					state_dict[state.Name] = state;
				}
				foreach (Transition transition in Transitions)
				{
					State to = state_dict[transition.To];
					if (transition.From == "any")
					{
						foreach (State state2 in States)
						{
							AddTransfition(state2, to, transition.Condition);
						}
					}
					else
					{
						State from = state_dict[transition.From];
						AddTransfition(from, to, transition.Condition, transition.Reversible);
					}
				}
				CurrentState = state_dict[DefaultState];
			}

			private void AddTransfition(State from, State to, string condition, bool add_reverse = false)
			{
				if (from == to)
				{
					return;
				}
				Func<Player, bool> func = GetConditionFunc(condition);
				if (func == null)
				{
					Debug.LogError((object)$"[VRM StateMacine] transition init error ({from} -> {to} c:'{condition}' condition not found");
					return;
				}
				from.built_transitions.Add(new Tuple<Func<Player, bool>, State>(func, to));
				if (add_reverse)
				{
					to.built_transitions.Add(new Tuple<Func<Player, bool>, State>((Player x) => !func(x), from));
				}
			}

			public Func<Player, bool> GetConditionFunc(string condition)
			{
				condition = condition.Trim('(', ')', ' ');
				string[] array = condition.Split(new char[1] { '&' }, 2);
				if (array.Length == 2)
				{
					Func<Player, bool> left2 = GetConditionFunc(array[0]);
					Func<Player, bool> right2 = GetConditionFunc(array[1]);
					return (Player x) => left2(x) && right2(x);
				}
				string[] array2 = condition.Split(new char[1] { '|' }, 2);
				if (array2.Length == 2)
				{
					Func<Player, bool> left = GetConditionFunc(array2[0]);
					Func<Player, bool> right = GetConditionFunc(array2[1]);
					return (Player x) => left(x) || right(x);
				}
				bool flag = condition.StartsWith("!");
				if (flag)
				{
					condition = condition.Substring(1);
				}
				Func<Player, bool> func = null;
				switch (condition)
				{
				case "IsCrouching":
					func = (Player x) => ((Character)x).IsCrouching();
					break;
				case "IsEncumbered":
					func = (Player x) => ((Character)x).IsEncumbered();
					break;
				case "IsDead":
					func = (Player x) => ((Character)x).IsDead();
					break;
				case "IsBlocking":
					func = (Player x) => ((Character)x).IsBlocking();
					break;
				case "IsDebugFlying":
					func = (Player x) => ((Character)x).IsDebugFlying();
					break;
				case "IsDrawingBow":
					func = (Player x) => ((Character)x).IsDrawingBow();
					break;
				case "IsDodgeInvincible":
					func = (Player x) => ((Character)x).IsDodgeInvincible();
					break;
				case "IsKnockedBack":
					func = (Player x) => ((Character)x).IsKnockedBack();
					break;
				case "IsFlying":
					func = (Player x) => ((Character)x).IsFlying();
					break;
				case "IsInvoking":
					func = (Player x) => ((MonoBehaviour)x).IsInvoking();
					break;
				case "IsOnGround":
					func = (Player x) => ((Character)x).IsOnGround();
					break;
				case "IsRiding":
					func = (Player x) => ((Character)x).IsRiding();
					break;
				case "IsRunning":
					func = (Player x) => ((Character)x).IsRunning();
					break;
				case "IsWallRunning":
					func = (Player x) => ((Character)x).IsWallRunning();
					break;
				case "IsAttached":
					func = (Player x) => ((Character)x).IsAttached();
					break;
				case "IsAttachedToShip":
					func = (Player x) => ((Character)x).IsAttachedToShip();
					break;
				case "IsPVPEnabled":
					func = (Player x) => ((Character)x).IsPVPEnabled();
					break;
				case "IsSafeInHome":
					func = (Player x) => x.IsSafeInHome();
					break;
				case "IsSitting":
					func = (Player x) => ((Character)x).IsSitting();
					break;
				case "IsSleeping":
					func = (Player x) => x.IsSleeping();
					break;
				case "IsSwimming":
					func = (Player x) => ((Character)x).IsSwimming();
					break;
				case "IsStaggering":
					func = (Player x) => ((Character)x).IsStaggering();
					break;
				case "IsSneaking":
					func = (Player x) => ((Character)x).IsSneaking();
					break;
				case "IsTeleporting":
					func = (Player x) => ((Character)x).IsTeleporting();
					break;
				case "IsWalking":
					func = (Player x) => ((Character)x).IsWalking();
					break;
				case "IsSensed":
					func = (Player x) => x.IsSensed();
					break;
				case "InShelter":
					func = (Player x) => x.InShelter();
					break;
				}
				if (func != null && flag)
				{
					func = (Player x) => !func(x);
				}
				return func;
			}

			public void Run(Player ply)
			{
				foreach (Tuple<Func<Player, bool>, State> built_transition in CurrentState.built_transitions)
				{
					if (built_transition.Item1(ply))
					{
						Debug.Log((object)$"[VRM StateMachine] statechange {CurrentState} -> {built_transition.Item2} ()");
						CurrentState = built_transition.Item2;
						CurrentState.Apply(ply);
					}
				}
			}
		}

		[Serializable]
		public class Transition
		{
			public string From;

			public string To;

			public string Condition;

			public bool Reversible;
		}

		[Serializable]
		public class State
		{
			public string Name;

			[NonSerialized]
			internal List<Tuple<Func<Player, bool>, State>> built_transitions = new List<Tuple<Func<Player, bool>, State>>();

			public float? CollisionHeight { get; set; }

			public float? CollisionRadius { get; set; }

			public void Apply(Player ply)
			{
				//IL_0091: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
				if (CollisionHeight.HasValue || CollisionRadius.HasValue)
				{
					CapsuleCollider component = ((Component)ply).GetComponent<CapsuleCollider>();
					if (CollisionHeight.HasValue)
					{
						component.height = CollisionHeight.Value;
					}
					if (CollisionRadius.HasValue)
					{
						component.radius = CollisionRadius.Value;
					}
					component.center = new Vector3(0f, CollisionHeight.Value / 2f, 0f);
					((Component)ply).GetComponent<Rigidbody>().centerOfMass = component.center;
				}
			}

			public override string ToString()
			{
				return Name;
			}
		}

		public StateMachine machine;

		private Player ply;

		private bool was_crouching;

		private void OnEnable()
		{
			ply = ((Component)this).GetComponent<Player>();
		}

		private void Update()
		{
			machine?.Run(ply);
		}
	}
	public class VRMEyeController : MonoBehaviour
	{
		public VRMLookAtBoneApplyer lookat;

		public VRMLookAtHead LAh;

		public Transform LEYE;

		public Transform REYE;

		public float RangeYaw = 25f;

		public float RangePitch = 16f;

		public float MovementMul = 0.9f;

		private bool is_local_player;

		private float next_update;

		private Vector3 ort_target;

		private void OnEnable()
		{
			is_local_player = (Object)(object)((Component)this).GetComponentInParent<Player>() == (Object)(object)Player.m_localPlayer;
		}

		private void Update()
		{
			//IL_0010: 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)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			_ = Time.time;
			Vector3 position = ((Component)Camera.main).transform.position;
			Matrix4x4 worldToLocalMatrix = LAh.Head.worldToLocalMatrix;
			Vector3 val = ((Matrix4x4)(ref worldToLocalMatrix)).MultiplyPoint(position);
			float num = default(float);
			float num2 = default(float);
			Matrix4x4Extensions.CalcYawPitch(Matrix4x4.identity, val - LEYE.localPosition, ref num, ref num2);
			num = Mathf.Clamp(num * MovementMul, 0f - RangeYaw, RangeYaw);
			num2 = Mathf.Clamp(num2 * MovementMul, 0f - RangePitch, RangePitch);
			LEYE.localRotation = Matrix4x4Extensions.YawPitchRotation(Matrix4x4.identity, num, num2);
			float num3 = default(float);
			float num4 = default(float);
			Matrix4x4Extensions.CalcYawPitch(Matrix4x4.identity, val - REYE.localPosition, ref num3, ref num4);
			num3 = Mathf.Clamp(num3 * MovementMul, 0f - RangeYaw, RangeYaw);
			num4 = Mathf.Clamp(num4 * MovementMul, 0f - RangePitch, RangePitch);
			REYE.localRotation = Matrix4x4Extensions.YawPitchRotation(Matrix4x4.identity, num3, num4);
		}

		private void ApplyRotations(float yaw, float pitch)
		{
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			float num;
			float num2;
			if (yaw < 0f)
			{
				num = 0f - lookat.HorizontalOuter.Map(0f - yaw);
				num2 = 0f - lookat.HorizontalInner.Map(0f - yaw);
			}
			else
			{
				num2 = lookat.HorizontalOuter.Map(yaw);
				num = lookat.HorizontalInner.Map(yaw);
			}
			pitch = ((!(pitch < 0f)) ? lookat.VerticalUp.Map(pitch) : (0f - lookat.VerticalDown.Map(0f - pitch)));
			if ((Object)(object)lookat.LeftEye.Transform != (Object)null && (Object)(object)lookat.RightEye.Transform != (Object)null)
			{
				Transform transform = lookat.LeftEye.Transform;
				Matrix4x4 initialWorldMatrix = ((OffsetOnTransform)(ref lookat.LeftEye)).InitialWorldMatrix;
				transform.rotation = ((Matrix4x4)(ref initialWorldMatrix)).rotation * Matrix4x4Extensions.YawPitchRotation(Matrix4x4.identity, num, pitch);
				Transform transform2 = lookat.RightEye.Transform;
				initialWorldMatrix = ((OffsetOnTransform)(ref lookat.RightEye)).InitialWorldMatrix;
				transform2.rotation = ((Matrix4x4)(ref initialWorldMatrix)).rotation * Matrix4x4Extensions.YawPitchRotation(Matrix4x4.identity, num2, pitch);
			}
		}
	}
	public class VRMEyePositionSync : MonoBehaviour
	{
		private Transform vrmEye;

		private Transform orgEye;

		public void Setup(Transform vrmEye)
		{
			this.vrmEye = vrmEye;
			orgEye = ((Character)((Component)this).GetComponent<Player>()).m_eye;
		}

		private void Update()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = orgEye.position;
			position.y = vrmEye.position.y;
			orgEye.position = position;
		}
	}
	public static class FieldAccess
	{
		public static FieldRef<VisEquipment, GameObject> m_helmetItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_helmetItemInstance");

		public static FieldRef<VisEquipment, GameObject> m_hairItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_hairItemInstance");

		public static FieldRef<VisEquipment, GameObject> m_beardItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_beardItemInstance");

		public static FieldRef<VisEquipment, GameObject> m_rightItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_rightItemInstance");

		public static FieldRef<VisEquipment, GameObject> m_leftItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_leftItemInstance");

		public static FieldRef<VisEquipment, GameObject> m_rightBackItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_rightBackItemInstance");

		public static FieldRef<VisEquipment, GameObject> m_leftBackItemInstance = AccessTools.FieldRefAccess<VisEquipment, GameObject>("m_leftBackItemInstance");

		public static FieldRef<VisEquipment, List<GameObject>> m_chestItemInstances = AccessTools.FieldRefAccess<VisEquipment, List<GameObject>>("m_chestItemInstances");

		public static FieldRef<VisEquipment, List<GameObject>> m_shoulderItemInstances = AccessTools.FieldRefAccess<VisEquipment, List<GameObject>>("m_shoulderItemInstances");

		public static FieldRef<VisEquipment, List<GameObject>> m_utilityItemInstances = AccessTools.FieldRefAccess<VisEquipment, List<GameObject>>("m_utilityItemInstances");

		public static FieldRef<VisEquipment, List<GameObject>> m_legItemInstances = AccessTools.FieldRefAccess<VisEquipment, List<GameObject>>("m_legItemInstances");

		public static FieldRef<Character, Vector3> m_originalLocalRef = AccessTools.FieldRefAccess<Character, Vector3>("m_originalLocalRef");

		public static FieldRef<FejdStartup, int> m_profileIndex = AccessTools.FieldRefAccess<FejdStartup, int>("m_profileIndex");

		public static FieldRef<FejdStartup, List<PlayerProfile>> m_profiles = AccessTools.FieldRefAccess<FejdStartup, List<PlayerProfile>>("m_profiles");

		public static FieldRef<Player, ZNetView> m_nview = AccessTools.FieldRefAccess<Player, ZNetView>("m_nview");

		public static FieldRef<Character, ZSyncAnimation> m_zanim = AccessTools.FieldRefAccess<Character, ZSyncAnimation>("m_zanim");

		public static FieldRef<Character, Animator> m_animator = AccessTools.FieldRefAccess<Character, Animator>("m_animator");

		public static FieldRef<Character, float> m_maxAirAltitude = AccessTools.FieldRefAccess<Character, float>("m_maxAirAltitude");
	}
	internal class JSONExt
	{
		public static Vector3JsonConverter v3j;

		static JSONExt()
		{
			v3j = new Vector3JsonConverter();
		}
	}
	public class Vector3JsonConverter : JsonConverter
	{
		public override bool CanRead => true;

		public override bool CanConvert(Type objectType)
		{
			return objectType == typeof(Vector3);
		}

		public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
		{
			//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)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = (Vector3)value;
			writer.WriteStartArray();
			writer.WriteValue(val.x);
			writer.WriteValue(val.y);
			writer.WriteValue(val.z);
			writer.WriteEndArray();
		}

		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			return (object)new Vector3((float)reader.ReadAsDouble().Value, (float)reader.ReadAsDouble().Value, (float)reader.ReadAsDouble().Value);
		}
	}
	public class NullableConverter<T> : JsonConverter where T : struct
	{
		public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
		{
			T? val = (T?)value;
			if (val.HasValue)
			{
				writer.WriteValue((object)val.Value);
			}
		}

		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			if (reader.Value == null)
			{
				return default(T);
			}
			return reader.Value;
		}

		public override bool CanConvert(Type objectType)
		{
			return objectType == typeof(T?);
		}
	}
	[BepInPlugin("com.jh.plugins.valheimvrmex", "ValheimVRM_EX", "1.0.0.0")]
	[BepInProcess("valheim.exe")]
	public class MainPlugin : BaseUnityPlugin
	{
		public const string PluginGuid = "com.jh.plugins.valheimvrmex";

		public const string PluginName = "ValheimVRM_EX";

		public const string PluginVersion = "1.0.0.0";

		public static ConfigEntry<KeyboardShortcut> ToggleFlight;

		public static ConfigEntry<KeyboardShortcut> Ability1;

		public static StatusEffect ShadowFormEffect;

		private void Awake()
		{
			//IL_0005: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			new Harmony("com.jh.plugins.valheimvrmex").PatchAll();
			VRMShaders.Initialize();
			ToggleFlight = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Input", "ToggleFlight", new KeyboardShortcut((KeyCode)102, Array.Empty<KeyCode>()), (ConfigDescription)null);
			Ability1 = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Input", "ActivateAbility1", new KeyboardShortcut((KeyCode)103, Array.Empty<KeyCode>()), (ConfigDescription)null);
			ShadowFormEffect = (StatusEffect)(object)ScriptableObject.CreateInstance<ShadowForm>();
			((Object)ShadowFormEffect).name = "ShadowForm";
			ShadowFormEffect.m_name = "Shadow form";
			ShadowFormEffect.m_startMessage = "Shadow form";
			ShadowFormEffect.m_stopMessage = "Normal form";
		}
	}
	[HarmonyPatch(typeof(ObjectDB), "Awake")]
	internal static class Patch_ObjectDB_Init
	{
		[HarmonyPostfix]
		private static void Postfix(ObjectDB __instance)
		{
			RegisterStatusEffect(MainPlugin.ShadowFormEffect);
			void RegisterStatusEffect(StatusEffect statusEffect)
			{
				if (statusEffect != null && !Object.op_Implicit((Object)(object)__instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode(((Object)statusEffect).name))))
				{
					__instance.m_StatusEffects.Add(statusEffect);
				}
			}
		}
	}
	[HarmonyPatch(typeof(Character), "GetHeadPoint")]
	internal static class Patch_Character_GetHeadPoint
	{
		[HarmonyPostfix]
		private static bool Prefix(Character __instance, ref Vector3 __result)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: 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_0076: Unknown result type (might be due to invalid IL or missing references)
			if (!__instance.IsPlayer())
			{
				return true;
			}
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance((Player)__instance);
			if (vRMInstance != null && Object.op_Implicit((Object)(object)vRMInstance.gameObject))
			{
				Animator componentInChildren = vRMInstance.gameObject.GetComponentInChildren<Animator>();
				if ((Object)(object)componentInChildren == (Object)null)
				{
					return true;
				}
				if (!componentInChildren.isHuman)
				{
					AnimatorSync component = vRMInstance.gameObject.GetComponent<AnimatorSync>();
					if ((Object)(object)component != (Object)null && Object.op_Implicit((Object)(object)component.HeadBone))
					{
						__result = component.HeadBone.position;
						return false;
					}
				}
				Transform boneTransform = componentInChildren.GetBoneTransform((HumanBodyBones)10);
				if ((Object)(object)boneTransform == (Object)null)
				{
					return true;
				}
				__result = boneTransform.position;
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Character), "SetVisible")]
	internal static class Patch_Character_SetVisible
	{
		[HarmonyPostfix]
		private static void Postfix(Character __instance, bool visible)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			if (!__instance.IsPlayer())
			{
				return;
			}
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance((Player)__instance);
			if (vRMInstance != null && Object.op_Implicit((Object)(object)vRMInstance.gameObject))
			{
				LODGroup component = vRMInstance.gameObject.GetComponent<LODGroup>();
				if (visible)
				{
					component.localReferencePoint = FieldAccess.m_originalLocalRef.Invoke(__instance);
				}
				else
				{
					component.localReferencePoint = new Vector3(999999f, 999999f, 999999f);
				}
			}
		}
	}
	[HarmonyPatch(typeof(Character), "UpdateMotion")]
	internal static class Patch_Character_UpdateMotion
	{
		[HarmonyPostfix]
		private static void Postfix(Character __instance, float dt)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			if (!__instance.IsPlayer())
			{
				return;
			}
			Player val = (Player)__instance;
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(val);
			if (vRMInstance == null)
			{
				return;
			}
			bool flag = !InventoryGui.IsVisible() && !Menu.IsVisible() && !GameCamera.InFreeFly() && !Minimap.IsOpen() && !Hud.IsPieceSelectionVisible() && !StoreGui.IsVisible() && !Console.IsVisible() && !Chat.instance.HasFocus() && !PlayerCustomizaton.IsBarberGuiVisible() && !Hud.InRadial();
			VRMSettings settings = vRMInstance.model.Settings;
			KeyboardShortcut value;
			if (settings.CanFly && (Object)(object)Player.m_localPlayer == (Object)(object)__instance && flag)
			{
				value = MainPlugin.ToggleFlight.Value;
				if (ZInput.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey, true))
				{
					Debug.Log((object)$"[DEBUG] toggle flight {__instance}");
					if (__instance.IsFlying())
					{
						__instance.Land();
					}
					else
					{
						__instance.TakeOff();
					}
				}
			}
			if (flag)
			{
				value = MainPlugin.Ability1.Value;
				if (ZInput.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey, true) && !string.IsNullOrWhiteSpace(settings.Ability1))
				{
					int stableHashCode = StringExtensionMethods.GetStableHashCode(settings.Ability1.Trim());
					ZRoutedRpc instance = ZRoutedRpc.instance;
					if (instance != null)
					{
						instance.InvokeRoutedRPC(ZNetView.Everybody, "RPC_AbilityCast", new object[3]
						{
							val.GetPlayerID(),
							stableHashCode,
							false
						});
					}
				}
			}
			if (settings.NoFallDamage && !__instance.IsFlying())
			{
				FieldAccess.m_maxAirAltitude.Invoke(__instance) = ((Component)__instance).transform.position.y;
			}
			if (__instance.IsFlying())
			{
				if (__instance.IsRunning())
				{
					__instance.UseStamina(dt * settings.FastFlightStaminaUsage * Game.m_moveStaminaRate, false);
				}
				else
				{
					__instance.UseStamina(dt * settings.FlightStaminaUsage * Game.m_moveStaminaRate, false);
				}
			}
		}

		public static void RPC_AbilityCast(long sender, long pid, int hash, bool end)
		{
			Player player = Player.GetPlayer(pid);
			if ((Object)(object)player == (Object)null)
			{
				return;
			}
			SEMan sEMan = ((Character)player).GetSEMan();
			if (sEMan.HaveStatusEffect(hash))
			{
				if (sEMan.GetStatusEffect(hash).GetDuration() > 4f)
				{
					sEMan.RemoveStatusEffect(hash, false);
				}
			}
			else
			{
				StatusEffect statusEffect = ObjectDB.instance.GetStatusEffect(hash);
				sEMan.AddStatusEffect(statusEffect, false, 0, 0f);
			}
		}
	}
	[HarmonyPatch(typeof(Game), "Start")]
	public static class GameStartPatch
	{
		private static void Prefix()
		{
			ZRoutedRpc.instance.Register<long, int, bool>("RPC_AbilityCast", (Action<long, long, int, bool>)Patch_Character_UpdateMotion.RPC_AbilityCast);
		}
	}
	[HarmonyPatch(typeof(Character), "UpdateWalking")]
	internal static class Patch_Character_UpdateWalking
	{
		private static readonly int s_forwardSpeed = ZSyncAnimation.GetHash("forward_speed");

		private static readonly int s_sidewaySpeed = ZSyncAnimation.GetHash("sideway_speed");

		[HarmonyPostfix]
		private static void Postfix(Character __instance, float dt)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			if (__instance.IsPlayer())
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance((Player)__instance);
				if (vRMInstance != null && vRMInstance.speed_coeff != 1f)
				{
					ZSyncAnimation obj = FieldAccess.m_zanim.Invoke(__instance);
					Animator obj2 = FieldAccess.m_animator.Invoke(__instance);
					float @float = obj2.GetFloat(s_forwardSpeed);
					float float2 = obj2.GetFloat(s_sidewaySpeed);
					obj.SetFloat(s_forwardSpeed, @float / vRMInstance.speed_coeff);
					obj.SetFloat(s_sidewaySpeed, float2 / vRMInstance.speed_coeff);
				}
			}
		}
	}
	[HarmonyPatch(typeof(Humanoid), "OnRagdollCreated")]
	internal static class Patch_Humanoid_OnRagdollCreated
	{
		[HarmonyPostfix]
		private static void Postfix(Humanoid __instance, Ragdoll ragdoll)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Expected O, but got Unknown
			if (!((Character)__instance).IsPlayer())
			{
				return;
			}
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance((Player)__instance);
			if (vRMInstance != null)
			{
				SkinnedMeshRenderer[] componentsInChildren = ((Component)ragdoll).GetComponentsInChildren<SkinnedMeshRenderer>();
				foreach (SkinnedMeshRenderer obj in componentsInChildren)
				{
					((Renderer)obj).forceRenderingOff = true;
					obj.updateWhenOffscreen = true;
				}
				Animator val = ((Component)ragdoll).gameObject.AddComponent<Animator>();
				val.keepAnimatorStateOnDisable = true;
				val.cullingMode = (AnimatorCullingMode)0;
				Animator val2 = FieldAccess.m_animator.Invoke((Character)(Player)__instance);
				val.avatar = val2.avatar;
				if (Object.op_Implicit((Object)(object)vRMInstance.gameObject))
				{
					vRMInstance.gameObject.transform.SetParent(((Component)ragdoll).transform, false);
					vRMInstance.gameObject.GetComponent<VRMAnimationSync>().Setup(val, vRMInstance.model.Settings, isRagdoll: true);
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetUtilityEquipped")]
	internal static class Patch_Humanoid_SetUtilityEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentUtilityItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetUtilityEquipped] itemHash: {vRMInstance.m_currentUtilityItemHash} -> {hash} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)8, hash);
					vRMInstance.m_currentUtilityItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(Player), "Start")]
	internal static class Patch_Player_Awake
	{
		private static Dictionary<string, GameObject> vrmDic = new Dictionary<string, GameObject>();

		[HarmonyPostfix]
		private static void Postfix(Player __instance)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			VRMCommands.Trigger();
			Scene scene = ((Component)__instance).gameObject.scene;
			bool num = ((Scene)(ref scene)).name == "start";
			string target_vrm = null;
			if (num)
			{
				VRMManager.Cleanup();
			}
			else if ((Object)(object)Player.m_localPlayer != (Object)(object)__instance)
			{
				((MonoBehaviour)__instance).StartCoroutine(WaitForForm(__instance));
			}
			string text = __instance.m_customData.TryGetOrDefault("vrm_form");
			if (!string.IsNullOrWhiteSpace(text))
			{
				target_vrm = text;
				Debug.Log((object)$"saved VRM form found {text} for {__instance}");
			}
			if ((Object)(object)Player.m_localPlayer != (Object)(object)__instance)
			{
				VRMTF.DoTransformLocal(__instance, target_vrm, 0f);
			}
			else
			{
				VRMTF.DoTransform(__instance, target_vrm, 0f);
			}
		}

		private static IEnumerator WaitForForm(Player __instance)
		{
			yield return (object)new WaitForEndOfFrame();
			bool is_received = false;
			__instance.GetPlayerID();
			while (!is_received)
			{
				ZNetView obj = FieldAccess.m_nview.Invoke(__instance);
				object obj2;
				if (obj == null)
				{
					obj2 = null;
				}
				else
				{
					ZDO zDO = obj.GetZDO();
					obj2 = ((zDO != null) ? zDO.GetString(VRMTFController.vrm_form, (string)null) : null);
				}
				string text = (string)obj2;
				if (!string.IsNullOrWhiteSpace(text))
				{
					is_received = true;
					Debug.Log((object)$"serverside VRM form received {text} for {__instance}");
					VRMTF.DoTransformLocal(__instance, text, 0f);
				}
				yield return (object)new WaitForEndOfFrame();
			}
		}

		[Obsolete]
		private static GameObject ImportVRM(string path, float scale)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				VRMImporterContext val = new VRMImporterContext(new VRMData(new GlbFileParser(path).Parse()), (IReadOnlyDictionary<SubAssetKey, Object>)null, (ITextureDeserializer)null, (IMaterialDescriptorGenerator)null, true);
				try
				{
					RuntimeGltfInstance obj = ImporterContextExtensions.Load((ImporterContext)(object)val);
					obj.ShowMeshes();
					Transform transform = obj.Root.transform;
					transform.localScale *= scale;
					Debug.Log((object)"[ValheimVRM] VRM loading successful");
					Debug.Log((object)("[ValheimVRM] VRM file path: " + path));
					return obj.Root;
				}
				finally
				{
					((IDisposable)val)?.Dispose();
				}
			}
			catch (Exception ex)
			{
				Debug.LogError((object)ex);
			}
			return null;
		}
	}
	[HarmonyPatch(typeof(Player), "GetHoverName")]
	internal static class Patch_Player_GetPlayerName
	{
		[HarmonyPostfix]
		private static bool Prefix(Player __instance, ref string __result)
		{
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(__instance);
			if (vRMInstance != null && vRMInstance.model.Settings.DisplayName != null)
			{
				__result = vRMInstance.model.Settings.DisplayName;
				return true;
			}
			return false;
		}
	}
	[HarmonyPatch(typeof(Player), "OnDeath")]
	internal static class Patch_Player_OnDeath
	{
		[HarmonyPostfix]
		private static void Postfix(Player __instance)
		{
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(__instance);
			if (vRMInstance != null && vRMInstance.model.Settings.FixCameraHeight)
			{
				Object.Destroy((Object)(object)((Component)__instance).GetComponent<VRMEyePositionSync>());
			}
		}
	}
	[HarmonyPatch(typeof(Player), "SetControls")]
	internal static class Patch_Player_SetControls
	{
		[HarmonyPostfix]
		private static void Postfix(Player __instance, Vector3 movedir, bool attack, bool attackHold, bool secondaryAttack, bool secondaryAttackHold, bool block, bool blockHold, bool jump, bool crouch, bool run, bool autoRun, bool dodge = false)
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: 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_0026: 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_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0046: 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)
			if (((Character)__instance).IsPlayer() && ((Character)__instance).IsFlying())
			{
				Vector3 lookDir = ((Character)__instance).GetLookDir();
				((Vector3)(ref lookDir)).Normalize();
				Vector3 moveDir = movedir.z * lookDir + movedir.x * Vector3.Cross(Vector3.up, lookDir);
				((Character)__instance).SetMoveDir(moveDir);
				if (__instance.GetStamina() <= 0f)
				{
					((Character)__instance).Land();
				}
			}
		}
	}
	[HarmonyPatch(typeof(Shader))]
	[HarmonyPatch("Find")]
	internal static class Patch_Shader_Find
	{
		private static bool Prefix(ref Shader __result, string name)
		{
			if (VRMShaders.Shaders.TryGetValue(name, out var value))
			{
				__result = value;
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetChestEquipped")]
	internal static class Patch_VisEquipment_SetChestEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentChestItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetChestEquipped] itemHash: {vRMInstance.m_currentChestItemHash} -> {hash} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)4, hash);
					vRMInstance.m_currentChestItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetHelmetEquipped")]
	internal static class Patch_VisEquipment_SetHelmetEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentHelmetItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetHelmetEquipped] itemHash: {vRMInstance.m_currentHelmetItemHash} -> {hash} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)6, hash);
					vRMInstance.m_currentHelmetItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetLeftBackItem")]
	internal static class Patch_VisEquipment_SetLeftBackItem
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, string name, int variant)
		{
			if (!__instance.m_isPlayer)
			{
				return;
			}
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
			if (vRMInstance != null)
			{
				int num = ((!string.IsNullOrEmpty(name)) ? StringExtensionMethods.GetStableHashCode(name) : 0);
				if (vRMInstance.m_currentLeftBackItemHash != num)
				{
					Debug.Log((object)$"[ValheimVRM] [SetLeftBackItem] itemHash: {vRMInstance.m_currentLeftBackItemHash} -> {num} VARIANT:{variant}");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)2, num);
					vRMInstance.m_currentLeftBackItemHash = num;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetLeftHandEquipped")]
	internal static class Patch_VisEquipment_SetLeftHandEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash, int variant)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentLeftItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetLeftHandEquipped] itemHash: {vRMInstance.m_currentLeftItemHash} -> {hash} VARIANT:{variant}");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)0, hash);
					vRMInstance.m_currentLeftItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetLegEquipped")]
	internal static class Patch_VisEquipment_SetLegEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentLegItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetLegEquipped] itemHash: {vRMInstance.m_currentLegItemHash} -> {hash} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)5, hash);
					vRMInstance.m_currentLegItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetRightBackItem")]
	internal static class Patch_VisEquipment_SetRightBackItem
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, string name)
		{
			if (!__instance.m_isPlayer)
			{
				return;
			}
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
			if (vRMInstance != null)
			{
				int num = ((!string.IsNullOrEmpty(name)) ? StringExtensionMethods.GetStableHashCode(name) : 0);
				if (vRMInstance.m_currentRightBackItemHash != num)
				{
					Debug.Log((object)$"[ValheimVRM] [SetRightBackItem] itemHash: {vRMInstance.m_currentRightBackItemHash} -> {num} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)1, num);
					vRMInstance.m_currentRightBackItemHash = num;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetRightHandEquipped")]
	internal static class Patch_VisEquipment_SetRightHandEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentRightItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetRightHandEquipped] itemHash: {vRMInstance.m_currentRightItemHash} -> {hash} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)1, hash);
					vRMInstance.m_currentRightItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "SetShoulderEquipped")]
	internal static class Patch_VisEquipment_SetShoulderEquipped
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance, int hash)
		{
			if (__instance.m_isPlayer)
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
				if (vRMInstance != null && vRMInstance.m_currentShoulderItemHash != hash)
				{
					Debug.Log((object)$"[ValheimVRM] [SetShoulderEquipped] itemHash: {vRMInstance.m_currentShoulderItemHash} -> {hash} ");
					VRMManager.AutoEquipByHash(vRMInstance, (VisSlot)7, hash);
					vRMInstance.m_currentShoulderItemHash = hash;
				}
			}
		}
	}
	[HarmonyPatch(typeof(VisEquipment), "UpdateLodgroup")]
	internal static class Patch_VisEquipment_UpdateLodgroup
	{
		[HarmonyPostfix]
		private static void Postfix(VisEquipment __instance)
		{
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			if (!__instance.m_isPlayer)
			{
				return;
			}
			VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(((Component)__instance).GetComponent<Player>());
			if (vRMInstance != null)
			{
				GameObject gameObject = FieldAccess.m_hairItemInstance.Invoke(__instance);
				GameObject gameObject2 = FieldAccess.m_beardItemInstance.Invoke(__instance);
				List<GameObject> gameObjects = FieldAccess.m_chestItemInstances.Invoke(__instance);
				List<GameObject> gameObjects2 = FieldAccess.m_legItemInstances.Invoke(__instance);
				List<GameObject> gameObjects3 = FieldAccess.m_shoulderItemInstances.Invoke(__instance);
				List<GameObject> gameObjects4 = FieldAccess.m_utilityItemInstances.Invoke(__instance);
				GameObject gameObject3 = FieldAccess.m_helmetItemInstance.Invoke(__instance);
				GameObject val = FieldAccess.m_leftItemInstance.Invoke(__instance);
				GameObject val2 = FieldAccess.m_rightItemInstance.Invoke(__instance);
				vRMInstance.HairVisibility.SetVisible(gameObject, !vRMInstance.model.Settings.HideHair);
				vRMInstance.BeardVisibility.SetVisible(gameObject2, !vRMInstance.model.Settings.HideBeard);
				vRMInstance.ChestVisibility.SetVisible(gameObjects, !vRMInstance.model.Settings.HideChest);
				vRMInstance.LegsVisibility.SetVisible(gameObjects2, !vRMInstance.model.Settings.HideLegs);
				vRMInstance.ShoulderVisibility.SetVisible(gameObjects3, !vRMInstance.model.Settings.HideShoulder);
				vRMInstance.UtilityVisibility.SetVisible(gameObjects4, !vRMInstance.model.Settings.HideUtility);
				vRMInstance.HelmetVisibility.SetVisible(gameObject3, !vRMInstance.model.Settings.HideHelmet);
				if ((Object)(object)val != (Object)null)
				{
					val.transform.localPosition = vRMInstance.model.Settings.LeftHandEuqipPos;
					vRMInstance.LeftItemVisibility.SetVisible(val, !vRMInstance.hideLeftHand);
				}
				if ((Object)(object)val2 != (Object)null)
				{
					val2.transform.localPosition = vRMInstance.model.Settings.RightHandEuqipPos;
					vRMInstance.LeftItemVisibility.SetVisible(val2, !vRMInstance.hideRightHand);
				}
				GameObject val3 = FieldAccess.m_rightBackItemInstance.Invoke(__instance);
				if ((Object)(object)val3 != (Object)null)
				{
					val3.transform.localPosition = vRMInstance.model.Settings.RightHandBackItemPos / 100f;
					vRMInstance.RightBackItemVisibility.SetVisible(val3, !vRMInstance.hideRightBack);
				}
				GameObject val4 = FieldAccess.m_leftBackItemInstance.Invoke(__instance);
				if ((Object)(object)val4 != (Object)null)
				{
					val4.transform.localPosition = vRMInstance.model.Settings.LeftHandBackItemPos / 100f;
					vRMInstance.LeftBackItemVisibility.SetVisible(val4, !vRMInstance.hideLeftBack);
				}
			}
		}
	}
	internal static class Settings
	{
		private static Dictionary<string, VRMSettings> playerSettings = new Dictionary<string, VRMSettings>();

		public static string ValheimVRMDir => Path.Combine(Environment.CurrentDirectory, "ValheimVRM");

		public static string PlayerSettingsPath(string playerName)
		{
			return Path.Combine(ValheimVRMDir, "settings_" + playerName + ".txt");
		}

		public static VRMSettings Get(string playerName)
		{
			playerSettings.TryGetValue(playerName, out var value);
			return value;
		}

		public static void AddSettings(string playerName, string[] lines)
		{
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			playerSettings[playerName] = new VRMSettings
			{
				EnablePlayerFade = ReadBool(ReadSettings(lines, "EnablePlayerFade"), defaultValue: true),
				FixCameraHeight = ReadBool(ReadSettings(lines, "FixCameraHeight"), defaultValue: true),
				UseMToonShader = ReadBool(ReadSettings(lines, "UseMToonShader")),
				ModelScale = ReadFloat(ReadSettings(lines, "ModelScale"), 1.1f),
				ModelOffsetY = ReadFloat(ReadSettings(lines, "ModelOffsetY")),
				ModelBrightness = ReadFloat(ReadSettings(lines, "ModelBrightness"), 0.8f),
				SpringBoneStiffness = ReadFloat(ReadSettings(lines, "SpringBoneStiffness"), 1f),
				SpringBoneGravityPower = ReadFloat(ReadSettings(lines, "SpringBoneGravityPower"), 1f),
				LeftHandEuqipPos = ReadVector3(ReadSettings(lines, "LeftHandEuqipPos"), Vector3.zero),
				RightHandEuqipPos = ReadVector3(ReadSettings(lines, "RightHandEuqipPos"), Vector3.zero),
				LeftHandBackItemPos = ReadVector3(ReadSettings(lines, "LeftHandBackItemPos"), Vector3.zero),
				RightHandBackItemPos = ReadVector3(ReadSettings(lines, "RightHandBackItemPos"), Vector3.zero)
			};
		}

		public static bool AddSettingsFromFile(string playerName)
		{
			string path = PlayerSettingsPath(playerName);
			if (File.Exists(path))
			{
				string[] lines = File.ReadAllLines(path);
				AddSettings(playerName, lines);
				return true;
			}
			return false;
		}

		public static bool ContainsSettings(string playerName)
		{
			return playerSettings.ContainsKey(playerName);
		}

		public static string ReadSettings(string[] lines, string key)
		{
			string text = null;
			try
			{
				foreach (string text2 in lines)
				{
					try
					{
						if (text2.Length <= 1 || !(text2.Substring(0, 2) == "//"))
						{
							string[] array = text2.Split(new char[1] { '=' });
							if (array.Length == 2 && array[0] == key)
							{
								text = array[1];
							}
						}
					}
					catch
					{
					}
				}
			}
			catch
			{
			}
			if (text == null)
			{
				Debug.LogWarning((object)("[ValheimVRM] Setting item not found: " + key));
			}
			return text;
		}

		public static int ReadInt(string value, int defaultValue = 0, bool debugLog = false)
		{
			if (value == null)
			{
				return defaultValue;
			}
			int result = defaultValue;
			if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out result))
			{
				return result;
			}
			return defaultValue;
		}

		public static float ReadFloat(string value, float defaultValue = 0f, bool debugLog = false)
		{
			if (value == null)
			{
				return defaultValue;
			}
			float result = defaultValue;
			if (float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out result))
			{
				return result;
			}
			return defaultValue;
		}

		public static bool ReadBool(string value, bool defaultValue = false, bool debugLog = false)
		{
			if (value == null)
			{
				return defaultValue;
			}
			bool result = defaultValue;
			if (bool.TryParse(value, out result))
			{
				return result;
			}
			return defaultValue;
		}

		public static Vector3 ReadVector3(string value, Vector3 defaultValue = default(Vector3), bool debugLog = false)
		{
			//IL_0003: 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_003a: 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)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			if (value == null)
			{
				return defaultValue;
			}
			string[] array = value.Trim().Trim(' ', '(', ')').Split(new char[1] { ',' });
			if (array.Length == 3)
			{
				try
				{
					Vector3 result = default(Vector3);
					result.x = float.Parse(array[0], CultureInfo.InvariantCulture);
					result.y = float.Parse(array[1], CultureInfo.InvariantCulture);
					result.z = float.Parse(array[2], CultureInfo.InvariantCulture);
					return result;
				}
				catch (FormatException ex)
				{
					Debug.LogError((object)ex);
				}
			}
			return defaultValue;
		}
	}
	public abstract class SettingsBase
	{
		public class Field
		{
			public Type type;

			public FieldInfo info;

			public object default_value;
		}

		public static Dictionary<string, Field> PopulateFieldInfo<T>()
		{
			Dictionary<string, Field> dictionary = new Dictionary<string, Field>();
			VRMSettings obj = Activator.CreateInstance<VRMSettings>();
			FieldInfo[] fields = typeof(VRMSettings).GetFields();
			foreach (FieldInfo fieldInfo in fields)
			{
				if (fieldInfo.GetCustomAttribute(typeof(NonSerializedAttribute)) == null)
				{
					dictionary.Add(fieldInfo.Name, new Field
					{
						type = fieldInfo.FieldType,
						info = fieldInfo,
						default_value = fieldInfo.GetValue(obj)
					});
				}
			}
			return dictionary;
		}

		public abstract Dictionary<string, object> Load(Dictionary<string, string> settings);

		protected void LoadValues(Dictionary<string, string> settings, Dictionary<string, object> old_values, Dictionary<string, Field> public_fields)
		{
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0246: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			foreach (KeyValuePair<string, Field> public_field in public_fields)
			{
				if (!settings.TryGetValue(public_field.Key, out var value))
				{
					continue;
				}
				object value2 = public_field.Value.info.GetValue(this);
				object obj = value2;
				try
				{
					if (public_field.Value.type == typeof(string))
					{
						obj = value;
					}
					else if (public_field.Value.type == typeof(float))
					{
						obj = float.Parse(value, CultureInfo.InvariantCulture);
					}
					else if (public_field.Value.type == typeof(int))
					{
						obj = int.Parse(value, CultureInfo.InvariantCulture);
					}
					else if (public_field.Value.type == typeof(bool))
					{
						obj = bool.Parse(value);
					}
					else if (public_field.Value.type.IsEnum)
					{
						obj = Enum.Parse(public_field.Value.type, value);
					}
					else if (public_field.Value.type == typeof(Vector2))
					{
						string[] array = value.Trim().Trim(' ', '(', ')').Split(new char[1] { ',' });
						Vector2 val = default(Vector2);
						val.x = float.Parse(array[0], CultureInfo.InvariantCulture);
						val.y = float.Parse(array[1], CultureInfo.InvariantCulture);
						obj = val;
					}
					else if (public_field.Value.type == typeof(Vector3))
					{
						string[] array2 = value.Trim().Trim(' ', '(', ')').Split(new char[1] { ',' });
						Vector3 val2 = default(Vector3);
						val2.x = float.Parse(array2[0], CultureInfo.InvariantCulture);
						val2.y = float.Parse(array2[1], CultureInfo.InvariantCulture);
						val2.z = float.Parse(array2[2], CultureInfo.InvariantCulture);
						obj = val2;
					}
					else
					{
						if (!(public_field.Value.type == typeof(Vector4)))
						{
							throw new NotSupportedException();
						}
						string[] array3 = value.Trim().Trim(' ', '(', ')').Split(new char[1] { ',' });
						Vector4 val3 = default(Vector4);
						val3.x = float.Parse(array3[0], CultureInfo.InvariantCulture);
						val3.y = float.Parse(array3[1], CultureInfo.InvariantCulture);
						val3.z = float.Parse(array3[2], CultureInfo.InvariantCulture);
						val3.w = float.Parse(array3[3], CultureInfo.InvariantCulture);
						obj = val3;
					}
				}
				catch (Exception ex)
				{
					Debug.LogError((object)$"[ValheimVRM] Error reading setting {public_field.Key} = {public_field.Value} ({public_field.Value.type}) {ex.Message}");
				}
				if (obj != value2)
				{
					public_field.Value.info.SetValue(this, obj);
					old_values.Add(public_field.Key, value2);
				}
			}
		}
	}
	public class ShadowForm : StatusEffect
	{
		public override void Setup(Character character)
		{
			((StatusEffect)this).Setup(character);
			RuntimeGltfInstance componentInChildren = ((Component)base.m_character).GetComponentInChildren<RuntimeGltfInstance>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				FieldAccess.m_animator.Invoke(character).SetBool("shadow_form", true);
				((MonoBehaviour)base.m_character).StartCoroutine(delayedactions(character, componentInChildren));
			}
		}

		private IEnumerator delayedactions(Character character, RuntimeGltfInstance vrm)
		{
			yield return (object)new WaitForSecondsRealtime(1f);
			SkinnedMeshRenderer[] componentsInChildren = ((Component)vrm).GetComponentsInChildren<SkinnedMeshRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Renderer)componentsInChildren[i]).shadowCastingMode = (ShadowCastingMode)3;
			}
			FieldAccess.m_animator.Invoke(character).SetBool("shadow_form", false);
		}

		public override void Stop()
		{
			((StatusEffect)this).Stop();
			RuntimeGltfInstance componentInChildren = ((Component)base.m_character).GetComponentInChildren<RuntimeGltfInstance>();
			if ((Object)(object)componentInChildren != (Object)null)
			{
				FieldAccess.m_animator.Invoke(base.m_character).SetBool("shadow_form", true);
				((MonoBehaviour)base.m_character).StartCoroutine(delayedactions2(base.m_character, componentInChildren));
			}
		}

		private IEnumerator delayedactions2(Character character, RuntimeGltfInstance vrm)
		{
			yield return (object)new WaitForSecondsRealtime(1f);
			SkinnedMeshRenderer[] componentsInChildren = ((Component)vrm).GetComponentsInChildren<SkinnedMeshRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Renderer)componentsInChildren[i]).shadowCastingMode = (ShadowCastingMode)1;
			}
			FieldAccess.m_animator.Invoke(character).SetBool("shadow_form", false);
		}
	}
	public static class VRMUtils
	{
		public static T RequireComponent<T>(this GameObject gameObject) where T : Component
		{
			T val = gameObject.GetComponent<T>();
			if ((Object)(object)val == (Object)null)
			{
				val = gameObject.AddComponent<T>();
			}
			return val;
		}

		public static string GetPlayerName(Player player)
		{
			string text = null;
			if ((Object)(object)Game.instance != (Object)null)
			{
				text = player.GetPlayerName();
				if (text == "" || text == "...")
				{
					text = Game.instance.GetPlayerProfile().GetName();
				}
			}
			else
			{
				int num = FieldAccess.m_profileIndex.Invoke(FejdStartup.instance);
				List<PlayerProfile> list = FieldAccess.m_profiles.Invoke(FejdStartup.instance);
				if (num >= 0 && num < list.Count)
				{
					text = list[num].GetName();
				}
			}
			return text;
		}

		public static void Set<T1, T2>(this Dictionary<T1, T2> dict, T1 key, T2 value)
		{
			if (value == null)
			{
				dict.Remove(key);
			}
			else if (dict.ContainsKey(key))
			{
				dict[key] = value;
			}
			else
			{
				dict.Add(key, value);
			}
		}

		public static T2 TryGetOrDefault<T1, T2>(this Dictionary<T1, T2> dict, T1 key, T2 default_value = default(T2))
		{
			if (dict.TryGetValue(key, out var value))
			{
				return value;
			}
			return default_value;
		}

		public static void DrawWireSphere(Vector3 center, float radius, Color color, float duration, int quality = 3)
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: 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_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//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)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: 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_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: 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_00cd: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: 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_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			quality = Mathf.Clamp(quality, 1, 10);
			int num = quality << 2;
			int num2 = quality << 3;
			int num3 = num >> 1;
			float num4 = 360f / (float)num2;
			float num5 = 180f / (float)num;
			for (int i = 0; i < num; i++)
			{
				Vector3 val = Vector3.forward * radius;
				val = Quaternion.AngleAxis(num5 * (float)(i - num3), Vector3.right) * val;
				for (int j = 0; j < num2; j++)
				{
					Vector3 val2 = Quaternion.AngleAxis(num4, Vector3.up) * val;
					Debug.DrawLine(val + center, val2 + center, color, duration);
					val = val2;
				}
			}
			for (int k = 0; k < num; k++)
			{
				Vector3 val = Vector3.forward * radius;
				val = Quaternion.AngleAxis(num5 * (float)(k - num3), Vector3.up) * val;
				Vector3 val3 = Quaternion.AngleAxis(90f, Vector3.up) * val;
				for (int l = 0; l < num2; l++)
				{
					Vector3 val2 = Quaternion.AngleAxis(num4, val3) * val;
					Debug.DrawLine(val + center, val2 + center, color, duration);
					val = val2;
				}
			}
		}

		public static AssetBundle RequireBundle(string path)
		{
			AssetBundle val = AssetBundle.GetAllLoadedAssetBundles().FirstOrDefault((Func<AssetBundle, bool>)((AssetBundle x) => ((Object)x).name == path));
			if ((Object)(object)val == (Object)null)
			{
				val = AssetBundle.LoadFromFile(Path.Combine(VRMManager.ValheimVRMDir, path));
			}
			Debug.Log((object)("asset bundle name '" + ((Object)val).name + "'"));
			return val;
		}
	}
	public static class VRMCommands
	{
		public static readonly ConsoleCommand ReloadSettings = new ConsoleCommand("vrm_reload_settings", "reload VRM settings for your character", (ConsoleEvent)delegate(ConsoleEventArgs args)
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				args.Context.AddString("[ValheimVRM] No local player found!");
			}
			else
			{
				VRMModel.Instance vRMInstance = VRMManager.GetVRMInstance(Player.m_localPlayer);
				if (vRMInstance != null)
				{
					string playerName = VRMUtils.GetPlayerName(Player.m_localPlayer);
					VRMManager.ReloadSettingsByName(vRMInstance.model, playerName);
					args.Context.AddString("[ValheimVRM] Settings for " + playerName + " were reloaded");
				}
			}
		}, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);

		public static readonly ConsoleCommand ReloadSettingsAll = new ConsoleCommand("vrm_reload_settings_all", "reload all loaded VRM settings", (ConsoleEvent)delegate(ConsoleEventArgs args)
		{
			foreach (VRMModel loadedModel in VRMManager.GetLoadedModels())
			{
				if (loadedModel.ReloadSettings())
				{
					args.Context.AddString("[ValheimVRM] Settings for " + loadedModel.Name + " were reloaded");
				}
			}
		}, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);

		public static readonly ConsoleCommand ReloadAll = new ConsoleCommand("vrm_reload_all", "reload all models and settings", (ConsoleEvent)delegate
		{
			_reloadall();
		}, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);

		public static readonly ConsoleCommand ChangeModel = new ConsoleCommand("vrm_change_model", "change character model (local)", (ConsoleEvent)delegate(ConsoleEventArgs args)
		{
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				args.Context.AddString("[ValheimVRM] No local player found!");
			}
			else if (args.Args.Length < 2)
			{
				args.Context.AddString("[ValheimVRM] first argument should be VRM name!");
			}
			else
			{
	

VRM.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using MToon;
using UniGLTF;
using UniGLTF.MeshUtility;
using UniGLTF.ShaderPropExporter;
using UniGLTF.Utils;
using UniHumanoid;
using UniJSON;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
using VRM;
using VRM.FastSpringBones.Blittables;
using VRM.FastSpringBones.Components;
using VRM.FastSpringBones.Registries;
using VRMShaders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[4158]
		{
			0, 0, 0, 1, 0, 0, 0, 50, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 92, 66,
			108, 101, 110, 100, 83, 104, 97, 112, 101, 65,
			118, 97, 116, 97, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 57, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 66, 108, 101, 110,
			100, 83, 104, 97, 112, 101, 92, 66, 108, 101,
			110, 100, 83, 104, 97, 112, 101, 66, 105, 110,
			100, 105, 110, 103, 77, 101, 114, 103, 101, 114,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			48, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 66, 108, 101, 110, 100, 83, 104, 97, 112,
			101, 92, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 67, 108, 105, 112, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 55, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 66, 108, 101,
			110, 100, 83, 104, 97, 112, 101, 92, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 67, 108,
			105, 112, 72, 97, 110, 100, 108, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 47,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			92, 66, 108, 101, 110, 100, 83, 104, 97, 112,
			101, 75, 101, 121, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 50, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 66, 108, 101, 110, 100,
			83, 104, 97, 112, 101, 92, 66, 108, 101, 110,
			100, 83, 104, 97, 112, 101, 77, 101, 114, 103,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 66, 108, 101, 110, 100, 83, 104,
			97, 112, 101, 92, 66, 108, 105, 110, 107, 101,
			114, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 60, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 86, 97, 108, 117, 101, 66, 105, 110, 100,
			105, 110, 103, 77, 101, 114, 103, 101, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 49,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			66, 108, 101, 110, 100, 83, 104, 97, 112, 101,
			92, 77, 101, 115, 104, 80, 114, 101, 118, 105,
			101, 119, 73, 116, 101, 109, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 53, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 66, 108, 101,
			110, 100, 83, 104, 97, 112, 101, 92, 80, 114,
			101, 118, 105, 101, 119, 83, 99, 101, 110, 101,
			77, 97, 110, 97, 103, 101, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 52, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 92, 86,
			82, 77, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 80, 114, 111, 120, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 31, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 110,
			117, 109, 85, 116, 105, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 48, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 92, 69, 110,
			117, 109, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 52, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 103, 108, 84, 70, 95, 86,
			82, 77, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 55, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 92, 86, 114, 109, 72, 117, 109,
			97, 110, 111, 105, 100, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 49, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 105, 114, 115,
			116, 80, 101, 114, 115, 111, 110, 92, 86, 82,
			77, 70, 105, 114, 115, 116, 80, 101, 114, 115,
			111, 110, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 62, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 92, 86, 82, 77, 70, 105,
			114, 115, 116, 80, 101, 114, 115, 111, 110, 67,
			97, 109, 101, 114, 97, 77, 97, 110, 97, 103,
			101, 114, 46, 99, 115, 0, 0, 0, 4, 0,
			0, 0, 49, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 111, 114, 109, 97, 116, 92,
			103, 108, 84, 70, 95, 86, 82, 77, 95, 66,
			108, 101, 110, 100, 83, 104, 97, 112, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 49,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 95, 86, 82, 77, 95, 101, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 50, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 70, 111, 114,
			109, 97, 116, 92, 103, 108, 84, 70, 95, 86,
			82, 77, 95, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 103, 108, 84, 70, 95, 86, 82, 77,
			95, 72, 117, 109, 97, 110, 111, 105, 100, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 47,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			70, 111, 114, 109, 97, 116, 92, 103, 108, 84,
			70, 95, 86, 82, 77, 95, 77, 97, 116, 101,
			114, 105, 97, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 43, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 103, 108, 84, 70, 95, 86, 82, 77,
			95, 77, 101, 116, 97, 46, 99, 115, 0, 0,
			0, 4, 0, 0, 0, 57, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 103, 108, 84, 70, 95, 86, 82,
			77, 95, 83, 101, 99, 111, 110, 100, 97, 114,
			121, 65, 110, 105, 109, 97, 116, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			47, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 86, 82,
			77, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 46, 103, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 42, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 86, 82, 77, 69, 120, 99, 101,
			112, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 45, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 86, 82, 77, 83, 101, 114, 105,
			97, 108, 105, 122, 101, 114, 46, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 44, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			111, 114, 109, 97, 116, 92, 86, 82, 77, 83,
			112, 101, 99, 86, 101, 114, 115, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			40, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 86, 82,
			77, 86, 101, 114, 115, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 47, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			111, 114, 109, 97, 116, 92, 86, 82, 77, 86,
			101, 114, 115, 105, 111, 110, 80, 97, 114, 116,
			105, 97, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 54, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 86, 82, 77, 72, 117, 109, 97,
			110, 111, 105, 100, 68, 101, 115, 99, 114, 105,
			112, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 97, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 73, 79, 92,
			66, 117, 105, 108, 116, 73, 110, 82, 80, 92,
			69, 120, 112, 111, 114, 116, 92, 66, 117, 105,
			108, 116, 73, 110, 86, 114, 109, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 77, 97, 116, 101,
			114, 105, 97, 108, 80, 114, 111, 112, 101, 114,
			116, 121, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			80, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 66, 117, 105, 108, 116,
			73, 110, 82, 80, 92, 69, 120, 112, 111, 114,
			116, 92, 66, 117, 105, 108, 116, 73, 110, 86,
			114, 109, 77, 97, 116, 101, 114, 105, 97, 108,
			69, 120, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 95, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 79, 92, 66, 117, 105, 108, 116, 73, 110,
			82, 80, 92, 69, 120, 112, 111, 114, 116, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 115, 92,
			66, 117, 105, 108, 116, 73, 110, 86, 114, 109,
			77, 84, 111, 111, 110, 77, 97, 116, 101, 114,
			105, 97, 108, 69, 120, 112, 111, 114, 116, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 91, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 73, 79, 92, 66, 117, 105, 108,
			116, 73, 110, 82, 80, 92, 73, 109, 112, 111,
			114, 116, 92, 66, 117, 105, 108, 116, 73, 110,
			86, 114, 109, 77, 97, 116, 101, 114, 105, 97,
			108, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 71, 101, 110, 101, 114, 97, 116, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			95, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 79, 92, 66, 117, 105, 108, 116,
			73, 110, 82, 80, 92, 73, 109, 112, 111, 114,
			116, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 92, 66, 117, 105, 108, 116, 73, 110, 86,
			114, 109, 77, 84, 111, 111, 110, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 112, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 73, 79, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 79, 92, 66, 117,
			105, 108, 116, 73, 110, 82, 80, 92, 73, 109,
			112, 111, 114, 116, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 115, 92, 66, 117, 105, 108, 116,
			73, 110, 86, 114, 109, 85, 110, 108, 105, 116,
			84, 114, 97, 110, 115, 112, 97, 114, 101, 110,
			116, 90, 87, 114, 105, 116, 101, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 81, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 73, 79, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 79, 92, 85, 82,
			80, 92, 73, 109, 112, 111, 114, 116, 92, 85,
			114, 112, 86, 114, 109, 77, 97, 116, 101, 114,
			105, 97, 108, 68, 101, 115, 99, 114, 105, 112,
			116, 111, 114, 71, 101, 110, 101, 114, 97, 116,
			111, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 88, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 73, 79, 92, 86, 82, 77,
			82, 101, 110, 100, 101, 114, 80, 105, 112, 101,
			108, 105, 110, 101, 77, 97, 116, 101, 114, 105,
			97, 108, 68, 101, 115, 99, 114, 105, 112, 116,
			111, 114, 71, 101, 110, 101, 114, 97, 116, 111,
			114, 85, 116, 105, 108, 105, 116, 121, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 33, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 86, 82, 77, 68, 97, 116, 97, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 38,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 86, 82, 77, 69, 120, 99, 101,
			112, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 37, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 86,
			82, 77, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			44, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 86, 82, 77, 73, 109, 112,
			111, 114, 116, 101, 114, 67, 111, 110, 116, 101,
			120, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 54, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 86, 82, 77, 73,
			109, 112, 111, 114, 116, 101, 114, 67, 111, 110,
			116, 101, 120, 116, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 49, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 86, 82,
			77, 77, 84, 111, 111, 110, 84, 101, 120, 116,
			117, 114, 101, 73, 109, 112, 111, 114, 116, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 55, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 86, 114, 109, 84, 101,
			120, 116, 117, 114, 101, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 71, 101, 110, 101, 114,
			97, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 36, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 86, 114,
			109, 85, 116, 105, 108, 105, 116, 121, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 36, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			86, 82, 77, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 111, 111, 107, 65, 116, 92,
			67, 117, 114, 118, 101, 77, 97, 112, 112, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 50, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 111, 111, 107, 65, 116, 92, 76,
			111, 111, 107, 65, 116, 84, 97, 114, 103, 101,
			116, 83, 119, 105, 116, 99, 104, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 40,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 111, 111, 107, 65, 116, 92, 76, 111, 111,
			107, 84, 97, 114, 103, 101, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 49, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 111,
			111, 107, 65, 116, 92, 77, 97, 116, 114, 105,
			120, 52, 120, 52, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 111, 111, 107, 65,
			116, 92, 79, 102, 102, 115, 101, 116, 79, 110,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 39,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 111, 111, 107, 65, 116, 92, 86, 82, 77,
			76, 111, 111, 107, 65, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 76, 111, 111,
			107, 65, 116, 92, 86, 82, 77, 76, 111, 111,
			107, 65, 116, 66, 108, 101, 110, 100, 83, 104,
			97, 112, 101, 65, 112, 112, 108, 121, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			50, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 111, 111, 107, 65, 116, 92, 86, 82,
			77, 76, 111, 111, 107, 65, 116, 66, 111, 110,
			101, 65, 112, 112, 108, 121, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 43, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			111, 111, 107, 65, 116, 92, 86, 82, 77, 76,
			111, 111, 107, 65, 116, 72, 101, 97, 100, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 35,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			77, 101, 116, 97, 92, 86, 82, 77, 77, 101,
			116, 97, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 46, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 101, 116, 97, 92, 86, 82,
			77, 77, 101, 116, 97, 73, 110, 102, 111, 114,
			109, 97, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 41, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 101, 116,
			97, 92, 86, 82, 77, 77, 101, 116, 97, 79,
			98, 106, 101, 99, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 59, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 83, 107, 105, 110,
			110, 101, 100, 77, 101, 115, 104, 85, 116, 105,
			108, 105, 116, 121, 92, 86, 82, 77, 66, 111,
			110, 101, 78, 111, 114, 109, 97, 108, 105, 122,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 56, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 70, 97, 115, 116, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 68, 105,
			115, 112, 111, 115, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 92, 70, 97,
			115, 116, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 82, 101, 112, 108, 97, 99, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			55, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 83, 101, 114, 118,
			105, 99, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 53, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 92, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 47, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 92, 86, 82, 77, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 60,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 86, 82, 77, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 67, 111, 108, 108, 105, 100,
			101, 114, 71, 114, 111, 117, 112, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 50, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 92, 86,
			82, 77, 83, 112, 114, 105, 110, 103, 85, 116,
			105, 108, 105, 116, 121, 46, 99, 115
		};
		result.TypesData = new byte[2861]
		{
			0, 0, 0, 0, 20, 86, 82, 77, 124, 66,
			108, 101, 110, 100, 83, 104, 97, 112, 101, 65,
			118, 97, 116, 97, 114, 0, 0, 0, 0, 27,
			86, 82, 77, 124, 66, 108, 101, 110, 100, 83,
			104, 97, 112, 101, 66, 105, 110, 100, 105, 110,
			103, 77, 101, 114, 103, 101, 114, 0, 0, 0,
			0, 66, 86, 82, 77, 46, 66, 108, 101, 110,
			100, 83, 104, 97, 112, 101, 66, 105, 110, 100,
			105, 110, 103, 77, 101, 114, 103, 101, 114, 124,
			68, 105, 99, 116, 105, 111, 110, 97, 114, 121,
			75, 101, 121, 66, 108, 101, 110, 100, 83, 104,
			97, 112, 101, 66, 105, 110, 100, 105, 110, 103,
			67, 111, 109, 112, 97, 114, 101, 114, 0, 0,
			0, 0, 21, 86, 82, 77, 124, 66, 108, 101,
			110, 100, 83, 104, 97, 112, 101, 66, 105, 110,
			100, 105, 110, 103, 0, 0, 0, 0, 24, 86,
			82, 77, 124, 77, 97, 116, 101, 114, 105, 97,
			108, 86, 97, 108, 117, 101, 66, 105, 110, 100,
			105, 110, 103, 0, 0, 0, 0, 18, 86, 82,
			77, 124, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 67, 108, 105, 112, 0, 0, 0, 0,
			25, 86, 82, 77, 124, 66, 108, 101, 110, 100,
			83, 104, 97, 112, 101, 67, 108, 105, 112, 72,
			97, 110, 100, 108, 101, 114, 0, 0, 0, 0,
			17, 86, 82, 77, 124, 66, 108, 101, 110, 100,
			83, 104, 97, 112, 101, 75, 101, 121, 0, 0,
			0, 0, 20, 86, 82, 77, 124, 66, 108, 101,
			110, 100, 83, 104, 97, 112, 101, 77, 101, 114,
			103, 101, 114, 0, 0, 0, 0, 11, 86, 82,
			77, 124, 66, 108, 105, 110, 107, 101, 114, 0,
			0, 0, 0, 30, 86, 82, 77, 124, 77, 97,
			116, 101, 114, 105, 97, 108, 86, 97, 108, 117,
			101, 66, 105, 110, 100, 105, 110, 103, 77, 101,
			114, 103, 101, 114, 0, 0, 0, 0, 72, 86,
			82, 77, 46, 77, 97, 116, 101, 114, 105, 97,
			108, 86, 97, 108, 117, 101, 66, 105, 110, 100,
			105, 110, 103, 77, 101, 114, 103, 101, 114, 124,
			68, 105, 99, 116, 105, 111, 110, 97, 114, 121,
			75, 101, 121, 77, 97, 116, 101, 114, 105, 97,
			108, 86, 97, 108, 117, 101, 66, 105, 110, 100,
			105, 110, 103, 67, 111, 109, 112, 97, 114, 101,
			114, 0, 0, 0, 0, 45, 86, 82, 77, 46,
			77, 97, 116, 101, 114, 105, 97, 108, 86, 97,
			108, 117, 101, 66, 105, 110, 100, 105, 110, 103,
			77, 101, 114, 103, 101, 114, 124, 77, 97, 116,
			101, 114, 105, 97, 108, 84, 97, 114, 103, 101,
			116, 0, 0, 0, 0, 16, 86, 82, 77, 124,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 116,
			101, 109, 0, 0, 0, 0, 19, 86, 82, 77,
			124, 77, 101, 115, 104, 80, 114, 101, 118, 105,
			101, 119, 73, 116, 101, 109, 0, 0, 0, 0,
			23, 86, 82, 77, 124, 80, 114, 101, 118, 105,
			101, 119, 83, 99, 101, 110, 101, 77, 97, 110,
			97, 103, 101, 114, 0, 0, 0, 0, 22, 86,
			82, 77, 124, 86, 82, 77, 66, 108, 101, 110,
			100, 83, 104, 97, 112, 101, 80, 114, 111, 120,
			121, 0, 0, 0, 0, 32, 86, 82, 77, 124,
			86, 82, 77, 66, 108, 101, 110, 100, 83, 104,
			97, 112, 101, 80, 114, 111, 120, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 12, 86, 82, 77, 124, 69, 110, 117,
			109, 85, 116, 105, 108, 0, 0, 0, 0, 18,
			86, 82, 77, 124, 69, 110, 117, 109, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 22, 86, 82, 77, 124, 103, 108, 84,
			70, 95, 86, 82, 77, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 21,
			86, 82, 77, 124, 86, 82, 77, 66, 111, 110,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 25, 86, 82, 77, 124,
			86, 82, 77, 72, 117, 109, 97, 110, 111, 105,
			100, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 18, 86, 82, 77, 124,
			86, 82, 77, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 0, 0, 0, 0, 43, 86,
			82, 77, 46, 86, 82, 77, 70, 105, 114, 115,
			116, 80, 101, 114, 115, 111, 110, 124, 82, 101,
			110, 100, 101, 114, 101, 114, 70, 105, 114, 115,
			116, 80, 101, 114, 115, 111, 110, 70, 108, 97,
			103, 115, 0, 0, 0, 0, 31, 86, 82, 77,
			124, 86, 82, 77, 70, 105, 114, 115, 116, 80,
			101, 114, 115, 111, 110, 67, 97, 109, 101, 114,
			97, 77, 97, 110, 97, 103, 101, 114, 0, 0,
			0, 0, 50, 86, 82, 77, 46, 86, 82, 77,
			70, 105, 114, 115, 116, 80, 101, 114, 115, 111,
			110, 67, 97, 109, 101, 114, 97, 77, 97, 110,
			97, 103, 101, 114, 124, 67, 97, 109, 101, 114,
			97, 87, 105, 116, 104, 82, 97, 119, 73, 109,
			97, 103, 101, 0, 0, 0, 0, 30, 86, 82,
			77, 124, 103, 108, 84, 70, 95, 86, 82, 77,
			95, 77, 97, 116, 101, 114, 105, 97, 108, 86,
			97, 108, 117, 101, 66, 105, 110, 100, 0, 0,
			0, 0, 27, 86, 82, 77, 124, 103, 108, 84,
			70, 95, 86, 82, 77, 95, 66, 108, 101, 110,
			100, 83, 104, 97, 112, 101, 66, 105, 110, 100,
			0, 0, 0, 0, 28, 86, 82, 77, 124, 103,
			108, 84, 70, 95, 86, 82, 77, 95, 66, 108,
			101, 110, 100, 83, 104, 97, 112, 101, 71, 114,
			111, 117, 112, 0, 0, 0, 0, 29, 86, 82,
			77, 124, 103, 108, 84, 70, 95, 86, 82, 77,
			95, 66, 108, 101, 110, 100, 83, 104, 97, 112,
			101, 77, 97, 115, 116, 101, 114, 0, 0, 0,
			0, 23, 86, 82, 77, 124, 103, 108, 84, 70,
			95, 86, 82, 77, 95, 101, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 22,
			86, 82, 77, 124, 103, 108, 84, 70, 95, 86,
			82, 77, 95, 68, 101, 103, 114, 101, 101, 77,
			97, 112, 0, 0, 0, 0, 27, 86, 82, 77,
			124, 103, 108, 84, 70, 95, 86, 82, 77, 95,
			77, 101, 115, 104, 65, 110, 110, 111, 116, 97,
			116, 105, 111, 110, 0, 0, 0, 0, 24, 86,
			82, 77, 124, 103, 108, 84, 70, 95, 86, 82,
			77, 95, 70, 105, 114, 115, 116, 112, 101, 114,
			115, 111, 110, 0, 0, 0, 0, 25, 86, 82,
			77, 124, 103, 108, 84, 70, 95, 86, 82, 77,
			95, 72, 117, 109, 97, 110, 111, 105, 100, 66,
			111, 110, 101, 0, 0, 0, 0, 21, 86, 82,
			77, 124, 103, 108, 84, 70, 95, 86, 82, 77,
			95, 72, 117, 109, 97, 110, 111, 105, 100, 0,
			0, 0, 0, 21, 86, 82, 77, 124, 103, 108,
			84, 70, 95, 86, 82, 77, 95, 77, 97, 116,
			101, 114, 105, 97, 108, 0, 0, 0, 0, 17,
			86, 82, 77, 124, 103, 108, 84, 70, 95, 86,
			82, 77, 95, 77, 101, 116, 97, 0, 0, 0,
			0, 39, 86, 82, 77, 124, 103, 108, 84, 70,
			95, 86, 82, 77, 95, 83, 101, 99, 111, 110,
			100, 97, 114, 121, 65, 110, 105, 109, 97, 116,
			105, 111, 110, 67, 111, 108, 108, 105, 100, 101,
			114, 0, 0, 0, 0, 44, 86, 82, 77, 124,
			103, 108, 84, 70, 95, 86, 82, 77, 95, 83,
			101, 99, 111, 110, 100, 97, 114, 121, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 67, 111, 108,
			108, 105, 100, 101, 114, 71, 114, 111, 117, 112,
			0, 0, 0, 0, 36, 86, 82, 77, 124, 103,
			108, 84, 70, 95, 86, 82, 77, 95, 83, 101,
			99, 111, 110, 100, 97, 114, 121, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 71, 114, 111, 117,
			112, 0, 0, 0, 0, 31, 86, 82, 77, 124,
			103, 108, 84, 70, 95, 86, 82, 77, 95, 83,
			101, 99, 111, 110, 100, 97, 114, 121, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 19, 86, 82, 77, 124, 86, 114, 109, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 0, 0, 0, 0, 16, 86, 82, 77, 124,
			86, 82, 77, 69, 120, 99, 101, 112, 116, 105,
			111, 110, 0, 0, 0, 0, 17, 86, 82, 77,
			124, 86, 82, 77, 83, 101, 114, 105, 97, 108,
			105, 122, 101, 114, 0, 0, 0, 0, 18, 86,
			82, 77, 124, 86, 82, 77, 83, 112, 101, 99,
			86, 101, 114, 115, 105, 111, 110, 1, 0, 0,
			0, 14, 86, 82, 77, 124, 86, 82, 77, 86,
			101, 114, 115, 105, 111, 110, 1, 0, 0, 0,
			14, 86, 82, 77, 124, 86, 82, 77, 86, 101,
			114, 115, 105, 111, 110, 0, 0, 0, 0, 22,
			86, 82, 77, 46, 86, 82, 77, 86, 101, 114,
			115, 105, 111, 110, 124, 86, 101, 114, 115, 105,
			111, 110, 0, 0, 0, 0, 26, 86, 82, 77,
			124, 86, 82, 77, 72, 117, 109, 97, 110, 111,
			105, 100, 68, 101, 115, 99, 114, 105, 112, 116,
			105, 111, 110, 0, 0, 0, 0, 47, 86, 82,
			77, 124, 66, 117, 105, 108, 116, 73, 110, 86,
			114, 109, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 77, 97, 116, 101, 114, 105, 97, 108, 80,
			114, 111, 112, 101, 114, 116, 121, 69, 120, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 30,
			86, 82, 77, 124, 66, 117, 105, 108, 116, 73,
			110, 86, 114, 109, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 35, 86, 82, 77, 124, 66,
			117, 105, 108, 116, 73, 110, 86, 114, 109, 77,
			84, 111, 111, 110, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 41, 86, 82, 77, 124, 66,
			117, 105, 108, 116, 73, 110, 86, 114, 109, 77,
			97, 116, 101, 114, 105, 97, 108, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 0, 0, 0, 0,
			35, 86, 82, 77, 124, 66, 117, 105, 108, 116,
			73, 110, 86, 114, 109, 77, 84, 111, 111, 110,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 109,
			112, 111, 114, 116, 101, 114, 0, 0, 0, 0,
			52, 86, 82, 77, 124, 66, 117, 105, 108, 116,
			73, 110, 86, 114, 109, 85, 110, 108, 105, 116,
			84, 114, 97, 110, 115, 112, 97, 114, 101, 110,
			116, 90, 87, 114, 105, 116, 101, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 37, 86, 82,
			77, 124, 85, 114, 112, 86, 114, 109, 77, 97,
			116, 101, 114, 105, 97, 108, 68, 101, 115, 99,
			114, 105, 112, 116, 111, 114, 71, 101, 110, 101,
			114, 97, 116, 111, 114, 0, 0, 0, 0, 68,
			85, 110, 105, 86, 82, 77, 124, 86, 114, 109,
			82, 101, 110, 100, 101, 114, 80, 105, 112, 101,
			108, 105, 110, 101, 77, 97, 116, 101, 114, 105,
			97, 108, 68, 101, 115, 99, 114, 105, 112, 116,
			111, 114, 71, 101, 110, 101, 114, 97, 116, 111,
			114, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 85, 116, 105, 108, 105, 116, 121, 0, 0,
			0, 0, 11, 86, 82, 77, 124, 86, 82, 77,
			68, 97, 116, 97, 0, 0, 0, 0, 20, 86,
			82, 77, 124, 78, 111, 116, 86, 114, 109, 48,
			69, 120, 99, 101, 112, 116, 105, 111, 110, 0,
			0, 0, 0, 15, 86, 82, 77, 124, 86, 82,
			77, 69, 120, 112, 111, 114, 116, 101, 114, 0,
			0, 0, 0, 22, 86, 82, 77, 124, 86, 82,
			77, 73, 109, 112, 111, 114, 116, 101, 114, 67,
			111, 110, 116, 101, 120, 116, 0, 0, 0, 0,
			32, 86, 82, 77, 124, 86, 82, 77, 73, 109,
			112, 111, 114, 116, 101, 114, 67, 111, 110, 116,
			101, 120, 116, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 27, 86, 82,
			77, 124, 86, 82, 77, 77, 84, 111, 111, 110,
			84, 101, 120, 116, 117, 114, 101, 73, 109, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 33,
			86, 82, 77, 124, 86, 114, 109, 84, 101, 120,
			116, 117, 114, 101, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 0, 0, 0, 0, 14, 86, 82,
			77, 124, 86, 114, 109, 85, 116, 105, 108, 105,
			116, 121, 0, 0, 0, 0, 17, 86, 82, 77,
			124, 73, 86, 82, 77, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 0, 0, 0, 0, 15, 86,
			82, 77, 124, 67, 117, 114, 118, 101, 77, 97,
			112, 112, 101, 114, 0, 0, 0, 0, 24, 86,
			82, 77, 124, 76, 111, 111, 107, 65, 116, 84,
			97, 114, 103, 101, 116, 83, 119, 105, 116, 99,
			104, 101, 114, 0, 0, 0, 0, 14, 86, 82,
			77, 124, 76, 111, 111, 107, 84, 97, 114, 103,
			101, 116, 0, 0, 0, 0, 23, 86, 82, 77,
			124, 77, 97, 116, 114, 105, 120, 52, 120, 52,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 21, 86, 82, 77, 124, 79,
			102, 102, 115, 101, 116, 79, 110, 84, 114, 97,
			110, 115, 102, 111, 114, 109, 0, 0, 0, 0,
			13, 86, 82, 77, 124, 86, 82, 77, 76, 111,
			111, 107, 65, 116, 0, 0, 0, 0, 30, 86,
			82, 77, 124, 86, 82, 77, 76, 111, 111, 107,
			65, 116, 66, 108, 101, 110, 100, 83, 104, 97,
			112, 101, 65, 112, 112, 108, 121, 101, 114, 0,
			0, 0, 0, 24, 86, 82, 77, 124, 86, 82,
			77, 76, 111, 111, 107, 65, 116, 66, 111, 110,
			101, 65, 112, 112, 108, 121, 101, 114, 0, 0,
			0, 0, 17, 86, 82, 77, 124, 86, 82, 77,
			76, 111, 111, 107, 65, 116, 72, 101, 97, 100,
			0, 0, 0, 0, 11, 86, 82, 77, 124, 86,
			82, 77, 77, 101, 116, 97, 0, 0, 0, 0,
			22, 86, 82, 77, 124, 86, 82, 77, 77, 101,
			116, 97, 73, 110, 102, 111, 114, 109, 97, 116,
			105, 111, 110, 0, 0, 0, 0, 17, 86, 82,
			77, 124, 86, 82, 77, 77, 101, 116, 97, 79,
			98, 106, 101, 99, 116, 0, 0, 0, 0, 21,
			86, 82, 77, 124, 86, 82, 77, 66, 111, 110,
			101, 78, 111, 114, 109, 97, 108, 105, 122, 101,
			114, 0, 0, 0, 0, 26, 86, 82, 77, 124,
			70, 97, 115, 116, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 68, 105, 115, 112, 111, 115,
			101, 114, 0, 0, 0, 0, 26, 86, 82, 77,
			124, 70, 97, 115, 116, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 82, 101, 112, 108, 97,
			99, 101, 114, 0, 0, 0, 0, 25, 86, 82,
			77, 124, 70, 97, 115, 116, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 83, 101, 114, 118,
			105, 99, 101, 0, 0, 0, 0, 23, 86, 82,
			77, 124, 84, 114, 97, 110, 115, 102, 111, 114,
			109, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 17, 86, 82, 77, 124,
			86, 82, 77, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 0, 0, 0, 0, 36, 86, 82,
			77, 46, 86, 82, 77, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 124, 86, 82, 77, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 76,
			111, 103, 105, 99, 0, 0, 0, 0, 32, 86,
			82, 77, 46, 86, 82, 77, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 124, 83, 112, 104,
			101, 114, 101, 67, 111, 108, 108, 105, 100, 101,
			114, 0, 0, 0, 0, 30, 86, 82, 77, 124,
			86, 82, 77, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 67, 111, 108, 108, 105, 100, 101,
			114, 71, 114, 111, 117, 112, 0, 0, 0, 0,
			45, 86, 82, 77, 46, 86, 82, 77, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 67, 111,
			108, 108, 105, 100, 101, 114, 71, 114, 111, 117,
			112, 124, 83, 112, 104, 101, 114, 101, 67, 111,
			108, 108, 105, 100, 101, 114, 0, 0, 0, 0,
			20, 86, 82, 77, 124, 86, 82, 77, 83, 112,
			114, 105, 110, 103, 85, 116, 105, 108, 105, 116,
			121
		};
		result.TotalFiles = 68;
		result.TotalTypes = 91;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniVRM
{
	public class VrmRenderPipelineMaterialDescriptorGeneratorDescriptorUtility : RenderPipelineMaterialDescriptorGeneratorUtility
	{
		public static IMaterialDescriptorGenerator GetValidVrm10MaterialDescriptorGenerator(glTF_VRM_extensions vrm)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			RenderPipelineTypes renderPipelineType = RenderPipelineMaterialDescriptorGeneratorUtility.GetRenderPipelineType();
			if ((int)renderPipelineType != 0)
			{
				if ((int)renderPipelineType == 1)
				{
					return (IMaterialDescriptorGenerator)(object)new UrpVrmMaterialDescriptorGenerator(vrm);
				}
				return null;
			}
			return (IMaterialDescriptorGenerator)(object)new BuiltInVrmMaterialDescriptorGenerator(vrm);
		}
	}
}
namespace VRM
{
	[CreateAssetMenu(menuName = "VRM/BlendShapeAvatar")]
	public class BlendShapeAvatar : ScriptableObject
	{
		[SerializeField]
		public List<BlendShapeClip> Clips = new List<BlendShapeClip>();

		public void CreateDefaultPreset()
		{
			BlendShapePreset[] values = CachedEnum.GetValues<BlendShapePreset>();
			foreach (BlendShapePreset blendShapePreset in values)
			{
				if (blendShapePreset != 0)
				{
					CreateDefaultPreset(blendShapePreset);
				}
			}
		}

		private void CreateDefaultPreset(BlendShapePreset preset)
		{
			BlendShapeClip blendShapeClip = null;
			foreach (BlendShapeClip clip in Clips)
			{
				if (clip.Preset == preset)
				{
					blendShapeClip = clip;
					break;
				}
			}
			if (!((Object)(object)blendShapeClip != (Object)null))
			{
				blendShapeClip = ScriptableObject.CreateInstance<BlendShapeClip>();
				((Object)blendShapeClip).name = preset.ToString();
				blendShapeClip.BlendShapeName = preset.ToString();
				blendShapeClip.Preset = preset;
				Clips.Add(blendShapeClip);
			}
		}

		public void SetClip(BlendShapeKey key, BlendShapeClip clip)
		{
			int num = -1;
			try
			{
				num = Clips.FindIndex((BlendShapeClip x) => key.Match(x));
			}
			catch (Exception)
			{
			}
			if (num == -1)
			{
				Clips.Add(clip);
			}
			else
			{
				Clips[num] = clip;
			}
		}

		public BlendShapeClip GetClip(BlendShapeKey key)
		{
			if (Clips == null)
			{
				return null;
			}
			return Clips.FirstOrDefault((BlendShapeClip x) => key.Match(x));
		}

		public BlendShapeClip GetClip(BlendShapePreset preset)
		{
			return GetClip(BlendShapeKey.CreateFromPreset(preset));
		}

		public BlendShapeClip GetClip(string name)
		{
			return GetClip(BlendShapeKey.CreateUnknown(name));
		}
	}
	internal class BlendShapeBindingMerger
	{
		private class DictionaryKeyBlendShapeBindingComparer : IEqualityComparer<BlendShapeBinding>
		{
			public bool Equals(BlendShapeBinding x, BlendShapeBinding y)
			{
				if (x.RelativePath == y.RelativePath)
				{
					return x.Index == y.Index;
				}
				return false;
			}

			public int GetHashCode(BlendShapeBinding obj)
			{
				return obj.RelativePath.GetHashCode() + obj.Index;
			}
		}

		private static DictionaryKeyBlendShapeBindingComparer comparer = new DictionaryKeyBlendShapeBindingComparer();

		private Dictionary<BlendShapeBinding, float> m_blendShapeValueMap = new Dictionary<BlendShapeBinding, float>(comparer);

		private Dictionary<BlendShapeBinding, Action<float>> m_blendShapeSetterMap = new Dictionary<BlendShapeBinding, Action<float>>(comparer);

		public BlendShapeBindingMerger(Dictionary<BlendShapeKey, BlendShapeClip> clipMap, Transform root)
		{
			foreach (KeyValuePair<BlendShapeKey, BlendShapeClip> item in clipMap)
			{
				BlendShapeBinding[] values = item.Value.Values;
				for (int i = 0; i < values.Length; i++)
				{
					BlendShapeBinding binding = values[i];
					if (m_blendShapeSetterMap.ContainsKey(binding))
					{
						continue;
					}
					Transform val = root.Find(binding.RelativePath);
					SkinnedMeshRenderer target = null;
					if ((Object)(object)val != (Object)null)
					{
						target = ((Component)val).GetComponent<SkinnedMeshRenderer>();
					}
					if ((Object)(object)target != (Object)null)
					{
						if (binding.Index >= 0 && binding.Index < target.sharedMesh.blendShapeCount)
						{
							m_blendShapeSetterMap.Add(binding, delegate(float x)
							{
								target.SetBlendShapeWeight(binding.Index, x);
							});
						}
						else
						{
							Debug.LogWarningFormat("Invalid blendshape binding: {0}: {1}", new object[2]
							{
								((Object)target).name,
								binding
							});
						}
					}
					else
					{
						Debug.LogWarningFormat("SkinnedMeshRenderer: {0} not found", new object[1] { binding.RelativePath });
					}
				}
			}
		}

		public void ImmediatelySetValue(BlendShapeClip clip, float value)
		{
			BlendShapeBinding[] values = clip.Values;
			for (int i = 0; i < values.Length; i++)
			{
				BlendShapeBinding key = values[i];
				if (m_blendShapeSetterMap.TryGetValue(key, out var value2))
				{
					value2(key.Weight * value);
				}
			}
		}

		public void AccumulateValue(BlendShapeClip clip, float value)
		{
			BlendShapeBinding[] values = clip.Values;
			for (int i = 0; i < values.Length; i++)
			{
				BlendShapeBinding key = values[i];
				if (m_blendShapeValueMap.TryGetValue(key, out var value2))
				{
					float num = value2 + key.Weight * value;
					m_blendShapeValueMap[key] = Mathf.Clamp(num, 0f, 100f);
				}
				else
				{
					m_blendShapeValueMap[key] = key.Weight * value;
				}
			}
		}

		public void Apply()
		{
			foreach (KeyValuePair<BlendShapeBinding, float> item in m_blendShapeValueMap)
			{
				if (m_blendShapeSetterMap.TryGetValue(item.Key, out var value))
				{
					value(item.Value);
				}
			}
			m_blendShapeValueMap.Clear();
		}
	}
	[Serializable]
	public struct BlendShapeBinding : IEquatable<BlendShapeBinding>
	{
		public string RelativePath;

		public int Index;

		public float Weight;

		public override string ToString()
		{
			return $"{RelativePath}[{Index}]=>{Weight}";
		}

		public bool Equals(BlendShapeBinding other)
		{
			if (string.Equals(RelativePath, other.RelativePath) && Index == other.Index)
			{
				return Weight.Equals(other.Weight);
			}
			return false;
		}

		public override bool Equals(object obj)
		{
			if (obj == null)
			{
				return false;
			}
			if (obj is BlendShapeBinding)
			{
				return Equals((BlendShapeBinding)obj);
			}
			return false;
		}

		public override int GetHashCode()
		{
			return (((((RelativePath != null) ? RelativePath.GetHashCode() : 0) * 397) ^ Index) * 397) ^ Weight.GetHashCode();
		}
	}
	[Serializable]
	public struct MaterialValueBinding : IEquatable<MaterialValueBinding>
	{
		public string MaterialName;

		public string ValueName;

		public Vector4 TargetValue;

		public Vector4 BaseValue;

		public bool Equals(MaterialValueBinding other)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			if (string.Equals(MaterialName, other.MaterialName) && string.Equals(ValueName, other.ValueName) && ((Vector4)(ref TargetValue)).Equals(other.TargetValue))
			{
				return ((Vector4)(ref BaseValue)).Equals(other.BaseValue);
			}
			return false;
		}

		public override bool Equals(object obj)
		{
			if (obj == null)
			{
				return false;
			}
			if (obj is MaterialValueBinding)
			{
				return Equals((MaterialValueBinding)obj);
			}
			return false;
		}

		public override int GetHashCode()
		{
			return (((((((MaterialName != null) ? MaterialName.GetHashCode() : 0) * 397) ^ ((ValueName != null) ? ValueName.GetHashCode() : 0)) * 397) ^ ((object)(Vector4)(ref TargetValue)).GetHashCode()) * 397) ^ ((object)(Vector4)(ref BaseValue)).GetHashCode();
		}
	}
	[CreateAssetMenu(menuName = "VRM/BlendShapeClip")]
	public class BlendShapeClip : ScriptableObject
	{
		[SerializeField]
		public string BlendShapeName = "";

		[SerializeField]
		public BlendShapePreset Preset;

		[SerializeField]
		public BlendShapeBinding[] Values = new BlendShapeBinding[0];

		[SerializeField]
		public MaterialValueBinding[] MaterialValues = new MaterialValueBinding[0];

		[SerializeField]
		public bool IsBinary;

		public BlendShapeKey Key => BlendShapeKey.CreateFromClip(this);

		public void CopyFrom(BlendShapeClip src)
		{
			IsBinary = src.IsBinary;
			MaterialValues = src.MaterialValues.ToArray();
			Values = src.Values.ToArray();
			Preset = src.Preset;
			((Object)this).name = ((Object)src).name;
		}
	}
	[Obsolete("Use VRMBlendShapeProxy")]
	public class BlendShapeClipHandler
	{
		private BlendShapeClip m_clip;

		private SkinnedMeshRenderer[] m_renderers;

		[Obsolete("Use Clip")]
		public BlendShapeClip Cilp => Clip;

		public BlendShapeClip Clip => m_clip;

		public float LastValue { get; private set; }

		public BlendShapeClipHandler(BlendShapeClip clip, Transform transform)
		{
			m_clip = clip;
			if ((Object)(object)m_clip != (Object)null && m_clip.Values != null && (Object)(object)transform != (Object)null)
			{
				m_renderers = m_clip.Values.Select((BlendShapeBinding x) => ((Component)UnityExtensions.GetFromPath(transform, x.RelativePath)).GetComponent<SkinnedMeshRenderer>()).ToArray();
			}
		}

		public void Apply(float value)
		{
			LastValue = value;
			if ((Object)(object)m_clip == (Object)null || m_renderers == null)
			{
				return;
			}
			for (int i = 0; i < m_clip.Values.Length; i++)
			{
				BlendShapeBinding blendShapeBinding = m_clip.Values[i];
				SkinnedMeshRenderer val = m_renderers[i];
				if (blendShapeBinding.Index >= 0 && blendShapeBinding.Index < val.sharedMesh.blendShapeCount)
				{
					val.SetBlendShapeWeight(blendShapeBinding.Index, blendShapeBinding.Weight * value);
				}
			}
		}
	}
	[Serializable]
	public readonly struct BlendShapeKey : IEquatable<BlendShapeKey>, IComparable<BlendShapeKey>
	{
		private static readonly Dictionary<BlendShapePreset, string> PresetNameCacheDictionary = new Dictionary<BlendShapePreset, string>();

		private static readonly string UnknownPresetPrefix = "Unknown_";

		public readonly BlendShapePreset Preset;

		private readonly string m_id;

		public string Name { get; }

		private BlendShapeKey(string name, BlendShapePreset preset)
		{
			Preset = preset;
			if (Preset != 0)
			{
				if (PresetNameCacheDictionary.TryGetValue(Preset, out var value))
				{
					m_id = (Name = value);
					return;
				}
				m_id = (Name = Preset.ToString());
				PresetNameCacheDictionary.Add(Preset, Name);
			}
			else
			{
				Name = ((!string.IsNullOrEmpty(name)) ? name : "");
				m_id = UnknownPresetPrefix + Name;
			}
		}

		public static BlendShapeKey CreateFromPreset(BlendShapePreset preset)
		{
			return new BlendShapeKey("", preset);
		}

		public static BlendShapeKey CreateFromClip(BlendShapeClip clip)
		{
			if ((Object)(object)clip == (Object)null)
			{
				return default(BlendShapeKey);
			}
			return new BlendShapeKey(clip.BlendShapeName, clip.Preset);
		}

		public static BlendShapeKey CreateUnknown(string name)
		{
			return new BlendShapeKey(name, BlendShapePreset.Unknown);
		}

		public override string ToString()
		{
			return m_id.Replace(UnknownPresetPrefix, "");
		}

		public bool Equals(BlendShapeKey other)
		{
			return m_id == other.m_id;
		}

		public override bool Equals(object obj)
		{
			if (obj is BlendShapeKey)
			{
				return Equals((BlendShapeKey)obj);
			}
			return false;
		}

		public override int GetHashCode()
		{
			return m_id.GetHashCode();
		}

		public bool Match(BlendShapeClip clip)
		{
			return Equals(CreateFromClip(clip));
		}

		public int CompareTo(BlendShapeKey other)
		{
			if (Preset != other.Preset)
			{
				return Preset - other.Preset;
			}
			return 0;
		}
	}
	public class BlendShapeMerger
	{
		private Dictionary<BlendShapeKey, BlendShapeClip> m_clipMap;

		private Dictionary<BlendShapeKey, float> m_valueMap;

		private BlendShapeBindingMerger m_blendShapeBindingMerger;

		private MaterialValueBindingMerger m_materialValueBindingMerger;

		public BlendShapeMerger(IEnumerable<BlendShapeClip> clips, Transform root)
		{
			m_clipMap = clips.ToDictionary((BlendShapeClip x) => BlendShapeKey.CreateFromClip(x), (BlendShapeClip x) => x);
			m_valueMap = new Dictionary<BlendShapeKey, float>();
			m_blendShapeBindingMerger = new BlendShapeBindingMerger(m_clipMap, root);
			m_materialValueBindingMerger = new MaterialValueBindingMerger(m_clipMap, root);
		}

		public void Apply()
		{
			m_blendShapeBindingMerger.Apply();
			m_materialValueBindingMerger.Apply();
		}

		public void SetValues(IEnumerable<KeyValuePair<BlendShapeKey, float>> values)
		{
			foreach (KeyValuePair<BlendShapeKey, float> value in values)
			{
				AccumulateValue(value.Key, value.Value);
			}
			Apply();
		}

		public void AccumulateValue(BlendShapeKey key, float value)
		{
			m_valueMap[key] = value;
			if (m_clipMap.TryGetValue(key, out var value2))
			{
				if (value2.IsBinary)
				{
					value = Mathf.Round(value);
				}
				m_blendShapeBindingMerger.AccumulateValue(value2, value);
				m_materialValueBindingMerger.AccumulateValue(value2, value);
			}
		}

		public void ImmediatelySetValue(BlendShapeKey key, float value)
		{
			m_valueMap[key] = value;
			if (m_clipMap.TryGetValue(key, out var value2))
			{
				if (value2.IsBinary)
				{
					value = Mathf.Round(value);
				}
				m_blendShapeBindingMerger.ImmediatelySetValue(value2, value);
				m_materialValueBindingMerger.ImmediatelySetValue(value2, value);
			}
		}

		public void SetValue(BlendShapeKey key, float value, bool immediately)
		{
			if (immediately)
			{
				ImmediatelySetValue(key, value);
			}
			else
			{
				AccumulateValue(key, value);
			}
		}

		public float GetValue(BlendShapeKey key)
		{
			if (!m_valueMap.TryGetValue(key, out var value))
			{
				return 0f;
			}
			return value;
		}

		public void RestoreMaterialInitialValues(IEnumerable<BlendShapeClip> clips)
		{
			m_materialValueBindingMerger.RestoreMaterialInitialValues(clips);
		}
	}
	public class Blinker : MonoBehaviour
	{
		private VRMBlendShapeProxy m_blendShapes;

		[FormerlySerializedAs("m_interVal")]
		[SerializeField]
		public float Interval = 5f;

		[FormerlySerializedAs("m_closingTime")]
		[SerializeField]
		public float ClosingTime = 0.06f;

		[FormerlySerializedAs("m_openingSeconds")]
		[SerializeField]
		public float OpeningSeconds = 0.03f;

		[FormerlySerializedAs("m_closeSeconds")]
		[SerializeField]
		public float CloseSeconds = 0.1f;

		private Coroutine m_coroutine;

		private float m_nextRequest;

		private bool m_request;

		public bool Request
		{
			get
			{
				return m_request;
			}
			set
			{
				if (!(Time.time < m_nextRequest))
				{
					m_request = value;
					m_nextRequest = Time.time + 1f;
				}
			}
		}

		private IEnumerator BlinkRoutine()
		{
			while (true)
			{
				float waitTime = Time.time + Random.value * Interval;
				while (waitTime > Time.time)
				{
					if (Request)
					{
						m_request = false;
						break;
					}
					yield return null;
				}
				float value2 = 0f;
				float closeSpeed = 1f / CloseSeconds;
				while (true)
				{
					value2 += Time.deltaTime * closeSpeed;
					if (value2 >= 1f)
					{
						break;
					}
					m_blendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), value2);
					yield return null;
				}
				m_blendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 1f);
				yield return (object)new WaitForSeconds(ClosingTime);
				value2 = 1f;
				float openSpeed = 1f / OpeningSeconds;
				while (true)
				{
					value2 -= Time.deltaTime * openSpeed;
					if (value2 < 0f)
					{
						break;
					}
					m_blendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), value2);
					yield return null;
				}
				m_blendShapes.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.Blink), 0f);
			}
		}

		private void OnEnable()
		{
			m_blendShapes = ((Component)this).GetComponent<VRMBlendShapeProxy>();
			m_coroutine = ((MonoBehaviour)this).StartCoroutine(BlinkRoutine());
		}

		private void OnDisable()
		{
			Debug.Log((object)"StopCoroutine");
			if (m_coroutine != null)
			{
				((MonoBehaviour)this).StopCoroutine(m_coroutine);
				m_coroutine = null;
			}
		}
	}
	internal class MaterialValueBindingMerger
	{
		[StructLayout(LayoutKind.Sequential, Size = 1)]
		private struct DictionaryKeyMaterialValueBindingComparer : IEqualityComparer<MaterialValueBinding>
		{
			public bool Equals(MaterialValueBinding x, MaterialValueBinding y)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Unknown result type (might be due to invalid IL or missing references)
				if (x.TargetValue == y.TargetValue && x.BaseValue == y.BaseValue && x.MaterialName == y.MaterialName)
				{
					return x.ValueName == y.ValueName;
				}
				return false;
			}

			public int GetHashCode(MaterialValueBinding obj)
			{
				return obj.GetHashCode();
			}
		}

		private delegate void Setter(float value, bool firstValue);

		private struct MaterialTarget : IEquatable<MaterialTarget>
		{
			public string MaterialName;

			public string ValueName;

			public bool Equals(MaterialTarget other)
			{
				if (MaterialName == other.MaterialName)
				{
					return ValueName == other.ValueName;
				}
				return false;
			}

			public override bool Equals(object obj)
			{
				if (obj is MaterialTarget)
				{
					return Equals((MaterialTarget)obj);
				}
				return false;
			}

			public override int GetHashCode()
			{
				if (MaterialName == null || ValueName == null)
				{
					return 0;
				}
				return MaterialName.GetHashCode() + ValueName.GetHashCode();
			}

			public static MaterialTarget Create(MaterialValueBinding binding)
			{
				MaterialTarget result = default(MaterialTarget);
				result.MaterialName = binding.MaterialName;
				result.ValueName = binding.ValueName;
				return result;
			}
		}

		private static DictionaryKeyMaterialValueBindingComparer comparer;

		private Dictionary<string, Material> m_materialMap = new Dictionary<string, Material>();

		private Dictionary<MaterialValueBinding, float> m_materialValueMap = new Dictionary<MaterialValueBinding, float>(comparer);

		private Dictionary<MaterialValueBinding, Setter> m_materialSetterMap = new Dictionary<MaterialValueBinding, Setter>(comparer);

		private HashSet<MaterialTarget> m_used = new HashSet<MaterialTarget>();

		public MaterialValueBindingMerger(Dictionary<BlendShapeKey, BlendShapeClip> clipMap, Transform root)
		{
			foreach (Transform item in UnityExtensions.Traverse(root))
			{
				Renderer component = ((Component)item).GetComponent<Renderer>();
				if (!((Object)(object)component != (Object)null))
				{
					continue;
				}
				foreach (Material item2 in component.sharedMaterials.Where((Material y) => (Object)(object)y != (Object)null))
				{
					if (!string.IsNullOrEmpty(((Object)item2).name) && !m_materialMap.ContainsKey(((Object)item2).name))
					{
						m_materialMap.Add(((Object)item2).name, item2);
					}
				}
			}
			foreach (KeyValuePair<BlendShapeKey, BlendShapeClip> item3 in clipMap)
			{
				MaterialValueBinding[] materialValues = item3.Value.MaterialValues;
				for (int i = 0; i < materialValues.Length; i++)
				{
					MaterialValueBinding binding = materialValues[i];
					if (m_materialSetterMap.ContainsKey(binding))
					{
						continue;
					}
					if (m_materialMap.TryGetValue(binding.MaterialName, out var target))
					{
						if (binding.ValueName.EndsWith("_ST_S"))
						{
							string valueName2 = binding.ValueName.Substring(0, binding.ValueName.Length - 2);
							Setter value2 = delegate(float value, bool firstValue)
							{
								//IL_0056: Unknown result type (might be due to invalid IL or missing references)
								//IL_0066: Unknown result type (might be due to invalid IL or missing references)
								//IL_0076: Unknown result type (might be due to invalid IL or missing references)
								//IL_007b: Unknown result type (might be due to invalid IL or missing references)
								//IL_0081: Unknown result type (might be due to invalid IL or missing references)
								//IL_0086: Unknown result type (might be due to invalid IL or missing references)
								//IL_0014: Unknown result type (might be due to invalid IL or missing references)
								//IL_0024: Unknown result type (might be due to invalid IL or missing references)
								//IL_0034: Unknown result type (might be due to invalid IL or missing references)
								//IL_0039: Unknown result type (might be due to invalid IL or missing references)
								//IL_003f: Unknown result type (might be due to invalid IL or missing references)
								//IL_0044: Unknown result type (might be due to invalid IL or missing references)
								//IL_008b: Unknown result type (might be due to invalid IL or missing references)
								//IL_009d: Unknown result type (might be due to invalid IL or missing references)
								//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
								//IL_00a5: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
								Vector4 val3 = (firstValue ? (binding.BaseValue + (binding.TargetValue - binding.BaseValue) * value) : (target.GetVector(valueName2) + (binding.TargetValue - binding.BaseValue) * value));
								Vector4 vector2 = target.GetVector(valueName2);
								vector2.x = val3.x;
								vector2.z = val3.z;
								target.SetVector(valueName2, vector2);
							};
							m_materialSetterMap.Add(binding, value2);
						}
						else if (binding.ValueName.EndsWith("_ST_T"))
						{
							string valueName = binding.ValueName.Substring(0, binding.ValueName.Length - 2);
							Setter value3 = delegate(float value, bool firstValue)
							{
								//IL_0056: Unknown result type (might be due to invalid IL or missing references)
								//IL_0066: Unknown result type (might be due to invalid IL or missing references)
								//IL_0076: Unknown result type (might be due to invalid IL or missing references)
								//IL_007b: Unknown result type (might be due to invalid IL or missing references)
								//IL_0081: Unknown result type (might be due to invalid IL or missing references)
								//IL_0086: Unknown result type (might be due to invalid IL or missing references)
								//IL_0014: Unknown result type (might be due to invalid IL or missing references)
								//IL_0024: Unknown result type (might be due to invalid IL or missing references)
								//IL_0034: Unknown result type (might be due to invalid IL or missing references)
								//IL_0039: Unknown result type (might be due to invalid IL or missing references)
								//IL_003f: Unknown result type (might be due to invalid IL or missing references)
								//IL_0044: Unknown result type (might be due to invalid IL or missing references)
								//IL_008b: Unknown result type (might be due to invalid IL or missing references)
								//IL_009d: Unknown result type (might be due to invalid IL or missing references)
								//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
								//IL_00a5: 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_00ce: Unknown result type (might be due to invalid IL or missing references)
								Vector4 val2 = (firstValue ? (binding.BaseValue + (binding.TargetValue - binding.BaseValue) * value) : (target.GetVector(valueName) + (binding.TargetValue - binding.BaseValue) * value));
								Vector4 vector = target.GetVector(valueName);
								vector.y = val2.y;
								vector.w = val2.w;
								target.SetVector(valueName, vector);
							};
							m_materialSetterMap.Add(binding, value3);
						}
						else
						{
							Setter value4 = delegate(float value, bool firstValue)
							{
								//IL_0047: Unknown result type (might be due to invalid IL or missing references)
								//IL_0052: Unknown result type (might be due to invalid IL or missing references)
								//IL_005d: Unknown result type (might be due to invalid IL or missing references)
								//IL_0062: Unknown result type (might be due to invalid IL or missing references)
								//IL_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_0014: Unknown result type (might be due to invalid IL or missing references)
								//IL_001f: Unknown result type (might be due to invalid IL or missing references)
								//IL_002a: Unknown result type (might be due to invalid IL or missing references)
								//IL_002f: Unknown result type (might be due to invalid IL or missing references)
								//IL_0035: Unknown result type (might be due to invalid IL or missing references)
								//IL_003a: Unknown result type (might be due to invalid IL or missing references)
								//IL_0072: Unknown result type (might be due to invalid IL or missing references)
								//IL_0084: 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)
								Vector4 val = (firstValue ? (binding.BaseValue + (binding.TargetValue - binding.BaseValue) * value) : (target.GetVector(binding.ValueName) + (binding.TargetValue - binding.BaseValue) * value));
								target.SetColor(binding.ValueName, Color.op_Implicit(val));
							};
							m_materialSetterMap.Add(binding, value4);
						}
					}
					else
					{
						Debug.LogWarningFormat("material: {0} not found", new object[1] { binding.MaterialName });
					}
				}
			}
		}

		public void RestoreMaterialInitialValues(IEnumerable<BlendShapeClip> clips)
		{
			if (m_materialMap == null)
			{
				return;
			}
			foreach (BlendShapeClip clip in clips)
			{
				MaterialValueBinding[] materialValues = clip.MaterialValues;
				for (int i = 0; i < materialValues.Length; i++)
				{
					MaterialValueBinding materialValueBinding = materialValues[i];
					if (m_materialMap.TryGetValue(materialValueBinding.MaterialName, out var _))
					{
						string valueName = materialValueBinding.ValueName;
						if (valueName.EndsWith("_ST_S") || valueName.EndsWith("_ST_T"))
						{
							valueName = valueName.Substring(0, valueName.Length - 2);
						}
					}
					else
					{
						Debug.LogWarningFormat("{0} not found", new object[1] { materialValueBinding.MaterialName });
					}
				}
			}
		}

		public void ImmediatelySetValue(BlendShapeClip clip, float value)
		{
			MaterialValueBinding[] materialValues = clip.MaterialValues;
			foreach (MaterialValueBinding key in materialValues)
			{
				if (m_materialSetterMap.TryGetValue(key, out var value2))
				{
					value2(value, firstValue: true);
				}
			}
		}

		public void AccumulateValue(BlendShapeClip clip, float value)
		{
			MaterialValueBinding[] materialValues = clip.MaterialValues;
			foreach (MaterialValueBinding key in materialValues)
			{
				if (m_materialValueMap.TryGetValue(key, out var value2))
				{
					m_materialValueMap[key] = value2 + value;
				}
				else
				{
					m_materialValueMap[key] = value;
				}
			}
		}

		public void Apply()
		{
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			m_used.Clear();
			foreach (KeyValuePair<MaterialValueBinding, float> item2 in m_materialValueMap)
			{
				MaterialTarget item = MaterialTarget.Create(item2.Key);
				if (!m_used.Contains(item))
				{
					if (m_materialMap.TryGetValue(item.MaterialName, out var value))
					{
						Vector4 baseValue = item2.Key.BaseValue;
						string text = item.ValueName;
						if (text.EndsWith("_ST_S"))
						{
							text = text.Substring(0, text.Length - 2);
							Vector4 vector = value.GetVector(text);
							baseValue.y = vector.y;
							baseValue.w = vector.w;
						}
						else if (text.EndsWith("_ST_T"))
						{
							text = text.Substring(0, text.Length - 2);
							Vector4 vector2 = value.GetVector(text);
							baseValue.x = vector2.x;
							baseValue.z = vector2.z;
						}
						value.SetColor(text, Color.op_Implicit(baseValue));
					}
					m_used.Add(item);
				}
				if (m_materialSetterMap.TryGetValue(item2.Key, out var value2))
				{
					value2(item2.Value, firstValue: false);
				}
			}
			m_materialValueMap.Clear();
		}
	}
	[Serializable]
	public class MaterialItem
	{
		public Material Material { get; private set; }

		public static MaterialItem Create(Material material)
		{
			return new MaterialItem
			{
				Material = material
			};
		}
	}
	[Serializable]
	public class MeshPreviewItem
	{
		private Transform m_transform;

		public string Path { get; private set; }

		public SkinnedMeshRenderer SkinnedMeshRenderer { get; private set; }

		public Mesh Mesh { get; private set; }

		public string[] BlendShapeNames { get; private set; }

		public int BlendShapeCount => BlendShapeNames.Length;

		public Material[] Materials { get; private set; }

		public Vector3 Position => m_transform.position;

		public Quaternion Rotation => m_transform.rotation;

		private MeshPreviewItem(string path, Transform transform, Material[] materials)
		{
			Path = path;
			m_transform = transform;
			Materials = materials;
		}

		public void Bake(IEnumerable<BlendShapeBinding> values, float weight)
		{
			if ((Object)(object)SkinnedMeshRenderer == (Object)null)
			{
				return;
			}
			if (values != null)
			{
				for (int i = 0; i < BlendShapeCount; i++)
				{
					SkinnedMeshRenderer.SetBlendShapeWeight(i, 0f);
				}
				foreach (BlendShapeBinding value in values)
				{
					if (value.RelativePath == Path)
					{
						if (value.Index >= 0 && value.Index < SkinnedMeshRenderer.sharedMesh.blendShapeCount)
						{
							SkinnedMeshRenderer.SetBlendShapeWeight(value.Index, value.Weight * weight);
							continue;
						}
						Debug.LogWarningFormat("Out of range {0}: 0 <= {1} < {2}", new object[3]
						{
							((Object)SkinnedMeshRenderer).name,
							value.Index,
							SkinnedMeshRenderer.sharedMesh.blendShapeCount
						});
					}
				}
			}
			SkinnedMeshRenderer.BakeMesh(Mesh);
		}

		public static MeshPreviewItem Create(Transform t, Transform root, Func<Material, Material> getOrCreateMaterial)
		{
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Expected O, but got Unknown
			MeshFilter component = ((Component)t).GetComponent<MeshFilter>();
			MeshRenderer component2 = ((Component)t).GetComponent<MeshRenderer>();
			SkinnedMeshRenderer component3 = ((Component)t).GetComponent<SkinnedMeshRenderer>();
			if ((Object)(object)component != (Object)null && (Object)(object)component2 != (Object)null)
			{
				((Renderer)component2).sharedMaterials = ((Renderer)component2).sharedMaterials.Select((Material x) => getOrCreateMaterial(x)).ToArray();
				return new MeshPreviewItem(UnityExtensions.RelativePathFrom(t, root), t, ((Renderer)component2).sharedMaterials)
				{
					Mesh = component.sharedMesh
				};
			}
			if ((Object)(object)component3 != (Object)null)
			{
				((Renderer)component3).sharedMaterials = ((Renderer)component3).sharedMaterials.Select((Material x) => getOrCreateMaterial(x)).ToArray();
				if (component3.sharedMesh.blendShapeCount > 0)
				{
					Mesh sharedMesh = component3.sharedMesh;
					return new MeshPreviewItem(UnityExtensions.RelativePathFrom(t, root), t, ((Renderer)component3).sharedMaterials)
					{
						SkinnedMeshRenderer = component3,
						Mesh = new Mesh(),
						BlendShapeNames = (from x in Enumerable.Range(0, sharedMesh.blendShapeCount)
							select sharedMesh.GetBlendShapeName(x)).ToArray()
					};
				}
				return new MeshPreviewItem(UnityExtensions.RelativePathFrom(t, root), t, ((Renderer)component3).sharedMaterials)
				{
					Mesh = component3.sharedMesh
				};
			}
			return null;
		}
	}
	public class PreviewSceneManager : MonoBehaviour
	{
		public GameObject Prefab;

		private MeshPreviewItem[] m_meshes;

		private MeshPreviewItem[] m_blendShapeMeshes;

		private Dictionary<string, MaterialItem> m_materialMap = new Dictionary<string, MaterialItem>();

		private string[] m_rendererPathList;

		private string[] m_skinnedMeshRendererPathList;

		public Transform m_target;

		public IEnumerable<MeshPreviewItem> EnumRenderItems
		{
			get
			{
				if (m_meshes != null)
				{
					MeshPreviewItem[] meshes = m_meshes;
					for (int i = 0; i < meshes.Length; i++)
					{
						yield return meshes[i];
					}
				}
			}
		}

		public string[] MaterialNames { get; private set; }

		public string[] RendererPathList => m_rendererPathList;

		public string[] SkinnedMeshRendererPathList => m_skinnedMeshRendererPathList;

		public Vector3 TargetPosition
		{
			get
			{
				//IL_0029: 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_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				if ((Object)(object)m_target == (Object)null)
				{
					return new Vector3(0f, 1.4f, 0f);
				}
				return m_target.position + new Vector3(0f, 0.1f, 0f);
			}
		}

		public void Clean()
		{
			foreach (KeyValuePair<string, MaterialItem> item in m_materialMap)
			{
				Object.DestroyImmediate((Object)(object)item.Value.Material);
			}
		}

		private void Initialize(GameObject prefab)
		{
			Prefab = prefab;
			List<string> materialNames = new List<string>();
			Dictionary<Material, Material> map = new Dictionary<Material, Material>();
			Func<Material, Material> getOrCreateMaterial = delegate(Material src)
			{
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0031: Expected O, but got Unknown
				if ((Object)(object)src == (Object)null)
				{
					return null;
				}
				if (string.IsNullOrEmpty(((Object)src).name))
				{
					return null;
				}
				if (!map.TryGetValue(src, out var value))
				{
					value = new Material(src);
					map.Add(src, value);
					materialNames.Add(((Object)src).name);
					m_materialMap.Add(((Object)src).name, MaterialItem.Create(value));
				}
				return value;
			};
			m_meshes = (from x in UnityExtensions.Traverse(((Component)this).transform)
				select MeshPreviewItem.Create(x, ((Component)this).transform, getOrCreateMaterial) into x
				where x != null
				select x).ToArray();
			MaterialNames = materialNames.ToArray();
			m_blendShapeMeshes = m_meshes.Where((MeshPreviewItem x) => (Object)(object)x.SkinnedMeshRenderer != (Object)null && x.SkinnedMeshRenderer.sharedMesh.blendShapeCount > 0).ToArray();
			m_rendererPathList = m_meshes.Select((MeshPreviewItem x) => x.Path).ToArray();
			m_skinnedMeshRendererPathList = (from x in m_meshes
				where (Object)(object)x.SkinnedMeshRenderer != (Object)null
				select x.Path).ToArray();
			Animator component = ((Component)this).GetComponent<Animator>();
			if ((Object)(object)component != (Object)null)
			{
				Transform boneTransform = component.GetBoneTransform((HumanBodyBones)10);
				if ((Object)(object)boneTransform != (Object)null)
				{
					m_target = boneTransform;
				}
			}
		}

		public string[] GetBlendShapeNames(int blendShapeMeshIndex)
		{
			if (blendShapeMeshIndex >= 0 && blendShapeMeshIndex < m_blendShapeMeshes.Length)
			{
				return m_blendShapeMeshes[blendShapeMeshIndex].BlendShapeNames;
			}
			return null;
		}

		public MaterialItem GetMaterialItem(string materialName)
		{
			if (!m_materialMap.TryGetValue(materialName, out var value))
			{
				return null;
			}
			return value;
		}

		public void SetupCamera(Camera camera, Vector3 target, float yaw, float pitch, Vector3 position)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: 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_0044: 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_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: 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_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: 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)
			camera.backgroundColor = Color.gray;
			camera.clearFlags = (CameraClearFlags)2;
			camera.fieldOfView = 27f;
			camera.nearClipPlane = 0.3f;
			camera.farClipPlane = (0f - position.z) * 2.1f;
			Matrix4x4 val = Matrix4x4.Translate(position);
			Matrix4x4 val2 = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(pitch, yaw, 0f), Vector3.one) * val;
			((Component)camera).transform.position = target + UnityExtensions.ExtractPosition(val2);
			((Component)camera).transform.rotation = UnityExtensions.ExtractRotation(val2);
		}
	}
	[DisallowMultipleComponent]
	public class VRMBlendShapeProxy : MonoBehaviour, IVRMComponent
	{
		[SerializeField]
		public BlendShapeAvatar BlendShapeAvatar;

		private BlendShapeMerger m_merger;

		private bool m_destroyed;

		public void OnImported(VRMImporterContext context)
		{
			throw new NotImplementedException();
		}

		private void OnDestroy()
		{
			m_destroyed = true;
			if (m_merger != null)
			{
				m_merger.RestoreMaterialInitialValues(BlendShapeAvatar.Clips);
			}
		}

		private void Start()
		{
			if (!m_destroyed && !((Object)(object)BlendShapeAvatar == (Object)null))
			{
				m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, ((Component)this).transform);
			}
		}

		public void Reinitialize()
		{
			Start();
		}

		public void ImmediatelySetValue(BlendShapeKey key, float value)
		{
			if (m_merger != null)
			{
				m_merger.ImmediatelySetValue(key, value);
			}
		}

		public void AccumulateValue(BlendShapeKey key, float value)
		{
			if (m_merger != null)
			{
				m_merger.AccumulateValue(key, value);
			}
		}

		public float GetValue(BlendShapeKey key)
		{
			if (m_merger == null)
			{
				return 0f;
			}
			return m_merger.GetValue(key);
		}

		public IEnumerable<KeyValuePair<BlendShapeKey, float>> GetValues()
		{
			if (m_merger == null || !((Object)(object)BlendShapeAvatar != (Object)null))
			{
				yield break;
			}
			foreach (BlendShapeClip clip in BlendShapeAvatar.Clips)
			{
				BlendShapeKey key = BlendShapeKey.CreateFromClip(clip);
				yield return new KeyValuePair<BlendShapeKey, float>(key, m_merger.GetValue(key));
			}
		}

		public void SetValues(IEnumerable<KeyValuePair<BlendShapeKey, float>> values)
		{
			if (m_merger != null)
			{
				m_merger.SetValues(values);
			}
		}

		public void Apply()
		{
			if (m_merger != null)
			{
				m_merger.Apply();
			}
		}
	}
	public static class VRMBlendShapeProxyExtensions
	{
		[Obsolete("Use BlendShapeKey.CreateFromPreset")]
		public static float GetValue(this VRMBlendShapeProxy proxy, BlendShapePreset key)
		{
			return proxy.GetValue(BlendShapeKey.CreateFromPreset(key));
		}

		[Obsolete("Use BlendShapeKey.CreateUnknown")]
		public static float GetValue(this VRMBlendShapeProxy proxy, string key)
		{
			return proxy.GetValue(BlendShapeKey.CreateUnknown(key));
		}

		[Obsolete("Use ImmediatelySetValue")]
		public static void SetValue(this VRMBlendShapeProxy proxy, BlendShapePreset key, float value)
		{
			proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(key), value);
		}

		[Obsolete("Use BlendShapeKey.CreateFromPreset")]
		public static void ImmediatelySetValue(this VRMBlendShapeProxy proxy, BlendShapePreset key, float value)
		{
			proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(key), value);
		}

		[Obsolete("Use BlendShapeKey.CreateFromPreset")]
		public static void AccumulateValue(this VRMBlendShapeProxy proxy, BlendShapePreset key, float value)
		{
			proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(key), value);
		}

		[Obsolete("Use ImmediatelySetValue")]
		public static void SetValue(this VRMBlendShapeProxy proxy, string key, float value)
		{
			proxy.ImmediatelySetValue(BlendShapeKey.CreateUnknown(key), value);
		}

		[Obsolete("Use BlendShapeKey.CreateUnknown")]
		public static void ImmediatelySetValue(this VRMBlendShapeProxy proxy, string key, float value)
		{
			proxy.ImmediatelySetValue(BlendShapeKey.CreateUnknown(key), value);
		}

		[Obsolete("Use BlendShapeKey.CreateUnknown")]
		public static void AccumulateValue(this VRMBlendShapeProxy proxy, string key, float value)
		{
			proxy.AccumulateValue(BlendShapeKey.CreateUnknown(key), value);
		}

		[Obsolete("Use ImmediatelySetValue")]
		public static void SetValue(this VRMBlendShapeProxy proxy, BlendShapeKey key, float value)
		{
			proxy.ImmediatelySetValue(key, value);
		}

		[Obsolete("Use ImmediatelySetValue or AccumulateValue")]
		public static void SetValue(this VRMBlendShapeProxy proxy, BlendShapePreset key, float value, bool apply)
		{
			if (apply)
			{
				proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(key), value);
			}
			else
			{
				proxy.AccumulateValue(BlendShapeKey.CreateFromPreset(key), value);
			}
		}

		[Obsolete("Use ImmediatelySetValue or AccumulateValue")]
		public static void SetValue(this VRMBlendShapeProxy proxy, string key, float value, bool apply)
		{
			if (apply)
			{
				proxy.ImmediatelySetValue(BlendShapeKey.CreateUnknown(key), value);
			}
			else
			{
				proxy.AccumulateValue(BlendShapeKey.CreateUnknown(key), value);
			}
		}

		[Obsolete("Use ImmediatelySetValue or AccumulateValue")]
		public static void SetValue(this VRMBlendShapeProxy proxy, BlendShapeKey key, float value, bool apply)
		{
			if (apply)
			{
				proxy.ImmediatelySetValue(key, value);
			}
			else
			{
				proxy.AccumulateValue(key, value);
			}
		}
	}
	public static class EnumUtil
	{
		public static T TryParseOrDefault<T>(string src, T defaultValue = default(T)) where T : struct
		{
			try
			{
				return (T)Enum.Parse(typeof(T), src, ignoreCase: true);
			}
			catch (Exception)
			{
				return defaultValue;
			}
		}
	}
	public static class EnumExtensions
	{
		public static HumanBodyBones ToUnityBone(this VRMBone val)
		{
			return (HumanBodyBones)(val switch
			{
				VRMBone.hips => 0, 
				VRMBone.leftUpperLeg => 1, 
				VRMBone.rightUpperLeg => 2, 
				VRMBone.leftLowerLeg => 3, 
				VRMBone.rightLowerLeg => 4, 
				VRMBone.leftFoot => 5, 
				VRMBone.rightFoot => 6, 
				VRMBone.spine => 7, 
				VRMBone.chest => 8, 
				VRMBone.neck => 9, 
				VRMBone.head => 10, 
				VRMBone.leftShoulder => 11, 
				VRMBone.rightShoulder => 12, 
				VRMBone.leftUpperArm => 13, 
				VRMBone.rightUpperArm => 14, 
				VRMBone.leftLowerArm => 15, 
				VRMBone.rightLowerArm => 16, 
				VRMBone.leftHand => 17, 
				VRMBone.rightHand => 18, 
				VRMBone.leftToes => 19, 
				VRMBone.rightToes => 20, 
				VRMBone.leftEye => 21, 
				VRMBone.rightEye => 22, 
				VRMBone.jaw => 23, 
				VRMBone.leftThumbProximal => 24, 
				VRMBone.leftThumbIntermediate => 25, 
				VRMBone.leftThumbDistal => 26, 
				VRMBone.leftIndexProximal => 27, 
				VRMBone.leftIndexIntermediate => 28, 
				VRMBone.leftIndexDistal => 29, 
				VRMBone.leftMiddleProximal => 30, 
				VRMBone.leftMiddleIntermediate => 31, 
				VRMBone.leftMiddleDistal => 32, 
				VRMBone.leftRingProximal => 33, 
				VRMBone.leftRingIntermediate => 34, 
				VRMBone.leftRingDistal => 35, 
				VRMBone.leftLittleProximal => 36, 
				VRMBone.leftLittleIntermediate => 37, 
				VRMBone.leftLittleDistal => 38, 
				VRMBone.rightThumbProximal => 39, 
				VRMBone.rightThumbIntermediate => 40, 
				VRMBone.rightThumbDistal => 41, 
				VRMBone.rightIndexProximal => 42, 
				VRMBone.rightIndexIntermediate => 43, 
				VRMBone.rightIndexDistal => 44, 
				VRMBone.rightMiddleProximal => 45, 
				VRMBone.rightMiddleIntermediate => 46, 
				VRMBone.rightMiddleDistal => 47, 
				VRMBone.rightRingProximal => 48, 
				VRMBone.rightRingIntermediate => 49, 
				VRMBone.rightRingDistal => 50, 
				VRMBone.rightLittleProximal => 51, 
				VRMBone.rightLittleIntermediate => 52, 
				VRMBone.rightLittleDistal => 53, 
				VRMBone.upperChest => 54, 
				_ => throw new InvalidOperationException(), 
			});
		}

		public static VRMBone ToVrmBone(this HumanBodyBones val)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected I4, but got Unknown
			return (int)val switch
			{
				0 => VRMBone.hips, 
				1 => VRMBone.leftUpperLeg, 
				2 => VRMBone.rightUpperLeg, 
				3 => VRMBone.leftLowerLeg, 
				4 => VRMBone.rightLowerLeg, 
				5 => VRMBone.leftFoot, 
				6 => VRMBone.rightFoot, 
				7 => VRMBone.spine, 
				8 => VRMBone.chest, 
				9 => VRMBone.neck, 
				10 => VRMBone.head, 
				11 => VRMBone.leftShoulder, 
				12 => VRMBone.rightShoulder, 
				13 => VRMBone.leftUpperArm, 
				14 => VRMBone.rightUpperArm, 
				15 => VRMBone.leftLowerArm, 
				16 => VRMBone.rightLowerArm, 
				17 => VRMBone.leftHand, 
				18 => VRMBone.rightHand, 
				19 => VRMBone.leftToes, 
				20 => VRMBone.rightToes, 
				21 => VRMBone.leftEye, 
				22 => VRMBone.rightEye, 
				23 => VRMBone.jaw, 
				24 => VRMBone.leftThumbProximal, 
				25 => VRMBone.leftThumbIntermediate, 
				26 => VRMBone.leftThumbDistal, 
				27 => VRMBone.leftIndexProximal, 
				28 => VRMBone.leftIndexIntermediate, 
				29 => VRMBone.leftIndexDistal, 
				30 => VRMBone.leftMiddleProximal, 
				31 => VRMBone.leftMiddleIntermediate, 
				32 => VRMBone.leftMiddleDistal, 
				33 => VRMBone.leftRingProximal, 
				34 => VRMBone.leftRingIntermediate, 
				35 => VRMBone.leftRingDistal, 
				36 => VRMBone.leftLittleProximal, 
				37 => VRMBone.leftLittleIntermediate, 
				38 => VRMBone.leftLittleDistal, 
				39 => VRMBone.rightThumbProximal, 
				40 => VRMBone.rightThumbIntermediate, 
				41 => VRMBone.rightThumbDistal, 
				42 => VRMBone.rightIndexProximal, 
				43 => VRMBone.rightIndexIntermediate, 
				44 => VRMBone.rightIndexDistal, 
				45 => VRMBone.rightMiddleProximal, 
				46 => VRMBone.rightMiddleIntermediate, 
				47 => VRMBone.rightMiddleDistal, 
				48 => VRMBone.rightRingProximal, 
				49 => VRMBone.rightRingIntermediate, 
				50 => VRMBone.rightRingDistal, 
				51 => VRMBone.rightLittleProximal, 
				52 => VRMBone.rightLittleIntermediate, 
				53 => VRMBone.rightLittleDistal, 
				54 => VRMBone.upperChest, 
				_ => throw new InvalidOperationException(), 
			};
		}
	}
	public static class glTF_VRMExtensions
	{
		[Obsolete("Use Create(root, meshes, binding)")]
		public static glTF_VRM_BlendShapeBind Cerate(Transform root, BlendShapeBinding binding, gltfExporter exporter)
		{
			return Create(root, binding, exporter);
		}

		public static glTF_VRM_BlendShapeBind Create(Transform root, BlendShapeBinding binding, gltfExporter exporter)
		{
			if ((Object)(object)root == (Object)null || exporter == null)
			{
				return null;
			}
			if (string.IsNullOrEmpty(binding.RelativePath))
			{
				Debug.LogWarning((object)"binding.RelativePath is null");
				return null;
			}
			Transform val = ((Component)root).transform.Find(binding.RelativePath);
			if ((Object)(object)val == (Object)null)
			{
				string name = binding.RelativePath.Split('/').Last();
				val = ((IEnumerable<Transform>)((Component)root).GetComponentsInChildren<Transform>()).FirstOrDefault((Func<Transform, bool>)((Transform x) => ((Object)x).name == name));
				if ((Object)(object)val == (Object)null)
				{
					Debug.LogWarning((object)(binding.RelativePath + " not found"));
					return null;
				}
				Debug.LogWarning((object)("fall back '" + binding.RelativePath + "' => '" + UnityExtensions.RelativePathFrom(val, root) + "'"));
			}
			SkinnedMeshRenderer component = ((Component)val).GetComponent<SkinnedMeshRenderer>();
			if ((Object)(object)component == (Object)null)
			{
				return null;
			}
			if (!((Component)component).gameObject.activeInHierarchy)
			{
				return null;
			}
			Mesh sharedMesh = component.sharedMesh;
			int num = exporter.Meshes.IndexOf(sharedMesh);
			if (num == -1)
			{
				return null;
			}
			if (!exporter.MeshBlendShapeIndexMap.TryGetValue(sharedMesh, out var value))
			{
				return null;
			}
			if (!value.TryGetValue(binding.Index, out var value2))
			{
				return null;
			}
			return new glTF_VRM_BlendShapeBind
			{
				mesh = num,
				index = value2,
				weight = binding.Weight
			};
		}

		public static void Add(this glTF_VRM_BlendShapeMaster master, BlendShapeClip clip, gltfExporter exporter)
		{
			master.blendShapeGroups.Add(clip.Serialize(exporter));
		}

		public static glTF_VRM_BlendShapeGroup Serialize(this BlendShapeClip clip, gltfExporter exporter)
		{
			List<glTF_VRM_BlendShapeBind> list = new List<glTF_VRM_BlendShapeBind>();
			if (clip.Values != null && exporter != null)
			{
				BlendShapeBinding[] values = clip.Values;
				foreach (BlendShapeBinding binding in values)
				{
					glTF_VRM_BlendShapeBind glTF_VRM_BlendShapeBind2 = Create(exporter.Copy.transform, binding, exporter);
					if (glTF_VRM_BlendShapeBind2 != null)
					{
						list.Add(glTF_VRM_BlendShapeBind2);
					}
				}
			}
			List<glTF_VRM_MaterialValueBind> list2 = new List<glTF_VRM_MaterialValueBind>();
			if (clip.MaterialValues != null)
			{
				list2.AddRange(clip.MaterialValues.Select((MaterialValueBinding y) => new glTF_VRM_MaterialValueBind
				{
					materialName = y.MaterialName,
					propertyName = y.ValueName,
					targetValue = UnityExtensions.ToArray(y.TargetValue)
				}));
			}
			return new glTF_VRM_BlendShapeGroup
			{
				name = clip.BlendShapeName,
				presetName = clip.Preset.ToString().ToLowerInvariant(),
				isBinary = clip.IsBinary,
				binds = list,
				materialValues = list2
			};
		}

		public static void Apply(this glTF_VRM_DegreeMap map, CurveMapper mapper)
		{
			map.curve = mapper.Curve.keys.SelectMany((Keyframe x) => new float[4]
			{
				((Keyframe)(ref x)).time,
				((Keyframe)(ref x)).value,
				((Keyframe)(ref x)).inTangent,
				((Keyframe)(ref x)).outTangent
			}).ToArray();
			map.xRange = mapper.CurveXRangeDegree;
			map.yRange = mapper.CurveYRangeDegree;
		}
	}
	public static class VRMBoneExtensions
	{
		public static VRMBone FromHumanBodyBone(this HumanBodyBones human)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			return human.ToVrmBone();
		}

		public static HumanBodyBones ToHumanBodyBone(this VRMBone bone)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return bone.ToUnityBone();
		}
	}
	public static class VRMHumanoidExtensions
	{
		public static void SetNodeIndex(this glTF_VRM_Humanoid self, HumanBodyBones _key, int node)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			VRMBone key = _key.FromHumanBodyBone();
			int num = self.humanBones.FindIndex((glTF_VRM_HumanoidBone x) => x.vrmBone == key);
			if (num == -1 || self.humanBones[num] == null)
			{
				self.humanBones.Add(new glTF_VRM_HumanoidBone
				{
					vrmBone = key,
					node = node
				});
			}
			else
			{
				self.humanBones[num].node = node;
			}
		}

		public static void Apply(this glTF_VRM_Humanoid self, AvatarDescription desc, List<Transform> nodes)
		{
			//IL_0077: 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)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			self.armStretch = desc.armStretch;
			self.legStretch = desc.legStretch;
			self.upperArmTwist = desc.upperArmTwist;
			self.lowerArmTwist = desc.lowerArmTwist;
			self.upperLegTwist = desc.upperLegTwist;
			self.lowerLegTwist = desc.lowerArmTwist;
			self.feetSpacing = desc.feetSpacing;
			self.hasTranslationDoF = desc.hasTranslationDoF;
			BoneLimit[] human = desc.human;
			for (int i = 0; i < human.Length; i++)
			{
				BoneLimit x = human[i];
				VRMBone key = x.humanBone.FromHumanBodyBone();
				glTF_VRM_HumanoidBone glTF_VRM_HumanoidBone2 = self.humanBones.FirstOrDefault((glTF_VRM_HumanoidBone y) => y.vrmBone == key);
				if (glTF_VRM_HumanoidBone2 == null)
				{
					glTF_VRM_HumanoidBone2 = new glTF_VRM_HumanoidBone
					{
						vrmBone = key
					};
					self.humanBones.Add(glTF_VRM_HumanoidBone2);
				}
				glTF_VRM_HumanoidBone2.node = nodes.FindIndex((Transform y) => ((Object)y).name == x.boneName);
				glTF_VRM_HumanoidBone2.useDefaultValues = x.useDefaultValues;
				glTF_VRM_HumanoidBone2.axisLength = x.axisLength;
				glTF_VRM_HumanoidBone2.center = x.center;
				glTF_VRM_HumanoidBone2.max = x.max;
				glTF_VRM_HumanoidBone2.min = x.min;
			}
		}

		public static AvatarDescription ToDescription(this glTF_VRM_Humanoid self, List<Transform> nodes)
		{
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			AvatarDescription val = ScriptableObject.CreateInstance<AvatarDescription>();
			val.upperLegTwist = self.upperLegTwist;
			val.lowerLegTwist = self.lowerLegTwist;
			val.upperArmTwist = self.upperArmTwist;
			val.lowerArmTwist = self.lowerArmTwist;
			val.armStretch = self.armStretch;
			val.legStretch = self.legStretch;
			val.hasTranslationDoF = self.hasTranslationDoF;
			BoneLimit[] array = (BoneLimit[])(object)new BoneLimit[self.humanBones.Count];
			int num = 0;
			foreach (glTF_VRM_HumanoidBone humanBone in self.humanBones)
			{
				if (humanBone.node >= 0 && humanBone.node < nodes.Count)
				{
					array[num] = new BoneLimit
					{
						boneName = ((Object)nodes[humanBone.node]).name,
						useDefaultValues = humanBone.useDefaultValues,
						axisLength = humanBone.axisLength,
						center = humanBone.center,
						min = humanBone.min,
						max = humanBone.max,
						humanBone = humanBone.vrmBone.ToHumanBodyBone()
					};
					num++;
				}
			}
			val.human = array;
			return val;
		}
	}
	public class VRMFirstPerson : MonoBehaviour
	{
		[Serializable]
		public struct RendererFirstPersonFlags
		{
			public Renderer Renderer;

			public FirstPersonFlag FirstPersonFlag;

			public Mesh SharedMesh
			{
				get
				{
					Renderer renderer = Renderer;
					SkinnedMeshRenderer val = (SkinnedMeshRenderer)(object)((renderer is SkinnedMeshRenderer) ? renderer : null);
					if ((Object)(object)val != (Object)null)
					{
						return val.sharedMesh;
					}
					MeshFilter component = ((Component)Renderer).GetComponent<MeshFilter>();
					if ((Object)(object)component != (Object)null)
					{
						return component.sharedMesh;
					}
					return null;
				}
			}
		}

		public delegate void SetVisibilityFunc(Renderer renderer, bool firstPerson, bool thirdPerson);

		[Obsolete("Use SetVisibilityFunc")]
		public delegate void SetVisiblityFunc(Renderer renderer, bool firstPerson, bool thirdPerson);

		public static bool TriedSetupLayer = false;

		public static int FIRSTPERSON_ONLY_LAYER = 9;

		public static int THIRDPERSON_ONLY_LAYER = 10;

		[SerializeField]
		public Transform FirstPersonBone;

		[SerializeField]
		public Vector3 FirstPersonOffset;

		[SerializeField]
		public List<RendererFirstPersonFlags> Renderers = new List<RendererFirstPersonFlags>();

		private bool m_done;

		private List<Mesh> m_headlessMeshes = new List<Mesh>();

		public void CopyTo(GameObject _dst, Dictionary<Transform, Transform> map)
		{
			//IL_002c: 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)
			VRMFirstPerson vRMFirstPerson = _dst.AddComponent<VRMFirstPerson>();
			vRMFirstPerson.FirstPersonBone = map[FirstPersonBone];
			vRMFirstPerson.FirstPersonOffset = FirstPersonOffset;
			vRMFirstPerson.Renderers = Renderers.Select(delegate(RendererFirstPersonFlags x)
			{
				Renderer component = ((Component)map[((Component)x.Renderer).transform]).GetComponent<Renderer>();
				RendererFirstPersonFlags result = default(RendererFirstPersonFlags);
				result.Renderer = component;
				result.FirstPersonFlag = x.FirstPersonFlag;
				return result;
			}).ToList();
		}

		public void SetDefault()
		{
			//IL_0010: 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)
			FirstPersonOffset = new Vector3(0f, 0.06f, 0f);
			Animator component = ((Component)this).GetComponent<Animator>();
			if ((Object)(object)component != (Object)null)
			{
				FirstPersonBone = component.GetBoneTransform((HumanBodyBones)10);
			}
		}

		public void Reset()
		{
			SetDefault();
			TraverseRenderers();
		}

		public void TraverseRenderers(VRMImporterContext context = null)
		{
			Renderers.Clear();
			Renderer[] componentsInChildren = ((Component)((Component)this).transform).GetComponentsInChildren<Renderer>();
			foreach (Renderer val in componentsInChildren)
			{
				RendererFirstPersonFlags rendererFirstPersonFlags = default(RendererFirstPersonFlags);
				rendererFirstPersonFlags.Renderer = val;
				rendererFirstPersonFlags.FirstPersonFlag = ((context != null) ? GetFirstPersonFlag(context, val) : FirstPersonFlag.Auto);
				RendererFirstPersonFlags item = rendererFirstPersonFlags;
				Renderers.Add(item);
			}
		}

		private static FirstPersonFlag GetFirstPersonFlag(VRMImporterContext context, Renderer r)
		{
			Mesh mesh = UnityExtensions.GetSharedMesh(((Component)r).transform);
			if ((Object)(object)mesh == (Object)null)
			{
				return FirstPersonFlag.Auto;
			}
			int num = ((ImporterContext)context).Meshes.FindIndex((MeshWithMaterials x) => (Object)(object)x.Mesh == (Object)(object)mesh);
			if (num == -1)
			{
				return FirstPersonFlag.Auto;
			}
			foreach (glTF_VRM_MeshAnnotation meshAnnotation in context.VRM.firstPerson.meshAnnotations)
			{
				if (meshAnnotation.mesh == num)
				{
					return CachedEnum.ParseOrDefault<FirstPersonFlag>(meshAnnotation.firstPersonFlag, true, FirstPersonFlag.Auto);
				}
			}
			return FirstPersonFlag.Auto;
		}

		private Mesh CreateHeadlessModel(Renderer _renderer, Transform EraseRoot, SetVisibilityFunc setVisibility)
		{
			SkinnedMeshRenderer val = (SkinnedMeshRenderer)(object)((_renderer is SkinnedMeshRenderer) ? _renderer : null);
			if ((Object)(object)val != (Object)null)
			{
				return CreateHeadlessModelForSkinnedMeshRenderer(val, EraseRoot, setVisibility);
			}
			MeshRenderer val2 = (MeshRenderer)(object)((_renderer is MeshRenderer) ? _renderer : null);
			if ((Object)(object)val2 != (Object)null)
			{
				CreateHeadlessModelForMeshRenderer(val2, EraseRoot, setVisibility);
				return null;
			}
			return null;
		}

		public static void SetupLayers()
		{
			if (!TriedSetupLayer)
			{
				TriedSetupLayer = true;
				int num = LayerMask.NameToLayer("VRMFirstPersonOnly");
				FIRSTPERSON_ONLY_LAYER = ((num == -1) ? FIRSTPERSON_ONLY_LAYER : num);
				num = LayerMask.NameToLayer("VRMThirdPersonOnly");
				THIRDPERSON_ONLY_LAYER = ((num == -1) ? THIRDPERSON_ONLY_LAYER : num);
			}
		}

		private static void CreateHeadlessModelForMeshRenderer(MeshRenderer renderer, Transform eraseRoot, SetVisibilityFunc setVisibility)
		{
			if (UnityExtensions.Ancestors(((Component)renderer).transform).Any((Transform x) => (Object)(object)x == (Object)(object)eraseRoot))
			{
				setVisibility((Renderer)(object)renderer, firstPerson: false, thirdPerson: true);
			}
		}

		private static Mesh CreateHeadlessModelForSkinnedMeshRenderer(SkinnedMeshRenderer renderer, Transform eraseRoot, SetVisibilityFunc setVisibility)
		{
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			Transform[] bones = renderer.bones;
			int[] array = (from x in bones.Select(delegate(Transform x, int i)
				{
					bool erase = UnityExtensions.Ancestors(x).Any((Transform y) => (Object)(object)y == (Object)(object)eraseRoot);
					return new { i, erase };
				})
				where x.erase
				select x.i).ToArray();
			if (array.Length == 0)
			{
				return null;
			}
			setVisibility((Renderer)(object)renderer, firstPerson: false, thirdPerson: true);
			Mesh val = BoneMeshEraser.CreateErasedMesh(renderer.sharedMesh, array);
			if (val.triangles.Length == 0)
			{
				Object.Destroy((Object)(object)val);
				return null;
			}
			GameObject val2 = new GameObject("_headless_" + ((Object)renderer).name)
			{
				layer = FIRSTPERSON_ONLY_LAYER
			};
			val2.transform.SetParent(((Component)renderer).transform, false);
			SkinnedMeshRenderer obj = val2.AddComponent<SkinnedMeshRenderer>();
			obj.sharedMesh = val;
			((Renderer)obj).sharedMaterials = ((Renderer)renderer).sharedMaterials;
			obj.bones = bones;
			obj.rootBone = renderer.rootBone;
			obj.updateWhenOffscreen = true;
			return val;
		}

		public static void SetVisibility(Renderer renderer, bool firstPerson, bool thirdPerson)
		{
			SetupLayers();
			if (!(firstPerson && thirdPerson))
			{
				if (firstPerson)
				{
					((Component)renderer).gameObject.layer = FIRSTPERSON_ONLY_LAYER;
				}
				else if (thirdPerson)
				{
					((Component)renderer).gameObject.layer = THIRDPERSON_ONLY_LAYER;
				}
				else
				{
					renderer.enabled = false;
				}
			}
		}

		[Obsolete("Use SetVisibility")]
		public static void SetVisiblity(Renderer renderer, bool firstPerson, bool thirdPerson)
		{
			SetVisibility(renderer, firstPerson, thirdPerson);
		}

		public void Setup()
		{
			Setup(isSelf: true, SetVisibility);
		}

		public void Setup(bool isSelf, SetVisibilityFunc setVisibility)
		{
			if (m_done)
			{
				return;
			}
			m_done = true;
			if (isSelf)
			{
				foreach (RendererFirstPersonFlags renderer in Renderers)
				{
					switch (renderer.FirstPersonFlag)
					{
					case FirstPersonFlag.Auto:
					{
						Mesh val = CreateHeadlessModel(renderer.Renderer, FirstPersonBone, setVisibility);
						if ((Object)(object)val != (Object)null)
						{
							m_headlessMeshes.Add(val);
						}
						break;
					}
					case FirstPersonFlag.FirstPersonOnly:
						setVisibility(renderer.Renderer, firstPerson: true, thirdPerson: false);
						break;
					case FirstPersonFlag.ThirdPersonOnly:
						setVisibility(renderer.Renderer, firstPerson: false, thirdPerson: true);
						break;
					case FirstPersonFlag.Both:
						setVisibility(renderer.Renderer, firstPerson: true, thirdPerson: true);
						break;
					}
				}
				return;
			}
			foreach (RendererFirstPersonFlags renderer2 in Renderers)
			{
				switch (renderer2.FirstPersonFlag)
				{
				case FirstPersonFlag.FirstPersonOnly:
					setVisibility(renderer2.Renderer, firstPerson: false, thirdPerson: false);
					break;
				case FirstPersonFlag.Auto:
				case FirstPersonFlag.Both:
				case FirstPersonFlag.ThirdPersonOnly:
					setVisibility(renderer2.Renderer, firstPerson: true, thirdPerson: true);
					break;
				}
			}
		}

		private void OnDestroy()
		{
			foreach (Mesh headlessMesh in m_headlessMeshes)
			{
				if ((Object)(object)headlessMesh != (Object)null)
				{
					Object.Destroy((Object)(object)headlessMesh);
				}
			}
			m_headlessMeshes.Clear();
		}
	}
	public class VRMFirstPersonCameraManager : MonoBehaviour
	{
		[Serializable]
		private class CameraWithRawImage
		{
			public Camera Camera;

			public RenderTexture Texture;

			public RawImage Image;
		}

		[SerializeField]
		private CameraWithRawImage m_topLeft;

		[SerializeField]
		private CameraWithRawImage m_topRight;

		[SerializeField]
		private CameraWithRawImage m_bottomRight;

		[SerializeField]
		[Header("Cameras")]
		private Camera m_firstPersonCamera;

		[SerializeField]
		private Camera[] m_thirdPersonCameras;

		private void Reset()
		{
			Camera[] source = Object.FindObjectsOfType<Camera>();
			m_firstPersonCamera = Camera.main;
			m_thirdPersonCameras = source.Where((Camera x) => (Object)(object)x != (Object)(object)m_firstPersonCamera).ToArray();
		}

		private void Update()
		{
			int w

VRM10.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using MToon;
using UniGLTF;
using UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier;
using UniGLTF.Extensions.VRMC_materials_mtoon;
using UniGLTF.Extensions.VRMC_node_constraint;
using UniGLTF.Extensions.VRMC_springBone;
using UniGLTF.Extensions.VRMC_vrm;
using UniGLTF.Extensions.VRMC_vrm_animation;
using UniGLTF.MeshUtility;
using UniGLTF.Utils;
using UniHumanoid;
using UniJSON;
using UniVRM10.FastSpringBones.Blittables;
using UniVRM10.FastSpringBones.System;
using UniVRM10.Migration;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Serialization;
using VRMShaders;
using VRMShaders.VRM10.MToon10.Runtime;
using VrmLib;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("VRM10.Tests")]
[assembly: InternalsVisibleTo("VRM10.Tests.PlayMode")]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[10183]
		{
			0, 0, 0, 1, 0, 0, 0, 61, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 92, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 65, 120, 101, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 68, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 68, 101, 115, 116, 105, 110, 97, 116, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 66, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 92, 67, 111, 110,
			115, 116, 82, 97, 105, 110, 116, 69, 120, 99,
			101, 112, 116, 105, 111, 110, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 63, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 83, 111, 117, 114, 99, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 63, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 92, 73, 86, 114, 109, 49, 48, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 49, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 92, 84, 82, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 66, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 67,
			111, 110, 115, 116, 114, 97, 105, 110, 116, 92,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 65,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 67, 111, 110, 115, 116, 114, 97,
			105, 110, 116, 92, 86, 114, 109, 49, 48, 65,
			105, 109, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 66, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 92, 86, 114, 109,
			49, 48, 67, 111, 110, 115, 116, 114, 97, 105,
			110, 116, 85, 116, 105, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 66, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			92, 86, 114, 109, 49, 48, 82, 111, 108, 108,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			70, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 67, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 92, 86, 114, 109, 49, 48,
			82, 111, 116, 97, 116, 105, 111, 110, 67, 111,
			110, 115, 116, 114, 97, 105, 110, 116, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 73, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 92, 68, 101, 102, 97, 117, 108, 116,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			86, 97, 108, 105, 100, 97, 116, 111, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 60,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 75, 101, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 63, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 77, 101, 114, 103, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 67, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 92, 73, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 86, 97, 108, 105, 100, 97,
			116, 111, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 115, 92, 69, 120, 112,
			114, 101, 115, 115, 105, 111, 110, 92, 73, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 86,
			97, 108, 105, 100, 97, 116, 111, 114, 70, 97,
			99, 116, 111, 114, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 76, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 92,
			73, 76, 111, 111, 107, 65, 116, 69, 121, 101,
			68, 105, 114, 101, 99, 116, 105, 111, 110, 65,
			112, 112, 108, 105, 99, 97, 98, 108, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 67,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 67, 111, 108, 111, 114, 66, 105, 110,
			100, 105, 110, 103, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 64, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 85, 86, 66,
			105, 110, 100, 105, 110, 103, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 73, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 86,
			97, 108, 117, 101, 66, 105, 110, 100, 105, 110,
			103, 77, 101, 114, 103, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 65, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 92, 77, 111, 114, 112, 104, 84, 97, 114,
			103, 101, 116, 66, 105, 110, 100, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			96, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 92, 77, 111, 114, 112, 104,
			84, 97, 114, 103, 101, 116, 66, 105, 110, 100,
			105, 110, 103, 77, 101, 114, 103, 101, 114, 92,
			77, 111, 114, 112, 104, 84, 97, 114, 103, 101,
			116, 66, 105, 110, 100, 105, 110, 103, 77, 101,
			114, 103, 101, 114, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 93, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 92, 77,
			111, 114, 112, 104, 84, 97, 114, 103, 101, 116,
			66, 105, 110, 100, 105, 110, 103, 77, 101, 114,
			103, 101, 114, 92, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 73, 100, 101, 110, 116,
			105, 102, 105, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 97, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 92,
			77, 111, 114, 112, 104, 84, 97, 114, 103, 101,
			116, 66, 105, 110, 100, 105, 110, 103, 77, 101,
			114, 103, 101, 114, 92, 82, 117, 110, 116, 105,
			109, 101, 77, 111, 114, 112, 104, 84, 97, 114,
			103, 101, 116, 66, 105, 110, 100, 105, 110, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			70, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 92, 80, 114, 101, 118, 105,
			101, 119, 92, 80, 114, 101, 118, 105, 101, 119,
			77, 101, 115, 104, 73, 116, 101, 109, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 74, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 92, 80, 114, 101, 118, 105, 101, 119,
			92, 80, 114, 101, 118, 105, 101, 119, 83, 99,
			101, 110, 101, 77, 97, 110, 97, 103, 101, 114,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			66, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 92, 80, 114, 101, 118, 105,
			101, 119, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 116, 101, 109, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 62, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 92, 86,
			82, 77, 49, 48, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 72, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 70, 105,
			114, 115, 116, 80, 101, 114, 115, 111, 110, 92,
			82, 101, 110, 100, 101, 114, 101, 114, 70, 105,
			114, 115, 116, 80, 101, 114, 115, 111, 110, 70,
			108, 97, 103, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 77, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 70, 105,
			114, 115, 116, 80, 101, 114, 115, 111, 110, 92,
			86, 114, 109, 49, 48, 70, 105, 114, 115, 116,
			80, 101, 114, 115, 111, 110, 76, 97, 121, 101,
			114, 83, 101, 116, 116, 105, 110, 103, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 54,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 76, 111, 111, 107, 65, 116, 92,
			67, 117, 114, 118, 101, 77, 97, 112, 112, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 70, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 111, 109, 112, 111, 110,
			101, 110, 116, 115, 92, 76, 111, 111, 107, 65,
			116, 92, 73, 76, 111, 111, 107, 65, 116, 69,
			121, 101, 68, 105, 114, 101, 99, 116, 105, 111,
			110, 80, 114, 111, 118, 105, 100, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 61,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 76, 111, 111, 107, 65, 116, 92,
			76, 111, 111, 107, 65, 116, 69, 121, 101, 68,
			105, 114, 101, 99, 116, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 77, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 76, 111, 111, 107, 65, 116, 92, 76,
			111, 111, 107, 65, 116, 69, 121, 101, 68, 105,
			114, 101, 99, 116, 105, 111, 110, 65, 112, 112,
			108, 105, 99, 97, 98, 108, 101, 84, 111, 66,
			111, 110, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 83, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 115, 92, 76, 111, 111,
			107, 65, 116, 92, 76, 111, 111, 107, 65, 116,
			69, 121, 101, 68, 105, 114, 101, 99, 116, 105,
			111, 110, 65, 112, 112, 108, 105, 99, 97, 98,
			108, 101, 84, 111, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 54, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 76, 111,
			111, 107, 65, 116, 92, 76, 111, 111, 107, 65,
			116, 73, 110, 112, 117, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 62, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			76, 111, 111, 107, 65, 116, 92, 77, 97, 116,
			114, 105, 120, 52, 120, 52, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 65, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			80, 114, 101, 102, 97, 98, 82, 101, 108, 97,
			116, 101, 100, 83, 99, 114, 105, 112, 116, 97,
			98, 108, 101, 79, 98, 106, 101, 99, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 70,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 92, 86, 82, 77, 49, 48, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 67,
			111, 108, 108, 105, 100, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 75, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 86, 82, 77, 49, 48, 83, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 67, 111, 108,
			108, 105, 100, 101, 114, 71, 114, 111, 117, 112,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			67, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 83, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 92, 86, 82, 77, 49, 48,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			74, 111, 105, 110, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 65, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 92,
			86, 82, 77, 49, 48, 83, 112, 114, 105, 110,
			103, 85, 116, 105, 108, 105, 116, 121, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 63, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 86, 114, 109, 49, 48, 73, 110, 115,
			116, 97, 110, 99, 101, 92, 86, 114, 109, 49,
			48, 73, 110, 115, 116, 97, 110, 99, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 73,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 86, 114, 109, 49, 48, 73, 110,
			115, 116, 97, 110, 99, 101, 92, 86, 114, 109,
			49, 48, 73, 110, 115, 116, 97, 110, 99, 101,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			59, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 82, 77, 49, 48, 79,
			98, 106, 101, 99, 116, 92, 86, 82, 77, 49,
			48, 79, 98, 106, 101, 99, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 69, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			67, 111, 109, 112, 111, 110, 101, 110, 116, 115,
			92, 86, 82, 77, 49, 48, 79, 98, 106, 101,
			99, 116, 92, 86, 82, 77, 49, 48, 79, 98,
			106, 101, 99, 116, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 70, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 109,
			112, 111, 110, 101, 110, 116, 115, 92, 86, 82,
			77, 49, 48, 79, 98, 106, 101, 99, 116, 92,
			86, 82, 77, 49, 48, 79, 98, 106, 101, 99,
			116, 70, 105, 114, 115, 116, 80, 101, 114, 115,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 65, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 111,
			110, 101, 110, 116, 115, 92, 86, 82, 77, 49,
			48, 79, 98, 106, 101, 99, 116, 92, 86, 82,
			77, 49, 48, 79, 98, 106, 101, 99, 116, 76,
			111, 111, 107, 65, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 63, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			109, 112, 111, 110, 101, 110, 116, 115, 92, 86,
			82, 77, 49, 48, 79, 98, 106, 101, 99, 116,
			92, 86, 82, 77, 49, 48, 79, 98, 106, 101,
			99, 116, 77, 101, 116, 97, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 76, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 67,
			111, 109, 112, 111, 110, 101, 110, 116, 115, 92,
			86, 114, 109, 49, 48, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 110, 116, 114, 111, 108,
			82, 105, 103, 92, 86, 114, 109, 49, 48, 67,
			111, 110, 116, 114, 111, 108, 66, 111, 110, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			82, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 114, 109, 49, 48, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 110,
			116, 114, 111, 108, 82, 105, 103, 92, 86, 114,
			109, 49, 48, 82, 117, 110, 116, 105, 109, 101,
			67, 111, 110, 116, 114, 111, 108, 82, 105, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			61, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 114, 109, 49, 48, 82,
			117, 110, 116, 105, 109, 101, 92, 86, 114, 109,
			49, 48, 82, 117, 110, 116, 105, 109, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 71,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 111, 110, 101, 110,
			116, 115, 92, 86, 114, 109, 49, 48, 82, 117,
			110, 116, 105, 109, 101, 92, 86, 114, 109, 49,
			48, 82, 117, 110, 116, 105, 109, 101, 69, 120,
			112, 114, 101, 115, 115, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 67, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 109, 112, 111, 110, 101, 110, 116,
			115, 92, 86, 114, 109, 49, 48, 82, 117, 110,
			116, 105, 109, 101, 92, 86, 114, 109, 49, 48,
			82, 117, 110, 116, 105, 109, 101, 76, 111, 111,
			107, 65, 116, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 72, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 115, 92, 86, 114, 109,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 73,
			110, 115, 116, 97, 110, 99, 101, 92, 73, 86,
			114, 109, 49, 48, 65, 110, 105, 109, 97, 116,
			105, 111, 110, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 79, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 109, 112,
			111, 110, 101, 110, 116, 115, 92, 86, 114, 109,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 73,
			110, 115, 116, 97, 110, 99, 101, 92, 86, 114,
			109, 49, 48, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 73, 110, 115, 116, 97, 110, 99, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			72, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 114, 109, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 73, 110, 115, 116,
			97, 110, 99, 101, 92, 86, 114, 109, 49, 48,
			80, 111, 115, 101, 76, 111, 97, 100, 101, 114,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			67, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 111, 110, 101,
			110, 116, 115, 92, 86, 114, 109, 65, 110, 105,
			109, 97, 116, 105, 111, 110, 73, 110, 115, 116,
			97, 110, 99, 101, 92, 86, 114, 109, 49, 48,
			84, 80, 111, 115, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 56, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 111,
			110, 116, 114, 111, 108, 82, 105, 103, 92, 65,
			110, 105, 109, 97, 116, 111, 114, 80, 111, 115,
			101, 80, 114, 111, 118, 105, 100, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 55,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 110, 116, 114, 111, 108, 82,
			105, 103, 92, 66, 111, 110, 101, 73, 110, 105,
			116, 105, 97, 108, 82, 111, 116, 97, 116, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 63, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 110, 116, 114,
			111, 108, 82, 105, 103, 92, 73, 110, 105, 116,
			105, 97, 108, 82, 111, 116, 97, 116, 105, 111,
			110, 80, 111, 115, 101, 80, 114, 111, 118, 105,
			100, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 73, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 110, 116,
			114, 111, 108, 82, 105, 103, 92, 73, 110, 105,
			116, 105, 97, 108, 82, 111, 116, 97, 116, 105,
			111, 110, 115, 92, 88, 82, 95, 69, 88, 84,
			95, 104, 97, 110, 100, 95, 116, 114, 97, 99,
			107, 105, 110, 103, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 72, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 110,
			116, 114, 111, 108, 82, 105, 103, 92, 73, 110,
			105, 116, 105, 97, 108, 82, 111, 116, 97, 116,
			105, 111, 110, 115, 92, 88, 82, 95, 70, 66,
			95, 98, 111, 100, 121, 95, 116, 114, 97, 99,
			107, 105, 110, 103, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 61, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 110,
			116, 114, 111, 108, 82, 105, 103, 92, 73, 78,
			111, 114, 109, 97, 108, 105, 122, 101, 100, 80,
			111, 115, 101, 65, 112, 112, 108, 105, 99, 97,
			98, 108, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 59, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 67, 111, 110, 116,
			114, 111, 108, 82, 105, 103, 92, 73, 78, 111,
			114, 109, 97, 108, 105, 122, 101, 100, 80, 111,
			115, 101, 80, 114, 111, 118, 105, 100, 101, 114,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			50, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 110, 116, 114, 111, 108,
			82, 105, 103, 92, 73, 84, 80, 111, 115, 101,
			80, 114, 111, 118, 105, 100, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 49, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 67, 111, 110, 116, 114, 111, 108, 82, 105,
			103, 92, 86, 114, 109, 49, 48, 82, 101, 116,
			97, 114, 103, 101, 116, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 43, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 110,
			117, 109, 70, 108, 97, 103, 115, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			111, 114, 109, 97, 116, 92, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 92, 68, 101, 115, 101,
			114, 105, 97, 108, 105, 122, 101, 114, 46, 103,
			46, 99, 115, 0, 0, 0, 8, 0, 0, 0,
			50, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 111, 114, 109, 97, 116, 92,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 92,
			70, 111, 114, 109, 97, 116, 46, 103, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 54, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 70, 111, 114, 109, 97, 116, 92, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 92, 83, 101,
			114, 105, 97, 108, 105, 122, 101, 114, 46, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			58, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 111, 114, 109, 97, 116, 92,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			115, 92, 68, 101, 115, 101, 114, 105, 97, 108,
			105, 122, 101, 114, 46, 103, 46, 99, 115, 0,
			0, 0, 5, 0, 0, 0, 52, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			111, 114, 109, 97, 116, 92, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 115, 92, 70, 111,
			114, 109, 97, 116, 46, 103, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 56, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			111, 114, 109, 97, 116, 92, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 115, 92, 83, 101,
			114, 105, 97, 108, 105, 122, 101, 114, 46, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			61, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 111, 114, 109, 97, 116, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 115, 77,
			84, 111, 111, 110, 92, 68, 101, 115, 101, 114,
			105, 97, 108, 105, 122, 101, 114, 46, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 59,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 111, 114, 109, 97, 116, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 115, 77, 84,
			111, 111, 110, 92, 83, 101, 114, 105, 97, 108,
			105, 122, 101, 114, 46, 103, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 57, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 70,
			111, 114, 109, 97, 116, 92, 83, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 92, 68, 101, 115,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 46,
			103, 46, 99, 115, 0, 0, 0, 8, 0, 0,
			0, 51, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 111, 114, 109, 97, 116,
			92, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 92, 70, 111, 114, 109, 97, 116, 46, 103,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			55, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 70, 111, 114, 109, 97, 116, 92,
			83, 112, 114, 105, 110, 103, 66, 111, 110, 101,
			92, 83, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 46, 103, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 50, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 86, 114, 109, 92, 68, 101, 115,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 46,
			103, 46, 99, 115, 0, 0, 0, 15, 0, 0,
			0, 44, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 70, 111, 114, 109, 97, 116,
			92, 86, 114, 109, 92, 70, 111, 114, 109, 97,
			116, 46, 103, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 48, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 70, 111, 114, 109,
			97, 116, 92, 86, 114, 109, 92, 83, 101, 114,
			105, 97, 108, 105, 122, 101, 114, 46, 103, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 75,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 70, 111, 114, 109, 97, 116, 92, 86,
			114, 109, 72, 117, 109, 97, 110, 111, 105, 100,
			66, 111, 110, 101, 115, 92, 86, 114, 109, 49,
			48, 72, 117, 109, 97, 110, 111, 105, 100, 66,
			111, 110, 101, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 79, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 70, 111, 114, 109, 97,
			116, 92, 86, 114, 109, 72, 117, 109, 97, 110,
			111, 105, 100, 66, 111, 110, 101, 115, 92, 86,
			114, 109, 49, 48, 72, 117, 109, 97, 110, 111,
			105, 100, 66, 111, 110, 101, 83, 112, 101, 99,
			105, 102, 105, 99, 97, 116, 105, 111, 110, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 43,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 65, 114, 114, 97, 121,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			48, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 43, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 73, 110, 100, 101, 120, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 82, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 92, 66, 117, 105, 108, 116, 73, 110, 82,
			80, 92, 69, 120, 112, 111, 114, 116, 92, 66,
			117, 105, 108, 116, 73, 110, 86, 114, 109, 49,
			48, 77, 97, 116, 101, 114, 105, 97, 108, 69,
			120, 112, 111, 114, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 97, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 97, 116, 101, 114, 105, 97,
			108, 92, 66, 117, 105, 108, 116, 73, 110, 82,
			80, 92, 69, 120, 112, 111, 114, 116, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 115, 92, 66,
			117, 105, 108, 116, 73, 110, 86, 114, 109, 49,
			48, 77, 84, 111, 111, 110, 77, 97, 116, 101,
			114, 105, 97, 108, 69, 120, 112, 111, 114, 116,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 93, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 92, 66, 117, 105,
			108, 116, 73, 110, 82, 80, 92, 73, 109, 112,
			111, 114, 116, 92, 66, 117, 105, 108, 116, 73,
			110, 86, 114, 109, 49, 48, 77, 97, 116, 101,
			114, 105, 97, 108, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 97, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 92, 66, 117,
			105, 108, 116, 73, 110, 82, 80, 92, 73, 109,
			112, 111, 114, 116, 92, 77, 97, 116, 101, 114,
			105, 97, 108, 115, 92, 66, 117, 105, 108, 116,
			73, 110, 86, 114, 109, 49, 48, 77, 84, 111,
			111, 110, 77, 97, 116, 101, 114, 105, 97, 108,
			73, 109, 112, 111, 114, 116, 101, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 87, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 79, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 92, 85, 82, 80, 92, 73, 109, 112,
			111, 114, 116, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 85, 114, 112, 86, 114, 109,
			49, 48, 77, 84, 111, 111, 110, 77, 97, 116,
			101, 114, 105, 97, 108, 73, 109, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 83, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 92, 85, 82,
			80, 92, 73, 109, 112, 111, 114, 116, 92, 85,
			114, 112, 86, 114, 109, 49, 48, 77, 97, 116,
			101, 114, 105, 97, 108, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 71, 101, 110, 101, 114,
			97, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 101, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 92, 85,
			82, 80, 92, 73, 109, 112, 111, 114, 116, 92,
			86, 82, 77, 49, 48, 82, 101, 110, 100, 101,
			114, 80, 105, 112, 101, 108, 105, 110, 101, 77,
			97, 116, 101, 114, 105, 97, 108, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 71, 101, 110,
			101, 114, 97, 116, 111, 114, 85, 116, 105, 108,
			105, 116, 121, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 61, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 92, 86, 114,
			109, 49, 48, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 85, 116, 105,
			108, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 77, 105,
			103, 114, 97, 116, 105, 111, 110, 68, 97, 116,
			97, 46, 99, 115, 0, 0, 0, 5, 0, 0,
			0, 48, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 73, 79, 92, 77, 111, 100,
			101, 108, 92, 67, 111, 112, 121, 73, 110, 100,
			105, 99, 101, 115, 74, 111, 98, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 59, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 111, 100, 101, 108, 92, 73,
			110, 116, 101, 114, 108, 101, 97, 118, 101, 77,
			101, 115, 104, 86, 101, 114, 116, 105, 99, 101,
			115, 74, 111, 98, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 53, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			77, 111, 100, 101, 108, 92, 77, 101, 115, 104,
			73, 109, 112, 111, 114, 116, 101, 114, 68, 105,
			118, 105, 100, 101, 100, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 52, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 111, 100, 101, 108, 92, 77, 101, 115,
			104, 73, 109, 112, 111, 114, 116, 101, 114, 83,
			104, 97, 114, 101, 100, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 44, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 111, 100, 101, 108, 92, 77, 101, 115,
			104, 82, 101, 97, 100, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 45, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 111, 100, 101, 108, 92, 77,
			101, 115, 104, 86, 101, 114, 116, 101, 120, 48,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			45, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 77, 111, 100, 101,
			108, 92, 77, 101, 115, 104, 86, 101, 114, 116,
			101, 120, 49, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 45, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 79, 92, 77,
			111, 100, 101, 108, 92, 77, 101, 115, 104, 86,
			101, 114, 116, 101, 120, 50, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 51, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 77, 111, 100, 101, 108, 92, 77, 101,
			115, 104, 86, 101, 114, 116, 101, 120, 85, 116,
			105, 108, 105, 116, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 44, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 77, 111, 100, 101, 108, 92, 77, 101, 115,
			104, 87, 114, 105, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 47, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 79, 92, 77, 111, 100, 101, 108, 92, 77,
			111, 100, 101, 108, 69, 120, 112, 111, 114, 116,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 45, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 79, 92, 77, 111,
			100, 101, 108, 92, 77, 111, 100, 101, 108, 82,
			101, 97, 100, 101, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 61, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 86,
			114, 109, 49, 48, 77, 84, 111, 111, 110, 84,
			101, 120, 116, 117, 114, 101, 73, 109, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 67, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			84, 101, 120, 116, 117, 114, 101, 92, 86, 114,
			109, 49, 48, 84, 101, 120, 116, 117, 114, 101,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			71, 101, 110, 101, 114, 97, 116, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 42,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 85, 110, 105, 116, 121,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 33,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 79, 92, 86, 114, 109, 49, 48,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			37, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 86, 114, 109, 49,
			48, 68, 97, 116, 97, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 42, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 86, 114, 109, 49, 48, 69, 120, 99, 101,
			112, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 41, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 86, 114, 109, 49, 48, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 43, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			86, 114, 109, 49, 48, 73, 109, 112, 111, 114,
			116, 68, 97, 116, 97, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 41, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 79,
			92, 86, 114, 109, 49, 48, 73, 109, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 48, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 79, 92,
			86, 114, 109, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			48, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 79, 92, 86, 114, 109, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 73, 109,
			112, 111, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 44, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			79, 92, 86, 114, 109, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 85, 116, 105, 108, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 73, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 115,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			76, 101, 103, 97, 99, 121, 85, 110, 108, 105,
			116, 77, 97, 116, 101, 114, 105, 97, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 66,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 92, 77, 97, 116, 101, 114, 105, 97, 108,
			115, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 77, 97, 116, 101, 114, 105, 97, 108, 85,
			116, 105, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 67, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 115, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 77, 84, 111, 111, 110,
			77, 97, 116, 101, 114, 105, 97, 108, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 65, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 115,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			80, 98, 114, 77, 97, 116, 101, 114, 105, 97,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 84, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 85, 110, 108, 105, 116, 84, 114,
			97, 110, 115, 112, 97, 114, 101, 110, 116, 90,
			87, 114, 105, 116, 101, 77, 97, 116, 101, 114,
			105, 97, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 70, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 92, 77, 97, 116, 101,
			114, 105, 97, 108, 115, 92, 86, 114, 109, 48,
			88, 77, 84, 111, 111, 110, 84, 101, 120, 116,
			117, 114, 101, 73, 110, 100, 101, 120, 77, 97,
			112, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 60, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 97, 116, 101, 114, 105,
			97, 108, 115, 92, 86, 114, 109, 48, 88, 77,
			84, 111, 111, 110, 86, 97, 108, 117, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 46,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 92, 77, 101, 115, 104, 85, 112, 100, 97,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 49, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 67, 104, 101, 99, 107,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			53, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 92, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 53, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 77, 97, 116, 101, 114, 105, 97,
			108, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 51, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 92, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 86, 101, 99, 116, 111, 114,
			51, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 47, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 86, 114, 109, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 57, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 86, 114,
			109, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 67, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 92, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 86, 114, 109, 70, 105, 114, 115,
			116, 80, 101, 114, 115, 111, 110, 65, 110, 100,
			76, 111, 111, 107, 65, 116, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 55, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 92, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 86, 114,
			109, 72, 117, 109, 97, 110, 111, 105, 100, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 51,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 92, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 86, 114, 109, 77, 101, 116, 97, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 57, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			86, 114, 109, 83, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 43, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 105, 103, 114,
			97, 116, 105, 111, 110, 92, 77, 105, 103, 114,
			97, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 45, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 92, 82, 111, 116,
			97, 116, 101, 89, 49, 56, 48, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 43, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			77, 105, 103, 114, 97, 116, 105, 111, 110, 92,
			86, 114, 109, 48, 77, 101, 116, 97, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 47, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			92, 86, 114, 109, 48, 88, 86, 101, 114, 115,
			105, 111, 110, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 38, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 83, 99, 101, 110,
			101, 115, 92, 83, 97, 109, 112, 108, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 41,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 83, 116, 114, 105, 110, 103, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 40, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 116, 121, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 47, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 86,
			101, 114, 115, 105, 111, 110, 92, 86, 82, 77,
			83, 112, 101, 99, 86, 101, 114, 115, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 43, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 86, 101, 114, 115, 105, 111,
			110, 92, 86, 82, 77, 86, 101, 114, 115, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 50, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 86, 101, 114, 115, 105,
			111, 110, 92, 86, 82, 77, 86, 101, 114, 115,
			105, 111, 110, 80, 97, 114, 116, 105, 97, 108,
			46, 99, 115
		};
		result.TypesData = new byte[8006]
		{
			0, 0, 0, 0, 27, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 65, 120, 101, 115, 77, 97,
			115, 107, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 30, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 67, 111, 110, 115,
			116, 114, 97, 105, 110, 116, 68, 101, 115, 116,
			105, 110, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 28, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 25, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 67, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 83, 111, 117, 114, 99, 101,
			0, 0, 0, 0, 25, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 73, 86, 114, 109, 49, 48,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			0, 0, 0, 0, 11, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 84, 82, 0, 0, 0, 0,
			28, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			84, 114, 97, 110, 115, 102, 111, 114, 109, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 27, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 65, 105,
			109, 67, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 0, 0, 0, 0, 28, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			85, 116, 105, 108, 0, 0, 0, 0, 28, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 86, 114,
			109, 49, 48, 82, 111, 108, 108, 67, 111, 110,
			115, 116, 114, 97, 105, 110, 116, 0, 0, 0,
			0, 32, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 82, 111, 116, 97,
			116, 105, 111, 110, 67, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 0, 0, 0, 0, 35, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 68, 101,
			102, 97, 117, 108, 116, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 86, 97, 108, 105, 100,
			97, 116, 111, 114, 0, 0, 0, 0, 43, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 68, 101,
			102, 97, 117, 108, 116, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 86, 97, 108, 105, 100,
			97, 116, 111, 114, 124, 70, 97, 99, 116, 111,
			114, 121, 0, 0, 0, 0, 22, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 75, 101, 121, 1,
			0, 0, 0, 26, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 124, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			0, 0, 0, 0, 25, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 77, 101, 114, 103, 101, 114,
			0, 0, 0, 0, 29, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 73, 69, 120, 112, 114, 101,
			115, 115, 105, 111, 110, 86, 97, 108, 105, 100,
			97, 116, 111, 114, 0, 0, 0, 0, 36, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 73, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 86,
			97, 108, 105, 100, 97, 116, 111, 114, 70, 97,
			99, 116, 111, 114, 121, 0, 0, 0, 0, 38,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 73,
			76, 111, 111, 107, 65, 116, 69, 121, 101, 68,
			105, 114, 101, 99, 116, 105, 111, 110, 65, 112,
			112, 108, 105, 99, 97, 98, 108, 101, 0, 0,
			0, 0, 29, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 97, 116, 101, 114, 105, 97, 108,
			67, 111, 108, 111, 114, 66, 105, 110, 100, 105,
			110, 103, 0, 0, 0, 0, 26, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 97, 116, 101,
			114, 105, 97, 108, 85, 86, 66, 105, 110, 100,
			105, 110, 103, 0, 0, 0, 0, 35, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 77, 97, 116,
			101, 114, 105, 97, 108, 86, 97, 108, 117, 101,
			66, 105, 110, 100, 105, 110, 103, 77, 101, 114,
			103, 101, 114, 0, 0, 0, 0, 77, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 77, 97, 116,
			101, 114, 105, 97, 108, 86, 97, 108, 117, 101,
			66, 105, 110, 100, 105, 110, 103, 77, 101, 114,
			103, 101, 114, 124, 68, 105, 99, 116, 105, 111,
			110, 97, 114, 121, 75, 101, 121, 77, 97, 116,
			101, 114, 105, 97, 108, 86, 97, 108, 117, 101,
			66, 105, 110, 100, 105, 110, 103, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 50,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 77,
			97, 116, 101, 114, 105, 97, 108, 86, 97, 108,
			117, 101, 66, 105, 110, 100, 105, 110, 103, 77,
			101, 114, 103, 101, 114, 124, 77, 97, 116, 101,
			114, 105, 97, 108, 84, 97, 114, 103, 101, 116,
			0, 0, 0, 0, 27, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 66, 105, 110, 100, 105,
			110, 103, 0, 0, 0, 0, 33, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 111, 114, 112,
			104, 84, 97, 114, 103, 101, 116, 66, 105, 110,
			100, 105, 110, 103, 77, 101, 114, 103, 101, 114,
			0, 0, 0, 0, 30, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 111, 114, 112, 104, 84,
			97, 114, 103, 101, 116, 73, 100, 101, 110, 116,
			105, 102, 105, 101, 114, 1, 0, 0, 0, 26,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 124,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 0, 0, 0, 0,
			34, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			82, 117, 110, 116, 105, 109, 101, 77, 111, 114,
			112, 104, 84, 97, 114, 103, 101, 116, 66, 105,
			110, 100, 105, 110, 103, 0, 0, 0, 0, 24,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 80,
			114, 101, 118, 105, 101, 119, 77, 101, 115, 104,
			73, 116, 101, 109, 0, 0, 0, 0, 28, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 80, 114,
			101, 118, 105, 101, 119, 83, 99, 101, 110, 101,
			77, 97, 110, 97, 103, 101, 114, 0, 0, 0,
			0, 17, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 80, 114, 111, 112, 73, 116, 101, 109, 0,
			0, 0, 0, 28, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 80, 114, 101, 118, 105, 101, 119,
			77, 97, 116, 101, 114, 105, 97, 108, 73, 116,
			101, 109, 0, 0, 0, 0, 24, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 82, 77, 49,
			48, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 0, 0, 0, 0, 33, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 82, 101, 110, 100, 101,
			114, 101, 114, 70, 105, 114, 115, 116, 80, 101,
			114, 115, 111, 110, 70, 108, 97, 103, 115, 0,
			0, 0, 0, 38, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 70, 105,
			114, 115, 116, 80, 101, 114, 115, 111, 110, 76,
			97, 121, 101, 114, 83, 101, 116, 116, 105, 110,
			103, 115, 0, 0, 0, 0, 20, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 67, 117, 114, 118,
			101, 77, 97, 112, 112, 101, 114, 0, 0, 0,
			0, 36, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 73, 76, 111, 111, 107, 65, 116, 69, 121,
			101, 68, 105, 114, 101, 99, 116, 105, 111, 110,
			80, 114, 111, 118, 105, 100, 101, 114, 0, 0,
			0, 0, 27, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 76, 111, 111, 107, 65, 116, 69, 121,
			101, 68, 105, 114, 101, 99, 116, 105, 111, 110,
			0, 0, 0, 0, 43, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 76, 111, 111, 107, 65, 116,
			69, 121, 101, 68, 105, 114, 101, 99, 116, 105,
			111, 110, 65, 112, 112, 108, 105, 99, 97, 98,
			108, 101, 84, 111, 66, 111, 110, 101, 0, 0,
			0, 0, 49, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 76, 111, 111, 107, 65, 116, 69, 121,
			101, 68, 105, 114, 101, 99, 116, 105, 111, 110,
			65, 112, 112, 108, 105, 99, 97, 98, 108, 101,
			84, 111, 69, 120, 112, 114, 101, 115, 115, 105,
			111, 110, 0, 0, 0, 0, 20, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 76, 111, 111, 107,
			65, 116, 73, 110, 112, 117, 116, 0, 0, 0,
			0, 28, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 97, 116, 114, 105, 120, 52, 120, 52,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 38, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 80, 114, 101, 102, 97, 98,
			82, 101, 108, 97, 116, 101, 100, 83, 99, 114,
			105, 112, 116, 97, 98, 108, 101, 79, 98, 106,
			101, 99, 116, 0, 0, 0, 0, 32, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 86, 82, 77,
			49, 48, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 67, 111, 108, 108, 105, 100, 101, 114,
			0, 0, 0, 0, 37, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 82, 77, 49, 48, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 67,
			111, 108, 108, 105, 100, 101, 114, 71, 114, 111,
			117, 112, 0, 0, 0, 0, 29, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 82, 77, 49,
			48, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 74, 111, 105, 110, 116, 0, 0, 0, 0,
			27, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 82, 77, 49, 48, 83, 112, 114, 105, 110,
			103, 85, 116, 105, 108, 105, 116, 121, 0, 0,
			0, 0, 22, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 49, 48, 73, 110, 115,
			116, 97, 110, 99, 101, 0, 0, 0, 0, 32,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 49, 48, 73, 110, 115, 116, 97, 110,
			99, 101, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 0, 0, 0, 0, 39, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 86, 114, 109, 49,
			48, 73, 110, 115, 116, 97, 110, 99, 101, 83,
			112, 114, 105, 110, 103, 66, 111, 110, 101, 124,
			83, 112, 114, 105, 110, 103, 0, 0, 0, 0,
			20, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 82, 77, 49, 48, 79, 98, 106, 101, 99,
			116, 0, 0, 0, 0, 30, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 82, 77, 49, 48,
			79, 98, 106, 101, 99, 116, 69, 120, 112, 114,
			101, 115, 115, 105, 111, 110, 0, 0, 0, 0,
			31, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 82, 77, 49, 48, 79, 98, 106, 101, 99,
			116, 70, 105, 114, 115, 116, 80, 101, 114, 115,
			111, 110, 0, 0, 0, 0, 26, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 82, 77, 49,
			48, 79, 98, 106, 101, 99, 116, 76, 111, 111,
			107, 65, 116, 0, 0, 0, 0, 24, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 86, 82, 77,
			49, 48, 79, 98, 106, 101, 99, 116, 77, 101,
			116, 97, 0, 0, 0, 0, 25, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 67, 111, 110, 116, 114, 111, 108, 66, 111,
			110, 101, 0, 0, 0, 0, 31, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 82, 117, 110, 116, 105, 109, 101, 67, 111,
			110, 116, 114, 111, 108, 82, 105, 103, 0, 0,
			0, 0, 21, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 49, 48, 82, 117, 110,
			116, 105, 109, 101, 0, 0, 0, 0, 31, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 86, 114,
			109, 49, 48, 82, 117, 110, 116, 105, 109, 101,
			69, 120, 112, 114, 101, 115, 115, 105, 111, 110,
			0, 0, 0, 0, 27, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 114, 109, 49, 48, 82,
			117, 110, 116, 105, 109, 101, 76, 111, 111, 107,
			65, 116, 0, 0, 0, 0, 24, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 73, 86, 114, 109,
			49, 48, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 0, 0, 0, 0, 31, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 73,
			110, 115, 116, 97, 110, 99, 101, 0, 0, 0,
			0, 24, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 80, 111, 115, 101,
			76, 111, 97, 100, 101, 114, 0, 0, 0, 0,
			19, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 114, 109, 49, 48, 84, 80, 111, 115, 101,
			0, 0, 0, 0, 30, 85, 110, 105, 86, 82,
			77, 49, 48, 46, 86, 114, 109, 49, 48, 84,
			80, 111, 115, 101, 124, 78, 111, 82, 111, 116,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 28,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 86,
			114, 109, 49, 48, 84, 80, 111, 115, 101, 124,
			83, 107, 101, 108, 101, 116, 111, 110, 0, 0,
			0, 0, 29, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 65, 110, 105, 109, 97, 116, 111, 114,
			80, 111, 115, 101, 80, 114, 111, 118, 105, 100,
			101, 114, 0, 0, 0, 0, 28, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 66, 111, 110, 101,
			73, 110, 105, 116, 105, 97, 108, 82, 111, 116,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 33,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 73,
			110, 105, 116, 82, 111, 116, 97, 116, 105, 111,
			110, 80, 111, 115, 101, 80, 114, 111, 118, 105,
			100, 101, 114, 0, 0, 0, 0, 29, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 88, 82, 95,
			69, 88, 84, 95, 104, 97, 110, 100, 95, 116,
			114, 97, 99, 107, 105, 110, 103, 0, 0, 0,
			0, 28, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 88, 82, 95, 70, 66, 95, 98, 111, 100,
			121, 95, 116, 114, 97, 99, 107, 105, 110, 103,
			0, 0, 0, 0, 34, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 73, 78, 111, 114, 109, 97,
			108, 105, 122, 101, 100, 80, 111, 115, 101, 65,
			112, 112, 108, 105, 99, 97, 98, 108, 101, 0,
			0, 0, 0, 32, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 73, 78, 111, 114, 109, 97, 108,
			105, 122, 101, 100, 80, 111, 115, 101, 80, 114,
			111, 118, 105, 100, 101, 114, 0, 0, 0, 0,
			23, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			73, 84, 80, 111, 115, 101, 80, 114, 111, 118,
			105, 100, 101, 114, 0, 0, 0, 0, 33, 85,
			110, 105, 86, 82, 77, 49, 48, 124, 73, 84,
			80, 111, 115, 101, 80, 114, 111, 118, 105, 100,
			101, 114, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 22, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 82, 101, 116, 97, 114, 103, 101, 116, 0,
			0, 0, 0, 27, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 69, 110, 117, 109, 70, 108, 97,
			103, 115, 65, 116, 116, 114, 105, 98, 117, 116,
			101, 0, 0, 0, 0, 54, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 95, 97, 110, 105, 109, 97, 116,
			105, 111, 110, 124, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 47, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 118,
			114, 109, 95, 97, 110, 105, 109, 97, 116, 105,
			111, 110, 124, 72, 117, 109, 97, 110, 66, 111,
			110, 101, 0, 0, 0, 0, 48, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 118, 114, 109, 95, 97, 110, 105, 109, 97,
			116, 105, 111, 110, 124, 72, 117, 109, 97, 110,
			66, 111, 110, 101, 115, 0, 0, 0, 0, 46,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 95, 97, 110,
			105, 109, 97, 116, 105, 111, 110, 124, 72, 117,
			109, 97, 110, 111, 105, 100, 0, 0, 0, 0,
			48, 85, 110, 105, 71, 76, 84, 70, 46, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			86, 82, 77, 67, 95, 118, 114, 109, 95, 97,
			110, 105, 109, 97, 116, 105, 111, 110, 124, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 0,
			0, 0, 0, 44, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 118, 114,
			109, 95, 97, 110, 105, 109, 97, 116, 105, 111,
			110, 124, 80, 114, 101, 115, 101, 116, 0, 0,
			0, 0, 49, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			95, 97, 110, 105, 109, 97, 116, 105, 111, 110,
			124, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 44, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 118, 114, 109, 95, 97, 110, 105, 109, 97,
			116, 105, 111, 110, 124, 76, 111, 111, 107, 65,
			116, 0, 0, 0, 0, 56, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 95, 97, 110, 105, 109, 97, 116,
			105, 111, 110, 124, 86, 82, 77, 67, 95, 118,
			114, 109, 95, 97, 110, 105, 109, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 52, 85, 110, 105,
			71, 76, 84, 70, 46, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 86, 82, 77, 67,
			95, 118, 114, 109, 95, 97, 110, 105, 109, 97,
			116, 105, 111, 110, 124, 71, 108, 116, 102, 83,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 0,
			0, 0, 0, 56, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 110, 111,
			100, 101, 95, 99, 111, 110, 115, 116, 114, 97,
			105, 110, 116, 124, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 54, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 110,
			111, 100, 101, 95, 99, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 124, 82, 111, 108, 108, 67,
			111, 110, 115, 116, 114, 97, 105, 110, 116, 0,
			0, 0, 0, 53, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 110, 111,
			100, 101, 95, 99, 111, 110, 115, 116, 114, 97,
			105, 110, 116, 124, 65, 105, 109, 67, 111, 110,
			115, 116, 114, 97, 105, 110, 116, 0, 0, 0,
			0, 58, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 110, 111, 100, 101,
			95, 99, 111, 110, 115, 116, 114, 97, 105, 110,
			116, 124, 82, 111, 116, 97, 116, 105, 111, 110,
			67, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			0, 0, 0, 0, 50, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 110,
			111, 100, 101, 95, 99, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 124, 67, 111, 110, 115, 116,
			114, 97, 105, 110, 116, 0, 0, 0, 0, 60,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 110, 111, 100, 101, 95, 99,
			111, 110, 115, 116, 114, 97, 105, 110, 116, 124,
			86, 82, 77, 67, 95, 110, 111, 100, 101, 95,
			99, 111, 110, 115, 116, 114, 97, 105, 110, 116,
			0, 0, 0, 0, 54, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 110,
			111, 100, 101, 95, 99, 111, 110, 115, 116, 114,
			97, 105, 110, 116, 124, 71, 108, 116, 102, 83,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 0,
			0, 0, 0, 56, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 109, 97,
			116, 101, 114, 105, 97, 108, 115, 95, 109, 116,
			111, 111, 110, 124, 71, 108, 116, 102, 68, 101,
			115, 101, 114, 105, 97, 108, 105, 122, 101, 114,
			0, 0, 0, 0, 54, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 109,
			97, 116, 101, 114, 105, 97, 108, 115, 95, 109,
			116, 111, 111, 110, 124, 71, 108, 116, 102, 83,
			101, 114, 105, 97, 108, 105, 122, 101, 114, 0,
			0, 0, 0, 51, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 115, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 124, 71,
			108, 116, 102, 68, 101, 115, 101, 114, 105, 97,
			108, 105, 122, 101, 114, 0, 0, 0, 0, 54,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 115, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 124, 67, 111, 108, 108, 105,
			100, 101, 114, 83, 104, 97, 112, 101, 83, 112,
			104, 101, 114, 101, 0, 0, 0, 0, 55, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 115, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 124, 67, 111, 108, 108, 105, 100,
			101, 114, 83, 104, 97, 112, 101, 67, 97, 112,
			115, 117, 108, 101, 0, 0, 0, 0, 48, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 115, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 124, 67, 111, 108, 108, 105, 100,
			101, 114, 83, 104, 97, 112, 101, 0, 0, 0,
			0, 43, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 115, 112, 114, 105,
			110, 103, 66, 111, 110, 101, 124, 67, 111, 108,
			108, 105, 100, 101, 114, 0, 0, 0, 0, 48,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 115, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 124, 67, 111, 108, 108, 105,
			100, 101, 114, 71, 114, 111, 117, 112, 0, 0,
			0, 0, 50, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 115, 112, 114,
			105, 110, 103, 66, 111, 110, 101, 124, 83, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 74, 111,
			105, 110, 116, 0, 0, 0, 0, 41, 85, 110,
			105, 71, 76, 84, 70, 46, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 86, 82, 77,
			67, 95, 115, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 124, 83, 112, 114, 105, 110, 103, 0,
			0, 0, 0, 50, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 115, 112,
			114, 105, 110, 103, 66, 111, 110, 101, 124, 86,
			82, 77, 67, 95, 115, 112, 114, 105, 110, 103,
			66, 111, 110, 101, 0, 0, 0, 0, 49, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 115, 112, 114, 105, 110, 103, 66,
			111, 110, 101, 124, 71, 108, 116, 102, 83, 101,
			114, 105, 97, 108, 105, 122, 101, 114, 0, 0,
			0, 0, 44, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			124, 71, 108, 116, 102, 68, 101, 115, 101, 114,
			105, 97, 108, 105, 122, 101, 114, 0, 0, 0,
			0, 32, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 118, 114, 109, 124,
			77, 101, 116, 97, 0, 0, 0, 0, 37, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 118, 114, 109, 124, 72, 117, 109,
			97, 110, 66, 111, 110, 101, 0, 0, 0, 0,
			38, 85, 110, 105, 71, 76, 84, 70, 46, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			86, 82, 77, 67, 95, 118, 114, 109, 124, 72,
			117, 109, 97, 110, 66, 111, 110, 101, 115, 0,
			0, 0, 0, 36, 85, 110, 105, 71, 76, 84,
			70, 46, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 86, 82, 77, 67, 95, 118, 114,
			109, 124, 72, 117, 109, 97, 110, 111, 105, 100,
			0, 0, 0, 0, 42, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 118,
			114, 109, 124, 77, 101, 115, 104, 65, 110, 110,
			111, 116, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 39, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 118, 114, 109, 124,
			70, 105, 114, 115, 116, 80, 101, 114, 115, 111,
			110, 0, 0, 0, 0, 42, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 124, 76, 111, 111, 107, 65, 116,
			82, 97, 110, 103, 101, 77, 97, 112, 0, 0,
			0, 0, 34, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			124, 76, 111, 111, 107, 65, 116, 0, 0, 0,
			0, 43, 85, 110, 105, 71, 76, 84, 70, 46,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 86, 82, 77, 67, 95, 118, 114, 109, 124,
			77, 111, 114, 112, 104, 84, 97, 114, 103, 101,
			116, 66, 105, 110, 100, 0, 0, 0, 0, 45,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 124, 77, 97,
			116, 101, 114, 105, 97, 108, 67, 111, 108, 111,
			114, 66, 105, 110, 100, 0, 0, 0, 0, 48,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 124, 84, 101,
			120, 116, 117, 114, 101, 84, 114, 97, 110, 115,
			102, 111, 114, 109, 66, 105, 110, 100, 0, 0,
			0, 0, 38, 85, 110, 105, 71, 76, 84, 70,
			46, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 86, 82, 77, 67, 95, 118, 114, 109,
			124, 69, 120, 112, 114, 101, 115, 115, 105, 111,
			110, 0, 0, 0, 0, 34, 85, 110, 105, 71,
			76, 84, 70, 46, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 86, 82, 77, 67, 95,
			118, 114, 109, 124, 80, 114, 101, 115, 101, 116,
			0, 0, 0, 0, 39, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 118,
			114, 109, 124, 69, 120, 112, 114, 101, 115, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 36, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 118, 114, 109, 124, 86, 82, 77,
			67, 95, 118, 114, 109, 0, 0, 0, 0, 42,
			85, 110, 105, 71, 76, 84, 70, 46, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 86,
			82, 77, 67, 95, 118, 114, 109, 124, 71, 108,
			116, 102, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 35, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 72, 117, 109, 97, 110, 111, 105, 100, 66,
			111, 110, 101, 65, 116, 116, 114, 105, 98, 117,
			116, 101, 0, 0, 0, 0, 39, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 86, 114, 109, 49,
			48, 72, 117, 109, 97, 110, 111, 105, 100, 66,
			111, 110, 101, 83, 112, 101, 99, 105, 102, 105,
			99, 97, 116, 105, 111, 110, 0, 0, 0, 0,
			24, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			65, 114, 114, 97, 121, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 29,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 24, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 73, 110, 100, 101, 120, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 37, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 66, 117, 105, 108, 116, 73, 110, 86,
			114, 109, 49, 48, 77, 97, 116, 101, 114, 105,
			97, 108, 69, 120, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 42, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 66, 117, 105, 108, 116, 73,
			110, 86, 114, 109, 49, 48, 77, 84, 111, 111,
			110, 77, 97, 116, 101, 114, 105, 97, 108, 69,
			120, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 48, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 66, 117, 105, 108, 116, 73, 110, 86, 114,
			109, 49, 48, 77, 97, 116, 101, 114, 105, 97,
			108, 68, 101, 115, 99, 114, 105, 112, 116, 111,
			114, 71, 101, 110, 101, 114, 97, 116, 111, 114,
			0, 0, 0, 0, 42, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 66, 117, 105, 108, 116, 73,
			110, 86, 114, 109, 49, 48, 77, 84, 111, 111,
			110, 77, 97, 116, 101, 114, 105, 97, 108, 73,
			109, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 38, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 85, 114, 112, 86, 114, 109, 49, 48, 77,
			84, 111, 111, 110, 77, 97, 116, 101, 114, 105,
			97, 108, 73, 109, 112, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 44, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 85, 114, 112, 86, 114, 109,
			49, 48, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			71, 101, 110, 101, 114, 97, 116, 111, 114, 0,
			0, 0, 0, 72, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 49, 48, 82, 101,
			110, 100, 101, 114, 80, 105, 112, 101, 108, 105,
			110, 101, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			71, 101, 110, 101, 114, 97, 116, 111, 114, 68,
			101, 115, 99, 114, 105, 112, 116, 111, 114, 85,
			116, 105, 108, 105, 116, 121, 0, 0, 0, 0,
			33, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 114, 109, 49, 48, 77, 97, 116, 101, 114,
			105, 97, 108, 69, 120, 112, 111, 114, 116, 85,
			116, 105, 108, 115, 0, 0, 0, 0, 54, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 86, 114,
			109, 49, 48, 77, 97, 116, 101, 114, 105, 97,
			108, 69, 120, 112, 111, 114, 116, 85, 116, 105,
			108, 115, 124, 69, 109, 112, 116, 121, 71, 108,
			116, 102, 84, 101, 120, 116, 117, 114, 101, 73,
			110, 102, 111, 0, 0, 0, 0, 22, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 68, 97, 116, 97,
			0, 0, 0, 0, 24, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 67, 111, 112, 121, 73, 110,
			100, 105, 99, 101, 115, 74, 111, 98, 115, 0,
			0, 0, 0, 19, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 124, 85, 73, 110, 116, 50, 85,
			73, 110, 116, 0, 0, 0, 0, 21, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 124, 85, 115,
			104, 111, 114, 116, 50, 85, 105, 110, 116, 0,
			0, 0, 0, 23, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 124, 85, 115, 104, 111, 114, 116,
			50, 85, 115, 104, 111, 114, 116, 0, 0, 0,
			0, 21, 85, 110, 105, 86, 82, 77, 49, 48,
			46, 124, 85, 105, 110, 116, 50, 85, 115, 104,
			111, 114, 116, 0, 0, 0, 0, 34, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 73, 110, 116,
			101, 114, 108, 101, 97, 118, 101, 77, 101, 115,
			104, 86, 101, 114, 116, 105, 99, 101, 115, 74,
			111, 98, 0, 0, 0, 0, 28, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 77, 101, 115, 104,
			73, 109, 112, 111, 114, 116, 101, 114, 68, 105,
			118, 105, 100, 101, 100, 0, 0, 0, 0, 27,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			101, 115, 104, 73, 109, 112, 111, 114, 116, 101,
			114, 83, 104, 97, 114, 101, 100, 0, 0, 0,
			0, 19, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 101, 115, 104, 82, 101, 97, 100, 101,
			114, 0, 0, 0, 0, 20, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 77, 101, 115, 104, 86,
			101, 114, 116, 101, 120, 48, 0, 0, 0, 0,
			20, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 101, 115, 104, 86, 101, 114, 116, 101, 120,
			49, 0, 0, 0, 0, 20, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 77, 101, 115, 104, 86,
			101, 114, 116, 101, 120, 50, 0, 0, 0, 0,
			26, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 101, 115, 104, 86, 101, 114, 116, 101, 120,
			85, 116, 105, 108, 105, 116, 121, 0, 0, 0,
			0, 19, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 101, 115, 104, 87, 114, 105, 116, 101,
			114, 0, 0, 0, 0, 22, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 77, 111, 100, 101, 108,
			69, 120, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 20, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 111, 100, 101, 108, 82, 101, 97,
			100, 101, 114, 0, 0, 0, 0, 34, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 86, 114, 109,
			49, 48, 77, 84, 111, 111, 110, 84, 101, 120,
			116, 117, 114, 101, 73, 109, 112, 111, 114, 116,
			101, 114, 0, 0, 0, 0, 51, 85, 110, 105,
			86, 82, 77, 49, 48, 46, 86, 114, 109, 49,
			48, 77, 84, 111, 111, 110, 84, 101, 120, 116,
			117, 114, 101, 73, 109, 112, 111, 114, 116, 101,
			114, 124, 86, 114, 109, 49, 48, 84, 101, 120,
			116, 117, 114, 101, 73, 110, 102, 111, 0, 0,
			0, 0, 40, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 49, 48, 84, 101, 120,
			116, 117, 114, 101, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 71, 101, 110, 101, 114, 97,
			116, 111, 114, 0, 0, 0, 0, 23, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 85, 110, 105,
			116, 121, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 0, 0, 0, 0, 14, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			0, 0, 0, 0, 18, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 114, 109, 49, 48, 68,
			97, 116, 97, 0, 0, 0, 0, 23, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 86, 114, 109,
			49, 48, 69, 120, 99, 101, 112, 116, 105, 111,
			110, 0, 0, 0, 0, 34, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 86, 114, 109, 49, 48,
			78, 111, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			0, 0, 0, 0, 22, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 114, 109, 49, 48, 69,
			120, 112, 111, 114, 116, 101, 114, 0, 0, 0,
			0, 24, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 49, 48, 73, 109, 112, 111,
			114, 116, 68, 97, 116, 97, 0, 0, 0, 0,
			22, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 114, 109, 49, 48, 73, 109, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 31, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 86, 114, 109,
			49, 48, 73, 109, 112, 111, 114, 116, 101, 114,
			124, 77, 111, 100, 101, 108, 77, 97, 112, 0,
			0, 0, 0, 29, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 86, 114, 109, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 46, 85, 110,
			105, 86, 82, 77, 49, 48, 46, 86, 114, 109,
			65, 110, 105, 109, 97, 116, 105, 111, 110, 69,
			120, 112, 111, 114, 116, 101, 114, 124, 80, 111,
			115, 105, 116, 105, 111, 110, 69, 120, 112, 111,
			114, 116, 101, 114, 0, 0, 0, 0, 46, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 86, 114,
			109, 65, 110, 105, 109, 97, 116, 105, 111, 110,
			69, 120, 112, 111, 114, 116, 101, 114, 124, 82,
			111, 116, 97, 116, 105, 111, 110, 69, 120, 112,
			111, 114, 116, 101, 114, 0, 0, 0, 0, 29,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 86,
			114, 109, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 73, 109, 112, 111, 114, 116, 101, 114, 0,
			0, 0, 0, 44, 85, 110, 105, 86, 82, 77,
			49, 48, 46, 86, 114, 109, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 73, 109, 112, 111, 114,
			116, 101, 114, 124, 69, 120, 112, 114, 101, 115,
			115, 105, 111, 110, 73, 110, 102, 111, 0, 0,
			0, 0, 25, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 65, 110, 105, 109, 97,
			116, 105, 111, 110, 85, 116, 105, 108, 0, 0,
			0, 0, 37, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 76, 101, 103, 97, 99, 121, 85, 110, 108,
			105, 116, 77, 97, 116, 101, 114, 105, 97, 108,
			0, 0, 0, 0, 30, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 77, 97, 116, 101, 114, 105, 97,
			108, 85, 116, 105, 108, 0, 0, 0, 0, 31,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 77, 84,
			111, 111, 110, 77, 97, 116, 101, 114, 105, 97,
			108, 0, 0, 0, 0, 29, 85, 110, 105, 86,
			82, 77, 49, 48, 124, 77, 105, 103, 114, 97,
			116, 105, 111, 110, 80, 98, 114, 77, 97, 116,
			101, 114, 105, 97, 108, 0, 0, 0, 0, 48,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 85, 110,
			108, 105, 116, 84, 114, 97, 110, 115, 112, 97,
			114, 101, 110, 116, 90, 87, 114, 105, 116, 101,
			77, 97, 116, 101, 114, 105, 97, 108, 0, 0,
			0, 0, 34, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 48, 88, 77, 84, 111,
			111, 110, 84, 101, 120, 116, 117, 114, 101, 73,
			110, 100, 101, 120, 77, 97, 112, 0, 0, 0,
			0, 24, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 86, 114, 109, 48, 88, 77, 84, 111, 111,
			110, 86, 97, 108, 117, 101, 0, 0, 0, 0,
			20, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			77, 101, 115, 104, 85, 112, 100, 97, 116, 101,
			114, 0, 0, 0, 0, 34, 85, 110, 105, 86,
			82, 77, 49, 48, 46, 77, 101, 115, 104, 85,
			112, 100, 97, 116, 101, 114, 124, 77, 111, 114,
			112, 104, 65, 99, 99, 101, 115, 115, 111, 114,
			0, 0, 0, 0, 23, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 77, 105, 103, 114, 97, 116,
			105, 111, 110, 67, 104, 101, 99, 107, 0, 0,
			0, 0, 42, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 77, 105, 103, 114, 97, 116, 105, 111,
			110, 67, 104, 101, 99, 107, 124, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 69, 120, 99, 101,
			112, 116, 105, 111, 110, 0, 0, 0, 0, 27,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 69, 120,
			99, 101, 112, 116, 105, 111, 110, 0, 0, 0,
			0, 27, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			77, 97, 116, 101, 114, 105, 97, 108, 115, 0,
			0, 0, 0, 23, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 77, 105, 103, 114, 97, 116, 101,
			86, 101, 99, 116, 111, 114, 51, 0, 0, 0,
			0, 21, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 77, 105, 103, 114, 97, 116, 105, 111, 110,
			86, 114, 109, 0, 0, 0, 0, 31, 85, 110,
			105, 86, 82, 77, 49, 48, 124, 77, 105, 103,
			114, 97, 116, 105, 111, 110, 86, 114, 109, 69,
			120, 112, 114, 101, 115, 115, 105, 111, 110, 0,
			0, 0, 0, 41, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 86, 114, 109, 76, 111, 111, 107, 65,
			116, 65, 110, 100, 70, 105, 114, 115, 116, 80,
			101, 114, 115, 111, 110, 0, 0, 0, 0, 29,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 86, 114,
			109, 72, 117, 109, 97, 110, 111, 105, 100, 0,
			0, 0, 0, 25, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 86, 114, 109, 77, 101, 116, 97, 0,
			0, 0, 0, 31, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 77, 105, 103, 114, 97, 116, 105,
			111, 110, 86, 114, 109, 83, 112, 114, 105, 110,
			103, 66, 111, 110, 101, 0, 0, 0, 0, 55,
			85, 110, 105, 86, 82, 77, 49, 48, 46, 77,
			105, 103, 114, 97, 116, 105, 111, 110, 86, 114,
			109, 83, 112, 114, 105, 110, 103, 66, 111, 110,
			101, 124, 83, 112, 114, 105, 110, 103, 66, 111,
			110, 101, 71, 114, 111, 117, 112, 77, 105, 103,
			114, 97, 116, 111, 114, 0, 0, 0, 0, 17,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 77,
			105, 103, 114, 97, 116, 111, 114, 0, 0, 0,
			0, 30, 85, 110, 105, 86, 82, 77, 49, 48,
			124, 85, 110, 78, 111, 114, 109, 97, 108, 105,
			122, 101, 100, 69, 120, 99, 101, 112, 116, 105,
			111, 110, 0, 0, 0, 0, 19, 85, 110, 105,
			86, 82, 77, 49, 48, 124, 82, 111, 116, 97,
			116, 101, 89, 49, 56, 48, 0, 0, 0, 0,
			27, 85, 110, 105, 86, 82, 77, 49, 48, 46,
			77, 105, 103, 114, 97, 116, 105, 111, 110, 124,
			86, 114, 109, 48, 77, 101, 116, 97, 0, 0,
			0, 0, 21, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 114, 109, 48, 88, 86, 101, 114,
			115, 105, 111, 110, 0, 0, 0, 0, 29, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 86, 114,
			109, 48, 88, 86, 101, 114, 115, 105, 111, 110,
			124, 86, 101, 114, 115, 105, 111, 110, 0, 0,
			0, 0, 22, 85, 110, 105, 86, 82, 77, 49,
			48, 46, 83, 97, 109, 112, 108, 101, 124, 83,
			97, 109, 112, 108, 101, 0, 0, 0, 0, 25,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 83,
			116, 114, 105, 110, 103, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 15,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 80,
			111, 115, 82, 111, 116, 0, 0, 0, 0, 19,
			85, 110, 105, 86, 82, 77, 49, 48, 124, 66,
			108, 101, 110, 100, 83, 104, 97, 112, 101, 0,
			0, 0, 0, 24, 85, 110, 105, 86, 82, 77,
			49, 48, 124, 85, 110, 105, 116, 121, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 23, 85, 110, 105, 86, 82, 77, 49,
			48, 124, 86, 82, 77, 83, 112, 101, 99, 86,
			101, 114, 115, 105, 111, 110, 1, 0, 0, 0,
			19, 85, 110, 105, 86, 82, 77, 49, 48, 124,
			86, 82, 77, 86, 101, 114, 115, 105, 111, 110,
			1, 0, 0, 0, 19, 85, 110, 105, 86, 82,
			77, 49, 48, 124, 86, 82, 77, 86, 101, 114,
			115, 105, 111, 110, 0, 0, 0, 0, 27, 85,
			110, 105, 86, 82, 77, 49, 48, 46, 86, 82,
			77, 86, 101, 114, 115, 105, 111, 110, 124, 86,
			101, 114, 115, 105, 111, 110
		};
		result.TotalFiles = 148;
		result.TotalTypes = 209;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.Extensions.VRMC_vrm
{
	public static class GltfDeserializer
	{
		public static readonly Utf8String ExtensionNameUtf8 = Utf8String.From("VRMC_vrm");

		public static bool TryGet(glTFExtension src, out VRMC_vrm extension)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: 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_003a: Unknown result type (might be due to invalid IL or missing references)
			glTFExtensionImport val = (glTFExtensionImport)(object)((src is glTFExtensionImport) ? src : null);
			if (val != null)
			{
				foreach (KeyValuePair<JsonNode, JsonNode> item in val.ObjectItems())
				{
					if (ListTreeNodeExtensions.GetUtf8String(item.Key) == ExtensionNameUtf8)
					{
						extension = Deserialize(item.Value);
						return true;
					}
				}
			}
			extension = null;
			return false;
		}

		public static VRMC_vrm Deserialize(JsonNode parsed)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: 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_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			VRMC_vrm vRMC_vrm = new VRMC_vrm();
			foreach (KeyValuePair<JsonNode, JsonNode> item in IValueNodeObjectExtensions.ObjectItems(parsed))
			{
				switch (ListTreeNodeExtensions.GetString(item.Key))
				{
				case "extensions":
					vRMC_vrm.Extensions = (object)new glTFExtensionImport(item.Value);
					break;
				case "extras":
					vRMC_vrm.Extras = (object)new glTFExtensionImport(item.Value);
					break;
				case "specVersion":
					vRMC_vrm.SpecVersion = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "meta":
					vRMC_vrm.Meta = Deserialize_Meta(item.Value);
					break;
				case "humanoid":
					vRMC_vrm.Humanoid = Deserialize_Humanoid(item.Value);
					break;
				case "firstPerson":
					vRMC_vrm.FirstPerson = Deserialize_FirstPerson(item.Value);
					break;
				case "lookAt":
					vRMC_vrm.LookAt = Deserialize_LookAt(item.Value);
					break;
				case "expressions":
					vRMC_vrm.Expressions = Deserialize_Expressions(item.Value);
					break;
				}
			}
			return vRMC_vrm;
		}

		public static Meta Deserialize_Meta(JsonNode parsed)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Expected O, but got Unknown
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Expected O, but got Unknown
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0318: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Unknown result type (might be due to invalid IL or missing references)
			//IL_0374: Unknown result type (might be due to invalid IL or missing references)
			Meta meta = new Meta();
			foreach (KeyValuePair<JsonNode, JsonNode> item in IValueNodeObjectExtensions.ObjectItems(parsed))
			{
				switch (ListTreeNodeExtensions.GetString(item.Key))
				{
				case "extensions":
					meta.Extensions = (object)new glTFExtensionImport(item.Value);
					break;
				case "extras":
					meta.Extras = (object)new glTFExtensionImport(item.Value);
					break;
				case "name":
					meta.Name = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "version":
					meta.Version = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "authors":
					meta.Authors = __meta_Deserialize_Authors(item.Value);
					break;
				case "copyrightInformation":
					meta.CopyrightInformation = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "contactInformation":
					meta.ContactInformation = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "references":
					meta.References = __meta_Deserialize_References(item.Value);
					break;
				case "thirdPartyLicenses":
					meta.ThirdPartyLicenses = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "thumbnailImage":
					meta.ThumbnailImage = ListTreeNodeExtensions.GetInt32(item.Value);
					break;
				case "licenseUrl":
					meta.LicenseUrl = ListTreeNodeExtensions.GetString(item.Value);
					break;
				case "avatarPermission":
					meta.AvatarPermission = (AvatarPermissionType)Enum.Parse(typeof(AvatarPermissionType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "allowExcessivelyViolentUsage":
					meta.AllowExcessivelyViolentUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "allowExcessivelySexualUsage":
					meta.AllowExcessivelySexualUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "commercialUsage":
					meta.CommercialUsage = (CommercialUsageType)Enum.Parse(typeof(CommercialUsageType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "allowPoliticalOrReligiousUsage":
					meta.AllowPoliticalOrReligiousUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "allowAntisocialOrHateUsage":
					meta.AllowAntisocialOrHateUsage = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "creditNotation":
					meta.CreditNotation = (CreditNotationType)Enum.Parse(typeof(CreditNotationType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "allowRedistribution":
					meta.AllowRedistribution = ListTreeNodeExtensions.GetBoolean(item.Value);
					break;
				case "modification":
					meta.Modification = (ModificationType)Enum.Parse(typeof(ModificationType), ListTreeNodeExtensions.GetString(item.Value), ignoreCase: true);
					break;
				case "otherLicenseUrl":
					meta.OtherLicenseUrl = ListTreeNodeExtensions.GetString(item.Value);
					break;
				}
			}
			return meta;
		}

		public static List<string> __meta_Deserialize_Authors(JsonNode parsed)
		{
			//IL_0006: 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)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			List<string> list = new List<string>();
			foreach (JsonNode item in ListTreeNodeArrayExtensions.ArrayItems(parsed))
			{
				list.Add(ListTreeNodeExtensions.GetString(item));
			}
			return list;
		}

		public static List<string> __meta_Deserialize_References(JsonNode parsed)
		{
			//IL_0006: 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)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			List<string> list = new List<string>();
			foreach (JsonNode item in ListTreeNodeArrayExtensions.ArrayItems(parsed))
			{
				list.Add(ListTreeNodeExtensions.GetString(item));
			}
			return list;
		}

		public static Humanoid Deserialize_Humanoid(JsonNode parsed)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: 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_0047: Expected O, but got Unknown
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			Humanoid humanoid = new Humanoid();
			foreach (KeyValuePair<JsonNode, JsonNode> item in IValueNodeObjectExtensions.ObjectItems(parsed))
			{
				switch (ListTreeNodeExtensions.GetString(item.Key))
				{
				case "extensions":
					humanoid.Extensions = (object)new glTFExtensionImport(item.Value);
					break;
				case "extras":
					humanoid.Extras = (object)new glTFExtensionImport(item.Value);
					break;
				case "humanBones":
					humanoid.HumanBones = __humanoid_Deserialize_HumanBones(item.Value);
					break;
				}
			}
			return humanoid;
		}

		public static HumanBones __humanoid_Deserialize_HumanBones(JsonNode parsed)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_030b: Unknown result type (might be due to invalid IL or missing references)
			//IL_032f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0407: Unknown result type (might be due to invalid IL or missing references)
			//IL_042b: Unknown result type (might be due to invalid IL or missing references)
			//IL_044f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0473: Unknown result type (might be due to invalid IL or missing references)
			//IL_0497: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Unknown result type (might be due to invalid IL or missing references)
			//IL_0503: Unknown result type (might be due to invalid IL or missing references)
			//IL_0527: Unknown result type (might be due to invalid IL or missing refer

VrmLib.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using System.Text;
using UniGLTF;
using UniGLTF.Utils;
using Unity.Collections;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[896]
		{
			0, 0, 0, 1, 0, 0, 0, 43, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 118, 114, 109, 108, 105, 98, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 67, 111, 111,
			114, 100, 105, 110, 97, 116, 101, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 42, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 118, 114, 109, 108, 105, 98, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 120,
			112, 111, 114, 116, 65, 114, 103, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 57, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 118, 114, 109, 108, 105, 98, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 92, 76,
			105, 115, 116, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 38, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 49, 48, 92, 118, 114,
			109, 108, 105, 98, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 71, 108, 116, 102, 73, 100, 46,
			99, 115, 0, 0, 0, 7, 0, 0, 0, 49,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 118, 114, 109, 108, 105, 98,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 72,
			117, 109, 97, 110, 111, 105, 100, 92, 72, 117,
			109, 97, 110, 111, 105, 100, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 54, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 49, 48,
			92, 118, 114, 109, 108, 105, 98, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 72, 117, 109, 97,
			110, 111, 105, 100, 92, 72, 117, 109, 97, 110,
			111, 105, 100, 66, 111, 110, 101, 115, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 58, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			49, 48, 92, 118, 114, 109, 108, 105, 98, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 72, 117,
			109, 97, 110, 111, 105, 100, 92, 83, 107, 101,
			108, 101, 116, 111, 110, 69, 115, 116, 105, 109,
			97, 116, 111, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 60, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 118,
			114, 109, 108, 105, 98, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 72, 117, 109, 97, 110, 111,
			105, 100, 92, 83, 107, 101, 108, 101, 116, 111,
			110, 77, 101, 115, 104, 85, 116, 105, 108, 105,
			116, 121, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 41, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 49, 48, 92, 118, 114, 109,
			108, 105, 98, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 77, 97, 116, 104, 70, 87, 114, 97,
			112, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 36, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 118, 114, 109, 108,
			105, 98, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 101, 115, 104, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 41, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 49, 48, 92,
			118, 114, 109, 108, 105, 98, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 77, 101, 115, 104, 71,
			114, 111, 117, 112, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 37, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 118,
			114, 109, 108, 105, 98, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 77, 111, 100, 101, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 43,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 49, 48, 92, 118, 114, 109, 108, 105, 98,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			111, 114, 112, 104, 84, 97, 114, 103, 101, 116,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			36, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 49, 48, 92, 118, 114, 109, 108, 105,
			98, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			78, 111, 100, 101, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 45, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 49, 48, 92, 118,
			114, 109, 108, 105, 98, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 78, 111, 100, 101, 65, 110,
			105, 109, 97, 116, 105, 111, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 36, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 49,
			48, 92, 118, 114, 109, 108, 105, 98, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 83, 107, 105,
			110, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 44, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 49, 48, 92, 118, 114, 109, 108,
			105, 98, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 86, 101, 114, 116, 101, 120, 66, 117, 102,
			102, 101, 114, 46, 99, 115
		};
		result.TypesData = new byte[748]
		{
			0, 0, 0, 0, 18, 86, 114, 109, 76, 105,
			98, 124, 67, 111, 111, 114, 100, 105, 110, 97,
			116, 101, 115, 0, 0, 0, 0, 17, 86, 114,
			109, 76, 105, 98, 124, 69, 120, 112, 111, 114,
			116, 65, 114, 103, 115, 0, 0, 0, 0, 21,
			86, 114, 109, 76, 105, 98, 124, 76, 105, 115,
			116, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 0, 0, 0, 0, 13, 86, 114, 109, 76,
			105, 98, 124, 71, 108, 116, 102, 73, 100, 0,
			0, 0, 0, 19, 86, 114, 109, 76, 105, 98,
			124, 72, 117, 109, 97, 110, 111, 105, 100, 72,
			101, 97, 100, 0, 0, 0, 0, 18, 86, 114,
			109, 76, 105, 98, 124, 72, 117, 109, 97, 110,
			111, 105, 100, 65, 114, 109, 0, 0, 0, 0,
			18, 86, 114, 109, 76, 105, 98, 124, 72, 117,
			109, 97, 110, 111, 105, 100, 76, 101, 103, 0,
			0, 0, 0, 21, 86, 114, 109, 76, 105, 98,
			124, 72, 117, 109, 97, 110, 111, 105, 100, 70,
			105, 110, 103, 101, 114, 0, 0, 0, 0, 20,
			86, 114, 109, 76, 105, 98, 124, 72, 117, 109,
			97, 110, 111, 105, 100, 84, 104, 117, 109, 98,
			0, 0, 0, 0, 22, 86, 114, 109, 76, 105,
			98, 124, 72, 117, 109, 97, 110, 111, 105, 100,
			70, 105, 110, 103, 101, 114, 115, 0, 0, 0,
			0, 15, 86, 114, 109, 76, 105, 98, 124, 72,
			117, 109, 97, 110, 111, 105, 100, 0, 0, 0,
			0, 28, 86, 114, 109, 76, 105, 98, 124, 66,
			111, 110, 101, 82, 101, 113, 117, 105, 114, 101,
			100, 65, 116, 116, 114, 105, 98, 117, 116, 101,
			0, 0, 0, 0, 24, 86, 114, 109, 76, 105,
			98, 124, 83, 107, 101, 108, 101, 116, 111, 110,
			69, 115, 116, 105, 109, 97, 116, 111, 114, 0,
			0, 0, 0, 28, 86, 114, 109, 76, 105, 98,
			46, 83, 107, 101, 108, 101, 116, 111, 110, 69,
			115, 116, 105, 109, 97, 116, 111, 114, 124, 65,
			114, 109, 0, 0, 0, 0, 28, 86, 114, 109,
			76, 105, 98, 46, 83, 107, 101, 108, 101, 116,
			111, 110, 69, 115, 116, 105, 109, 97, 116, 111,
			114, 124, 76, 101, 103, 0, 0, 0, 0, 17,
			86, 114, 109, 76, 105, 98, 124, 66, 111, 110,
			101, 87, 101, 105, 103, 104, 116, 0, 0, 0,
			0, 18, 86, 114, 109, 76, 105, 98, 124, 77,
			101, 115, 104, 66, 117, 105, 108, 100, 101, 114,
			0, 0, 0, 0, 19, 86, 114, 109, 76, 105,
			98, 124, 66, 111, 110, 101, 72, 101, 97, 100,
			84, 97, 105, 108, 0, 0, 0, 0, 16, 86,
			114, 109, 76, 105, 98, 124, 77, 97, 116, 104,
			70, 87, 114, 97, 112, 0, 0, 0, 0, 15,
			86, 114, 109, 76, 105, 98, 124, 84, 114, 105,
			97, 110, 103, 108, 101, 0, 0, 0, 0, 14,
			86, 114, 109, 76, 105, 98, 124, 83, 117, 98,
			109, 101, 115, 104, 0, 0, 0, 0, 11, 86,
			114, 109, 76, 105, 98, 124, 77, 101, 115, 104,
			0, 0, 0, 0, 16, 86, 114, 109, 76, 105,
			98, 124, 77, 101, 115, 104, 71, 114, 111, 117,
			112, 0, 0, 0, 0, 12, 86, 114, 109, 76,
			105, 98, 124, 77, 111, 100, 101, 108, 0, 0,
			0, 0, 21, 86, 114, 109, 76, 105, 98, 46,
			77, 111, 100, 101, 108, 124, 82, 101, 118, 101,
			114, 115, 101, 114, 0, 0, 0, 0, 18, 86,
			114, 109, 76, 105, 98, 124, 77, 111, 114, 112,
			104, 84, 97, 114, 103, 101, 116, 0, 0, 0,
			0, 11, 86, 114, 109, 76, 105, 98, 124, 78,
			111, 100, 101, 0, 0, 0, 0, 21, 86, 114,
			109, 76, 105, 98, 124, 78, 111, 100, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 19, 86, 114, 109, 76, 105, 98,
			124, 67, 117, 114, 118, 101, 83, 97, 109, 112,
			108, 101, 114, 0, 0, 0, 0, 20, 86, 114,
			109, 76, 105, 98, 124, 78, 111, 100, 101, 65,
			110, 105, 109, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 11, 86, 114, 109, 76, 105, 98, 124,
			83, 107, 105, 110, 0, 0, 0, 0, 19, 86,
			114, 109, 76, 105, 98, 124, 86, 101, 114, 116,
			101, 120, 66, 117, 102, 102, 101, 114
		};
		result.TotalFiles = 17;
		result.TotalTypes = 32;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VrmLib;

public enum GeometryCoordinates
{
	Unknown,
	XYZ_RightUpBack_RH,
	XYZ_RightUpForward_RH,
	XYZ_RightUpForward_LH
}
public enum TextureOrigin
{
	Unknown,
	LeftTop,
	LeftBottom
}
public struct Coordinates
{
	public GeometryCoordinates Geometry;

	public TextureOrigin Texture;

	public static Coordinates Vrm0
	{
		get
		{
			Coordinates result = default(Coordinates);
			result.Geometry = GeometryCoordinates.XYZ_RightUpBack_RH;
			result.Texture = TextureOrigin.LeftTop;
			return result;
		}
	}

	public bool IsVrm0 => Equals(Vrm0);

	public static Coordinates Vrm1
	{
		get
		{
			Coordinates result = default(Coordinates);
			result.Geometry = GeometryCoordinates.XYZ_RightUpForward_RH;
			result.Texture = TextureOrigin.LeftTop;
			return result;
		}
	}

	public bool IsVrm1 => Equals(Vrm1);

	public static Coordinates Unity
	{
		get
		{
			Coordinates result = default(Coordinates);
			result.Geometry = GeometryCoordinates.XYZ_RightUpForward_LH;
			result.Texture = TextureOrigin.LeftBottom;
			return result;
		}
	}

	public bool IsUnity => Equals(Unity);
}
[Serializable]
public struct ExportArgs
{
	private bool? m_sparse;

	private bool? m_remove_morph_normal;

	private bool? m_remove_tangent;

	public bool sparse
	{
		get
		{
			if (!m_sparse.HasValue)
			{
				m_sparse = true;
			}
			return m_sparse.Value;
		}
		set
		{
			m_sparse = value;
		}
	}

	public bool removeMorphNormal
	{
		get
		{
			if (!m_remove_morph_normal.HasValue)
			{
				m_remove_morph_normal = false;
			}
			return m_remove_morph_normal.Value;
		}
		set
		{
			m_remove_morph_normal = value;
		}
	}

	public bool removeTangent
	{
		get
		{
			if (!m_remove_tangent.HasValue)
			{
				m_remove_tangent = true;
			}
			return m_remove_tangent.Value;
		}
		set
		{
			m_remove_tangent = value;
		}
	}
}
public static class ListExtensions
{
	public static int IndexOfThrow<T>(this List<T> list, T target)
	{
		int num = list.IndexOf(target);
		if (num == -1)
		{
			throw new KeyNotFoundException();
		}
		return num;
	}

	public static int? IndexOfNullable<T>(this List<T> list, T target)
	{
		int num = list.IndexOf(target);
		if (num == -1)
		{
			return null;
		}
		return num;
	}
}
public class GltfId
{
	public int? GltfIndex;

	public int SortOrder => GltfIndex.GetValueOrDefault(int.MaxValue);
}
public struct HumanoidHead
{
	public Node Head;

	public Node Jaw;

	public Node LeftEye;

	public Node RightEye;

	public bool HasRequiredBones => Head != null;
}
public struct HumanoidArm
{
	public Node Shoulder;

	public Node Upper;

	public Node Lower;

	public Node Hand;

	public bool HasRequiredBones
	{
		get
		{
			if (Upper != null && Lower != null)
			{
				return Hand != null;
			}
			return false;
		}
	}

	public Vector3 Direction
	{
		get
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: 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)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			if (Shoulder != null)
			{
				return Vector3.Normalize(Hand.Translation - Shoulder.Translation);
			}
			return Vector3.Normalize(Hand.Translation - Upper.Translation);
		}
	}

	public void DirectTo(Vector3 dir)
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: 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_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		if (Shoulder != null)
		{
			Shoulder.RotateFromTo(Upper.Translation - Shoulder.Translation, dir);
		}
		Upper.RotateFromTo(Lower.Translation - Upper.Translation, dir);
		Lower.RotateFromTo(Hand.Translation - Lower.Translation, dir);
	}
}
public struct HumanoidLeg
{
	public Node Upper;

	public Node Lower;

	public Node Foot;

	public Node Toe;
}
internal struct HumanoidFinger
{
	public Node Proximal;

	public Node Intermediate;

	public Node Distal;
}
internal struct HumanoidThumb
{
	public Node Metacarpal;

	public Node Proximal;

	public Node Distal;
}
internal struct HumanoidFingers
{
	public HumanoidThumb Thumb;

	public HumanoidFinger Index;

	public HumanoidFinger Middle;

	public HumanoidFinger Ring;

	public HumanoidFinger Little;
}
public class Humanoid : IDictionary<HumanoidBones, Node>, ICollection<KeyValuePair<HumanoidBones, Node>>, IEnumerable<KeyValuePair<HumanoidBones, Node>>, IEnumerable
{
	public Node Hips;

	public Node Spine;

	public Node Chest;

	public Node UpperChest;

	public Node Neck;

	private HumanoidHead Head;

	private HumanoidArm LeftArm;

	private HumanoidFingers LeftFingers;

	private HumanoidArm RightArm;

	private HumanoidFingers RightFingers;

	private HumanoidLeg LeftLeg;

	private HumanoidLeg RightLeg;

	public bool HasRequiredBones
	{
		get
		{
			if (Hips == null)
			{
				return false;
			}
			if (Spine == null)
			{
				return false;
			}
			if (!Head.HasRequiredBones)
			{
				return false;
			}
			if (!LeftArm.HasRequiredBones)
			{
				return false;
			}
			if (!RightArm.HasRequiredBones)
			{
				return false;
			}
			return true;
		}
	}

	ICollection<HumanoidBones> IDictionary<HumanoidBones, Node>.Keys
	{
		get
		{
			throw new NotImplementedException();
		}
	}

	ICollection<Node> IDictionary<HumanoidBones, Node>.Values
	{
		get
		{
			throw new NotImplementedException();
		}
	}

	int ICollection<KeyValuePair<HumanoidBones, Node>>.Count => this.Select((KeyValuePair<HumanoidBones, Node> _) => _).Count();

	bool ICollection<KeyValuePair<HumanoidBones, Node>>.IsReadOnly
	{
		get
		{
			throw new NotImplementedException();
		}
	}

	Node IDictionary<HumanoidBones, Node>.this[HumanoidBones key]
	{
		get
		{
			throw new NotImplementedException();
		}
		set
		{
			throw new NotImplementedException();
		}
	}

	public Node this[HumanoidBones key]
	{
		get
		{
			if (TryGetValue(key, out var value))
			{
				return value;
			}
			throw new KeyNotFoundException();
		}
	}

	public Node this[Node node]
	{
		get
		{
			if (node.HumanoidBone.HasValue && node.HumanoidBone.Value != 0)
			{
				return this[node.HumanoidBone.Value];
			}
			return Hips.Traverse().First((Node x) => x.Name == node.Name);
		}
	}

	public Humanoid()
	{
	}

	public Humanoid(Node root)
	{
		Assign(root);
	}

	public void Assign(Node root)
	{
		foreach (Node item in root.Traverse())
		{
			if (item.HumanoidBone.HasValue)
			{
				Add(item.HumanoidBone.Value, item);
			}
		}
	}

	private void CopyTraverse(Node src, Node dst)
	{
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		dst.HumanoidBone = src.HumanoidBone;
		dst.LocalScaling = src.LocalScaling;
		dst.LocalRotation = src.LocalRotation;
		dst.LocalTranslation = src.LocalTranslation;
		foreach (Node child in src.Children)
		{
			Node node = new Node(child.Name);
			dst.Add(node);
			CopyTraverse(child, node);
		}
	}

	public Humanoid CopyNodes()
	{
		Node node = new Node(Hips.Name);
		CopyTraverse(Hips, node);
		return new Humanoid(node);
	}

	public (bool, string) Y180()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		StringBuilder stringBuilder = new StringBuilder();
		Hips.LocalRotation = Quaternion.Euler(0f, MathFWrap.PI, 0f);
		Hips.CalcWorldMatrix();
		return (true, stringBuilder.ToString());
	}

	public (bool, string) MakeTPose()
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: 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_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: 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_003e: 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_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: 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)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: 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)
		StringBuilder stringBuilder = new StringBuilder();
		bool item = false;
		Vector3 val = Vector3.Cross(Vector3.Normalize(LeftLeg.Upper.Translation - RightLeg.Upper.Translation), Vector3.up);
		if (Vector3.Dot(val, -Vector3.forward) < 0.9f)
		{
			Hips.RotateFromTo(val, -Vector3.forward);
			item = true;
		}
		if (Vector3.Dot(LeftArm.Direction, -Vector3.right) < 0.9f)
		{
			LeftArm.DirectTo(-Vector3.right);
			stringBuilder.Append("(fix left arm)");
			item = true;
		}
		if (Vector3.Dot(RightArm.Direction, Vector3.right) < 0.9f)
		{
			RightArm.DirectTo(Vector3.right);
			stringBuilder.Append("(fix right arm)");
			item = true;
		}
		Hips.CalcWorldMatrix();
		return (item, stringBuilder.ToString());
	}

	public void RetargetTo(Humanoid srcTPose, Humanoid dst)
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		using (IEnumerator<KeyValuePair<HumanoidBones, Node>> enumerator = GetEnumerator())
		{
			while (enumerator.MoveNext())
			{
				KeyValuePair<HumanoidBones, Node> current = enumerator.Current;
				Node node = srcTPose[current.Key];
				if (dst.TryGetValue(current.Key, out var value))
				{
					Quaternion rotation = node.Rotation;
					value.Rotation = current.Value.Rotation * Quaternion.Inverse(rotation);
				}
				else
				{
					Console.WriteLine($"{current.Key} not found");
				}
			}
		}
		dst.Hips.CalcWorldMatrix();
	}

	public void Add(KeyValuePair<HumanoidBones, Node> item)
	{
		Add(item.Key, item.Value);
	}

	public void Add(HumanoidBones key, Node node)
	{
		if (key == HumanoidBones.unknown)
		{
			throw new ArgumentException();
		}
		node.HumanoidBone = key;
		switch (node.HumanoidBone.Value)
		{
		case HumanoidBones.hips:
			Hips = node;
			break;
		case HumanoidBones.spine:
			Spine = node;
			break;
		case HumanoidBones.chest:
			Chest = node;
			break;
		case HumanoidBones.upperChest:
			UpperChest = node;
			break;
		case HumanoidBones.neck:
			Neck = node;
			break;
		case HumanoidBones.head:
			Head.Head = node;
			break;
		case HumanoidBones.jaw:
			Head.Jaw = node;
			break;
		case HumanoidBones.leftEye:
			Head.LeftEye = node;
			break;
		case HumanoidBones.rightEye:
			Head.RightEye = node;
			break;
		case HumanoidBones.leftShoulder:
			LeftArm.Shoulder = node;
			break;
		case HumanoidBones.leftUpperArm:
			LeftArm.Upper = node;
			break;
		case HumanoidBones.leftLowerArm:
			LeftArm.Lower = node;
			break;
		case HumanoidBones.leftHand:
			LeftArm.Hand = node;
			break;
		case HumanoidBones.rightShoulder:
			RightArm.Shoulder = node;
			break;
		case HumanoidBones.rightUpperArm:
			RightArm.Upper = node;
			break;
		case HumanoidBones.rightLowerArm:
			RightArm.Lower = node;
			break;
		case HumanoidBones.rightHand:
			RightArm.Hand = node;
			break;
		case HumanoidBones.leftUpperLeg:
			LeftLeg.Upper = node;
			break;
		case HumanoidBones.leftLowerLeg:
			LeftLeg.Lower = node;
			break;
		case HumanoidBones.leftFoot:
			LeftLeg.Foot = node;
			break;
		case HumanoidBones.leftToes:
			LeftLeg.Toe = node;
			break;
		case HumanoidBones.rightUpperLeg:
			RightLeg.Upper = node;
			break;
		case HumanoidBones.rightLowerLeg:
			RightLeg.Lower = node;
			break;
		case HumanoidBones.rightFoot:
			RightLeg.Foot = node;
			break;
		case HumanoidBones.rightToes:
			RightLeg.Toe = node;
			break;
		case HumanoidBones.leftThumbMetacarpal:
			LeftFingers.Thumb.Metacarpal = node;
			break;
		case HumanoidBones.leftThumbProximal:
			LeftFingers.Thumb.Proximal = node;
			break;
		case HumanoidBones.leftThumbDistal:
			LeftFingers.Thumb.Distal = node;
			break;
		case HumanoidBones.leftIndexProximal:
			LeftFingers.Index.Proximal = node;
			break;
		case HumanoidBones.leftIndexIntermediate:
			LeftFingers.Index.Intermediate = node;
			break;
		case HumanoidBones.leftIndexDistal:
			LeftFingers.Index.Distal = node;
			break;
		case HumanoidBones.leftMiddleProximal:
			LeftFingers.Middle.Proximal = node;
			break;
		case HumanoidBones.leftMiddleIntermediate:
			LeftFingers.Middle.Intermediate = node;
			break;
		case HumanoidBones.leftMiddleDistal:
			LeftFingers.Middle.Distal = node;
			break;
		case HumanoidBones.leftRingProximal:
			LeftFingers.Ring.Proximal = node;
			break;
		case HumanoidBones.leftRingIntermediate:
			LeftFingers.Ring.Intermediate = node;
			break;
		case HumanoidBones.leftRingDistal:
			LeftFingers.Ring.Distal = node;
			break;
		case HumanoidBones.leftLittleProximal:
			LeftFingers.Little.Proximal = node;
			break;
		case HumanoidBones.leftLittleIntermediate:
			LeftFingers.Little.Intermediate = node;
			break;
		case HumanoidBones.leftLittleDistal:
			LeftFingers.Little.Distal = node;
			break;
		case HumanoidBones.rightThumbMetacarpal:
			RightFingers.Thumb.Metacarpal = node;
			break;
		case HumanoidBones.rightThumbProximal:
			RightFingers.Thumb.Proximal = node;
			break;
		case HumanoidBones.rightThumbDistal:
			RightFingers.Thumb.Distal = node;
			break;
		case HumanoidBones.rightIndexProximal:
			RightFingers.Index.Proximal = node;
			break;
		case HumanoidBones.rightIndexIntermediate:
			RightFingers.Index.Intermediate = node;
			break;
		case HumanoidBones.rightIndexDistal:
			RightFingers.Index.Distal = node;
			break;
		case HumanoidBones.rightMiddleProximal:
			RightFingers.Middle.Proximal = node;
			break;
		case HumanoidBones.rightMiddleIntermediate:
			RightFingers.Middle.Intermediate = node;
			break;
		case HumanoidBones.rightMiddleDistal:
			RightFingers.Middle.Distal = node;
			break;
		case HumanoidBones.rightRingProximal:
			RightFingers.Ring.Proximal = node;
			break;
		case HumanoidBones.rightRingIntermediate:
			RightFingers.Ring.Intermediate = node;
			break;
		case HumanoidBones.rightRingDistal:
			RightFingers.Ring.Distal = node;
			break;
		case HumanoidBones.rightLittleProximal:
			RightFingers.Little.Proximal = node;
			break;
		case HumanoidBones.rightLittleIntermediate:
			RightFingers.Little.Intermediate = node;
			break;
		case HumanoidBones.rightLittleDistal:
			RightFingers.Little.Distal = node;
			break;
		default:
			throw new NotImplementedException();
		}
	}

	public bool ContainsKey(HumanoidBones key)
	{
		Node value;
		return TryGetValue(key, out value);
	}

	public bool Remove(HumanoidBones key)
	{
		if (!ContainsKey(key))
		{
			return false;
		}
		Add(key, null);
		return true;
	}

	public bool TryGetValue(HumanoidBones key, out Node value)
	{
		switch (key)
		{
		case HumanoidBones.hips:
			value = Hips;
			return true;
		case HumanoidBones.spine:
			value = Spine;
			return true;
		case HumanoidBones.chest:
			value = Chest;
			return true;
		case HumanoidBones.upperChest:
			value = UpperChest;
			return true;
		case HumanoidBones.neck:
			value = Neck;
			return true;
		case HumanoidBones.head:
			value = Head.Head;
			return true;
		case HumanoidBones.jaw:
			value = Head.Jaw;
			return true;
		case HumanoidBones.leftEye:
			value = Head.LeftEye;
			return true;
		case HumanoidBones.rightEye:
			value = Head.RightEye;
			return true;
		case HumanoidBones.leftShoulder:
			value = LeftArm.Shoulder;
			return true;
		case HumanoidBones.leftUpperArm:
			value = LeftArm.Upper;
			return true;
		case HumanoidBones.leftLowerArm:
			value = LeftArm.Lower;
			return true;
		case HumanoidBones.leftHand:
			value = LeftArm.Hand;
			return true;
		case HumanoidBones.rightShoulder:
			value = RightArm.Shoulder;
			return true;
		case HumanoidBones.rightUpperArm:
			value = RightArm.Upper;
			return true;
		case HumanoidBones.rightLowerArm:
			value = RightArm.Lower;
			return true;
		case HumanoidBones.rightHand:
			value = RightArm.Hand;
			return true;
		case HumanoidBones.leftUpperLeg:
			value = LeftLeg.Upper;
			return true;
		case HumanoidBones.leftLowerLeg:
			value = LeftLeg.Lower;
			return true;
		case HumanoidBones.leftFoot:
			value = LeftLeg.Foot;
			return true;
		case HumanoidBones.leftToes:
			value = LeftLeg.Toe;
			return true;
		case HumanoidBones.rightUpperLeg:
			value = RightLeg.Upper;
			return true;
		case HumanoidBones.rightLowerLeg:
			value = RightLeg.Lower;
			return true;
		case HumanoidBones.rightFoot:
			value = RightLeg.Foot;
			return true;
		case HumanoidBones.rightToes:
			value = RightLeg.Toe;
			return true;
		case HumanoidBones.leftThumbMetacarpal:
			value = LeftFingers.Thumb.Metacarpal;
			return true;
		case HumanoidBones.leftThumbProximal:
			value = LeftFingers.Thumb.Proximal;
			return true;
		case HumanoidBones.leftThumbDistal:
			value = LeftFingers.Thumb.Distal;
			return true;
		case HumanoidBones.leftIndexProximal:
			value = LeftFingers.Index.Proximal;
			return true;
		case HumanoidBones.leftIndexIntermediate:
			value = LeftFingers.Index.Intermediate;
			return true;
		case HumanoidBones.leftIndexDistal:
			value = LeftFingers.Index.Distal;
			return true;
		case HumanoidBones.leftMiddleProximal:
			value = LeftFingers.Middle.Proximal;
			return true;
		case HumanoidBones.leftMiddleIntermediate:
			value = LeftFingers.Middle.Intermediate;
			return true;
		case HumanoidBones.leftMiddleDistal:
			value = LeftFingers.Middle.Distal;
			return true;
		case HumanoidBones.leftRingProximal:
			value = LeftFingers.Ring.Proximal;
			return true;
		case HumanoidBones.leftRingIntermediate:
			value = LeftFingers.Ring.Intermediate;
			return true;
		case HumanoidBones.leftRingDistal:
			value = LeftFingers.Ring.Distal;
			return true;
		case HumanoidBones.leftLittleProximal:
			value = LeftFingers.Little.Proximal;
			return true;
		case HumanoidBones.leftLittleIntermediate:
			value = LeftFingers.Little.Intermediate;
			return true;
		case HumanoidBones.leftLittleDistal:
			value = LeftFingers.Little.Distal;
			return true;
		case HumanoidBones.rightThumbProximal:
			value = LeftFingers.Thumb.Proximal;
			return true;
		case HumanoidBones.rightThumbMetacarpal:
			value = LeftFingers.Thumb.Metacarpal;
			return true;
		case HumanoidBones.rightThumbDistal:
			value = LeftFingers.Thumb.Distal;
			return true;
		case HumanoidBones.rightIndexProximal:
			value = LeftFingers.Index.Proximal;
			return true;
		case HumanoidBones.rightIndexIntermediate:
			value = LeftFingers.Index.Intermediate;
			return true;
		case HumanoidBones.rightIndexDistal:
			value = LeftFingers.Index.Distal;
			return true;
		case HumanoidBones.rightMiddleProximal:
			value = LeftFingers.Middle.Proximal;
			return true;
		case HumanoidBones.rightMiddleIntermediate:
			value = LeftFingers.Middle.Intermediate;
			return true;
		case HumanoidBones.rightMiddleDistal:
			value = LeftFingers.Middle.Distal;
			return true;
		case HumanoidBones.rightRingProximal:
			value = LeftFingers.Ring.Proximal;
			return true;
		case HumanoidBones.rightRingIntermediate:
			value = LeftFingers.Ring.Intermediate;
			return true;
		case HumanoidBones.rightRingDistal:
			value = LeftFingers.Ring.Distal;
			return true;
		case HumanoidBones.rightLittleProximal:
			value = LeftFingers.Little.Proximal;
			return true;
		case HumanoidBones.rightLittleIntermediate:
			value = LeftFingers.Little.Intermediate;
			return true;
		case HumanoidBones.rightLittleDistal:
			value = LeftFingers.Little.Distal;
			return true;
		default:
			value = null;
			return false;
		}
	}

	public void Clear()
	{
		HumanoidBones[] values = CachedEnum.GetValues<HumanoidBones>();
		foreach (HumanoidBones key in values)
		{
			Add(key, null);
		}
	}

	public IEnumerator<KeyValuePair<HumanoidBones, Node>> GetEnumerator()
	{
		if (Hips != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.hips, Hips);
		}
		if (Spine != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.spine, Spine);
		}
		if (Chest != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.chest, Chest);
		}
		if (UpperChest != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.upperChest, UpperChest);
		}
		if (Neck != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.neck, Neck);
		}
		if (Head.Head != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.head, Head.Head);
		}
		if (LeftArm.Shoulder != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftShoulder, LeftArm.Shoulder);
		}
		if (LeftArm.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftUpperArm, LeftArm.Upper);
		}
		if (LeftArm.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftLowerArm, LeftArm.Lower);
		}
		if (LeftArm.Hand != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftHand, LeftArm.Hand);
		}
		if (RightArm.Shoulder != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightShoulder, RightArm.Shoulder);
		}
		if (RightArm.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightUpperArm, RightArm.Upper);
		}
		if (RightArm.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightLowerArm, RightArm.Lower);
		}
		if (RightArm.Hand != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightHand, RightArm.Hand);
		}
		if (LeftLeg.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftUpperLeg, LeftLeg.Upper);
		}
		if (LeftLeg.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftLowerLeg, LeftLeg.Lower);
		}
		if (LeftLeg.Foot != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.leftFoot, LeftLeg.Foot);
		}
		if (RightLeg.Upper != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightUpperLeg, RightLeg.Upper);
		}
		if (RightLeg.Lower != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightLowerLeg, RightLeg.Lower);
		}
		if (RightLeg.Foot != null)
		{
			yield return new KeyValuePair<HumanoidBones, Node>(HumanoidBones.rightFoot, RightLeg.Foot);
		}
	}

	IEnumerator IEnumerable.GetEnumerator()
	{
		return GetEnumerator();
	}

	bool ICollection<KeyValuePair<HumanoidBones, Node>>.Contains(KeyValuePair<HumanoidBones, Node> item)
	{
		throw new NotImplementedException();
	}

	void ICollection<KeyValuePair<HumanoidBones, Node>>.CopyTo(KeyValuePair<HumanoidBones, Node>[] array, int arrayIndex)
	{
		throw new NotImplementedException();
	}

	bool ICollection<KeyValuePair<HumanoidBones, Node>>.Remove(KeyValuePair<HumanoidBones, Node> item)
	{
		throw new NotImplementedException();
	}
}
public class BoneRequiredAttribute : Attribute
{
}
public enum HumanoidBones
{
	unknown,
	[BoneRequired]
	hips,
	[BoneRequired]
	leftUpperLeg,
	[BoneRequired]
	rightUpperLeg,
	[BoneRequired]
	leftLowerLeg,
	[BoneRequired]
	rightLowerLeg,
	[BoneRequired]
	leftFoot,
	[BoneRequired]
	rightFoot,
	[BoneRequired]
	spine,
	chest,
	neck,
	[BoneRequired]
	head,
	leftShoulder,
	rightShoulder,
	[BoneRequired]
	leftUpperArm,
	[BoneRequired]
	rightUpperArm,
	[BoneRequired]
	leftLowerArm,
	[BoneRequired]
	rightLowerArm,
	[BoneRequired]
	leftHand,
	[BoneRequired]
	rightHand,
	leftToes,
	rightToes,
	leftEye,
	rightEye,
	jaw,
	leftThumbMetacarpal,
	leftThumbProximal,
	leftThumbDistal,
	leftIndexProximal,
	leftIndexIntermediate,
	leftIndexDistal,
	leftMiddleProximal,
	leftMiddleIntermediate,
	leftMiddleDistal,
	leftRingProximal,
	leftRingIntermediate,
	leftRingDistal,
	leftLittleProximal,
	leftLittleIntermediate,
	leftLittleDistal,
	rightThumbMetacarpal,
	rightThumbProximal,
	rightThumbDistal,
	rightIndexProximal,
	rightIndexIntermediate,
	rightIndexDistal,
	rightMiddleProximal,
	rightMiddleIntermediate,
	rightMiddleDistal,
	rightRingProximal,
	rightRingIntermediate,
	rightRingDistal,
	rightLittleProximal,
	rightLittleIntermediate,
	rightLittleDistal,
	upperChest
}
public static class SkeletonEstimator
{
	private struct Arm
	{
		public Node Shoulder;

		public Node UpperArm;

		public Node LowerArm;

		public Node Hand;
	}

	private struct Leg
	{
		public Node UpperLeg;

		public Node LowerLeg;

		public Node Foot;

		public Node Toes;
	}

	private static Dictionary<string, HumanoidBones> s_nameBoneMap = new Dictionary<string, HumanoidBones>
	{
		{
			"Spine1",
			HumanoidBones.chest
		},
		{
			"Spine2",
			HumanoidBones.upperChest
		},
		{
			"LeftShoulder",
			HumanoidBones.leftShoulder
		},
		{
			"LeftArm",
			HumanoidBones.leftUpperArm
		},
		{
			"LeftForeArm",
			HumanoidBones.leftLowerArm
		},
		{
			"RightShoulder",
			HumanoidBones.rightShoulder
		},
		{
			"RightArm",
			HumanoidBones.rightUpperArm
		},
		{
			"RightForeArm",
			HumanoidBones.rightLowerArm
		},
		{
			"LeftUpLeg",
			HumanoidBones.leftUpperLeg
		},
		{
			"LeftLeg",
			HumanoidBones.leftLowerLeg
		},
		{
			"LeftToeBase",
			HumanoidBones.leftToes
		},
		{
			"RightUpLeg",
			HumanoidBones.rightUpperLeg
		},
		{
			"RightLeg",
			HumanoidBones.rightLowerLeg
		},
		{
			"RightToeBase",
			HumanoidBones.rightToes
		}
	};

	private static Dictionary<string, HumanoidBones> s_nameBoneMapLA = new Dictionary<string, HumanoidBones>
	{
		{
			"Chest",
			HumanoidBones.spine
		},
		{
			"Chest2",
			HumanoidBones.chest
		},
		{
			"LeftCollar",
			HumanoidBones.leftShoulder
		},
		{
			"LeftShoulder",
			HumanoidBones.leftUpperArm
		},
		{
			"LeftElbow",
			HumanoidBones.leftLowerArm
		},
		{
			"LeftWrist",
			HumanoidBones.leftHand
		},
		{
			"RightCollar",
			HumanoidBones.rightShoulder
		},
		{
			"RightShoulder",
			HumanoidBones.rightUpperArm
		},
		{
			"RightElbow",
			HumanoidBones.rightLowerArm
		},
		{
			"RightWrist",
			HumanoidBones.rightHand
		},
		{
			"LeftHip",
			HumanoidBones.leftUpperLeg
		},
		{
			"LeftKnee",
			HumanoidBones.leftLowerLeg
		},
		{
			"LeftAnkle",
			HumanoidBones.leftFoot
		},
		{
			"RightHip",
			HumanoidBones.rightUpperLeg
		},
		{
			"RightKnee",
			HumanoidBones.rightLowerLeg
		},
		{
			"RightAnkle",
			HumanoidBones.rightFoot
		}
	};

	private static Dictionary<string, HumanoidBones> s_nameBoneMapAccad = new Dictionary<string, HumanoidBones>
	{
		{
			"root",
			HumanoidBones.hips
		},
		{
			"lowerback",
			HumanoidBones.spine
		},
		{
			"upperback",
			HumanoidBones.chest
		},
		{
			"thorax",
			HumanoidBones.upperChest
		},
		{
			"neck",
			HumanoidBones.neck
		},
		{
			"head",
			HumanoidBones.head
		},
		{
			"lshoulderjoint",
			HumanoidBones.leftShoulder
		},
		{
			"lhumerus",
			HumanoidBones.leftUpperArm
		},
		{
			"lradius",
			HumanoidBones.leftLowerArm
		},
		{
			"lhand",
			HumanoidBones.leftHand
		},
		{
			"rshoulderjoint",
			HumanoidBones.rightShoulder
		},
		{
			"rhumerus",
			HumanoidBones.rightUpperArm
		},
		{
			"rradius",
			HumanoidBones.rightLowerArm
		},
		{
			"rhand",
			HumanoidBones.rightHand
		},
		{
			"rfemur",
			HumanoidBones.rightUpperLeg
		},
		{
			"rtibia",
			HumanoidBones.rightLowerLeg
		},
		{
			"rfoot",
			HumanoidBones.rightFoot
		},
		{
			"rtoes",
			HumanoidBones.rightToes
		},
		{
			"lfemur",
			HumanoidBones.leftUpperLeg
		},
		{
			"ltibia",
			HumanoidBones.leftLowerLeg
		},
		{
			"lfoot",
			HumanoidBones.leftFoot
		},
		{
			"ltoes",
			HumanoidBones.leftToes
		}
	};

	private static HumanoidBones[] RequiredBones = new HumanoidBones[15]
	{
		HumanoidBones.hips,
		HumanoidBones.spine,
		HumanoidBones.head,
		HumanoidBones.leftUpperArm,
		HumanoidBones.leftLowerArm,
		HumanoidBones.leftHand,
		HumanoidBones.leftUpperLeg,
		HumanoidBones.leftLowerLeg,
		HumanoidBones.leftFoot,
		HumanoidBones.rightUpperArm,
		HumanoidBones.rightLowerArm,
		HumanoidBones.rightHand,
		HumanoidBones.rightUpperLeg,
		HumanoidBones.rightLowerLeg,
		HumanoidBones.rightFoot
	};

	private static Node GetRoot(IReadOnlyList<Node> bones)
	{
		Node[] array = bones.Where((Node x) => x.Parent == null).ToArray();
		if (array.Length != 1)
		{
			throw new Exception("Require unique root");
		}
		return array[0];
	}

	private static Node SelectBone(Func<Node, Node, bool> pred, Node parent)
	{
		IReadOnlyList<Node> children = parent.Children;
		if (children == null || children.Count == 0)
		{
			throw new Exception("no bones");
		}
		foreach (Node item in children)
		{
			if (pred(item, parent))
			{
				return item;
			}
		}
		throw new Exception("not found");
	}

	private static void GetSpineAndHips(Node hips, out Node spine, out Node leg_L, out Node leg_R)
	{
		if (hips.Children.Count != 3)
		{
			throw new Exception("Hips require 3 children");
		}
		spine = SelectBone((Node l, Node r) => l.CenterOfDescendant().y > r.SkeletonLocalPosition.y, hips);
		Node s = spine;
		try
		{
			leg_L = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().x < r.SkeletonLocalPosition.x, hips);
			leg_R = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().x > r.SkeletonLocalPosition.x, hips);
		}
		catch (Exception)
		{
			leg_L = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().z < r.SkeletonLocalPosition.z, hips);
			leg_R = SelectBone((Node l, Node r) => !l.Equals(s) && l.CenterOfDescendant().z > r.SkeletonLocalPosition.z, hips);
		}
	}

	private static void GetNeckAndArms(Node chest, out Node neck, out Node arm_L, out Node arm_R, Func<Vector3, Vector3, bool> isLeft)
	{
		if (chest.Children.Count != 3)
		{
			throw new Exception("Chest require 3 children");
		}
		neck = SelectBone((Node l, Node r) => l.CenterOfDescendant().y > r.SkeletonLocalPosition.y, chest);
		Node i = neck;
		arm_L = SelectBone((Node l, Node r) => !l.Equals(i) && isLeft(l.CenterOfDescendant(), r.SkeletonLocalPosition), chest);
		arm_R = SelectBone((Node l, Node r) => !l.Equals(i) && !isLeft(l.CenterOfDescendant(), r.SkeletonLocalPosition), chest);
	}

	private static Arm GetArm(Node shoulder)
	{
		Node[] array = shoulder.Traverse().ToArray();
		switch (array.Length)
		{
		case 0:
		case 1:
		case 2:
			throw new NotImplementedException();
		case 3:
		{
			Arm result = default(Arm);
			result.UpperArm = array[0];
			result.LowerArm = array[1];
			result.Hand = array[2];
			return result;
		}
		default:
		{
			Arm result = default(Arm);
			result.Shoulder = array[0];
			result.UpperArm = array[1];
			result.LowerArm = array[2];
			result.Hand = array[3];
			return result;
		}
		}
	}

	private static Leg GetLeg(Node leg)
	{
		Node[] array = (from x in leg.Traverse()
			where string.IsNullOrEmpty(x.Name) || !x.Name.ToLower().Contains("buttock")
			select x).ToArray();
		switch (array.Length)
		{
		case 0:
		case 1:
		case 2:
			throw new NotImplementedException();
		case 3:
		{
			Leg result = default(Leg);
			result.UpperLeg = array[0];
			result.LowerLeg = array[1];
			result.Foot = array[2];
			return result;
		}
		default:
		{
			Leg result = default(Leg);
			result.UpperLeg = array[^4];
			result.LowerLeg = array[^3];
			result.Foot = array[^2];
			result.Toes = array[^1];
			return result;
		}
		}
	}

	public static Dictionary<HumanoidBones, Node> DetectByName(Node root, Dictionary<string, HumanoidBones> map)
	{
		Dictionary<HumanoidBones, Node> dictionary = new Dictionary<HumanoidBones, Node>();
		foreach (Node item in root.Traverse())
		{
			HumanoidBones result;
			if (map.TryGetValue(item.Name, out var value))
			{
				if (value != 0)
				{
					dictionary.Add(value, item);
				}
			}
			else if (Enum.TryParse<HumanoidBones>(item.Name, ignoreCase: true, out result))
			{
				value = result;
				dictionary.Add(value, item);
			}
		}
		return dictionary;
	}

	public static Dictionary<HumanoidBones, Node> DetectByPosition(Node root)
	{
		//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		Node node = root.Traverse().First((Node x) => x.Children.Where((Node y) => y.Traverse().Count() >= 3).Count() >= 3);
		GetSpineAndHips(node, out var spine, out var leg_L, out var leg_R);
		if (leg_L.Equals(leg_R))
		{
			throw new Exception();
		}
		Leg leg = GetLeg(leg_L);
		Leg leg2 = GetLeg(leg_R);
		List<Node> list = new List<Node>();
		foreach (Node item in spine.Traverse())
		{
			list.Add(item);
			if (item.Children.Count == 3)
			{
				break;
			}
		}
		Func<Vector3, Vector3, bool> func = null;
		GetNeckAndArms(isLeft: (leg.UpperLeg.SkeletonLocalPosition.z != leg2.UpperLeg.SkeletonLocalPosition.z) ? ((Func<Vector3, Vector3, bool>)((Vector3 l, Vector3 r) => l.z < r.z)) : ((Func<Vector3, Vector3, bool>)((Vector3 l, Vector3 r) => l.x < r.x)), chest: list.Last(), neck: out var neck, arm_L: out var arm_L, arm_R: out var arm_R);
		Arm arm = GetArm(arm_L);
		Arm arm2 = GetArm(arm_R);
		Node[] array = neck.Traverse().ToArray();
		Dictionary<HumanoidBones, Node> skeleton = new Dictionary<HumanoidBones, Node>();
		Action<HumanoidBones, Node> action = delegate(HumanoidBones b, Node t)
		{
			if (t != null)
			{
				t.HumanoidBone = b;
				skeleton[b] = t;
			}
		};
		action(HumanoidBones.hips, node);
		switch (list.Count)
		{
		case 0:
			throw new Exception();
		case 1:
			action(HumanoidBones.spine, list[0]);
			break;
		case 2:
			action(HumanoidBones.spine, list[0]);
			action(HumanoidBones.chest, list[1]);
			break;
		case 3:
			action(HumanoidBones.spine, list[0]);
			action(HumanoidBones.chest, list[1]);
			action(HumanoidBones.upperChest, list[2]);
			break;
		default:
			action(HumanoidBones.spine, list[0]);
			action(HumanoidBones.chest, list[1]);
			action(HumanoidBones.upperChest, list.Last());
			break;
		}
		switch (array.Length)
		{
		case 0:
			throw new Exception();
		case 1:
			action(HumanoidBones.head, array[0]);
			break;
		case 2:
			action(HumanoidBones.neck, array[0]);
			action(HumanoidBones.head, array[1]);
			break;
		default:
			action(HumanoidBones.neck, array[0]);
			action(HumanoidBones.head, array.Where((Node x) => x.Parent.Children.Count == 1).Last());
			break;
		}
		action(HumanoidBones.leftUpperLeg, leg.UpperLeg);
		action(HumanoidBones.leftLowerLeg, leg.LowerLeg);
		action(HumanoidBones.leftFoot, leg.Foot);
		action(HumanoidBones.leftToes, leg.Toes);
		action(HumanoidBones.rightUpperLeg, leg2.UpperLeg);
		action(HumanoidBones.rightLowerLeg, leg2.LowerLeg);
		action(HumanoidBones.rightFoot, leg2.Foot);
		action(HumanoidBones.rightToes, leg2.Toes);
		action(HumanoidBones.leftShoulder, arm.Shoulder);
		action(HumanoidBones.leftUpperArm, arm.UpperArm);
		action(HumanoidBones.leftLowerArm, arm.LowerArm);
		action(HumanoidBones.leftHand, arm.Hand);
		action(HumanoidBones.rightShoulder, arm2.Shoulder);
		action(HumanoidBones.rightUpperArm, arm2.UpperArm);
		action(HumanoidBones.rightLowerArm, arm2.LowerArm);
		action(HumanoidBones.rightHand, arm2.Hand);
		return skeleton;
	}

	private static bool HasAllHumanRequiredBone(Dictionary<HumanoidBones, Node> dict)
	{
		HumanoidBones[] requiredBones = RequiredBones;
		foreach (HumanoidBones key in requiredBones)
		{
			if (!dict.ContainsKey(key))
			{
				return false;
			}
		}
		return true;
	}

	private static Dictionary<HumanoidBones, Node> _Detect(Node root)
	{
		List<Dictionary<HumanoidBones, Node>> list = new List<Dictionary<HumanoidBones, Node>>();
		Dictionary<string, HumanoidBones>[] array = new Dictionary<string, HumanoidBones>[3] { s_nameBoneMap, s_nameBoneMapLA, s_nameBoneMapAccad };
		foreach (Dictionary<string, HumanoidBones> map in array)
		{
			try
			{
				Dictionary<HumanoidBones, Node> dictionary = DetectByName(root, map);
				if (dictionary != null)
				{
					list.Add(dictionary);
				}
			}
			catch (Exception)
			{
			}
		}
		foreach (Dictionary<HumanoidBones, Node> item in list.OrderByDescending((Dictionary<HumanoidBones, Node> x) => x.Count))
		{
			if (HasAllHumanRequiredBone(item))
			{
				return item;
			}
		}
		return DetectByPosition(root);
	}

	public static Dictionary<HumanoidBones, Node> Detect(Node root)
	{
		try
		{
			Dictionary<HumanoidBones, Node> dictionary = _Detect(root);
			foreach (KeyValuePair<HumanoidBones, Node> item in dictionary)
			{
				item.Value.HumanoidBone = item.Key;
			}
			return dictionary;
		}
		catch
		{
			return null;
		}
	}
}
internal struct BoneWeight
{
	public int boneIndex0;

	public int boneIndex1;

	public int boneIndex2;

	public int boneIndex3;

	public float weight0;

	public float weight1;

	public float weight2;

	public float weight3;
}
internal class MeshBuilder
{
	public static BoneHeadTail[] Bones = new BoneHeadTail[21]
	{
		new BoneHeadTail(HumanoidBones.hips, HumanoidBones.spine, 0.1f, 0.06f),
		new BoneHeadTail(HumanoidBones.spine, HumanoidBones.chest),
		new BoneHeadTail(HumanoidBones.chest, HumanoidBones.neck, 0.1f, 0.06f),
		new BoneHeadTail(HumanoidBones.neck, HumanoidBones.head, 0.03f, 0.03f),
		new BoneHeadTail(HumanoidBones.head, new Vector3(0f, 0.1f, 0f), 0.1f, 0.1f),
		new BoneHeadTail(HumanoidBones.leftShoulder, HumanoidBones.leftUpperArm),
		new BoneHeadTail(HumanoidBones.leftUpperArm, HumanoidBones.leftLowerArm),
		new BoneHeadTail(HumanoidBones.leftLowerArm, HumanoidBones.leftHand),
		new BoneHeadTail(HumanoidBones.leftHand, new Vector3(-0.1f, 0f, 0f)),
		new BoneHeadTail(HumanoidBones.leftUpperLeg, HumanoidBones.leftLowerLeg),
		new BoneHeadTail(HumanoidBones.leftLowerLeg, HumanoidBones.leftFoot),
		new BoneHeadTail(HumanoidBones.leftFoot, HumanoidBones.leftToes),
		new BoneHeadTail(HumanoidBones.leftToes, new Vector3(0f, 0f, 0.1f)),
		new BoneHeadTail(HumanoidBones.rightShoulder, HumanoidBones.rightUpperArm),
		new BoneHeadTail(HumanoidBones.rightUpperArm, HumanoidBones.rightLowerArm),
		new BoneHeadTail(HumanoidBones.rightLowerArm, HumanoidBones.rightHand),
		new BoneHeadTail(HumanoidBones.rightHand, new Vector3(0.1f, 0f, 0f)),
		new BoneHeadTail(HumanoidBones.rightUpperLeg, HumanoidBones.rightLowerLeg),
		new BoneHeadTail(HumanoidBones.rightLowerLeg, HumanoidBones.rightFoot),
		new BoneHeadTail(HumanoidBones.rightFoot, HumanoidBones.rightToes),
		new BoneHeadTail(HumanoidBones.rightToes, new Vector3(0f, 0f, 0.1f))
	};

	private List<Vector3> m_positioins = new List<Vector3>();

	private List<int> m_indices = new List<int>();

	private List<BoneWeight> m_boneWeights = new List<BoneWeight>();

	public void Build(List<Node> bones)
	{
		//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_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ac: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		BoneHeadTail[] bones2 = Bones;
		for (int i = 0; i < bones2.Length; i++)
		{
			BoneHeadTail headTail = bones2[i];
			Node node = bones.FirstOrDefault((Node x) => x.HumanoidBone == headTail.Head);
			if (node != null)
			{
				Node node2 = null;
				if (headTail.Tail != 0)
				{
					node2 = bones.FirstOrDefault((Node x) => x.HumanoidBone == headTail.Tail);
				}
				if (node2 != null)
				{
					AddBone(node.SkeletonLocalPosition, node2.SkeletonLocalPosition, bones.IndexOf(node), headTail.XWidth, headTail.ZWidth);
				}
				else if (headTail.TailOffset != Vector3.zero)
				{
					AddBone(node.SkeletonLocalPosition, node.SkeletonLocalPosition + headTail.TailOffset, bones.IndexOf(node), headTail.XWidth, headTail.ZWidth);
				}
			}
			else
			{
				Console.Error.WriteLine($"{headTail.Head} not found");
			}
		}
	}

	private void AddBone(Vector3 head, Vector3 tail, int boneIndex, float xWidth, float zWidth)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0032: 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_004e: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: 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_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		Vector3 val = tail - head;
		Vector3 normalized = ((Vector3)(ref val)).normalized;
		Vector3 val2;
		Vector3 val3;
		if (Vector3.Dot(normalized, Vector3.forward) >= 1f)
		{
			val2 = Vector3.right;
			val3 = -Vector3.up;
		}
		else
		{
			val2 = Vector3.Normalize(Vector3.Cross(normalized, Vector3.forward));
			val3 = Vector3.forward;
		}
		AddBox((head + tail) * 0.5f, val2 * xWidth, (tail - head) * 0.5f, val3 * zWidth, boneIndex);
	}

	private void AddBox(Vector3 center, Vector3 xaxis, Vector3 yaxis, Vector3 zaxis, int boneIndex)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: 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)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: 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_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0062: 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_0069: 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_006f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: 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_008f: 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_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_009d: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: 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)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00fe: 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_010d: Unknown result type (might be due to invalid IL or missing references)
		//IL_010e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0113: Unknown result type (might be due to invalid IL or missing references)
		//IL_0114: Unknown result type (might be due to invalid IL or missing references)
		//IL_0119: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0122: Unknown result type (might be due to invalid IL or missing references)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_0128: Unknown result type (might be due to invalid IL or missing references)
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		//IL_0135: Unknown result type (might be due to invalid IL or missing references)
		//IL_0136: Unknown result type (might be due to invalid IL or missing references)
		//IL_013b: Unknown result type (might be due to invalid IL or missing references)
		//IL_013c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0141: Unknown result type (might be due to invalid IL or missing references)
		//IL_0143: Unknown result type (might be due to invalid IL or missing references)
		//IL_0148: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014a: Unknown result type (might be due to invalid IL or missing references)
		//IL_014f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0150: Unknown result type (might be due to invalid IL or missing references)
		//IL_0155: Unknown result type (might be due to invalid IL or missing references)
		//IL_0157: Unknown result type (might be due to invalid IL or missing references)
		//IL_0165: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_016d: Unknown result type (might be due to invalid IL or missing references)
		//IL_016e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_0174: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_017a: Unknown result type (might be due to invalid IL or missing references)
		//IL_017c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		//IL_0187: Unknown result type (might be due to invalid IL or missing references)
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_018e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0190: Unknown result type (might be due to invalid IL or missing references)
		//IL_0195: Unknown result type (might be due to invalid IL or missing references)
		//IL_0196: Unknown result type (might be due to invalid IL or missing references)
		//IL_019b: Unknown result type (might be due to invalid IL or missing references)
		//IL_019c: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01af: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01be: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_01db: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0202: Unknown result type (might be due to invalid IL or missing references)
		//IL_0203: Unknown result type (might be due to invalid IL or missing references)
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_0209: Unknown result type (might be due to invalid IL or missing references)
		AddQuad(center - yaxis - xaxis - zaxis, center - yaxis + xaxis - zaxis, center - yaxis + xaxis + zaxis, center - yaxis - xaxis + zaxis, boneIndex);
		AddQuad(center + yaxis - xaxis - zaxis, center + yaxis + xaxis - zaxis, center + yaxis + xaxis + zaxis, center + yaxis - xaxis + zaxis, boneIndex, reverse: true);
		AddQuad(center - xaxis - yaxis - zaxis, center - xaxis + yaxis - zaxis, center - xaxis + yaxis + zaxis, center - xaxis - yaxis + zaxis, boneIndex, reverse: true);
		AddQuad(center + xaxis - yaxis - zaxis, center + xaxis + yaxis - zaxis, center + xaxis + yaxis + zaxis, center + xaxis - yaxis + zaxis, boneIndex);
		AddQuad(center - zaxis - xaxis - yaxis, center - zaxis + xaxis - yaxis, center - zaxis + xaxis + yaxis, center - zaxis - xaxis + yaxis, boneIndex, reverse: true);
		AddQuad(center + zaxis - xaxis - yaxis, center + zaxis + xaxis - yaxis, center + zaxis + xaxis + yaxis, center + zaxis - xaxis + yaxis, boneIndex);
	}

	private void AddQuad(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, int boneIndex, bool reverse = false)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: 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_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_008b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: 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_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		int count = m_positioins.Count;
		if (float.IsNaN(v0.x) || float.IsNaN(v0.y) || float.IsNaN(v0.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v0);
		if (float.IsNaN(v1.x) || float.IsNaN(v1.y) || float.IsNaN(v1.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v1);
		if (float.IsNaN(v2.x) || float.IsNaN(v2.y) || float.IsNaN(v2.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v2);
		if (float.IsNaN(v3.x) || float.IsNaN(v3.y) || float.IsNaN(v3.z))
		{
			throw new Exception();
		}
		m_positioins.Add(v3);
		BoneWeight boneWeight = default(BoneWeight);
		boneWeight.boneIndex0 = boneIndex;
		boneWeight.weight0 = 1f;
		BoneWeight item = boneWeight;
		m_boneWeights.Add(item);
		m_boneWeights.Add(item);
		m_boneWeights.Add(item);
		m_boneWeights.Add(item);
		if (reverse)
		{
			m_indices.Add(count + 3);
			m_indices.Add(count + 2);
			m_indices.Add(count + 1);
			m_indices.Add(count + 1);
			m_indices.Add(count);
			m_indices.Add(count + 3);
		}
		else
		{
			m_indices.Add(count);
			m_indices.Add(count + 1);
			m_indices.Add(count + 2);
			m_indices.Add(count + 2);
			m_indices.Add(count + 3);
			m_indices.Add(count);
		}
	}
}
internal struct BoneHeadTail
{
	public HumanoidBones Head;

	public HumanoidBones Tail;

	public Vector3 TailOffset;

	public float XWidth;

	public float ZWidth;

	public BoneHeadTail(HumanoidBones head, HumanoidBones tail, float xWidth = 0.05f, float zWidth = 0.05f)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		Head = head;
		Tail = tail;
		TailOffset = Vector3.zero;
		XWidth = xWidth;
		ZWidth = zWidth;
	}

	public BoneHeadTail(HumanoidBones head, Vector3 tailOffset, float xWidth = 0.05f, float zWidth = 0.05f)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		Head = head;
		Tail = HumanoidBones.unknown;
		TailOffset = tailOffset;
		XWidth = xWidth;
		ZWidth = zWidth;
	}
}
public static class MathFWrap
{
	public static readonly float PI = MathF.PI;

	public static float Clamp(float src, float min, float max)
	{
		return Math.Max(Math.Min(src, min), max);
	}

	public static int Clamp(int src, int min, int max)
	{
		return Math.Max(Math.Min(src, min), max);
	}
}
public enum TopologyType
{
	Points,
	Lines,
	LineLoop,
	LineStrip,
	Triangles,
	TriangleStrip,
	TriangleFan
}
public struct Triangle
{
	public int Vertex0;

	public int Vertex1;

	public int Vertex2;

	public Triangle(int v0, int v1, int v2)
	{
		Vertex0 = v0;
		Vertex1 = v1;
		Vertex2 = v2;
	}
}
public class Submesh
{
	public int Offset;

	public int DrawCount;

	public int Material;

	public override string ToString()
	{
		return $"{Material}({DrawCount})";
	}

	public Submesh(int material)
		: this(0, 0, material)
	{
	}

	public Submesh(int offset, int drawCount, int material)
	{
		Offset = offset;
		DrawCount = drawCount;
		Material = material;
	}
}
public class Mesh
{
	public VertexBuffer VertexBuffer;

	public BufferAccessor IndexBuffer;

	public TopologyType Topology = TopologyType.Triangles;

	public List<MorphTarget> MorphTargets = new List<MorphTarget>();

	public List<Submesh> Submeshes { get; private set; } = new List<Submesh>();


	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		foreach (string item in VertexBuffer.Select((KeyValuePair<string, BufferAccessor> x) => x.Key))
		{
			stringBuilder.Append("[" + item + "]");
		}
		if (IndexBuffer != null)
		{
			if (Topology == TopologyType.Triangles)
			{
				stringBuilder.Append($" {IndexBuffer.Count / 3} tris");
			}
			else
			{
				stringBuilder.Append($" topology: {Topology}");
			}
		}
		if (MorphTargets.Any())
		{
			stringBuilder.Append($", {MorphTargets.Count} morphs");
			foreach (KeyValuePair<string, BufferAccessor> item2 in MorphTargets[0].VertexBuffer)
			{
				stringBuilder.Append("[" + item2.Key + "]");
			}
		}
		int num = VertexBuffer.ByteLength + IndexBuffer.ByteLength + MorphTargets.Sum((MorphTarget x) => x.VertexBuffer.ByteLength);
		stringBuilder.Append($": expected {num / 1000 / 1000} MB");
		return stringBuilder.ToString();
	}

	public Mesh(TopologyType topology = TopologyType.Triangles)
	{
		Topology = topology;
	}

	public void ApplyRotationAndScaling(Matrix4x4 m)
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: 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_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: Unknown result type (might be due to invalid IL or missing references)
		((Matrix4x4)(ref m)).SetColumn(3, new Vector4(0f, 0f, 0f, 1f));
		NativeArray<Vector3> val = VertexBuffer.Positions.Bytes.Reinterpret<Vector3>(1);
		NativeArray<Vector3> val2 = VertexBuffer.Normals.Bytes.Reinterpret<Vector3>(1);
		for (int i = 0; i < val.Length; i++)
		{
			val[i] = ((Matrix4x4)(ref m)).MultiplyPoint(val[i]);
			val2[i] = ((Matrix4x4)(ref m)).MultiplyVector(val2[i]);
		}
	}
}
public class MeshGroup : GltfId
{
	public readonly string Name;

	public readonly List<Mesh> Meshes = new List<Mesh>();

	public Skin Skin;

	public bool HasSharedBuffer
	{
		get
		{
			if (Meshes.Count == 1)
			{
				return Meshes[0].Submeshes.Count > 1;
			}
			return false;
		}
	}

	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append(Name);
		if (Skin != null)
		{
			stringBuilder.Append("(skinned)");
		}
		bool flag = true;
		foreach (Mesh mesh in Meshes)
		{
			if (flag)
			{
				flag = false;
			}
			else
			{
				stringBuilder.Append(", ");
			}
			stringBuilder.Append(mesh);
		}
		return stringBuilder.ToString();
	}

	public MeshGroup(string name)
	{
		Name = name;
	}
}
public class Model
{
	private struct Reverser
	{
		public Action<BufferAccessor> ReverseBuffer;

		public Func<Vector3, Vector3> ReverseVector3;

		public Func<Matrix4x4, Matrix4x4> ReverseMatrix;
	}

	public Coordinates Coordinates;

	public string AssetVersion = "2.0";

	public string AssetGenerator;

	public string AssetCopyright;

	public string AssetMinVersion;

	public readonly List<object> Materials = new List<object>();

	public readonly List<Skin> Skins = new List<Skin>();

	public readonly List<MeshGroup> MeshGroups = new List<MeshGroup>();

	private Node m_root = new Node("__root__");

	public List<Node> Nodes = new List<Node>();

	public Node Root => m_root;

	private static Reverser ZReverser
	{
		get
		{
			Reverser result = default(Reverser);
			result.ReverseBuffer = ReverseZ;
			result.ReverseVector3 = (Vector3 v) => UnityExtensions.ReverseZ(v);
			result.ReverseMatrix = (Matrix4x4 m) => UnityExtensions.ReverseZ(m);
			return result;
		}
	}

	private static Reverser XReverser
	{
		get
		{
			Reverser result = default(Reverser);
			result.ReverseBuffer = ReverseX;
			result.ReverseVector3 = (Vector3 v) => UnityExtensions.ReverseX(v);
			result.ReverseMatrix = (Matrix4x4 m) => UnityExtensions.ReverseX(m);
			return result;
		}
	}

	public Model(Coordinates coordinates)
	{
		Coordinates = coordinates;
	}

	public void SetRoot(Node root)
	{
		m_root = root;
		Nodes.Clear();
		Nodes.AddRange(root.Traverse().Skip(1));
	}

	public Dictionary<HumanoidBones, Node> GetBoneMap()
	{
		return (from x in Root.Traverse()
			where x.HumanoidBone.HasValue
			select x).ToDictionary((Node x) => x.HumanoidBone.Value, (Node x) => x);
	}

	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append("[GLTF] generator: " + AssetGenerator + "\n");
		for (int i = 0; i < Materials.Count; i++)
		{
			object arg = Materials[i];
			stringBuilder.Append($"[Material#{i:00}] {arg}\n");
		}
		for (int j = 0; j < MeshGroups.Count; j++)
		{
			MeshGroup arg2 = MeshGroups[j];
			stringBuilder.Append($"[Mesh#{j:00}] {arg2}\n");
		}
		stringBuilder.Append($"[Node] {Nodes.Count} nodes\n");
		foreach (Skin skin in Skins)
		{
			stringBuilder.Append($"[Skin] {skin}\n");
		}
		return stringBuilder.ToString();
	}

	public bool CheckVrmHumanoid()
	{
		HashSet<HumanoidBones> hashSet = new HashSet<HumanoidBones>();
		foreach (Node node in Nodes)
		{
			if (node.HumanoidBone.HasValue)
			{
				if (hashSet.Contains(node.HumanoidBone.Value))
				{
					return false;
				}
				hashSet.Add(node.HumanoidBone.Value);
			}
		}
		IEnumerable<BoneRequiredAttribute[]> source = from bone in CachedEnum.GetValues<HumanoidBones>()
			select bone.GetType().GetField(bone.ToString()) into info
			select info.GetCustomAttributes(typeof(BoneRequiredAttribute), inherit: false) as BoneRequiredAttribute[] into attributes
			where attributes.Length != 0
			select attributes;
		if ((from humanoid in hashSet
			select humanoid.GetType().GetField(humanoid.ToString()) into info
			select info.GetCustomAttributes(typeof(BoneRequiredAttribute), inherit: false) as BoneRequiredAttribute[] into attributes
			where attributes.Length != 0
			select attributes).Count() != source.Count())
		{
			return false;
		}
		return true;
	}

	public static Node GetNode(Node root, string path)
	{
		string[] source = path.Split('/');
		IEnumerator<string> it = source.Select((string x) => x).GetEnumerator();
		Node node = root;
		while (it.MoveNext())
		{
			node = node.Children.First((Node x) => x.Name == it.Current);
		}
		return node;
	}

	public void ApplyRotationAndScale()
	{
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_007b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		Dictionary<Node, Vector3> dictionary = Nodes.ToDictionary((Node x) => x, (Node x) => x.Translation);
		foreach (Node item in Root.Traverse().Skip(1))
		{
			if (dictionary.TryGetValue(item, out var value))
			{
				Matrix4x4 m = Matrix4x4.Translate(value);
				item.SetMatrix(m, calcWorldMatrix: false);
			}
		}
	}

	public void NodeAdd(Node node, Node parent = null)
	{
		if (parent == null)
		{
			parent = Root;
		}
		parent.Add(node);
		if (Nodes.Contains(node))
		{
			throw new ArgumentException($"Nodes contain {node}");
		}
		Nodes.Add(node);
	}

	public void NodeRemove(Node remove)
	{
		foreach (Node node in Nodes)
		{
			if (node.Parent == remove)
			{
				remove.Remove(node);
			}
			if (remove.Parent == node)
			{
				node.Remove(remove);
			}
		}
		if (Root.Children.Contains(remove))
		{
			Root.Remove(remove);
		}
		Nodes.Remove(remove);
	}

	public string SkinningBake(INativeArrayManager arrayManager)
	{
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		foreach (Node node in Nodes)
		{
			MeshGroup meshGroup = node.MeshGroup;
			if (meshGroup == null)
			{
				continue;
			}
			if (meshGroup.Skin != null)
			{
				foreach (Mesh mesh in meshGroup.Meshes)
				{
					meshGroup.Skin.Skinning(arrayManager, mesh.VertexBuffer);
				}
				meshGroup.Skin.Root = null;
				meshGroup.Skin.InverseMatrices = null;
				continue;
			}
			foreach (Mesh mesh2 in meshGroup.Meshes)
			{
				mesh2.ApplyRotationAndScaling(node.Matrix);
			}
		}
		ApplyRotationAndScale();
		foreach (Node node2 in Nodes)
		{
			MeshGroup meshGroup2 = node2.MeshGroup;
			if (meshGroup2 == null)
			{
				continue;
			}
			foreach (Mesh mesh3 in meshGroup2.Meshes)
			{
				_ = mesh3;
				if (meshGroup2.Skin != null)
				{
					meshGroup2.Skin.CalcInverseMatrices(arrayManager);
				}
			}
		}
		return "SkinningBake";
	}

	private static void ReverseX(BufferAccessor ba)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Invalid comparison between Unknown and I4
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Invalid comparison between Unknown and I4
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Invalid comparison between Unknown and I4
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: 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_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: 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)
		if ((int)ba.ComponentType != 5126)
		{
			throw new Exception();
		}
		if ((int)ba.AccessorType == 2)
		{
			NativeArray<Vector3> val = ba.Bytes.Reinterpret<Vector3>(1);
			for (int i = 0; i < val.Length; i++)
			{
				val[i] = UnityExtensions.ReverseX(val[i]);
			}
			return;
		}
		if ((int)ba.AccessorType == 6)
		{
			NativeArray<Matrix4x4> val2 = ba.Bytes.Reinterpret<Matrix4x4>(1);
			for (int j = 0; j < val2.Length; j++)
			{
				val2[j] = UnityExtensions.ReverseX(val2[j]);
			}
			return;
		}
		throw new NotImplementedException();
	}

	private static void ReverseZ(BufferAccessor ba)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Invalid comparison between Unknown and I4
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Invalid comparison between Unknown and I4
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Invalid comparison between Unknown and I4
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: 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_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_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_0036: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: 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)
		if ((int)ba.ComponentType != 5126)
		{
			throw new Exception();
		}
		if ((int)ba.AccessorType == 2)
		{
			NativeArray<Vector3> val = ba.Bytes.Reinterpret<Vector3>(1);
			for (int i = 0; i < val.Length; i++)
			{
				val[i] = UnityExtensions.ReverseZ(val[i]);
			}
			return;
		}
		if ((int)ba.AccessorType == 6)
		{
			NativeArray<Matrix4x4> val2 = ba.Bytes.Reinterpret<Matrix4x4>(1);
			for (int j = 0; j < val2.Length; j++)
			{
				val2[j] = UnityExtensions.ReverseZ(val2[j]);
			}
			return;
		}
		throw new NotImplementedException();
	}

	public void ConvertCoordinate(Coordinates coordinates, bool ignoreVrm = false)
	{
		if (Coordinates.Equals(coordinates))
		{
			return;
		}
		if (Coordinates.IsVrm0 && coordinates.IsUnity)
		{
			ReverseAxisAndFlipTriangle(ZReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		if (Coordinates.IsUnity && coordinates.IsVrm0)
		{
			ReverseAxisAndFlipTriangle(ZReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		if (Coordinates.IsVrm1 && coordinates.IsUnity)
		{
			ReverseAxisAndFlipTriangle(XReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		if (Coordinates.IsUnity && coordinates.IsVrm1)
		{
			ReverseAxisAndFlipTriangle(XReverser, ignoreVrm);
			UVVerticalFlip();
			Coordinates = coordinates;
			return;
		}
		throw new NotImplementedException();
	}

	private void UVVerticalFlip()
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: 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)
		foreach (MeshGroup meshGroup in MeshGroups)
		{
			foreach (Mesh mesh in meshGroup.Meshes)
			{
				BufferAccessor texCoords = mesh.VertexBuffer.TexCoords;
				if (texCoords != null)
				{
					NativeArray<Vector2> val = texCoords.Bytes.Reinterpret<Vector2>(1);
					for (int i = 0; i < val.Length; i++)
					{
						val[i] = UnityExtensions.UVVerticalFlip(val[i]);
					}
				}
			}
		}
	}

	private void ReverseAxisAndFlipTriangle(Reverser reverser, bool ignoreVrm)
	{
		//IL_0273: Unknown result type (might be due to invalid IL or missing references)
		//IL_0278: 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)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00da: Unknown result type (might be due to invalid IL or missing references)
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0102: Expected I4, but got Unknown
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0121: Unknown result type (might be due to invalid IL or missing references)
		//IL_0126: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0142: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
		HashSet<NativeArray<byte>> hashSet = new HashSet<NativeArray<byte>>();
		foreach (MeshGroup meshGroup in MeshGroups)
		{
			foreach (Mesh mesh in meshGroup.Meshes)
			{
				foreach (KeyValuePair<string, BufferAccessor> item in mesh.VertexBuffer)
				{
					string key = item.Key;
					BufferAccessor value = item.Value;
					if (key == "POSITION" || key == "NORMAL")
					{
						if (hashSet.Add(value.Bytes))
						{
							reverser.ReverseBuffer(value);
						}
					}
					else
					{
						_ = key == "TANGENT";
					}
				}
				if (hashSet.Add(mesh.IndexBuffer.Bytes))
				{
					AccessorValueType componentType = mesh.IndexBuffer.ComponentType;
					switch (componentType - 5121)
					{
					case 0:
						FlipTriangle(mesh.IndexBuffer.Bytes);
						break;
					case 2:
						FlipTriangle(mesh.IndexBuffer.Bytes.Reinterpret<ushort>(1));
						break;
					case 4:
						FlipTriangle(mesh.IndexBuffer.Bytes.Reinterpret<uint>(1));
						break;
					default:
						throw new NotImplementedException();
					}
				}
				foreach (MorphTarget morphTarget in mesh.MorphTargets)
				{
					foreach (KeyValuePair<string, BufferAccessor> item2 in morphTarget.VertexBuffer)
					{
						string key2 = item2.Key;
						BufferAccessor value2 = item2.Value;
						if ((key2 == "POSITION" || key2 == "NORMAL") && hashSet.Add(value2.Bytes))
						{
							reverser.ReverseBuffer(value2);
						}
						_ = key2 == "TANGENT";
					}
				}
			}
		}
		foreach (Node item3 in Root.Traverse().Skip(1))
		{
			item3.SetMatrix(reverser.ReverseMatrix(item3.Matrix), calcWorldMatrix: false);
		}
		foreach (Skin skin in Skins)
		{
			if (skin.InverseMatrices != null && hashSet.Add(skin.InverseMatrices.Bytes))
			{
				reverser.ReverseBuffer(skin.InverseMatrices);
			}
		}
	}

	private static void FlipTriangle(NativeArray<byte> indices)
	{
		for (int i = 0; i < indices.Length; i += 3)
		{
			byte b = indices[i + 2];
			indices[i + 2] = indices[i];
			indices[i] = b;
		}
	}

	private static void FlipTriangle(NativeArray<ushort> indices)
	{
		for (int i = 0; i < indices.Length; i += 3)
		{
			ushort num = indices[i + 2];
			indices[i + 2] = indices[i];
			indices[i] = num;
		}
	}

	private static void FlipTriangle(NativeArray<uint> indices)
	{
		for (int i = 0; i < indices.Length; i += 3)
		{
			uint num = indices[i + 2];
			indices[i + 2] = indices[i];
			indices[i] = num;
		}
	}
}
public class MorphTarget
{
	public readonly string Name;

	public VertexBuffer VertexBuffer;

	public override string ToString()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append(Name);
		foreach (KeyValuePair<string, BufferAccessor> item in VertexBuffer)
		{
			stringBuilder.Append("[" + item.Key + "]");
		}
		return stringBuilder.ToString();
	}

	public MorphTarget(string name)
	{
		Name = name;
	}
}
public enum ChildMatrixMode
{
	KeepLocal,
	KeepWorld
}
public class Node : GltfId, IEnumerable<Node>, IEnumerable
{
	private static int s_nextUniqueId = 1;

	public readonly int UniqueID;

	public Vector3 LocalTranslationWithoutUpdate = Vector3.zero;

	public Quaternion LocalRotationWithoutUpdate = Quaternion.identity;

	public Vector3 LocalScalingWithoutUpdate = Vector3.one;

	private Matrix4x4 m_matrix = Matrix4x4.identity;

	private readonly List<Node> m_children = new List<Node>();

	public MeshGroup MeshGroup;

	private HumanoidBones? m_bone;

	public string Name { get; set; }

	public Vector3 LocalTranslation
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return LocalTranslationWithoutUpdate;
		}
		set
		{
			//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)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (!(LocalTranslationWithoutUpdate == value))
			{
				LocalTranslationWithoutUpdate = value;
				CalcWorldMatrix((Parent != null) ? Parent.Matrix : Matrix4x4.identity);
			}
		}
	}

	public Quaternion LocalRotation
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return LocalRotationWithoutUpdate;
		}
		set
		{
			//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)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (!(LocalRotationWithoutUpdate == value))
			{
				LocalRotationWithoutUpdate = value;
				CalcWorldMatrix((Parent != null) ? Parent.Matrix : Matrix4x4.identity);
			}
		}
	}

	public Vector3 LocalScaling
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return LocalScalingWithoutUpdate;
		}
		set
		{
			//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)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (!(LocalScalingWithoutUpdate == value))
			{
				LocalScalingWithoutUpdate = value;
				CalcWorldMatrix((Parent != null) ? Parent.Matrix : Matrix4x4.identity);
			}
		}
	}

	public Matrix4x4 LocalMatrix => Matrix4x4.Translate(LocalTranslation) * Matrix4x4.Rotate(LocalRotation) * Matrix4x4.Scale(LocalScaling);

	public Matrix4x4 Matrix => m_matrix;

	public Quaternion Rotation
	{
		get
		{
			//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)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 matrix = Matrix;
			return ((Matrix4x4)(ref matrix)).rotation;
		}
		set
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			if (Parent == null)
			{
				LocalRotation = value;
			}
			else
			{
				LocalRotation = Quaternion.Inverse(Parent.Rotation) * value;
			}
		}
	}

	public Matrix4x4 InverseMatrix
	{
		get
		{
			//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)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 matrix = Matrix;
			return ((Matrix4x4)(ref matrix)).inverse;
		}
	}

	public Vector3 Translation
	{
		get
		{
			//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)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Matrix4x4 matrix = Matrix;
			return Vector4.op_Implicit(((Matrix4x4)(ref matrix)).GetColumn(3));
		}
		set
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			if (Parent == null)
			{
				LocalTranslation = value;
				return;
			}
			Matrix4x4 inverseMatrix = Parent.InverseMatrix;
			LocalTranslation = ((Matrix4x4)(ref inverseMatrix)).MultiplyPoint(value);
		}
	}

	public Vector3 SkeletonLocalPosition
	{
		get
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return Translation;
		}
		set
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			Translation = value;
		}
	}

	public Node Parent { get; private set; }

	public Mesh Mesh => MeshGroup?.Meshes?[0];

	public HumanoidBones? HumanoidBone
	{
		get
		{
			return m_bone;
		}
		set
		{
			if (m_bone != value && value != HumanoidBones.unknown)
			{
				m_bone = value;
			}
		}
	}

	public IReadOnlyList<Node> Children => m_children;

	public event Action<Matrix4x4> MatrixUpdated;

	public Node(string name)
	{
		//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)
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		UniqueID = s_nextUniqueId++;
		Name = name;
	}

	public void SetLocalMatrix(Matrix4x4 value, bool calcWorldMatrix)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//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)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: 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_0034: Unknown result type (might be due to invalid IL or missing references)
		(LocalTranslationWithoutUpdate, LocalRotationWithoutUpdate, LocalScalingWithoutUpdate) = UnityExtensions.Decompose(value);
		CalcWorldMatrix((

VRMShaders.GLTF.IO.Runtime.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[2431]
		{
			0, 0, 0, 1, 0, 0, 0, 77, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 73, 79, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 65, 110, 105, 109, 97, 116, 105,
			111, 110, 92, 73, 109, 112, 111, 114, 116, 101,
			114, 92, 65, 110, 105, 109, 97, 116, 105, 111,
			110, 67, 108, 105, 112, 70, 97, 99, 116, 111,
			114, 121, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 62, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 65, 119,
			97, 105, 116, 67, 97, 108, 108, 101, 114, 92,
			73, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 65, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 65, 119,
			97, 105, 116, 67, 97, 108, 108, 101, 114, 92,
			73, 109, 109, 101, 100, 105, 97, 116, 101, 67,
			97, 108, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 92, 78, 101, 120, 116, 70, 114, 97,
			109, 101, 84, 97, 115, 107, 83, 99, 104, 101,
			100, 117, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 92, 82, 117, 110, 116, 105, 109, 101,
			79, 110, 108, 121, 65, 119, 97, 105, 116, 67,
			97, 108, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 80, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 92, 82, 117, 110, 116, 105, 109, 101,
			79, 110, 108, 121, 78, 111, 84, 104, 114, 101,
			97, 100, 65, 119, 97, 105, 116, 67, 97, 108,
			108, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 71, 76, 84, 70, 92, 73, 79,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 65,
			119, 97, 105, 116, 67, 97, 108, 108, 101, 114,
			92, 84, 105, 110, 121, 77, 97, 110, 97, 103,
			101, 100, 84, 97, 115, 107, 83, 99, 104, 101,
			100, 117, 108, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 70, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 82, 101, 115, 112, 111, 110, 115, 105,
			98, 105, 108, 105, 116, 121, 70, 111, 114, 68,
			101, 115, 116, 114, 111, 121, 79, 98, 106, 101,
			99, 116, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 74, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 71, 76, 84, 70, 92, 73, 79,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 92, 73, 109,
			112, 111, 114, 116, 101, 114, 92, 77, 97, 116,
			101, 114, 105, 97, 108, 68, 101, 115, 99, 114,
			105, 112, 116, 111, 114, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 71, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 77, 97, 116, 101, 114, 105, 97, 108, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 77,
			97, 116, 101, 114, 105, 97, 108, 70, 97, 99,
			116, 111, 114, 121, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 48, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 71, 76, 84, 70, 92, 73,
			79, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			80, 97, 116, 104, 79, 98, 106, 101, 99, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			49, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			71, 76, 84, 70, 92, 73, 79, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 83, 117, 98, 65,
			115, 115, 101, 116, 75, 101, 121, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 71, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 73, 79, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 84, 101, 120, 116, 117, 114, 101,
			92, 67, 111, 110, 118, 101, 114, 116, 101, 114,
			92, 78, 111, 114, 109, 97, 108, 67, 111, 110,
			118, 101, 114, 116, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 91, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			67, 111, 110, 118, 101, 114, 116, 101, 114, 92,
			79, 99, 99, 108, 117, 115, 105, 111, 110, 77,
			101, 116, 97, 108, 108, 105, 99, 82, 111, 117,
			103, 104, 110, 101, 115, 115, 67, 111, 110, 118,
			101, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 72, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 67,
			111, 110, 118, 101, 114, 116, 101, 114, 92, 84,
			101, 120, 116, 117, 114, 101, 67, 111, 110, 118,
			101, 114, 116, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 71, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 69,
			120, 112, 111, 114, 116, 101, 114, 92, 73, 84,
			101, 120, 116, 117, 114, 101, 69, 120, 112, 111,
			114, 116, 101, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 73, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 71, 76, 84, 70, 92, 73,
			79, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			84, 101, 120, 116, 117, 114, 101, 92, 69, 120,
			112, 111, 114, 116, 101, 114, 92, 73, 84, 101,
			120, 116, 117, 114, 101, 83, 101, 114, 105, 97,
			108, 105, 122, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 79, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 71, 76, 84, 70, 92,
			73, 79, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 101, 120, 116, 117, 114, 101, 92, 69,
			120, 112, 111, 114, 116, 101, 114, 92, 82, 117,
			110, 116, 105, 109, 101, 84, 101, 120, 116, 117,
			114, 101, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 70, 92, 65, 115, 115, 101, 116, 115,
			92, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 92, 71, 76, 84, 70, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 84, 101,
			120, 116, 117, 114, 101, 92, 69, 120, 112, 111,
			114, 116, 101, 114, 92, 84, 101, 120, 116, 117,
			114, 101, 69, 120, 112, 111, 114, 116, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			73, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			71, 76, 84, 70, 92, 73, 79, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 84, 101, 120, 116,
			117, 114, 101, 92, 69, 120, 112, 111, 114, 116,
			101, 114, 92, 84, 101, 120, 116, 117, 114, 101,
			69, 120, 112, 111, 114, 116, 80, 97, 114, 97,
			109, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 79, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 68, 101, 115, 101, 114, 105,
			97, 108, 105, 122, 105, 110, 103, 84, 101, 120,
			116, 117, 114, 101, 73, 110, 102, 111, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 75, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 71, 76,
			84, 70, 92, 73, 79, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 84, 101, 120, 116, 117, 114,
			101, 92, 73, 109, 112, 111, 114, 116, 101, 114,
			92, 73, 84, 101, 120, 116, 117, 114, 101, 68,
			101, 115, 101, 114, 105, 97, 108, 105, 122, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 67, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 71, 76, 84, 70, 92, 73, 79, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 84, 101, 120,
			116, 117, 114, 101, 92, 73, 109, 112, 111, 114,
			116, 101, 114, 92, 83, 97, 109, 112, 108, 101,
			114, 80, 97, 114, 97, 109, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 72, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 84,
			101, 120, 116, 117, 114, 101, 68, 101, 115, 99,
			114, 105, 112, 116, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 75, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 84,
			101, 120, 116, 117, 114, 101, 68, 101, 115, 99,
			114, 105, 112, 116, 111, 114, 83, 101, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 69,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 92, 71,
			76, 84, 70, 92, 73, 79, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 84, 101, 120, 116, 117,
			114, 101, 92, 73, 109, 112, 111, 114, 116, 101,
			114, 92, 84, 101, 120, 116, 117, 114, 101, 70,
			97, 99, 116, 111, 114, 121, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 72, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 84,
			101, 120, 116, 117, 114, 101, 73, 109, 112, 111,
			114, 116, 78, 97, 109, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 79, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 71, 76, 84, 70,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 84, 101, 120, 116, 117, 114, 101, 92,
			73, 109, 112, 111, 114, 116, 101, 114, 92, 85,
			110, 105, 116, 121, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 68, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 71, 76, 84, 70, 92, 73, 79,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			101, 120, 116, 117, 114, 101, 92, 85, 116, 105,
			108, 92, 84, 101, 120, 116, 117, 114, 101, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 50,
			92, 65, 115, 115, 101, 116, 115, 92, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 92, 71,
			76, 84, 70, 92, 73, 79, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 116, 105, 108, 92,
			83, 121, 109, 98, 111, 108, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 63, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 73, 79, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 116, 105, 108, 92, 85, 110,
			105, 116, 121, 79, 98, 106, 101, 99, 116, 68,
			101, 115, 116, 114, 111, 121, 101, 114, 46, 99,
			115
		};
		result.TypesData = new byte[1185]
		{
			0, 0, 0, 0, 31, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 124, 65, 110, 105, 109,
			97, 116, 105, 111, 110, 67, 108, 105, 112, 70,
			97, 99, 116, 111, 114, 121, 0, 0, 0, 0,
			23, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 73, 65, 119, 97, 105, 116, 67, 97,
			108, 108, 101, 114, 0, 0, 0, 0, 26, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			73, 109, 109, 101, 100, 105, 97, 116, 101, 67,
			97, 108, 108, 101, 114, 0, 0, 0, 0, 33,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			124, 78, 101, 120, 116, 70, 114, 97, 109, 101,
			84, 97, 115, 107, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 0, 0, 0, 0, 56, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 46, 78,
			101, 120, 116, 70, 114, 97, 109, 101, 84, 97,
			115, 107, 83, 99, 104, 101, 100, 117, 108, 101,
			114, 124, 85, 110, 105, 116, 121, 76, 111, 111,
			112, 84, 97, 115, 107, 83, 99, 104, 101, 100,
			117, 108, 101, 114, 0, 0, 0, 0, 33, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			82, 117, 110, 116, 105, 109, 101, 79, 110, 108,
			121, 65, 119, 97, 105, 116, 67, 97, 108, 108,
			101, 114, 0, 0, 0, 0, 41, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 82, 117,
			110, 116, 105, 109, 101, 79, 110, 108, 121, 78,
			111, 84, 104, 114, 101, 97, 100, 65, 119, 97,
			105, 116, 67, 97, 108, 108, 101, 114, 0, 0,
			0, 0, 35, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 84, 105, 110, 121, 77, 97,
			110, 97, 103, 101, 100, 84, 97, 115, 107, 83,
			99, 104, 101, 100, 117, 108, 101, 114, 0, 0,
			0, 0, 43, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 73, 82, 101, 115, 112, 111,
			110, 115, 105, 98, 105, 108, 105, 116, 121, 70,
			111, 114, 68, 101, 115, 116, 114, 111, 121, 79,
			98, 106, 101, 99, 116, 115, 0, 0, 0, 0,
			29, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 77, 97, 116, 101, 114, 105, 97, 108,
			68, 101, 115, 99, 114, 105, 112, 116, 111, 114,
			0, 0, 0, 0, 26, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 124, 77, 97, 116, 101,
			114, 105, 97, 108, 70, 97, 99, 116, 111, 114,
			121, 0, 0, 0, 0, 43, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 46, 77, 97, 116,
			101, 114, 105, 97, 108, 70, 97, 99, 116, 111,
			114, 121, 124, 77, 97, 116, 101, 114, 105, 97,
			108, 76, 111, 97, 100, 73, 110, 102, 111, 0,
			0, 0, 0, 21, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 124, 80, 97, 116, 104, 79,
			98, 106, 101, 99, 116, 0, 0, 0, 0, 22,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			124, 83, 117, 98, 65, 115, 115, 101, 116, 75,
			101, 121, 0, 0, 0, 0, 26, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 78, 111,
			114, 109, 97, 108, 67, 111, 110, 118, 101, 114,
			116, 101, 114, 0, 0, 0, 0, 46, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 79,
			99, 99, 108, 117, 115, 105, 111, 110, 77, 101,
			116, 97, 108, 108, 105, 99, 82, 111, 117, 103,
			104, 110, 101, 115, 115, 67, 111, 110, 118, 101,
			114, 116, 101, 114, 0, 0, 0, 0, 27, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			84, 101, 120, 116, 117, 114, 101, 67, 111, 110,
			118, 101, 114, 116, 101, 114, 0, 0, 0, 0,
			27, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 73, 84, 101, 120, 116, 117, 114, 101,
			69, 120, 112, 111, 114, 116, 101, 114, 0, 0,
			0, 0, 29, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 124, 73, 84, 101, 120, 116, 117,
			114, 101, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 35, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 82, 117,
			110, 116, 105, 109, 101, 84, 101, 120, 116, 117,
			114, 101, 83, 101, 114, 105, 97, 108, 105, 122,
			101, 114, 0, 0, 0, 0, 26, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 124, 84, 101,
			120, 116, 117, 114, 101, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 29, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 84,
			101, 120, 116, 117, 114, 101, 69, 120, 112, 111,
			114, 116, 80, 97, 114, 97, 109, 0, 0, 0,
			0, 35, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 124, 68, 101, 115, 101, 114, 105, 97,
			108, 105, 122, 105, 110, 103, 84, 101, 120, 116,
			117, 114, 101, 73, 110, 102, 111, 0, 0, 0,
			0, 31, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 124, 73, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 0, 0, 0, 0, 23, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 83,
			97, 109, 112, 108, 101, 114, 80, 97, 114, 97,
			109, 0, 0, 0, 0, 28, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 124, 84, 101, 120,
			116, 117, 114, 101, 68, 101, 115, 99, 114, 105,
			112, 116, 111, 114, 0, 0, 0, 0, 31, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 124,
			84, 101, 120, 116, 117, 114, 101, 68, 101, 115,
			99, 114, 105, 112, 116, 111, 114, 83, 101, 116,
			0, 0, 0, 0, 25, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 124, 84, 101, 120, 116,
			117, 114, 101, 70, 97, 99, 116, 111, 114, 121,
			0, 0, 0, 0, 28, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 124, 84, 101, 120, 116,
			117, 114, 101, 73, 109, 112, 111, 114, 116, 78,
			97, 109, 101, 0, 0, 0, 0, 35, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 85,
			110, 105, 116, 121, 84, 101, 120, 116, 117, 114,
			101, 68, 101, 115, 101, 114, 105, 97, 108, 105,
			122, 101, 114, 0, 0, 0, 0, 28, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 124, 84,
			101, 120, 116, 117, 114, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			18, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 124, 83, 121, 109, 98, 111, 108, 115, 0,
			0, 0, 0, 31, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 124, 85, 110, 105, 116, 121,
			79, 98, 106, 101, 99, 116, 68, 101, 115, 116,
			114, 111, 121, 101, 114
		};
		result.TotalFiles = 31;
		result.TotalTypes = 33;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VRMShaders;

public class AnimationClipFactory : IResponsibilityForDestroyObjects, IDisposable
{
	private readonly IReadOnlyDictionary<SubAssetKey, AnimationClip> _externalClips;

	private readonly Dictionary<SubAssetKey, AnimationClip> _runtimeClips = new Dictionary<SubAssetKey, AnimationClip>();

	private readonly List<SubAssetKey> _loadedClipKeys = new List<SubAssetKey>();

	public IReadOnlyDictionary<SubAssetKey, AnimationClip> ExternalClips => _externalClips;

	public IReadOnlyDictionary<SubAssetKey, AnimationClip> RuntimeGeneratedClips => _runtimeClips;

	public IReadOnlyList<SubAssetKey> LoadedClipKeys => _loadedClipKeys;

	public AnimationClipFactory(IReadOnlyDictionary<SubAssetKey, AnimationClip> externalClips)
	{
		_externalClips = externalClips;
	}

	public void Dispose()
	{
		foreach (KeyValuePair<SubAssetKey, AnimationClip> runtimeClip in _runtimeClips)
		{
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)runtimeClip.Value);
		}
		_runtimeClips.Clear();
	}

	public void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take)
	{
		KeyValuePair<SubAssetKey, AnimationClip>[] array = _runtimeClips.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			KeyValuePair<SubAssetKey, AnimationClip> keyValuePair = array[i];
			var (key, obj) = (KeyValuePair<SubAssetKey, AnimationClip>)(ref keyValuePair);
			take(key, (Object)(object)obj);
			_runtimeClips.Remove(key);
		}
	}

	public AnimationClip GetAnimationClip(SubAssetKey key)
	{
		if (_externalClips.TryGetValue(key, out var value))
		{
			return value;
		}
		if (_runtimeClips.TryGetValue(key, out value))
		{
			return value;
		}
		return null;
	}

	public async Task<AnimationClip> LoadAnimationClipAsync(SubAssetKey key, Func<Task<AnimationClip>> loadAnimationClip)
	{
		if (!_loadedClipKeys.Contains(key))
		{
			_loadedClipKeys.Add(key);
		}
		AnimationClip animationClip = GetAnimationClip(key);
		if ((Object)(object)animationClip != (Object)null)
		{
			return animationClip;
		}
		animationClip = await loadAnimationClip();
		_runtimeClips.Add(key, animationClip);
		return animationClip;
	}
}
public interface IAwaitCaller
{
	Task NextFrame();

	Task Run(Action action);

	Task<T> Run<T>(Func<T> action);

	Task NextFrameIfTimedOut();
}
public sealed class ImmediateCaller : IAwaitCaller
{
	public Task NextFrame()
	{
		return Task.FromResult<object>(null);
	}

	public Task Run(Action action)
	{
		action();
		return Task.FromResult<object>(null);
	}

	public Task<T> Run<T>(Func<T> action)
	{
		return Task.FromResult(action());
	}

	public Task NextFrameIfTimedOut()
	{
		return NextFrame();
	}
}
internal sealed class NextFrameTaskScheduler
{
	private sealed class UnityLoopTaskScheduler : MonoBehaviour
	{
		private static UnityLoopTaskScheduler _instance;

		public static UnityLoopTaskScheduler Instance
		{
			get
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: Expected O, but got Unknown
				if ((Object)(object)_instance == (Object)null)
				{
					GameObject val = new GameObject("UniGLTF UnityThreadScheduler");
					Object.DontDestroyOnLoad((Object)val);
					_instance = val.AddComponent<UnityLoopTaskScheduler>();
				}
				return _instance;
			}
		}

		public TinyManagedTaskScheduler Scheduler { get; } = new TinyManagedTaskScheduler();


		private void Update()
		{
			Scheduler.ManagedUpdate();
		}
	}

	public bool IsSupported => Application.isPlaying;

	public NextFrameTaskScheduler()
	{
		if (!IsSupported)
		{
			throw new NotSupportedException("NextFrameTaskScheduler is supported at runtime only.");
		}
	}

	public bool Enqueue(Action action)
	{
		int currentFrame = Time.frameCount;
		UnityLoopTaskScheduler.Instance.Scheduler.Enqueue(action, () => Time.frameCount != currentFrame);
		return true;
	}
}
public sealed class RuntimeOnlyAwaitCaller : IAwaitCaller
{
	private readonly NextFrameTaskScheduler _scheduler;

	private readonly float _timeOutInSeconds;

	private float _lastTimeoutBaseTime;

	private bool LastTimeoutBaseTimeNeedsReset => _lastTimeoutBaseTime == 0f;

	public RuntimeOnlyAwaitCaller(float timeOutInSeconds = 0.001f)
	{
		_scheduler = new NextFrameTaskScheduler();
		_timeOutInSeconds = timeOutInSeconds;
		ResetLastTimeoutBaseTime();
	}

	public Task NextFrame()
	{
		ResetLastTimeoutBaseTime();
		TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
		_scheduler.Enqueue(delegate
		{
			tcs.SetResult(null);
		});
		return tcs.Task;
	}

	public Task Run(Action action)
	{
		return Task.Run(action);
	}

	public Task<T> Run<T>(Func<T> action)
	{
		return Task.Run(action);
	}

	public Task NextFrameIfTimedOut()
	{
		if (!CheckTimeout())
		{
			return Task.CompletedTask;
		}
		return NextFrame();
	}

	private void ResetLastTimeoutBaseTime()
	{
		_lastTimeoutBaseTime = 0f;
	}

	private bool CheckTimeout()
	{
		float realtimeSinceStartup = Time.realtimeSinceStartup;
		if (LastTimeoutBaseTimeNeedsReset)
		{
			_lastTimeoutBaseTime = realtimeSinceStartup;
		}
		return realtimeSinceStartup - _lastTimeoutBaseTime >= _timeOutInSeconds;
	}
}
public sealed class RuntimeOnlyNoThreadAwaitCaller : IAwaitCaller
{
	private readonly NextFrameTaskScheduler _scheduler;

	private readonly float _timeoutInSeconds;

	private float _lastTimeoutBaseTime;

	private bool LastTimeoutBaseTimeNeedsReset => _lastTimeoutBaseTime == 0f;

	public RuntimeOnlyNoThreadAwaitCaller(float timeoutInSeconds = 0.001f)
	{
		_scheduler = new NextFrameTaskScheduler();
		_timeoutInSeconds = timeoutInSeconds;
		ResetLastTimeoutBaseTime();
	}

	public Task NextFrame()
	{
		ResetLastTimeoutBaseTime();
		TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
		_scheduler.Enqueue(delegate
		{
			tcs.SetResult(null);
		});
		return tcs.Task;
	}

	public Task Run(Action action)
	{
		try
		{
			action();
			return Task.FromResult<object>(null);
		}
		catch (Exception exception)
		{
			return Task.FromException(exception);
		}
	}

	public Task<T> Run<T>(Func<T> action)
	{
		try
		{
			return Task.FromResult(action());
		}
		catch (Exception exception)
		{
			return Task.FromException<T>(exception);
		}
	}

	public Task NextFrameIfTimedOut()
	{
		if (!CheckTimeout())
		{
			return Task.CompletedTask;
		}
		return NextFrame();
	}

	private void ResetLastTimeoutBaseTime()
	{
		_lastTimeoutBaseTime = 0f;
	}

	private bool CheckTimeout()
	{
		float realtimeSinceStartup = Time.realtimeSinceStartup;
		if (LastTimeoutBaseTimeNeedsReset)
		{
			_lastTimeoutBaseTime = realtimeSinceStartup;
		}
		return realtimeSinceStartup - _lastTimeoutBaseTime >= _timeoutInSeconds;
	}
}
internal sealed class TinyManagedTaskScheduler
{
	private readonly ConcurrentQueue<(Action, Func<bool>)> _continuationQueue = new ConcurrentQueue<(Action, Func<bool>)>();

	private readonly ConcurrentQueue<(Action, Func<bool>)> _temporaryQueue = new ConcurrentQueue<(Action, Func<bool>)>();

	public void ManagedUpdate()
	{
		(Action, Func<bool>) result;
		while (_continuationQueue.TryDequeue(out result))
		{
			(Action, Func<bool>) tuple = result;
			var (action, _) = tuple;
			if (tuple.Item2())
			{
				action();
			}
			else
			{
				_temporaryQueue.Enqueue(result);
			}
		}
		(Action, Func<bool>) result2;
		while (_temporaryQueue.TryDequeue(out result2))
		{
			_continuationQueue.Enqueue(result2);
		}
	}

	public void Enqueue(Action continuation, Func<bool> canExecute)
	{
		_continuationQueue.Enqueue((continuation, canExecute));
	}
}
public enum ColorSpace
{
	sRGB,
	Linear
}
public delegate void TakeResponsibilityForDestroyObjectFunc(SubAssetKey key, Object obj);
public interface IResponsibilityForDestroyObjects : IDisposable
{
	void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take);
}
public sealed class MaterialDescriptor
{
	public readonly string Name;

	public readonly Shader Shader;

	public readonly int? RenderQueue;

	public readonly IReadOnlyDictionary<string, TextureDescriptor> TextureSlots;

	public readonly IReadOnlyDictionary<string, float> FloatValues;

	public readonly IReadOnlyDictionary<string, Color> Colors;

	public readonly IReadOnlyDictionary<string, Vector4> Vectors;

	public readonly IReadOnlyList<Action<Material>> Actions;

	public SubAssetKey SubAssetKey => new SubAssetKey(SubAssetKey.MaterialType, Name);

	public MaterialDescriptor(string name, Shader shader, int? renderQueue, IReadOnlyDictionary<string, TextureDescriptor> textureSlots, IReadOnlyDictionary<string, float> floatValues, IReadOnlyDictionary<string, Color> colors, IReadOnlyDictionary<string, Vector4> vectors, IReadOnlyList<Action<Material>> actions)
	{
		Name = name;
		Shader = shader;
		RenderQueue = renderQueue;
		TextureSlots = textureSlots;
		FloatValues = floatValues;
		Colors = colors;
		Vectors = vectors;
		Actions = actions;
	}
}
public delegate Task<Texture> GetTextureAsyncFunc(TextureDescriptor texDesc, IAwaitCaller awaitCaller);
public class MaterialFactory : IResponsibilityForDestroyObjects, IDisposable
{
	public struct MaterialLoadInfo
	{
		public SubAssetKey Key;

		public readonly Material Asset;

		public readonly bool UseExternal;

		public bool IsSubAsset => !UseExternal;

		public MaterialLoadInfo(SubAssetKey key, Material asset, bool useExternal)
		{
			Key = key;
			Asset = asset;
			UseExternal = useExternal;
		}
	}

	private readonly IReadOnlyDictionary<SubAssetKey, Material> m_externalMap;

	private List<MaterialLoadInfo> m_materials = new List<MaterialLoadInfo>();

	public IReadOnlyList<MaterialLoadInfo> Materials => m_materials;

	public MaterialFactory(IReadOnlyDictionary<SubAssetKey, Material> externalMaterialMap)
	{
		m_externalMap = externalMaterialMap;
	}

	private void Remove(Material material)
	{
		int num = m_materials.FindIndex((MaterialLoadInfo x) => (Object)(object)x.Asset == (Object)(object)material);
		if (num >= 0)
		{
			m_materials.RemoveAt(num);
		}
	}

	public void Dispose()
	{
		foreach (MaterialLoadInfo material in m_materials)
		{
			if (!material.UseExternal)
			{
				UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)material.Asset);
			}
		}
	}

	public void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take)
	{
		MaterialLoadInfo[] array = m_materials.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			MaterialLoadInfo item = array[i];
			if (!item.UseExternal)
			{
				take(item.Key, (Object)(object)item.Asset);
				m_materials.Remove(item);
			}
		}
	}

	public Material GetMaterial(int index)
	{
		if (index < 0)
		{
			return null;
		}
		if (index >= m_materials.Count)
		{
			return null;
		}
		return m_materials[index].Asset;
	}

	public async Task<Material> LoadAsync(MaterialDescriptor matDesc, GetTextureAsyncFunc getTexture, IAwaitCaller awaitCaller)
	{
		if (m_externalMap.TryGetValue(matDesc.SubAssetKey, out var material2))
		{
			m_materials.Add(new MaterialLoadInfo(matDesc.SubAssetKey, material2, useExternal: true));
			return material2;
		}
		if (getTexture == null)
		{
			getTexture = (TextureDescriptor x, IAwaitCaller y) => Task.FromResult<Texture>(null);
		}
		if ((Object)(object)matDesc.Shader == (Object)null)
		{
			throw new ArgumentNullException("Shader");
		}
		material2 = new Material(matDesc.Shader);
		((Object)material2).name = matDesc.SubAssetKey.Name;
		foreach (KeyValuePair<string, TextureDescriptor> kv in matDesc.TextureSlots)
		{
			Texture val = await getTexture(kv.Value, awaitCaller);
			if ((Object)(object)val != (Object)null)
			{
				material2.SetTexture(kv.Key, val);
				SetTextureOffsetAndScale(material2, kv.Key, kv.Value.Offset, kv.Value.Scale);
			}
		}
		foreach (KeyValuePair<string, Color> color in matDesc.Colors)
		{
			material2.SetColor(color.Key, color.Value);
		}
		foreach (KeyValuePair<string, Vector4> vector in matDesc.Vectors)
		{
			material2.SetVector(vector.Key, vector.Value);
		}
		foreach (KeyValuePair<string, float> floatValue in matDesc.FloatValues)
		{
			material2.SetFloat(floatValue.Key, floatValue.Value);
		}
		if (matDesc.RenderQueue.HasValue)
		{
			material2.renderQueue = matDesc.RenderQueue.Value;
		}
		foreach (Action<Material> action in matDesc.Actions)
		{
			action(material2);
		}
		m_materials.Add(new MaterialLoadInfo(matDesc.SubAssetKey, material2, useExternal: false));
		return material2;
	}

	public static void SetTextureOffsetAndScale(Material material, string propertyName, Vector2 offset, Vector2 scale)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		material.SetTextureOffset(propertyName, offset);
		material.SetTextureScale(propertyName, scale);
	}
}
public readonly struct PathObject
{
	public string FullPath { get; }

	public string Extension => Path.GetExtension(FullPath);

	public string Stem => Path.GetFileNameWithoutExtension(FullPath);

	public PathObject Parent => FromFullPath(Path.GetDirectoryName(FullPath));

	public bool IsUnderAsset => IsDescendantOf(UnityAssets);

	public bool Exists => File.Exists(FullPath);

	public string UnityAssetPath
	{
		get
		{
			PathObject unityRoot = UnityRoot;
			if (!IsDescendantOf(UnityRoot))
			{
				throw new ArgumentException(FullPath + " is not under UnityAssetPath");
			}
			return FullPath.Substring(unityRoot.FullPath.Length + 1);
		}
	}

	public static PathObject UnityRoot { get; } = FromFullPath(Path.GetDirectoryName(Application.dataPath));


	public static PathObject UnityAssets { get; } = UnityRoot.Child("Assets/");


	private PathObject(string src)
	{
		if (string.IsNullOrEmpty(src))
		{
			throw new ArgumentNullException();
		}
		src = Path.GetFullPath(src).Replace('\\', '/');
		if (src.Length > 1 && src[src.Length - 1] == '/')
		{
			src = src.Substring(0, src.Length - 1);
		}
		if (src[0] == '/')
		{
			FullPath = src;
			return;
		}
		if (src.Length >= 3 && src[1] == ':' && src[2] == '/')
		{
			FullPath = src;
			return;
		}
		throw new ArgumentException(src + " is not fullpath");
	}

	public override string ToString()
	{
		try
		{
			string unityAssetPath = UnityAssetPath;
			return "<unity:" + unityAssetPath + ">";
		}
		catch (ArgumentException)
		{
			return "<file:" + FullPath + ">";
		}
	}

	public static PathObject FromFullPath(string src)
	{
		return new PathObject(src);
	}

	public static PathObject FromUnityAssetPath(string src)
	{
		return UnityRoot.Child(src);
	}

	public static bool TryGetFromEnvironmentVariable(string key, out PathObject dst)
	{
		string environmentVariable = Environment.GetEnvironmentVariable(key);
		if (string.IsNullOrEmpty(environmentVariable))
		{
			dst = default(PathObject);
			return false;
		}
		dst = FromFullPath(environmentVariable);
		return true;
	}

	public PathObject Child(string child)
	{
		return FromFullPath(Path.Combine(FullPath, child));
	}

	public bool IsDescendantOf(PathObject ascendant)
	{
		if (!FullPath.StartsWith(ascendant.FullPath))
		{
			return false;
		}
		if (FullPath.Length <= ascendant.FullPath.Length || FullPath[ascendant.FullPath.Length] != '/')
		{
			return false;
		}
		return true;
	}

	public byte[] ReadAllBytes()
	{
		return File.ReadAllBytes(FullPath);
	}

	public void WriteAllBytes(byte[] data)
	{
		File.WriteAllBytes(FullPath, data);
	}
}
public readonly struct SubAssetKey : IEquatable<SubAssetKey>
{
	public static readonly Type TextureType = typeof(Texture);

	public static readonly Type MaterialType = typeof(Material);

	public readonly Type Type;

	public readonly string Name;

	public SubAssetKey(Texture obj)
	{
		if ((Object)(object)obj == (Object)null || string.IsNullOrEmpty(((Object)obj).name))
		{
			throw new ArgumentNullException();
		}
		Type = TextureType;
		Name = ((Object)obj).name;
	}

	public SubAssetKey(Material obj)
	{
		if ((Object)(object)obj == (Object)null || string.IsNullOrEmpty(((Object)obj).name))
		{
			throw new ArgumentNullException();
		}
		Type = MaterialType;
		Name = ((Object)obj).name;
	}

	public static SubAssetKey Create<T>(T obj) where T : Object
	{
		return new SubAssetKey(typeof(T), ((Object)obj).name);
	}

	public SubAssetKey(Type type, string name)
	{
		if (type == null)
		{
			throw new ArgumentNullException("type");
		}
		if (string.IsNullOrEmpty(name))
		{
			throw new ArgumentNullException("name");
		}
		if (!type.IsSubclassOf(typeof(Object)))
		{
			throw new ArgumentException($"{type}:{name}");
		}
		if (type.IsSubclassOf(TextureType))
		{
			type = TextureType;
		}
		Type = type;
		Name = name;
	}

	public override string ToString()
	{
		return $"{Type}:{Name}";
	}

	public override bool Equals(object obj)
	{
		if (obj is SubAssetKey subAssetKey)
		{
			return this == subAssetKey;
		}
		return true;
	}

	public bool Equals(SubAssetKey other)
	{
		if (Type == other.Type)
		{
			return Name == other.Name;
		}
		return false;
	}

	public static bool operator ==(SubAssetKey l, SubAssetKey r)
	{
		return l.Equals(r);
	}

	public static bool operator !=(SubAssetKey l, SubAssetKey r)
	{
		return !(l == r);
	}

	public override int GetHashCode()
	{
		return Name.GetHashCode();
	}
}
public static class NormalConverter
{
	private static Material _exporter;

	private static Material Exporter
	{
		get
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			if ((Object)(object)_exporter == (Object)null)
			{
				_exporter = new Material(Shader.Find("Hidden/UniGLTF/NormalMapExporter"));
			}
			return _exporter;
		}
	}

	public static Texture2D Export(Texture texture)
	{
		return TextureConverter.CopyTexture(texture, ColorSpace.Linear, dstNeedsAlpha: false, Exporter);
	}
}
public static class OcclusionMetallicRoughnessConverter
{
	private static Material _importer;

	private static Material _exporter;

	private static Material Importer
	{
		get
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			if ((Object)(object)_importer == (Object)null)
			{
				_importer = new Material(Shader.Find("Hidden/UniGLTF/StandardMapImporter"));
			}
			return _importer;
		}
	}

	private static Material Exporter
	{
		get
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			if ((Object)(object)_exporter == (Object)null)
			{
				_exporter = new Material(Shader.Find("Hidden/UniGLTF/StandardMapExporter"));
			}
			return _exporter;
		}
	}

	public static Texture2D Import(Texture2D metallicRoughnessTexture, float metallicFactor, float roughnessFactor, Texture2D occlusionTexture, bool isLegacySquaredRoughness)
	{
		if ((Object)(object)metallicRoughnessTexture == (Object)null && (Object)(object)occlusionTexture == (Object)null)
		{
			throw new ArgumentNullException("no texture");
		}
		Texture2D val = (((Object)(object)metallicRoughnessTexture != (Object)null) ? metallicRoughnessTexture : occlusionTexture);
		Importer.mainTexture = (Texture)(object)val;
		Importer.SetTexture("_GltfMetallicRoughnessTexture", (Texture)(object)metallicRoughnessTexture);
		Importer.SetTexture("_GltfOcclusionTexture", (Texture)(object)occlusionTexture);
		Importer.SetFloat("_GltfMetallicFactor", metallicFactor);
		Importer.SetFloat("_GltfRoughnessFactor", roughnessFactor);
		Importer.SetFloat("_IsLegacySquaredRoughness", (float)(isLegacySquaredRoughness ? 1 : 0));
		Texture2D result = TextureConverter.CopyTexture((Texture)(object)val, ColorSpace.Linear, dstNeedsAlpha: true, Importer);
		Importer.mainTexture = null;
		Importer.SetTexture("_GltfMetallicRoughnessTexture", (Texture)null);
		Importer.SetTexture("_GltfOcclusionTexture", (Texture)null);
		Importer.SetFloat("_GltfMetallicFactor", 0f);
		Importer.SetFloat("_GltfRoughnessFactor", 0f);
		Importer.SetFloat("_IsLegacySquaredRoughness", 0f);
		return result;
	}

	public static Texture2D Export(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture)
	{
		if ((Object)(object)metallicSmoothTexture == (Object)null && (Object)(object)occlusionTexture == (Object)null)
		{
			throw new ArgumentNullException("no texture");
		}
		Texture val = (((Object)(object)metallicSmoothTexture != (Object)null) ? metallicSmoothTexture : occlusionTexture);
		Exporter.mainTexture = val;
		Exporter.SetTexture("_UnityMetallicSmoothTexture", metallicSmoothTexture);
		Exporter.SetTexture("_UnityOcclusionTexture", occlusionTexture);
		Exporter.SetFloat("_UnitySmoothness", smoothness);
		Texture2D result = TextureConverter.CopyTexture(val, ColorSpace.Linear, dstNeedsAlpha: true, Exporter);
		Exporter.mainTexture = null;
		Exporter.SetTexture("_UnityMetallicSmoothTexture", (Texture)null);
		Exporter.SetTexture("_UnityOcclusionTexture", (Texture)null);
		Exporter.SetFloat("_UnitySmoothness", 0f);
		return result;
	}

	public static Color32 ExportPixel(Color32 metallicSmooth, float smoothness, Color32 occlusion)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		Color32 result = default(Color32);
		result.r = occlusion.g;
		result.g = (byte)(255f - (float)(int)metallicSmooth.a * smoothness);
		result.b = metallicSmooth.r;
		result.a = byte.MaxValue;
		return result;
	}

	private static void DestroyTexture(Texture obj)
	{
		if (Application.isPlaying)
		{
			Object.Destroy((Object)(object)obj);
		}
		else
		{
			Object.DestroyImmediate((Object)(object)obj);
		}
	}
}
public static class TextureConverter
{
	public static readonly TextureFormat WithAlphaFormat = (TextureFormat)5;

	public static readonly TextureFormat WithoutAlphaFormat = (TextureFormat)3;

	public static Texture2D CreateEmptyTextureWithSettings(Texture src, ColorSpace dstColorSpace, bool dstNeedsAlpha)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0003: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: 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)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: 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_006a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0082: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Expected O, but got Unknown
		TextureFormat val = (dstNeedsAlpha ? WithAlphaFormat : WithoutAlphaFormat);
		return new Texture2D(src.width, src.height, val, src.HasMipMap(), dstColorSpace == ColorSpace.Linear)
		{
			name = ((Object)src).name,
			anisoLevel = src.anisoLevel,
			filterMode = src.filterMode,
			mipMapBias = src.mipMapBias,
			wrapMode = src.wrapMode,
			wrapModeU = src.wrapModeU,
			wrapModeV = src.wrapModeV,
			wrapModeW = src.wrapModeW
		};
	}

	public static Texture2D CopyTexture(Texture src, ColorSpace dstColorSpace, bool dstNeedsAlpha, Material material)
	{
		//IL_000a: 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_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Expected O, but got Unknown
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: Unknown result type (might be due to invalid IL or missing references)
		RenderTextureReadWrite val = (RenderTextureReadWrite)(dstColorSpace switch
		{
			ColorSpace.sRGB => 2, 
			ColorSpace.Linear => 1, 
			_ => throw new ArgumentOutOfRangeException("dstColorSpace", dstColorSpace, null), 
		});
		RenderTexture val2 = new RenderTexture(src.width, src.height, 0, (RenderTextureFormat)0, val);
		if ((Object)(object)material != (Object)null)
		{
			Graphics.Blit(src, val2, material);
		}
		else
		{
			Graphics.Blit(src, val2);
		}
		Texture2D obj = CreateEmptyTextureWithSettings(src, dstColorSpace, dstNeedsAlpha);
		obj.ReadPixels(new Rect(0f, 0f, (float)src.width, (float)src.height), 0, 0);
		obj.Apply();
		RenderTexture.active = null;
		if (Application.isEditor)
		{
			Object.DestroyImmediate((Object)(object)val2);
			return obj;
		}
		Object.Destroy((Object)(object)val2);
		return obj;
	}
}
public interface ITextureExporter : IDisposable
{
	int RegisterExportingAsSRgb(Texture src, bool needsAlpha);

	int RegisterExportingAsLinear(Texture src, bool needsAlpha);

	int RegisterExportingAsCombinedGltfPbrParameterTextureFromUnityStandardTextures(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture);

	int RegisterExportingAsNormal(Texture src);
}
public interface ITextureSerializer
{
	bool CanExportAsEditorAssetFile(Texture texture, ColorSpace exportColorSpace);

	(byte[] bytes, string mime) ExportBytesWithMime(Texture2D texture, ColorSpace exportColorSpace);

	void ModifyTextureAssetBeforeExporting(Texture texture);
}
public sealed class RuntimeTextureSerializer : ITextureSerializer
{
	public bool CanExportAsEditorAssetFile(Texture texture, ColorSpace exportColorSpace)
	{
		return false;
	}

	public (byte[] bytes, string mime) ExportBytesWithMime(Texture2D texture, ColorSpace exportColorSpace)
	{
		try
		{
			byte[] array = ImageConversion.EncodeToPNG(texture);
			if (array != null)
			{
				return (array, "image/png");
			}
			return CopyTextureAndGetBytesWithMime(texture, exportColorSpace);
		}
		catch (ArgumentException ex)
		{
			Debug.LogWarning((object)ex);
			return CopyTextureAndGetBytesWithMime(texture, exportColorSpace);
		}
	}

	public void ModifyTextureAssetBeforeExporting(Texture texture)
	{
	}

	private static (byte[] bytes, string mime) CopyTextureAndGetBytesWithMime(Texture2D texture, ColorSpace colorSpace)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Invalid comparison between Unknown and I4
		bool dstNeedsAlpha = (int)texture.format != 3;
		Texture2D val = TextureConverter.CopyTexture((Texture)(object)texture, colorSpace, dstNeedsAlpha, null);
		byte[] item = ImageConversion.EncodeToPNG(val);
		if (Application.isPlaying)
		{
			Object.Destroy((Object)(object)val);
		}
		else
		{
			Object.DestroyImmediate((Object)(object)val);
		}
		return (item, "image/png");
	}
}
public sealed class TextureExporter : ITextureExporter, IDisposable
{
	private readonly ITextureSerializer _textureSerializer;

	private readonly List<TextureExportParam> _exportingList = new List<TextureExportParam>();

	private readonly List<Texture2D> _disposables = new List<Texture2D>();

	public TextureExporter(ITextureSerializer textureSerializer)
	{
		_textureSerializer = textureSerializer;
	}

	public void Dispose()
	{
		foreach (Texture2D disposable in _disposables)
		{
			if (Application.isEditor)
			{
				Object.DestroyImmediate((Object)(object)disposable);
			}
			else
			{
				Object.Destroy((Object)(object)disposable);
			}
		}
	}

	private void PushDisposable(Texture2D disposable)
	{
		_disposables.Add(disposable);
	}

	public List<(Texture2D, ColorSpace)> Export()
	{
		List<(Texture2D, ColorSpace)> list = new List<(Texture2D, ColorSpace)>();
		for (int i = 0; i < _exportingList.Count; i++)
		{
			TextureExportParam textureExportParam = _exportingList[i];
			(Texture2D, bool) tuple = textureExportParam.Creator();
			var (val, _) = tuple;
			if (tuple.Item2)
			{
				PushDisposable(val);
			}
			list.Add((val, textureExportParam.ExportColorSpace));
		}
		return list;
	}

	public int RegisterExportingAsSRgb(Texture src, bool needsAlpha)
	{
		return RegisterExportingSimple(src, needsAlpha, isLinear: false);
	}

	public int RegisterExportingAsLinear(Texture src, bool needsAlpha)
	{
		return RegisterExportingSimple(src, needsAlpha, isLinear: true);
	}

	private int RegisterExportingSimple(Texture src, bool needsAlpha, bool isLinear)
	{
		if ((Object)(object)src == (Object)null)
		{
			return -1;
		}
		int exportType = (isLinear ? 1 : 0);
		ColorSpace colorSpace = (isLinear ? ColorSpace.Linear : ColorSpace.sRGB);
		TextureExportParam textureExportParam = new TextureExportParam((TextureExportTypes)exportType, colorSpace, src, null, 0f, needsAlpha, () => ConvertTextureSimple(src, needsAlpha, colorSpace));
		if (TryGetExistsParam(textureExportParam, out var existsIdx))
		{
			TextureExportParam textureExportParam2 = _exportingList[existsIdx];
			if (needsAlpha && !textureExportParam2.NeedsAlpha)
			{
				_exportingList[existsIdx] = textureExportParam;
				return existsIdx;
			}
			return existsIdx;
		}
		_exportingList.Add(textureExportParam);
		return _exportingList.Count - 1;
	}

	public int RegisterExportingAsCombinedGltfPbrParameterTextureFromUnityStandardTextures(Texture metallicSmoothTexture, float smoothness, Texture occlusionTexture)
	{
		if ((Object)(object)metallicSmoothTexture == (Object)null && (Object)(object)occlusionTexture == (Object)null)
		{
			return -1;
		}
		TextureExportParam textureExportParam = new TextureExportParam(TextureExportTypes.OcclusionMetallicRoughness, ColorSpace.Linear, metallicSmoothTexture, occlusionTexture, smoothness, needsAlpha: false, delegate
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(metallicSmoothTexture);
			_textureSerializer.ModifyTextureAssetBeforeExporting(occlusionTexture);
			return (OcclusionMetallicRoughnessConverter.Export(metallicSmoothTexture, smoothness, occlusionTexture), true);
		});
		if (TryGetExistsParam(textureExportParam, out var existsIdx))
		{
			return existsIdx;
		}
		_exportingList.Add(textureExportParam);
		return _exportingList.Count - 1;
	}

	public int RegisterExportingAsNormal(Texture src)
	{
		if ((Object)(object)src == (Object)null)
		{
			return -1;
		}
		TextureExportParam textureExportParam = new TextureExportParam(TextureExportTypes.Normal, ColorSpace.Linear, src, null, 0f, needsAlpha: false, delegate
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(src);
			return (NormalConverter.Export(src), true);
		});
		if (TryGetExistsParam(textureExportParam, out var existsIdx))
		{
			return existsIdx;
		}
		_exportingList.Add(textureExportParam);
		return _exportingList.Count - 1;
	}

	private (Texture2D, bool IsDisposable) ConvertTextureSimple(Texture src, bool needsAlpha, ColorSpace exportColorSpace)
	{
		Texture2D val = (Texture2D)(object)((src is Texture2D) ? src : null);
		bool item = false;
		if (_textureSerializer.CanExportAsEditorAssetFile((Texture)(object)val, exportColorSpace))
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(src);
		}
		else
		{
			_textureSerializer.ModifyTextureAssetBeforeExporting(src);
			val = TextureConverter.CopyTexture(src, exportColorSpace, needsAlpha, null);
			item = true;
		}
		return (val, item);
	}

	private bool TryGetExistsParam(TextureExportParam param, out int existsIdx)
	{
		existsIdx = _exportingList.FindIndex(param.EqualsAsKey);
		return existsIdx != -1;
	}
}
internal sealed class TextureExportParam
{
	public TextureExportTypes ExportType { get; }

	public ColorSpace ExportColorSpace { get; }

	public Texture PrimaryTexture { get; }

	public Texture SecondaryTexture { get; }

	public float OptionFactor { get; }

	public bool NeedsAlpha { get; set; }

	public Func<(Texture2D, bool IsDisposable)> Creator { get; set; }

	public TextureExportParam(TextureExportTypes exportType, ColorSpace exportColorSpace, Texture primaryTexture, Texture secondaryTexture, float optionFactor, bool needsAlpha, Func<(Texture2D, bool IsDisposable)> creator)
	{
		ExportType = exportType;
		ExportColorSpace = exportColorSpace;
		PrimaryTexture = primaryTexture;
		SecondaryTexture = secondaryTexture;
		OptionFactor = optionFactor;
		NeedsAlpha = needsAlpha;
		Creator = creator;
	}

	public bool EqualsAsKey(TextureExportParam other)
	{
		if (ExportType != other.ExportType)
		{
			return false;
		}
		switch (ExportType)
		{
		case TextureExportTypes.Srgb:
		case TextureExportTypes.Linear:
		case TextureExportTypes.Normal:
			return (Object)(object)PrimaryTexture == (Object)(object)other.PrimaryTexture;
		case TextureExportTypes.OcclusionMetallicRoughness:
			if ((Object)(object)PrimaryTexture == (Object)(object)other.PrimaryTexture)
			{
				return (Object)(object)SecondaryTexture == (Object)(object)other.SecondaryTexture;
			}
			return false;
		default:
			throw new ArgumentOutOfRangeException();
		}
	}
}
internal enum TextureExportTypes
{
	Srgb,
	Linear,
	OcclusionMetallicRoughness,
	Normal
}
public sealed class DeserializingTextureInfo
{
	public byte[] ImageData { get; }

	public string DataMimeType { get; }

	public ColorSpace ColorSpace { get; }

	public bool UseMipmap { get; }

	public FilterMode FilterMode { get; }

	public TextureWrapMode WrapModeU { get; }

	public TextureWrapMode WrapModeV { get; }

	public TextureImportTypes ImportTypes { get; }

	public DeserializingTextureInfo(byte[] imageData, string dataMimeType, ColorSpace colorSpace, bool useMipmap, FilterMode filterMode, TextureWrapMode wrapModeU, TextureWrapMode wrapModeV)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		ImageData = imageData;
		DataMimeType = dataMimeType;
		ColorSpace = colorSpace;
		UseMipmap = useMipmap;
		FilterMode = filterMode;
		WrapModeU = wrapModeU;
		WrapModeV = wrapModeV;
	}

	public DeserializingTextureInfo(byte[] imageData, string dataMimeType, ColorSpace colorSpace, SamplerParam samplerParam, TextureImportTypes importTypes)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: 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_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		ImageData = imageData;
		DataMimeType = dataMimeType;
		ColorSpace = colorSpace;
		UseMipmap = samplerParam.EnableMipMap;
		FilterMode = samplerParam.FilterMode;
		WrapModeU = samplerParam.WrapModesU;
		WrapModeV = samplerParam.WrapModesV;
		ImportTypes = importTypes;
	}
}
public interface ITextureDeserializer
{
	Task<Texture2D> LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller);
}
public readonly struct SamplerParam
{
	public TextureWrapMode WrapModesU { get; }

	public TextureWrapMode WrapModesV { get; }

	public FilterMode FilterMode { get; }

	public bool EnableMipMap { get; }

	public static SamplerParam Default => new SamplerParam((TextureWrapMode)0, (TextureWrapMode)0, (FilterMode)1, enableMipMap: true);

	public SamplerParam(TextureWrapMode wrapModesU, TextureWrapMode wrapModesV, FilterMode filterMode, bool enableMipMap)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		WrapModesU = wrapModesU;
		WrapModesV = wrapModesV;
		FilterMode = filterMode;
		EnableMipMap = enableMipMap;
	}
}
public delegate Task<(byte[] binary, string mimeType)?> GetTextureBytesAsync();
public readonly struct TextureDescriptor
{
	public readonly string UnityObjectName;

	public readonly Vector2 Offset;

	public readonly Vector2 Scale;

	public readonly SamplerParam Sampler;

	public readonly TextureImportTypes TextureType;

	public readonly float MetallicFactor;

	public readonly float RoughnessFactor;

	public readonly GetTextureBytesAsync Index0;

	public readonly GetTextureBytesAsync Index1;

	public readonly GetTextureBytesAsync Index2;

	public readonly GetTextureBytesAsync Index3;

	public readonly GetTextureBytesAsync Index4;

	public readonly GetTextureBytesAsync Index5;

	public SubAssetKey SubAssetKey => new SubAssetKey(SubAssetKey.TextureType, UnityObjectName);

	public TextureDescriptor(string name, Vector2 offset, Vector2 scale, SamplerParam sampler, TextureImportTypes textureType, float metallicFactor, float roughnessFactor, GetTextureBytesAsync i0, GetTextureBytesAsync i1, GetTextureBytesAsync i2, GetTextureBytesAsync i3, GetTextureBytesAsync i4, GetTextureBytesAsync i5)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		if (string.IsNullOrEmpty(name))
		{
			throw new ArgumentNullException("name");
		}
		UnityObjectName = name;
		Offset = offset;
		Scale = scale;
		Sampler = sampler;
		TextureType = textureType;
		MetallicFactor = metallicFactor;
		RoughnessFactor = roughnessFactor;
		Index0 = i0;
		Index1 = i1;
		Index2 = i2;
		Index3 = i3;
		Index4 = i4;
		Index5 = i5;
	}
}
public sealed class TextureDescriptorSet
{
	private readonly Dictionary<SubAssetKey, TextureDescriptor> _texDescDict = new Dictionary<SubAssetKey, TextureDescriptor>();

	public void Add(TextureDescriptor texDesc)
	{
		if (!_texDescDict.ContainsKey(texDesc.SubAssetKey))
		{
			_texDescDict.Add(texDesc.SubAssetKey, texDesc);
		}
	}

	public IEnumerable<TextureDescriptor> GetEnumerable()
	{
		foreach (KeyValuePair<SubAssetKey, TextureDescriptor> item in _texDescDict)
		{
			yield return item.Value;
		}
	}
}
public class TextureFactory : IResponsibilityForDestroyObjects, IDisposable
{
	private readonly IReadOnlyDictionary<SubAssetKey, Texture> _externalMap;

	private readonly bool _isLegacySquaredRoughness;

	private readonly Dictionary<SubAssetKey, Texture> _textureCache = new Dictionary<SubAssetKey, Texture>();

	public ITextureDeserializer TextureDeserializer { get; }

	public IReadOnlyDictionary<SubAssetKey, Texture> ConvertedTextures => _textureCache;

	public IReadOnlyDictionary<SubAssetKey, Texture> ExternalTextures => _externalMap;

	public TextureFactory(ITextureDeserializer textureDeserializer, IReadOnlyDictionary<SubAssetKey, Texture> externalTextures, bool isLegacySquaredRoughness)
	{
		TextureDeserializer = textureDeserializer;
		_externalMap = externalTextures;
		_isLegacySquaredRoughness = isLegacySquaredRoughness;
	}

	public void Dispose()
	{
		_textureCache.Clear();
	}

	public void TransferOwnership(TakeResponsibilityForDestroyObjectFunc take)
	{
		KeyValuePair<SubAssetKey, Texture>[] array = _textureCache.ToArray();
		for (int i = 0; i < array.Length; i++)
		{
			KeyValuePair<SubAssetKey, Texture> keyValuePair = array[i];
			var (key, obj) = (KeyValuePair<SubAssetKey, Texture>)(ref keyValuePair);
			take(key, (Object)(object)obj);
			_textureCache.Remove(key);
		}
	}

	public async Task<Texture> GetTextureAsync(TextureDescriptor texDesc, IAwaitCaller awaitCaller)
	{
		SubAssetKey subAssetKey = texDesc.SubAssetKey;
		if (_externalMap != null && _externalMap.TryGetValue(subAssetKey, out var value))
		{
			return value;
		}
		if (_textureCache.TryGetValue(subAssetKey, out var value2))
		{
			return value2;
		}
		switch (texDesc.TextureType)
		{
		case TextureImportTypes.NormalMap:
		{
			(byte[], string)? tuple2 = await texDesc.Index0();
			Texture2D val2 = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(tuple2?.Item1, tuple2?.Item2, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			((Object)val2).name = subAssetKey.Name;
			_textureCache.Add(subAssetKey, (Texture)(object)val2);
			return (Texture)(object)val2;
		}
		case TextureImportTypes.StandardMap:
		{
			Texture2D metallicRoughnessTexture = null;
			Texture2D occlusionTexture = null;
			if (texDesc.Index0 != null)
			{
				(byte[], string)? tuple4 = await texDesc.Index0();
				metallicRoughnessTexture = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(tuple4?.Item1, tuple4?.Item2, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			}
			if (texDesc.Index1 != null)
			{
				(byte[], string)? tuple5 = await texDesc.Index1();
				occlusionTexture = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(tuple5?.Item1, tuple5?.Item2, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			}
			Texture2D val4 = OcclusionMetallicRoughnessConverter.Import(metallicRoughnessTexture, texDesc.MetallicFactor, texDesc.RoughnessFactor, occlusionTexture, _isLegacySquaredRoughness);
			((Object)val4).name = subAssetKey.Name;
			val4.SetSampler(in texDesc.Sampler);
			_textureCache.Add(subAssetKey, (Texture)(object)val4);
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)metallicRoughnessTexture);
			UnityObjectDestroyer.DestroyRuntimeOrEditor((Object)(object)occlusionTexture);
			return (Texture)(object)val4;
		}
		case TextureImportTypes.sRGB:
		{
			(byte[], string)? tuple3 = await texDesc.Index0();
			Texture2D val3 = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(tuple3?.Item1, tuple3?.Item2, ColorSpace.sRGB, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			((Object)val3).name = subAssetKey.Name;
			_textureCache.Add(subAssetKey, (Texture)(object)val3);
			return (Texture)(object)val3;
		}
		case TextureImportTypes.Linear:
		{
			(byte[], string)? tuple = await texDesc.Index0();
			Texture2D val = await TextureDeserializer.LoadTextureAsync(new DeserializingTextureInfo(tuple?.Item1, tuple?.Item2, ColorSpace.Linear, texDesc.Sampler, texDesc.TextureType), awaitCaller);
			((Object)val).name = subAssetKey.Name;
			_textureCache.Add(subAssetKey, (Texture)(object)val);
			return (Texture)(object)val;
		}
		default:
			throw new ArgumentOutOfRangeException();
		}
	}
}
public static class TextureImportName
{
	private const string NORMAL_SUFFIX = ".normal";

	private const string STANDARD_SUFFIX = ".standard";

	private const string LINEAR_SUFFIX = ".linear";

	public static string GetUnityObjectName(TextureImportTypes type, string gltfName, string uri)
	{
		switch (type)
		{
		case TextureImportTypes.StandardMap:
			return gltfName + ".standard";
		case TextureImportTypes.NormalMap:
			return gltfName + ".normal";
		case TextureImportTypes.Linear:
			return gltfName + ".linear";
		default:
			if (!string.IsNullOrEmpty(uri) && !uri.StartsWith("data:", StringComparison.Ordinal))
			{
				return Path.GetFileNameWithoutExtension(uri);
			}
			return gltfName;
		}
	}

	public static string RemoveSuffix(string src)
	{
		if (src.EndsWith(".normal"))
		{
			return src.Substring(0, src.Length - ".normal".Length);
		}
		if (src.EndsWith(".standard"))
		{
			return src.Substring(0, src.Length - ".standard".Length);
		}
		if (src.EndsWith(".linear"))
		{
			return src.Substring(0, src.Length - ".linear".Length);
		}
		return src;
	}
}
public enum TextureImportTypes
{
	sRGB,
	NormalMap,
	StandardMap,
	Linear
}
public sealed class UnityTextureDeserializer : ITextureDeserializer
{
	public async Task<Texture2D> LoadTextureAsync(DeserializingTextureInfo textureInfo, IAwaitCaller awaitCaller)
	{
		string dataMimeType = textureInfo.DataMimeType;
		if (!(dataMimeType == "image/png") && !(dataMimeType == "image/jpeg"))
		{
			if (string.IsNullOrEmpty(textureInfo.DataMimeType))
			{
				Debug.Log((object)"Texture image MIME type is empty.");
			}
			else
			{
				Debug.Log((object)("Texture image MIME type `" + textureInfo.DataMimeType + "` is not supported."));
			}
		}
		Texture2D texture = new Texture2D(2, 2, (TextureFormat)5, textureInfo.UseMipmap, textureInfo.ColorSpace == ColorSpace.Linear);
		if (textureInfo.ImageData != null)
		{
			ImageConversion.LoadImage(texture, textureInfo.ImageData);
			((Texture)texture).wrapModeU = textureInfo.WrapModeU;
			((Texture)texture).wrapModeV = textureInfo.WrapModeV;
			((Texture)texture).filterMode = textureInfo.FilterMode;
			await awaitCaller.NextFrame();
		}
		return texture;
	}
}
internal static class TextureExtensions
{
	public static bool HasMipMap(this Texture texture)
	{
		Texture2D val = (Texture2D)(object)((texture is Texture2D) ? texture : null);
		if (val != null)
		{
			return ((Texture)val).mipmapCount > 1;
		}
		RenderTexture val2 = (RenderTexture)(object)((texture is RenderTexture) ? texture : null);
		if (val2 != null)
		{
			return val2.useMipMap;
		}
		return false;
	}

	public static void SetSampler(this Texture2D texture, in SamplerParam param)
	{
		//IL_000c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)texture == (Object)null))
		{
			((Texture)texture).wrapModeU = param.WrapModesU;
			((Texture)texture).wrapModeV = param.WrapModesV;
			((Texture)texture).filterMode = param.FilterMode;
		}
	}
}
public static class Symbols
{
	public static bool VRM_DEVELOP => false;

	public static bool VRM_NORMALIZE_BLENDSHAPE_TANGENT => false;
}
public static class UnityObjectDestroyer
{
	public static void DestroyRuntimeOrEditor(Object o)
	{
		if (Application.isPlaying)
		{
			Object.Destroy(o);
		}
		else
		{
			Object.DestroyImmediate(o);
		}
	}
}

VRMShaders.GLTF.UniUnlit.Runtime.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[64]
		{
			0, 0, 0, 1, 0, 0, 0, 56, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 71, 76, 84,
			70, 92, 85, 110, 105, 85, 110, 108, 105, 116,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 85, 110, 108, 105, 116, 85, 116, 105,
			108, 46, 99, 115
		};
		result.TypesData = new byte[34]
		{
			0, 0, 0, 0, 29, 85, 110, 105, 71, 76,
			84, 70, 46, 85, 110, 105, 85, 110, 108, 105,
			116, 124, 85, 110, 105, 85, 110, 108, 105, 116,
			85, 116, 105, 108
		};
		result.TotalFiles = 1;
		result.TotalTypes = 1;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.UniUnlit;

public enum UniUnlitRenderMode
{
	Opaque,
	Cutout,
	Transparent
}
public enum UniUnlitCullMode
{
	Off = 0,
	Back = 2
}
public enum UniUnlitVertexColorBlendOp
{
	None,
	Multiply
}
public static class UniUnlitUtil
{
	public const string ShaderName = "UniGLTF/UniUnlit";

	public const string PropNameMainTex = "_MainTex";

	public const string PropNameColor = "_Color";

	public const string PropNameCutoff = "_Cutoff";

	public const string PropNameBlendMode = "_BlendMode";

	public const string PropNameCullMode = "_CullMode";

	[Obsolete("Use PropNameVColBlendMode")]
	public const string PropeNameVColBlendMode = "_VColBlendMode";

	public const string PropNameVColBlendMode = "_VColBlendMode";

	public const string PropNameSrcBlend = "_SrcBlend";

	public const string PropNameDstBlend = "_DstBlend";

	public const string PropNameZWrite = "_ZWrite";

	public const string PropNameStandardShadersRenderMode = "_Mode";

	public const string KeywordAlphaTestOn = "_ALPHATEST_ON";

	public const string KeywordAlphaBlendOn = "_ALPHABLEND_ON";

	public const string KeywordVertexColMul = "_VERTEXCOL_MUL";

	public const string TagRenderTypeKey = "RenderType";

	public const string TagRenderTypeValueOpaque = "Opaque";

	public const string TagRenderTypeValueTransparentCutout = "TransparentCutout";

	public const string TagRenderTypeValueTransparent = "Transparent";

	public static void SetRenderMode(Material material, UniUnlitRenderMode mode)
	{
		material.SetInt("_BlendMode", (int)mode);
	}

	public static void SetCullMode(Material material, UniUnlitCullMode mode)
	{
		material.SetInt("_CullMode", (int)mode);
	}

	public static void SetVColBlendMode(Material material, UniUnlitVertexColorBlendOp mode)
	{
		material.SetInt("_VColBlendMode", (int)mode);
	}

	public static UniUnlitRenderMode GetRenderMode(Material material)
	{
		return (UniUnlitRenderMode)material.GetInt("_BlendMode");
	}

	public static UniUnlitCullMode GetCullMode(Material material)
	{
		return (UniUnlitCullMode)material.GetInt("_CullMode");
	}

	public static UniUnlitVertexColorBlendOp GetVColBlendMode(Material material)
	{
		return (UniUnlitVertexColorBlendOp)material.GetInt("_VColBlendMode");
	}

	public static void ValidateProperties(Material material, bool isRenderModeChangedByUser = false)
	{
		SetupBlendMode(material, (UniUnlitRenderMode)material.GetFloat("_BlendMode"), isRenderModeChangedByUser);
		SetupVertexColorBlendOp(material, (UniUnlitVertexColorBlendOp)material.GetFloat("_VColBlendMode"));
	}

	private static void SetupBlendMode(Material material, UniUnlitRenderMode renderMode, bool isRenderModeChangedByUser = false)
	{
		switch (renderMode)
		{
		case UniUnlitRenderMode.Opaque:
			material.SetOverrideTag("RenderType", "Opaque");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			if (isRenderModeChangedByUser)
			{
				material.renderQueue = -1;
			}
			break;
		case UniUnlitRenderMode.Cutout:
			material.SetOverrideTag("RenderType", "TransparentCutout");
			material.SetInt("_SrcBlend", 1);
			material.SetInt("_DstBlend", 0);
			material.SetInt("_ZWrite", 1);
			SetKeyword(material, "_ALPHATEST_ON", required: true);
			SetKeyword(material, "_ALPHABLEND_ON", required: false);
			if (isRenderModeChangedByUser)
			{
				material.renderQueue = 2450;
			}
			break;
		case UniUnlitRenderMode.Transparent:
			material.SetOverrideTag("RenderType", "Transparent");
			material.SetInt("_SrcBlend", 5);
			material.SetInt("_DstBlend", 10);
			material.SetInt("_ZWrite", 0);
			SetKeyword(material, "_ALPHATEST_ON", required: false);
			SetKeyword(material, "_ALPHABLEND_ON", required: true);
			if (isRenderModeChangedByUser)
			{
				material.renderQueue = 3000;
			}
			break;
		}
	}

	private static void SetupVertexColorBlendOp(Material material, UniUnlitVertexColorBlendOp vColBlendOp)
	{
		switch (vColBlendOp)
		{
		case UniUnlitVertexColorBlendOp.None:
			SetKeyword(material, "_VERTEXCOL_MUL", required: false);
			break;
		case UniUnlitVertexColorBlendOp.Multiply:
			SetKeyword(material, "_VERTEXCOL_MUL", required: true);
			break;
		}
	}

	private static void SetKeyword(Material mat, string keyword, bool required)
	{
		if (required)
		{
			mat.EnableKeyword(keyword);
		}
		else
		{
			mat.DisableKeyword(keyword);
		}
	}
}

VRMShaders.VRM.IO.Runtime.dll

Decompiled 3 months ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[122]
		{
			0, 0, 0, 1, 0, 0, 0, 58, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			92, 73, 79, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 80, 114, 101, 83, 104, 97, 100, 101,
			114, 80, 114, 111, 112, 69, 120, 112, 111, 114,
			116, 101, 114, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 48, 92, 65, 115, 115, 101, 116,
			115, 92, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 92, 86, 82, 77, 92, 73, 79, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 83, 104,
			97, 100, 101, 114, 80, 114, 111, 112, 115, 46,
			99, 115
		};
		result.TypesData = new byte[142]
		{
			0, 0, 0, 0, 48, 85, 110, 105, 71, 76,
			84, 70, 46, 83, 104, 97, 100, 101, 114, 80,
			114, 111, 112, 69, 120, 112, 111, 114, 116, 101,
			114, 124, 80, 114, 101, 83, 104, 97, 100, 101,
			114, 80, 114, 111, 112, 69, 120, 112, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 41, 85, 110,
			105, 71, 76, 84, 70, 46, 83, 104, 97, 100,
			101, 114, 80, 114, 111, 112, 69, 120, 112, 111,
			114, 116, 101, 114, 124, 83, 104, 97, 100, 101,
			114, 80, 114, 111, 112, 101, 114, 116, 121, 0,
			0, 0, 0, 38, 85, 110, 105, 71, 76, 84,
			70, 46, 83, 104, 97, 100, 101, 114, 80, 114,
			111, 112, 69, 120, 112, 111, 114, 116, 101, 114,
			124, 83, 104, 97, 100, 101, 114, 80, 114, 111,
			112, 115
		};
		result.TotalFiles = 2;
		result.TotalTypes = 3;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.ShaderPropExporter;

public static class PreShaderPropExporter
{
	private const string ShaderName = "VRM/MToon";

	private static ShaderProps VRM_MToon = new ShaderProps
	{
		Properties = new ShaderProperty[42]
		{
			new ShaderProperty("_Cutoff", ShaderPropertyType.Range),
			new ShaderProperty("_Color", ShaderPropertyType.Color),
			new ShaderProperty("_ShadeColor", ShaderPropertyType.Color),
			new ShaderProperty("_MainTex", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ShadeTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_BumpScale", ShaderPropertyType.Float),
			new ShaderProperty("_BumpMap", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ReceiveShadowRate", ShaderPropertyType.Range),
			new ShaderProperty("_ReceiveShadowTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ShadingGradeRate", ShaderPropertyType.Range),
			new ShaderProperty("_ShadingGradeTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_ShadeShift", ShaderPropertyType.Range),
			new ShaderProperty("_ShadeToony", ShaderPropertyType.Range),
			new ShaderProperty("_LightColorAttenuation", ShaderPropertyType.Range),
			new ShaderProperty("_IndirectLightIntensity", ShaderPropertyType.Range),
			new ShaderProperty("_RimColor", ShaderPropertyType.Color),
			new ShaderProperty("_RimTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_RimLightingMix", ShaderPropertyType.Range),
			new ShaderProperty("_RimFresnelPower", ShaderPropertyType.Range),
			new ShaderProperty("_RimLift", ShaderPropertyType.Range),
			new ShaderProperty("_SphereAdd", ShaderPropertyType.TexEnv),
			new ShaderProperty("_EmissionColor", ShaderPropertyType.Color),
			new ShaderProperty("_EmissionMap", ShaderPropertyType.TexEnv),
			new ShaderProperty("_OutlineWidthTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_OutlineWidth", ShaderPropertyType.Range),
			new ShaderProperty("_OutlineScaledMaxDistance", ShaderPropertyType.Range),
			new ShaderProperty("_OutlineColor", ShaderPropertyType.Color),
			new ShaderProperty("_OutlineLightingMix", ShaderPropertyType.Range),
			new ShaderProperty("_UvAnimMaskTexture", ShaderPropertyType.TexEnv),
			new ShaderProperty("_UvAnimScrollX", ShaderPropertyType.Float),
			new ShaderProperty("_UvAnimScrollY", ShaderPropertyType.Float),
			new ShaderProperty("_UvAnimRotation", ShaderPropertyType.Float),
			new ShaderProperty("_MToonVersion", ShaderPropertyType.Float),
			new ShaderProperty("_DebugMode", ShaderPropertyType.Float),
			new ShaderProperty("_BlendMode", ShaderPropertyType.Float),
			new ShaderProperty("_OutlineWidthMode", ShaderPropertyType.Float),
			new ShaderProperty("_OutlineColorMode", ShaderPropertyType.Float),
			new ShaderProperty("_CullMode", ShaderPropertyType.Float),
			new ShaderProperty("_OutlineCullMode", ShaderPropertyType.Float),
			new ShaderProperty("_SrcBlend", ShaderPropertyType.Float),
			new ShaderProperty("_DstBlend", ShaderPropertyType.Float),
			new ShaderProperty("_ZWrite", ShaderPropertyType.Float)
		}
	};

	public static ShaderProps GetPropsForMToon()
	{
		return VRM_MToon;
	}
}
public enum ShaderPropertyType
{
	TexEnv,
	Color,
	Range,
	Float,
	Vector
}
public struct ShaderProperty
{
	public string Key;

	public ShaderPropertyType ShaderPropertyType;

	public ShaderProperty(string key, ShaderPropertyType propType)
	{
		Key = key;
		ShaderPropertyType = propType;
	}
}
public class ShaderProps
{
	public ShaderProperty[] Properties;
}

VRMShaders.VRM10.Format.Runtime.dll

Decompiled 3 months ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[74]
		{
			0, 0, 0, 3, 0, 0, 0, 66, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 70, 111, 114, 109, 97, 116, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 77, 97,
			116, 101, 114, 105, 97, 108, 115, 77, 84, 111,
			111, 110, 92, 70, 111, 114, 109, 97, 116, 46,
			103, 46, 99, 115
		};
		result.TypesData = new byte[189]
		{
			0, 0, 0, 0, 51, 85, 110, 105, 71, 76,
			84, 70, 46, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 86, 82, 77, 67, 95, 109,
			97, 116, 101, 114, 105, 97, 108, 115, 95, 109,
			116, 111, 111, 110, 124, 84, 101, 120, 116, 117,
			114, 101, 73, 110, 102, 111, 0, 0, 0, 0,
			63, 85, 110, 105, 71, 76, 84, 70, 46, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			86, 82, 77, 67, 95, 109, 97, 116, 101, 114,
			105, 97, 108, 115, 95, 109, 116, 111, 111, 110,
			124, 83, 104, 97, 100, 105, 110, 103, 83, 104,
			105, 102, 116, 84, 101, 120, 116, 117, 114, 101,
			73, 110, 102, 111, 0, 0, 0, 0, 60, 85,
			110, 105, 71, 76, 84, 70, 46, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 86, 82,
			77, 67, 95, 109, 97, 116, 101, 114, 105, 97,
			108, 115, 95, 109, 116, 111, 111, 110, 124, 86,
			82, 77, 67, 95, 109, 97, 116, 101, 114, 105,
			97, 108, 115, 95, 109, 116, 111, 111, 110
		};
		result.TotalFiles = 1;
		result.TotalTypes = 3;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace UniGLTF.Extensions.VRMC_materials_mtoon;

public class TextureInfo
{
	public object Extensions;

	public object Extras;

	public int? Index;

	public int? TexCoord;
}
public class ShadingShiftTextureInfo
{
	public object Extensions;

	public object Extras;

	public int? Index;

	public int? TexCoord;

	public float? Scale;
}
public enum OutlineWidthMode
{
	none,
	worldCoordinates,
	screenCoordinates
}
public class VRMC_materials_mtoon
{
	public const string ExtensionName = "VRMC_materials_mtoon";

	public object Extensions;

	public object Extras;

	public string SpecVersion;

	public bool? TransparentWithZWrite;

	public int? RenderQueueOffsetNumber;

	public float[] ShadeColorFactor;

	public TextureInfo ShadeMultiplyTexture;

	public float? ShadingShiftFactor;

	public ShadingShiftTextureInfo ShadingShiftTexture;

	public float? ShadingToonyFactor;

	public float? GiEqualizationFactor;

	public float[] MatcapFactor;

	public TextureInfo MatcapTexture;

	public float[] ParametricRimColorFactor;

	public TextureInfo RimMultiplyTexture;

	public float? RimLightingMixFactor;

	public float? ParametricRimFresnelPowerFactor;

	public float? ParametricRimLiftFactor;

	public OutlineWidthMode OutlineWidthMode;

	public float? OutlineWidthFactor;

	public TextureInfo OutlineWidthMultiplyTexture;

	public float[] OutlineColorFactor;

	public float? OutlineLightingMixFactor;

	public TextureInfo UvAnimationMaskTexture;

	public float? UvAnimationScrollXSpeedFactor;

	public float? UvAnimationScrollYSpeedFactor;

	public float? UvAnimationRotationSpeedFactor;
}

VRMShaders.VRM10.MToon10.Runtime.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[1228]
		{
			0, 0, 0, 1, 0, 0, 0, 73, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 77, 84, 111, 111, 110, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 92,
			77, 97, 116, 101, 114, 105, 97, 108, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 58, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 86, 82,
			77, 49, 48, 92, 77, 84, 111, 111, 110, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			77, 84, 111, 111, 110, 49, 48, 67, 111, 110,
			116, 101, 120, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 59, 92, 65, 115, 115, 101,
			116, 115, 92, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 92, 86, 82, 77, 49, 48, 92,
			77, 84, 111, 111, 110, 49, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 77, 84, 111, 111,
			110, 49, 48, 77, 105, 103, 114, 97, 116, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 58, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 86, 82, 77, 49, 48, 92, 77, 84, 111,
			111, 110, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 77, 84, 111, 111, 110, 86, 97,
			108, 105, 100, 97, 116, 111, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 103, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 77, 84, 111, 111, 110, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 116, 121, 83, 104, 97, 100, 101, 114,
			76, 97, 98, 92, 77, 84, 111, 111, 110, 68,
			101, 102, 105, 110, 101, 100, 86, 97, 108, 117,
			101, 115, 92, 77, 84, 111, 111, 110, 49, 48,
			69, 109, 105, 115, 115, 105, 118, 101, 77, 97,
			112, 75, 101, 121, 119, 111, 114, 100, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 101, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 86, 82,
			77, 49, 48, 92, 77, 84, 111, 111, 110, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 116, 121, 83, 104, 97, 100, 101,
			114, 76, 97, 98, 92, 77, 84, 111, 111, 110,
			68, 101, 102, 105, 110, 101, 100, 86, 97, 108,
			117, 101, 115, 92, 77, 84, 111, 111, 110, 49,
			48, 78, 111, 114, 109, 97, 108, 77, 97, 112,
			75, 101, 121, 119, 111, 114, 100, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 103, 92, 65,
			115, 115, 101, 116, 115, 92, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 92, 86, 82, 77,
			49, 48, 92, 77, 84, 111, 111, 110, 49, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 116, 121, 83, 104, 97, 100, 101, 114,
			76, 97, 98, 92, 77, 84, 111, 111, 110, 68,
			101, 102, 105, 110, 101, 100, 86, 97, 108, 117,
			101, 115, 92, 77, 84, 111, 111, 110, 49, 48,
			79, 117, 116, 108, 105, 110, 101, 77, 111, 100,
			101, 75, 101, 121, 119, 111, 114, 100, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 104, 92,
			65, 115, 115, 101, 116, 115, 92, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 92, 86, 82,
			77, 49, 48, 92, 77, 84, 111, 111, 110, 49,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 116, 121, 83, 104, 97, 100, 101,
			114, 76, 97, 98, 92, 77, 84, 111, 111, 110,
			68, 101, 102, 105, 110, 101, 100, 86, 97, 108,
			117, 101, 115, 92, 77, 84, 111, 111, 110, 49,
			48, 80, 97, 114, 97, 109, 101, 116, 101, 114,
			77, 97, 112, 75, 101, 121, 119, 111, 114, 100,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			98, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			86, 82, 77, 49, 48, 92, 77, 84, 111, 111,
			110, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 116, 121, 83, 104, 97,
			100, 101, 114, 76, 97, 98, 92, 77, 84, 111,
			111, 110, 68, 101, 102, 105, 110, 101, 100, 86,
			97, 108, 117, 101, 115, 92, 77, 84, 111, 111,
			110, 49, 48, 82, 105, 109, 77, 97, 112, 75,
			101, 121, 119, 111, 114, 100, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 81, 92, 65, 115,
			115, 101, 116, 115, 92, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 92, 86, 82, 77, 49,
			48, 92, 77, 84, 111, 111, 110, 49, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 85, 110,
			105, 116, 121, 83, 104, 97, 100, 101, 114, 76,
			97, 98, 92, 80, 114, 111, 112, 101, 114, 116,
			105, 101, 115, 92, 77, 84, 111, 111, 110, 49,
			48, 77, 101, 116, 97, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 87, 92, 65, 115, 115,
			101, 116, 115, 92, 86, 82, 77, 83, 104, 97,
			100, 101, 114, 115, 92, 86, 82, 77, 49, 48,
			92, 77, 84, 111, 111, 110, 49, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			116, 121, 83, 104, 97, 100, 101, 114, 76, 97,
			98, 92, 80, 114, 111, 112, 101, 114, 116, 105,
			101, 115, 92, 77, 84, 111, 111, 110, 49, 48,
			80, 114, 111, 112, 101, 114, 116, 105, 101, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			103, 92, 65, 115, 115, 101, 116, 115, 92, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 92,
			86, 82, 77, 49, 48, 92, 77, 84, 111, 111,
			110, 49, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 116, 121, 83, 104, 97,
			100, 101, 114, 76, 97, 98, 92, 83, 104, 97,
			100, 101, 114, 76, 97, 98, 68, 101, 102, 105,
			110, 101, 100, 86, 97, 108, 117, 101, 115, 92,
			85, 110, 105, 116, 121, 65, 108, 112, 104, 97,
			77, 111, 100, 101, 75, 101, 121, 119, 111, 114,
			100, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 96, 92, 65, 115, 115, 101, 116, 115, 92,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			92, 86, 82, 77, 49, 48, 92, 77, 84, 111,
			111, 110, 49, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 116, 121, 83, 104,
			97, 100, 101, 114, 76, 97, 98, 92, 83, 104,
			97, 100, 101, 114, 76, 97, 98, 68, 101, 102,
			105, 110, 101, 100, 86, 97, 108, 117, 101, 115,
			92, 85, 110, 105, 116, 121, 82, 101, 110, 100,
			101, 114, 84, 97, 103, 46, 99, 115
		};
		result.TypesData = new byte[737]
		{
			0, 0, 0, 0, 51, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 46, 86, 82, 77, 49,
			48, 46, 77, 84, 111, 111, 110, 49, 48, 46,
			82, 117, 110, 116, 105, 109, 101, 124, 77, 97,
			116, 101, 114, 105, 97, 108, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			47, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 46, 86, 82, 77, 49, 48, 46, 77, 84,
			111, 111, 110, 49, 48, 46, 82, 117, 110, 116,
			105, 109, 101, 124, 77, 84, 111, 111, 110, 49,
			48, 67, 111, 110, 116, 101, 120, 116, 0, 0,
			0, 0, 48, 86, 82, 77, 83, 104, 97, 100,
			101, 114, 115, 46, 86, 82, 77, 49, 48, 46,
			77, 84, 111, 111, 110, 49, 48, 46, 82, 117,
			110, 116, 105, 109, 101, 124, 77, 84, 111, 111,
			110, 49, 48, 77, 105, 103, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 47, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 46, 86, 82, 77,
			49, 48, 46, 77, 84, 111, 111, 110, 49, 48,
			46, 82, 117, 110, 116, 105, 109, 101, 124, 77,
			84, 111, 111, 110, 86, 97, 108, 105, 100, 97,
			116, 111, 114, 0, 0, 0, 0, 58, 86, 82,
			77, 83, 104, 97, 100, 101, 114, 115, 46, 86,
			82, 77, 49, 48, 46, 77, 84, 111, 111, 110,
			49, 48, 46, 82, 117, 110, 116, 105, 109, 101,
			124, 77, 84, 111, 111, 110, 49, 48, 69, 109,
			105, 115, 115, 105, 118, 101, 77, 97, 112, 75,
			101, 121, 119, 111, 114, 100, 0, 0, 0, 0,
			56, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 46, 86, 82, 77, 49, 48, 46, 77, 84,
			111, 111, 110, 49, 48, 46, 82, 117, 110, 116,
			105, 109, 101, 124, 77, 84, 111, 111, 110, 49,
			48, 78, 111, 114, 109, 97, 108, 77, 97, 112,
			75, 101, 121, 119, 111, 114, 100, 0, 0, 0,
			0, 58, 86, 82, 77, 83, 104, 97, 100, 101,
			114, 115, 46, 86, 82, 77, 49, 48, 46, 77,
			84, 111, 111, 110, 49, 48, 46, 82, 117, 110,
			116, 105, 109, 101, 124, 77, 84, 111, 111, 110,
			49, 48, 79, 117, 116, 108, 105, 110, 101, 77,
			111, 100, 101, 75, 101, 121, 119, 111, 114, 100,
			0, 0, 0, 0, 59, 86, 82, 77, 83, 104,
			97, 100, 101, 114, 115, 46, 86, 82, 77, 49,
			48, 46, 77, 84, 111, 111, 110, 49, 48, 46,
			82, 117, 110, 116, 105, 109, 101, 124, 77, 84,
			111, 111, 110, 49, 48, 80, 97, 114, 97, 109,
			101, 116, 101, 114, 77, 97, 112, 75, 101, 121,
			119, 111, 114, 100, 0, 0, 0, 0, 53, 86,
			82, 77, 83, 104, 97, 100, 101, 114, 115, 46,
			86, 82, 77, 49, 48, 46, 77, 84, 111, 111,
			110, 49, 48, 46, 82, 117, 110, 116, 105, 109,
			101, 124, 77, 84, 111, 111, 110, 49, 48, 82,
			105, 109, 77, 97, 112, 75, 101, 121, 119, 111,
			114, 100, 0, 0, 0, 0, 44, 86, 82, 77,
			83, 104, 97, 100, 101, 114, 115, 46, 86, 82,
			77, 49, 48, 46, 77, 84, 111, 111, 110, 49,
			48, 46, 82, 117, 110, 116, 105, 109, 101, 124,
			77, 84, 111, 111, 110, 49, 48, 77, 101, 116,
			97, 0, 0, 0, 0, 50, 86, 82, 77, 83,
			104, 97, 100, 101, 114, 115, 46, 86, 82, 77,
			49, 48, 46, 77, 84, 111, 111, 110, 49, 48,
			46, 82, 117, 110, 116, 105, 109, 101, 124, 77,
			84, 111, 111, 110, 49, 48, 80, 114, 111, 112,
			101, 114, 116, 105, 101, 115, 0, 0, 0, 0,
			54, 86, 82, 77, 83, 104, 97, 100, 101, 114,
			115, 46, 86, 82, 77, 49, 48, 46, 77, 84,
			111, 111, 110, 49, 48, 46, 82, 117, 110, 116,
			105, 109, 101, 124, 85, 110, 105, 116, 121, 65,
			108, 112, 104, 97, 77, 111, 100, 101, 75, 101,
			121, 119, 111, 114, 100, 0, 0, 0, 0, 47,
			86, 82, 77, 83, 104, 97, 100, 101, 114, 115,
			46, 86, 82, 77, 49, 48, 46, 77, 84, 111,
			111, 110, 49, 48, 46, 82, 117, 110, 116, 105,
			109, 101, 124, 85, 110, 105, 116, 121, 82, 101,
			110, 100, 101, 114, 84, 97, 103
		};
		result.TotalFiles = 13;
		result.TotalTypes = 13;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace VRMShaders.VRM10.MToon10.Runtime;

public static class MaterialExtensions
{
	public static void SetKeyword(this Material mat, string keyword, bool isEnabled)
	{
		if (isEnabled)
		{
			mat.EnableKeyword(keyword);
		}
		else
		{
			mat.DisableKeyword(keyword);
		}
	}

	public static int GetInt(this Material mat, MToon10Prop prop)
	{
		return mat.GetInt(prop.ToUnityShaderLabName());
	}

	public static void SetInt(this Material mat, MToon10Prop prop, int val)
	{
		mat.SetInt(prop.ToUnityShaderLabName(), val);
	}

	public static Texture GetTexture(this Material mat, MToon10Prop prop)
	{
		return mat.GetTexture(prop.ToUnityShaderLabName());
	}

	public static Vector2 GetTextureScale(this Material mat, MToon10Prop prop)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		return mat.GetTextureScale(prop.ToUnityShaderLabName());
	}

	public static Vector2 GetTextureOffset(this Material mat, MToon10Prop prop)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		return mat.GetTextureOffset(prop.ToUnityShaderLabName());
	}

	public static float GetFloat(this Material mat, MToon10Prop prop)
	{
		return mat.GetFloat(prop.ToUnityShaderLabName());
	}

	public static Color GetColor(this Material mat, MToon10Prop prop)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		return mat.GetColor(prop.ToUnityShaderLabName());
	}
}
public sealed class MToon10Context
{
	private readonly Material _material;

	public MToon10AlphaMode AlphaMode => (MToon10AlphaMode)_material.GetInt(MToon10Prop.AlphaMode);

	public MToon10TransparentWithZWriteMode TransparentWithZWriteMode => (MToon10TransparentWithZWriteMode)_material.GetInt(MToon10Prop.TransparentWithZWrite);

	public float AlphaCutoff => _material.GetFloat(MToon10Prop.AlphaCutoff);

	public int RenderQueueOffsetNumber => _material.GetInt(MToon10Prop.RenderQueueOffsetNumber);

	public MToon10DoubleSidedMode DoubleSidedMode => (MToon10DoubleSidedMode)_material.GetInt(MToon10Prop.DoubleSided);

	public Color BaseColorFactorSrgb => _material.GetColor(MToon10Prop.BaseColorFactor);

	public Texture BaseColorTexture => _material.GetTexture(MToon10Prop.BaseColorTexture);

	public Color ShadeColorFactorSrgb => _material.GetColor(MToon10Prop.ShadeColorFactor);

	public Texture ShadeColorTexture => _material.GetTexture(MToon10Prop.ShadeColorTexture);

	public Texture NormalTexture => _material.GetTexture(MToon10Prop.NormalTexture);

	public float NormalTextureScale => _material.GetFloat(MToon10Prop.NormalTextureScale);

	public float ShadingShiftFactor => _material.GetFloat(MToon10Prop.ShadingShiftFactor);

	public Texture ShadingShiftTexture => _material.GetTexture(MToon10Prop.ShadingShiftTexture);

	public float ShadingShiftTextureScale => _material.GetFloat(MToon10Prop.ShadingShiftTextureScale);

	public float ShadingToonyFactor => _material.GetFloat(MToon10Prop.ShadingToonyFactor);

	public float GiEqualizationFactor => _material.GetFloat(MToon10Prop.GiEqualizationFactor);

	public Color EmissiveFactorLinear => _material.GetColor(MToon10Prop.EmissiveFactor);

	public Texture EmissiveTexture => _material.GetTexture(MToon10Prop.EmissiveTexture);

	public Color MatcapColorFactorSrgb => _material.GetColor(MToon10Prop.MatcapColorFactor);

	public Texture MatcapTexture => _material.GetTexture(MToon10Prop.MatcapTexture);

	public Color ParametricRimColorFactorSrgb => _material.GetColor(MToon10Prop.ParametricRimColorFactor);

	public float ParametricRimFresnelPowerFactor => _material.GetFloat(MToon10Prop.ParametricRimFresnelPowerFactor);

	public float ParametricRimLiftFactor => _material.GetFloat(MToon10Prop.ParametricRimLiftFactor);

	public Texture RimMultiplyTexture => _material.GetTexture(MToon10Prop.RimMultiplyTexture);

	public float RimLightingMixFactor => _material.GetFloat(MToon10Prop.RimLightingMixFactor);

	public MToon10OutlineMode OutlineWidthMode => (MToon10OutlineMode)_material.GetInt(MToon10Prop.OutlineWidthMode);

	public float OutlineWidthFactor => _material.GetFloat(MToon10Prop.OutlineWidthFactor);

	public Texture OutlineWidthMultiplyTexture => _material.GetTexture(MToon10Prop.OutlineWidthMultiplyTexture);

	public Color OutlineColorFactorSrgb => _material.GetColor(MToon10Prop.OutlineColorFactor);

	public float OutlineLightingMixFactor => _material.GetFloat(MToon10Prop.OutlineLightingMixFactor);

	public Texture UvAnimationMaskTexture => _material.GetTexture(MToon10Prop.UvAnimationMaskTexture);

	public float UvAnimationScrollXSpeedFactor => _material.GetFloat(MToon10Prop.UvAnimationScrollXSpeedFactor);

	public float UvAnimationScrollYSpeedFactor => _material.GetFloat(MToon10Prop.UvAnimationScrollYSpeedFactor);

	public float UvAnimationRotationSpeedFactor => _material.GetFloat(MToon10Prop.UvAnimationRotationSpeedFactor);

	public Vector2 TextureScale => _material.GetTextureScale(MToon10Prop.BaseColorTexture);

	public Vector2 TextureOffset => _material.GetTextureOffset(MToon10Prop.BaseColorTexture);

	public MToon10Context(Material material)
	{
		_material = material;
	}

	public void Validate()
	{
		new MToonValidator(_material).Validate();
	}
}
public static class MToon10Migrator
{
	public static float MigrateToShadingToony(float shadingToony0X, float shadingShift0X)
	{
		var (num, num2) = GetShadingRange0X(shadingToony0X, shadingShift0X);
		return Mathf.Clamp((2f - (num2 - num)) * 0.5f, 0f, 1f);
	}

	public static float MigrateToShadingShift(float shadingToony0X, float shadingShift0X)
	{
		(float min, float max) shadingRange0X = GetShadingRange0X(shadingToony0X, shadingShift0X);
		var (num, _) = shadingRange0X;
		return Mathf.Clamp((shadingRange0X.max + num) * 0.5f * -1f, -1f, 1f);
	}

	public static float MigrateToGiEqualization(float giIntensity0X)
	{
		return Mathf.Clamp01(1f - giIntensity0X);
	}

	private static (float min, float max) GetShadingRange0X(float shadingToony0X, float shadingShift0X)
	{
		float item = Mathf.Lerp(1f, shadingShift0X, shadingToony0X);
		return (shadingShift0X, item);
	}
}
public sealed class MToonValidator
{
	private readonly Material _material;

	public MToonValidator(Material material)
	{
		_material = material;
	}

	public void Validate()
	{
		MToon10AlphaMode @int = (MToon10AlphaMode)_material.GetInt(MToon10Prop.AlphaMode);
		MToon10TransparentWithZWriteMode int2 = (MToon10TransparentWithZWriteMode)_material.GetInt(MToon10Prop.TransparentWithZWrite);
		int int3 = _material.GetInt(MToon10Prop.RenderQueueOffsetNumber);
		MToon10DoubleSidedMode int4 = (MToon10DoubleSidedMode)_material.GetInt(MToon10Prop.DoubleSided);
		SetUnityShaderPassSettings(_material, @int, int2, int3, int4);
		SetUnityShaderVariants(_material);
	}

	private static void SetUnityShaderPassSettings(Material material, MToon10AlphaMode alphaMode, MToon10TransparentWithZWriteMode zWriteMode, int renderQueueOffset, MToon10DoubleSidedMode doubleSidedMode)
	{
		material.SetInt(MToon10Prop.AlphaMode, (int)alphaMode);
		material.SetInt(MToon10Prop.TransparentWithZWrite, (int)zWriteMode);
		material.SetInt(MToon10Prop.DoubleSided, (int)doubleSidedMode);
		switch (alphaMode)
		{
		case MToon10AlphaMode.Opaque:
			material.SetOverrideTag("RenderType", "Opaque");
			material.SetInt(MToon10Prop.UnitySrcBlend, 1);
			material.SetInt(MToon10Prop.UnityDstBlend, 0);
			material.SetInt(MToon10Prop.UnityZWrite, 1);
			material.SetInt(MToon10Prop.UnityAlphaToMask, 0);
			renderQueueOffset = 0;
			material.renderQueue = 2000;
			break;
		case MToon10AlphaMode.Cutout:
			material.SetOverrideTag("RenderType", "TransparentCutout");
			material.SetInt(MToon10Prop.UnitySrcBlend, 1);
			material.SetInt(MToon10Prop.UnityDstBlend, 0);
			material.SetInt(MToon10Prop.UnityZWrite, 1);
			material.SetInt(MToon10Prop.UnityAlphaToMask, 1);
			renderQueueOffset = 0;
			material.renderQueue = 2450;
			break;
		case MToon10AlphaMode.Transparent:
			if (zWriteMode == MToon10TransparentWithZWriteMode.Off)
			{
				material.SetOverrideTag("RenderType", "Transparent");
				material.SetInt(MToon10Prop.UnitySrcBlend, 5);
				material.SetInt(MToon10Prop.UnityDstBlend, 10);
				material.SetInt(MToon10Prop.UnityZWrite, 0);
				material.SetInt(MToon10Prop.UnityAlphaToMask, 0);
				renderQueueOffset = Mathf.Clamp(renderQueueOffset, -9, 0);
				material.renderQueue = 3000 + renderQueueOffset;
				break;
			}
			if (zWriteMode == MToon10TransparentWithZWriteMode.On)
			{
				material.SetOverrideTag("RenderType", "Transparent");
				material.SetInt(MToon10Prop.UnitySrcBlend, 5);
				material.SetInt(MToon10Prop.UnityDstBlend, 10);
				material.SetInt(MToon10Prop.UnityZWrite, 1);
				material.SetInt(MToon10Prop.UnityAlphaToMask, 0);
				renderQueueOffset = Mathf.Clamp(renderQueueOffset, 0, 9);
				material.renderQueue = 2501 + renderQueueOffset;
				break;
			}
			goto default;
		default:
			throw new ArgumentOutOfRangeException("alphaMode", alphaMode, null);
		}
		switch (doubleSidedMode)
		{
		case MToon10DoubleSidedMode.Off:
			material.SetInt(MToon10Prop.UnityCullMode, 2);
			break;
		case MToon10DoubleSidedMode.On:
			material.SetInt(MToon10Prop.UnityCullMode, 0);
			break;
		default:
			throw new ArgumentOutOfRangeException("doubleSidedMode", doubleSidedMode, null);
		}
		material.SetInt(MToon10Prop.RenderQueueOffsetNumber, renderQueueOffset);
	}

	private static void SetUnityCullingSettings(Material material, MToon10DoubleSidedMode doubleSidedMode)
	{
	}

	private static void SetUnityShaderVariants(Material material)
	{
		material.SetKeyword("_ALPHATEST_ON", material.GetInt(MToon10Prop.AlphaMode) == 1);
		material.SetKeyword("_ALPHABLEND_ON", material.GetInt(MToon10Prop.AlphaMode) == 2);
		material.SetKeyword("_ALPHAPREMULTIPLY_ON", isEnabled: false);
		material.SetKeyword("_NORMALMAP", (Object)(object)material.GetTexture(MToon10Prop.NormalTexture) != (Object)null);
		material.SetKeyword("_MTOON_EMISSIVEMAP", (Object)(object)material.GetTexture(MToon10Prop.EmissiveTexture) != (Object)null);
		material.SetKeyword("_MTOON_RIMMAP", (Object)(object)material.GetTexture(MToon10Prop.MatcapTexture) != (Object)null || (Object)(object)material.GetTexture(MToon10Prop.RimMultiplyTexture) != (Object)null);
		material.SetKeyword("_MTOON_PARAMETERMAP", (Object)(object)material.GetTexture(MToon10Prop.ShadingShiftTexture) != (Object)null || (Object)(object)material.GetTexture(MToon10Prop.OutlineWidthMultiplyTexture) != (Object)null || (Object)(object)material.GetTexture(MToon10Prop.UvAnimationMaskTexture) != (Object)null);
		material.SetKeyword("_MTOON_OUTLINE_WORLD", material.GetInt(MToon10Prop.OutlineWidthMode) == 1);
		material.SetKeyword("_MTOON_OUTLINE_SCREEN", material.GetInt(MToon10Prop.OutlineWidthMode) == 2);
	}
}
public enum MToon10AlphaMode
{
	Opaque,
	Cutout,
	Transparent
}
public enum MToon10DoubleSidedMode
{
	Off,
	On
}
public static class MToon10EmissiveMapKeyword
{
	public const string On = "_MTOON_EMISSIVEMAP";
}
public static class MToon10NormalMapKeyword
{
	public const string On = "_NORMALMAP";
}
public enum MToon10OutlineMode
{
	None,
	World,
	Screen
}
public static class MToon10OutlineModeKeyword
{
	public const string World = "_MTOON_OUTLINE_WORLD";

	public const string Screen = "_MTOON_OUTLINE_SCREEN";
}
public static class MToon10ParameterMapKeyword
{
	public const string On = "_MTOON_PARAMETERMAP";
}
public static class MToon10RimMapKeyword
{
	public const string On = "_MTOON_RIMMAP";
}
public enum MToon10TransparentWithZWriteMode
{
	Off,
	On
}
public static class MToon10Meta
{
	public static readonly string UnityShaderName = "VRM10/MToon10";

	public static readonly string URPUnityShaderName = "VRM10/Universal Render Pipeline/MToon10";
}
public enum MToon10Prop
{
	AlphaMode,
	TransparentWithZWrite,
	AlphaCutoff,
	RenderQueueOffsetNumber,
	DoubleSided,
	BaseColorFactor,
	BaseColorTexture,
	ShadeColorFactor,
	ShadeColorTexture,
	NormalTexture,
	NormalTextureScale,
	ShadingShiftFactor,
	ShadingShiftTexture,
	ShadingShiftTextureScale,
	ShadingToonyFactor,
	GiEqualizationFactor,
	EmissiveFactor,
	EmissiveTexture,
	MatcapColorFactor,
	MatcapTexture,
	ParametricRimColorFactor,
	ParametricRimFresnelPowerFactor,
	ParametricRimLiftFactor,
	RimMultiplyTexture,
	RimLightingMixFactor,
	OutlineWidthMode,
	OutlineWidthFactor,
	OutlineWidthMultiplyTexture,
	OutlineColorFactor,
	OutlineLightingMixFactor,
	UvAnimationMaskTexture,
	UvAnimationScrollXSpeedFactor,
	UvAnimationScrollYSpeedFactor,
	UvAnimationRotationSpeedFactor,
	UnityCullMode,
	UnitySrcBlend,
	UnityDstBlend,
	UnityZWrite,
	UnityAlphaToMask,
	EditorEditMode
}
public static class MToon10Properties
{
	private static readonly Dictionary<MToon10Prop, string> _unityShaderLabNames = new Dictionary<MToon10Prop, string>
	{
		[MToon10Prop.AlphaMode] = "_AlphaMode",
		[MToon10Prop.TransparentWithZWrite] = "_TransparentWithZWrite",
		[MToon10Prop.AlphaCutoff] = "_Cutoff",
		[MToon10Prop.RenderQueueOffsetNumber] = "_RenderQueueOffset",
		[MToon10Prop.DoubleSided] = "_DoubleSided",
		[MToon10Prop.BaseColorFactor] = "_Color",
		[MToon10Prop.BaseColorTexture] = "_MainTex",
		[MToon10Prop.ShadeColorFactor] = "_ShadeColor",
		[MToon10Prop.ShadeColorTexture] = "_ShadeTex",
		[MToon10Prop.NormalTexture] = "_BumpMap",
		[MToon10Prop.NormalTextureScale] = "_BumpScale",
		[MToon10Prop.ShadingShiftFactor] = "_ShadingShiftFactor",
		[MToon10Prop.ShadingShiftTexture] = "_ShadingShiftTex",
		[MToon10Prop.ShadingShiftTextureScale] = "_ShadingShiftTexScale",
		[MToon10Prop.ShadingToonyFactor] = "_ShadingToonyFactor",
		[MToon10Prop.GiEqualizationFactor] = "_GiEqualization",
		[MToon10Prop.EmissiveFactor] = "_EmissionColor",
		[MToon10Prop.EmissiveTexture] = "_EmissionMap",
		[MToon10Prop.MatcapColorFactor] = "_MatcapColor",
		[MToon10Prop.MatcapTexture] = "_MatcapTex",
		[MToon10Prop.ParametricRimColorFactor] = "_RimColor",
		[MToon10Prop.ParametricRimFresnelPowerFactor] = "_RimFresnelPower",
		[MToon10Prop.ParametricRimLiftFactor] = "_RimLift",
		[MToon10Prop.RimMultiplyTexture] = "_RimTex",
		[MToon10Prop.RimLightingMixFactor] = "_RimLightingMix",
		[MToon10Prop.OutlineWidthMode] = "_OutlineWidthMode",
		[MToon10Prop.OutlineWidthFactor] = "_OutlineWidth",
		[MToon10Prop.OutlineWidthMultiplyTexture] = "_OutlineWidthTex",
		[MToon10Prop.OutlineColorFactor] = "_OutlineColor",
		[MToon10Prop.OutlineLightingMixFactor] = "_OutlineLightingMix",
		[MToon10Prop.UvAnimationMaskTexture] = "_UvAnimMaskTex",
		[MToon10Prop.UvAnimationScrollXSpeedFactor] = "_UvAnimScrollXSpeed",
		[MToon10Prop.UvAnimationScrollYSpeedFactor] = "_UvAnimScrollYSpeed",
		[MToon10Prop.UvAnimationRotationSpeedFactor] = "_UvAnimRotationSpeed",
		[MToon10Prop.UnityCullMode] = "_M_CullMode",
		[MToon10Prop.UnitySrcBlend] = "_M_SrcBlend",
		[MToon10Prop.UnityDstBlend] = "_M_DstBlend",
		[MToon10Prop.UnityZWrite] = "_M_ZWrite",
		[MToon10Prop.UnityAlphaToMask] = "_M_AlphaToMask",
		[MToon10Prop.EditorEditMode] = "_M_EditMode"
	};

	public static IReadOnlyDictionary<MToon10Prop, string> UnityShaderLabNames => _unityShaderLabNames;

	public static string ToUnityShaderLabName(this MToon10Prop prop)
	{
		return UnityShaderLabNames[prop];
	}
}
public static class UnityAlphaModeKeyword
{
	public const string AlphaTest = "_ALPHATEST_ON";

	public const string AlphaBlend = "_ALPHABLEND_ON";

	public const string AlphaPremultiply = "_ALPHAPREMULTIPLY_ON";
}
public enum UnityAlphaToMaskMode
{
	Off,
	On
}
public enum UnityCullMode
{
	Off = 0,
	Back = 2
}
public static class UnityRenderTag
{
	public const string Key = "RenderType";

	public const string OpaqueValue = "Opaque";

	public const string TransparentCutoutValue = "TransparentCutout";

	public const string TransparentValue = "Transparent";
}
public enum UnityZWriteMode
{
	Off,
	On
}