using System;
using System.Runtime.CompilerServices;
using Cpp2IlInjected;
using UnityEngine;

namespace RootMotion.FinalIK
{
	// Token: 0x02000447 RID: 1095
	[Token(Token = "0x2000447")]
	[HelpURL("https://www.youtube.com/watch?v=r5jiZnsDH3M")]
	[AddComponentMenu("Scripts/RootMotion.FinalIK/Interaction System/Interaction Object")]
	public class InteractionObject : MonoBehaviour
	{
		// Token: 0x0600278F RID: 10127 RVA: 0x000577F8 File Offset: 0x000559F8
		[Token(Token = "0x600278F")]
		[Address(RVA = "0x10D77E0", Offset = "0x10D65E0", VA = "0x1810D77E0")]
		[ContextMenu("TUTORIAL VIDEO (PART 1: BASICS)")]
		private void OpenTutorial1()
		{
			Application.OpenURL("https://www.youtube.com/watch?v=r5jiZnsDH3M");
		}

		// Token: 0x06002790 RID: 10128 RVA: 0x00057810 File Offset: 0x00055A10
		[Token(Token = "0x6002790")]
		[Address(RVA = "0x10D7820", Offset = "0x10D6620", VA = "0x1810D7820")]
		[ContextMenu("TUTORIAL VIDEO (PART 2: PICKING UP...)")]
		private void OpenTutorial2()
		{
			Application.OpenURL("https://www.youtube.com/watch?v=eP9-zycoHLk");
		}

		// Token: 0x06002791 RID: 10129 RVA: 0x00057828 File Offset: 0x00055A28
		[Token(Token = "0x6002791")]
		[Address(RVA = "0x10D7860", Offset = "0x10D6660", VA = "0x1810D7860")]
		[ContextMenu("TUTORIAL VIDEO (PART 3: ANIMATION)")]
		private void OpenTutorial3()
		{
			Application.OpenURL("https://www.youtube.com/watch?v=sQfB2RcT1T4&index=14&list=PLVxSIA1OaTOu8Nos3CalXbJ2DrKnntMv6");
		}

		// Token: 0x06002792 RID: 10130 RVA: 0x00057840 File Offset: 0x00055A40
		[Token(Token = "0x6002792")]
		[Address(RVA = "0x10D78A0", Offset = "0x10D66A0", VA = "0x1810D78A0")]
		[ContextMenu("TUTORIAL VIDEO (PART 4: TRIGGERS)")]
		private void OpenTutorial4()
		{
			Application.OpenURL("https://www.youtube.com/watch?v=-TDZpNjt2mk&index=15&list=PLVxSIA1OaTOu8Nos3CalXbJ2DrKnntMv6");
		}

		// Token: 0x06002793 RID: 10131 RVA: 0x00057858 File Offset: 0x00055A58
		[Token(Token = "0x6002793")]
		[Address(RVA = "0x10D7920", Offset = "0x10D6720", VA = "0x1810D7920")]
		[ContextMenu("Support Group")]
		private void SupportGroup()
		{
			Application.OpenURL("https://groups.google.com/forum/#!forum/final-ik");
		}

		// Token: 0x06002794 RID: 10132 RVA: 0x00057870 File Offset: 0x00055A70
		[Token(Token = "0x6002794")]
		[Address(RVA = "0x10D60F0", Offset = "0x10D4EF0", VA = "0x1810D60F0")]
		[ContextMenu("Asset Store Thread")]
		private void ASThread()
		{
			Application.OpenURL("http://forum.unity3d.com/threads/final-ik-full-body-ik-aim-look-at-fabrik-ccd-ik-1-0-released.222685/");
		}

		// Token: 0x1700027C RID: 636
		// (get) Token: 0x06002795 RID: 10133 RVA: 0x00057888 File Offset: 0x00055A88
		// (set) Token: 0x06002796 RID: 10134 RVA: 0x0005789C File Offset: 0x00055A9C
		[Token(Token = "0x1700027C")]
		public float length
		{
			[Token(Token = "0x6002795")]
			[Address(RVA = "0x38DB30", Offset = "0x38C930", VA = "0x18038DB30")]
			get;
			[Token(Token = "0x6002796")]
			[Address(RVA = "0x38DBA0", Offset = "0x38C9A0", VA = "0x18038DBA0")]
			private set;
		}

		// Token: 0x1700027D RID: 637
		// (get) Token: 0x06002797 RID: 10135 RVA: 0x000578B0 File Offset: 0x00055AB0
		// (set) Token: 0x06002798 RID: 10136 RVA: 0x000578C4 File Offset: 0x00055AC4
		[Token(Token = "0x1700027D")]
		public InteractionSystem lastUsedInteractionSystem
		{
			[Token(Token = "0x6002797")]
			[Address(RVA = "0x517700", Offset = "0x516500", VA = "0x180517700")]
			[CompilerGenerated]
			get
			{
				return this.<lastUsedInteractionSystem>k__BackingField;
			}
			[Token(Token = "0x6002798")]
			[Address(RVA = "0x4C0FD0", Offset = "0x4BFDD0", VA = "0x1804C0FD0")]
			[CompilerGenerated]
			private set
			{
				/*
An exception occurred when decompiling this method (06002798)

ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void RootMotion.FinalIK.InteractionObject::set_lastUsedInteractionSystem(RootMotion.FinalIK.InteractionSystem)

 ---> System.Exception: Basic block has to end with unconditional control flow. 
{; 	Block_0:; 	stfld:InteractionSystem(InteractionObject::<lastUsedInteractionSystem>k__BackingField, ldloc:InteractionObject(this), ldloc:InteractionSystem(value)); }; 
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1810
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 344
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
   --- End of inner exception stack trace ---
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
   at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1618
*/;
			}
		}

		// Token: 0x06002799 RID: 10137 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x6002799")]
		[Address(RVA = "0x10D74E0", Offset = "0x10D62E0", VA = "0x1810D74E0")]
		public void Initiate()
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x1700027E RID: 638
		// (get) Token: 0x0600279A RID: 10138 RVA: 0x000578D8 File Offset: 0x00055AD8
		[Token(Token = "0x1700027E")]
		public Transform lookAtTarget
		{
			[Token(Token = "0x600279A")]
			[Address(RVA = "0x10D79C0", Offset = "0x10D67C0", VA = "0x1810D79C0")]
			get
			{
				Transform transform = this.otherLookAtTarget;
				int num = 0;
				if (!(transform != num))
				{
					return base.transform;
				}
				return this.otherLookAtTarget;
			}
		}

		// Token: 0x0600279B RID: 10139 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x600279B")]
		[Address(RVA = "0x10D6E60", Offset = "0x10D5C60", VA = "0x1810D6E60")]
		public InteractionTarget GetTarget(FullBodyBipedEffector effectorType, InteractionSystem interactionSystem)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x0600279C RID: 10140 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x600279C")]
		[Address(RVA = "0x10D6CB0", Offset = "0x10D5AB0", VA = "0x1810D6CB0")]
		public bool CurveUsed(InteractionObject.WeightCurve.Type type)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x0600279D RID: 10141 RVA: 0x00057908 File Offset: 0x00055B08
		[Token(Token = "0x600279D")]
		[Address(RVA = "0x31E360", Offset = "0x31D160", VA = "0x18031E360")]
		public InteractionTarget[] GetTargets()
		{
			return this.targets;
		}

		// Token: 0x0600279E RID: 10142 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x600279E")]
		[Address(RVA = "0x10D6FF0", Offset = "0x10D5DF0", VA = "0x1810D6FF0")]
		public Transform GetTarget(FullBodyBipedEffector effectorType, string tag)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x0600279F RID: 10143 RVA: 0x0005791C File Offset: 0x00055B1C
		[Token(Token = "0x600279F")]
		[Address(RVA = "0x4C0FD0", Offset = "0x4BFDD0", VA = "0x1804C0FD0")]
		public void OnStartInteraction(InteractionSystem interactionSystem)
		{
			/*
An exception occurred when decompiling this method (0600279F)

ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Void RootMotion.FinalIK.InteractionObject::OnStartInteraction(RootMotion.FinalIK.InteractionSystem)

 ---> System.Exception: Basic block has to end with unconditional control flow. 
{; 	Block_0:; 	stfld:InteractionSystem(InteractionObject::<lastUsedInteractionSystem>k__BackingField, ldloc:InteractionObject(this), ldloc:InteractionSystem(interactionSystem)); }; 
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.FlattenBasicBlocks(ILNode node) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 1810
   at ICSharpCode.Decompiler.ILAst.ILAstOptimizer.Optimize(DecompilerContext context, ILBlock method, AutoPropertyProvider autoPropertyProvider, StateMachineKind& stateMachineKind, MethodDef& inlinedMethod, AsyncMethodDebugInfo& asyncInfo, ILAstOptimizationStep abortBeforeStep) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstOptimizer.cs:line 344
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 123
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
   --- End of inner exception stack trace ---
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
   at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1618
*/;
		}

		// Token: 0x060027A0 RID: 10144 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60027A0")]
		[Address(RVA = "0x10D6710", Offset = "0x10D5510", VA = "0x1810D6710")]
		public void Apply(IKSolverFullBodyBiped solver, FullBodyBipedEffector effector, InteractionTarget target, float timer, float weight)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060027A1 RID: 10145 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60027A1")]
		[Address(RVA = "0x10D71A0", Offset = "0x10D5FA0", VA = "0x1810D71A0")]
		public float GetValue(InteractionObject.WeightCurve.Type weightCurveType, InteractionTarget target, float timer)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x1700027F RID: 639
		// (get) Token: 0x060027A2 RID: 10146 RVA: 0x00057930 File Offset: 0x00055B30
		[Token(Token = "0x1700027F")]
		public Transform targetsRoot
		{
			[Token(Token = "0x60027A2")]
			[Address(RVA = "0x10D7A40", Offset = "0x10D6840", VA = "0x1810D7A40")]
			get
			{
				Transform transform = this.otherTargetsRoot;
				int num = 0;
				if (!(transform != num))
				{
					return base.transform;
				}
				return this.otherTargetsRoot;
			}
		}

		// Token: 0x060027A3 RID: 10147 RVA: 0x00057960 File Offset: 0x00055B60
		[Token(Token = "0x60027A3")]
		[Address(RVA = "0x10D6CA0", Offset = "0x10D5AA0", VA = "0x1810D6CA0")]
		private void Awake()
		{
			this.Initiate();
		}

		// Token: 0x060027A4 RID: 10148 RVA: 0x000020D3 File Offset: 0x000002D3
		[Token(Token = "0x60027A4")]
		[Address(RVA = "0x10D6130", Offset = "0x10D4F30", VA = "0x1810D6130")]
		private void Apply(IKSolverFullBodyBiped solver, FullBodyBipedEffector effector, InteractionObject.WeightCurve.Type type, float value, float weight)
		{
			throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
		}

		// Token: 0x060027A5 RID: 10149 RVA: 0x00057974 File Offset: 0x00055B74
		[Token(Token = "0x60027A5")]
		[Address(RVA = "0x10D6DE0", Offset = "0x10D5BE0", VA = "0x1810D6DE0")]
		private Transform GetTarget(FullBodyBipedEffector effectorType)
		{
			InteractionTarget[] array = this.targets;
			int num = 0;
			int length = array.Length;
			if (num < length)
			{
				InteractionTarget interactionTarget = array[num];
				if (interactionTarget.effectorType != effectorType)
				{
					num++;
				}
				return interactionTarget.transform;
			}
			return base.transform;
		}

		// Token: 0x060027A6 RID: 10150 RVA: 0x000579C0 File Offset: 0x00055BC0
		[Token(Token = "0x60027A6")]
		[Address(RVA = "0x10D7470", Offset = "0x10D6270", VA = "0x1810D7470")]
		private int GetWeightCurveIndex(InteractionObject.WeightCurve.Type weightCurveType)
		{
			InteractionObject.WeightCurve[] array = this.weightCurves;
			int num = 0;
			int length = array.Length;
			if (num < length && array[num].type != weightCurveType)
			{
				num++;
			}
			return -1;
		}

		// Token: 0x060027A7 RID: 10151 RVA: 0x00057A00 File Offset: 0x00055C00
		[Token(Token = "0x60027A7")]
		[Address(RVA = "0x10D6D70", Offset = "0x10D5B70", VA = "0x1810D6D70")]
		private int GetMultiplierIndex(InteractionObject.WeightCurve.Type weightCurveType)
		{
			InteractionObject.Multiplier[] array = this.multipliers;
			int num = 0;
			int length = array.Length;
			if (num < length && array[num].result != weightCurveType)
			{
				num++;
			}
			return -1;
		}

		// Token: 0x060027A8 RID: 10152 RVA: 0x00057A40 File Offset: 0x00055C40
		[Token(Token = "0x60027A8")]
		[Address(RVA = "0x10D78E0", Offset = "0x10D66E0", VA = "0x1810D78E0")]
		[ContextMenu("User Manual")]
		private void OpenUserManual()
		{
			Application.OpenURL("http://www.root-motion.com/finalikdox/html/page10.html");
		}

		// Token: 0x060027A9 RID: 10153 RVA: 0x00057A58 File Offset: 0x00055C58
		[Token(Token = "0x60027A9")]
		[Address(RVA = "0x10D77A0", Offset = "0x10D65A0", VA = "0x1810D77A0")]
		[ContextMenu("Scrpt Reference")]
		private void OpenScriptReference()
		{
			Application.OpenURL("http://www.root-motion.com/finalikdox/html/class_root_motion_1_1_final_i_k_1_1_interaction_object.html");
		}

		// Token: 0x060027AA RID: 10154 RVA: 0x00057A70 File Offset: 0x00055C70
		[Token(Token = "0x60027AA")]
		[Address(RVA = "0x10D7960", Offset = "0x10D6760", VA = "0x1810D7960")]
		public InteractionObject()
		{
			InteractionTarget[] array = new InteractionTarget[0];
			this.targets = array;
			base..ctor();
		}

		// Token: 0x0400311A RID: 12570
		[FieldOffset(Offset = "0x18")]
		[Token(Token = "0x400311A")]
		[Tooltip("If the Interaction System has a 'Look At' LookAtIK component assigned, will use it to make the character look at the specified Transform. If unassigned, will look at this GameObject.")]
		public Transform otherLookAtTarget;

		// Token: 0x0400311B RID: 12571
		[FieldOffset(Offset = "0x20")]
		[Token(Token = "0x400311B")]
		[Tooltip("The root Transform of the InteractionTargets. If null, will use this GameObject. GetComponentsInChildren<InteractionTarget>() will be used at initiation to find all InteractionTargets associated with this InteractionObject.")]
		public Transform otherTargetsRoot;

		// Token: 0x0400311C RID: 12572
		[FieldOffset(Offset = "0x28")]
		[Token(Token = "0x400311C")]
		[Tooltip("If assigned, all PositionOffset channels will be applied in the rotation space of this Transform. If not, they will be in the rotation space of the character.")]
		public Transform positionOffsetSpace;

		// Token: 0x0400311D RID: 12573
		[FieldOffset(Offset = "0x30")]
		[Token(Token = "0x400311D")]
		public InteractionObject.WeightCurve[] weightCurves;

		// Token: 0x0400311E RID: 12574
		[FieldOffset(Offset = "0x38")]
		[Token(Token = "0x400311E")]
		public InteractionObject.Multiplier[] multipliers;

		// Token: 0x0400311F RID: 12575
		[FieldOffset(Offset = "0x40")]
		[Token(Token = "0x400311F")]
		public InteractionObject.InteractionEvent[] events;

		// Token: 0x04003122 RID: 12578
		[FieldOffset(Offset = "0x58")]
		[Token(Token = "0x4003122")]
		private InteractionTarget[] targets;

		// Token: 0x02000448 RID: 1096
		[Token(Token = "0x2000448")]
		[Serializable]
		public class InteractionEvent
		{
			// Token: 0x060027AB RID: 10155 RVA: 0x00057A94 File Offset: 0x00055C94
			[Token(Token = "0x60027AB")]
			[Address(RVA = "0x14EB2F0", Offset = "0x14EA0F0", VA = "0x1814EB2F0")]
			public void Activate(Transform t)
			{
				InteractionObject.AnimatorEvent[] array = this.animations;
				int num = 0;
				int length = array.Length;
				if (num < length)
				{
					InteractionObject.AnimatorEvent animatorEvent = array[num];
					bool flag = this.pickUp;
					animatorEvent.Activate(flag);
					num++;
				}
				InteractionObject.Message[] array2 = this.messages;
				int length2 = array2.Length;
				if (num < length2)
				{
					InteractionObject.Message message = array2[num];
					GameObject recipient = message.recipient;
					int num2 = 0;
					if (!(recipient == num2))
					{
						string function = message.function;
						string empty = string.Empty;
						if (!string.Equals(function, empty) && !string.Equals(message.function, ""))
						{
							GameObject recipient2 = message.recipient;
							string function2 = message.function;
							int num3 = 0;
							recipient2.SendMessage(function2, t, (SendMessageOptions)num3);
						}
					}
					num++;
				}
			}

			// Token: 0x060027AC RID: 10156 RVA: 0x00057B68 File Offset: 0x00055D68
			[Token(Token = "0x60027AC")]
			[Address(RVA = "0x3D8B20", Offset = "0x3D7920", VA = "0x1803D8B20")]
			public InteractionEvent()
			{
			}

			// Token: 0x04003123 RID: 12579
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003123")]
			[Tooltip("The time of the event since interaction start.")]
			public float time;

			// Token: 0x04003124 RID: 12580
			[FieldOffset(Offset = "0x14")]
			[Token(Token = "0x4003124")]
			[Tooltip("If true, the interaction will be paused on this event. The interaction can be resumed by InteractionSystem.ResumeInteraction() or InteractionSystem.ResumeAll;")]
			public bool pause;

			// Token: 0x04003125 RID: 12581
			[FieldOffset(Offset = "0x15")]
			[Token(Token = "0x4003125")]
			[Tooltip("If true, the object will be parented to the effector bone on this event. Note that picking up like this can be done by only a single effector at a time. If you wish to pick up an object with both hands, see the Interaction PickUp2Handed demo scene.")]
			public bool pickUp;

			// Token: 0x04003126 RID: 12582
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003126")]
			[Tooltip("The animations called on this event.")]
			public InteractionObject.AnimatorEvent[] animations;

			// Token: 0x04003127 RID: 12583
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x4003127")]
			[Tooltip("The messages sent on this event using GameObject.SendMessage().")]
			public InteractionObject.Message[] messages;
		}

		// Token: 0x02000449 RID: 1097
		[Token(Token = "0x2000449")]
		[Serializable]
		public class Message
		{
			// Token: 0x060027AD RID: 10157 RVA: 0x00057B7C File Offset: 0x00055D7C
			[Token(Token = "0x60027AD")]
			[Address(RVA = "0x14F15A0", Offset = "0x14F03A0", VA = "0x1814F15A0")]
			public void Send(Transform t)
			{
				GameObject gameObject = this.recipient;
				int num = 0;
				if (!(gameObject == num))
				{
					string text = this.function;
					string text2 = string.Empty;
					if (!string.Equals(text, text2) && !string.Equals(this.function, ""))
					{
						GameObject gameObject2 = this.recipient;
						string text3 = this.function;
						int num2 = 0;
						gameObject2.SendMessage(text3, t, (SendMessageOptions)num2);
					}
				}
			}

			// Token: 0x060027AE RID: 10158 RVA: 0x00057BEC File Offset: 0x00055DEC
			[Token(Token = "0x60027AE")]
			[Address(RVA = "0x3D8B20", Offset = "0x3D7920", VA = "0x1803D8B20")]
			public Message()
			{
			}

			// Token: 0x04003128 RID: 12584
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003128")]
			[Tooltip("The name of the function called.")]
			public string function;

			// Token: 0x04003129 RID: 12585
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003129")]
			[Tooltip("The recipient game object.")]
			public GameObject recipient;

			// Token: 0x0400312A RID: 12586
			[Token(Token = "0x400312A")]
			private const string empty = "";
		}

		// Token: 0x0200044A RID: 1098
		[Token(Token = "0x200044A")]
		[Serializable]
		public class AnimatorEvent
		{
			// Token: 0x060027AF RID: 10159 RVA: 0x00057C00 File Offset: 0x00055E00
			[Token(Token = "0x60027AF")]
			[Address(RVA = "0x14E2000", Offset = "0x14E0E00", VA = "0x1814E2000")]
			public void Activate(bool pickUp)
			{
				Animator animator = this.animator;
				int num = 0;
				bool flag = animator != num;
				int num2 = 0;
				if (flag)
				{
					if (pickUp)
					{
						Animator animator2 = this.animator;
						int num3 = 0;
						animator2.applyRootMotion = num3 != 0;
					}
					Animator animator3 = this.animator;
					bool flag2 = string.Equals(this.animationState, "");
					if (!flag2)
					{
						int num4 = this.layer;
						float num5 = this.crossfadeTime;
						string text = this.animationState;
						if (this.resetNormalizedTime == flag2)
						{
							animator3.CrossFade(text, num5, num4);
						}
						animator3.CrossFade(text, num5, num4, (float)num2);
					}
				}
				Animation animation = this.animation;
				int num6 = 0;
				if (animation != num6)
				{
					Animation animation2 = this.animation;
					bool flag3 = string.Equals(this.animationState, "");
					if (!flag3)
					{
						if (this.resetNormalizedTime != flag3)
						{
							string text2 = this.animationState;
							AnimationState animationState = animation2[text2];
							int num7 = 0;
							animationState.normalizedTime = (float)num7;
						}
						string text3 = this.animationState;
						AnimationState animationState2 = animation2[text3];
						int num8 = this.layer;
						animationState2.layer = num8;
						float num9 = this.crossfadeTime;
						string text4 = this.animationState;
						animation2.CrossFade(text4, num9);
					}
				}
			}

			// Token: 0x060027B0 RID: 10160 RVA: 0x000020D3 File Offset: 0x000002D3
			[Token(Token = "0x60027B0")]
			[Address(RVA = "0x14E21F0", Offset = "0x14E0FF0", VA = "0x1814E21F0")]
			private void Activate(Animator animator)
			{
				throw new AnalysisFailedException("CPP2IL failed to recover any usable IL for this method.");
			}

			// Token: 0x060027B1 RID: 10161 RVA: 0x00057D40 File Offset: 0x00055F40
			[Token(Token = "0x60027B1")]
			[Address(RVA = "0x14E1F40", Offset = "0x14E0D40", VA = "0x1814E1F40")]
			private void Activate(Animation animation)
			{
				bool flag = string.Equals(this.animationState, "");
				if (!flag)
				{
					if (this.resetNormalizedTime != flag)
					{
						string text = this.animationState;
						AnimationState animationState = animation[text];
						int num = 0;
						animationState.normalizedTime = (float)num;
					}
					string text2 = this.animationState;
					AnimationState animationState2 = animation[text2];
					int num2 = this.layer;
					animationState2.layer = num2;
					float num3 = this.crossfadeTime;
					string text3 = this.animationState;
					animation.CrossFade(text3, num3);
				}
			}

			// Token: 0x060027B2 RID: 10162 RVA: 0x00057DC8 File Offset: 0x00055FC8
			[Token(Token = "0x60027B2")]
			[Address(RVA = "0x14E2290", Offset = "0x14E1090", VA = "0x1814E2290")]
			public AnimatorEvent()
			{
			}

			// Token: 0x0400312B RID: 12587
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x400312B")]
			[Tooltip("The Animator component that will receive the AnimatorEvents.")]
			public Animator animator;

			// Token: 0x0400312C RID: 12588
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x400312C")]
			[Tooltip("The Animation component that will receive the AnimatorEvents (Legacy).")]
			public Animation animation;

			// Token: 0x0400312D RID: 12589
			[FieldOffset(Offset = "0x20")]
			[Token(Token = "0x400312D")]
			[Tooltip("The name of the animation state.")]
			public string animationState;

			// Token: 0x0400312E RID: 12590
			[FieldOffset(Offset = "0x28")]
			[Token(Token = "0x400312E")]
			[Tooltip("The crossfading time.")]
			public float crossfadeTime = 0.3f;

			// Token: 0x0400312F RID: 12591
			[FieldOffset(Offset = "0x2C")]
			[Token(Token = "0x400312F")]
			[Tooltip("The layer of the animation state (if using Legacy, the animation state will be forced to this layer).")]
			public int layer;

			// Token: 0x04003130 RID: 12592
			[FieldOffset(Offset = "0x30")]
			[Token(Token = "0x4003130")]
			[Tooltip("Should the animation always start from 0 normalized time?")]
			public bool resetNormalizedTime;

			// Token: 0x04003131 RID: 12593
			[Token(Token = "0x4003131")]
			private const string empty = "";
		}

		// Token: 0x0200044B RID: 1099
		[Token(Token = "0x200044B")]
		[Serializable]
		public class WeightCurve
		{
			// Token: 0x060027B3 RID: 10163 RVA: 0x00057DE8 File Offset: 0x00055FE8
			[Token(Token = "0x60027B3")]
			[Address(RVA = "0x14FB840", Offset = "0x14FA640", VA = "0x1814FB840")]
			public float GetValue(float timer)
			{
				return this.curve.Evaluate(timer);
			}

			// Token: 0x060027B4 RID: 10164 RVA: 0x00057E08 File Offset: 0x00056008
			[Token(Token = "0x60027B4")]
			[Address(RVA = "0x3D8B20", Offset = "0x3D7920", VA = "0x1803D8B20")]
			public WeightCurve()
			{
			}

			// Token: 0x04003132 RID: 12594
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003132")]
			[Tooltip("The type of the curve (InteractionObject.WeightCurve.Type).")]
			public InteractionObject.WeightCurve.Type type;

			// Token: 0x04003133 RID: 12595
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003133")]
			[Tooltip("The weight curve.")]
			public AnimationCurve curve;

			// Token: 0x0200044C RID: 1100
			[Token(Token = "0x200044C")]
			[Serializable]
			public enum Type
			{
				// Token: 0x04003135 RID: 12597
				[Token(Token = "0x4003135")]
				PositionWeight,
				// Token: 0x04003136 RID: 12598
				[Token(Token = "0x4003136")]
				RotationWeight,
				// Token: 0x04003137 RID: 12599
				[Token(Token = "0x4003137")]
				PositionOffsetX,
				// Token: 0x04003138 RID: 12600
				[Token(Token = "0x4003138")]
				PositionOffsetY,
				// Token: 0x04003139 RID: 12601
				[Token(Token = "0x4003139")]
				PositionOffsetZ,
				// Token: 0x0400313A RID: 12602
				[Token(Token = "0x400313A")]
				Pull,
				// Token: 0x0400313B RID: 12603
				[Token(Token = "0x400313B")]
				Reach,
				// Token: 0x0400313C RID: 12604
				[Token(Token = "0x400313C")]
				RotateBoneWeight,
				// Token: 0x0400313D RID: 12605
				[Token(Token = "0x400313D")]
				Push,
				// Token: 0x0400313E RID: 12606
				[Token(Token = "0x400313E")]
				PushParent,
				// Token: 0x0400313F RID: 12607
				[Token(Token = "0x400313F")]
				PoserWeight
			}
		}

		// Token: 0x0200044D RID: 1101
		[Token(Token = "0x200044D")]
		[Serializable]
		public class Multiplier
		{
			// Token: 0x060027B5 RID: 10165 RVA: 0x00057E1C File Offset: 0x0005601C
			[Token(Token = "0x60027B5")]
			[Address(RVA = "0x14F1690", Offset = "0x14F0490", VA = "0x1814F1690")]
			public float GetValue(InteractionObject.WeightCurve weightCurve, float timer)
			{
				/*
An exception occurred when decompiling this method (060027B5)

ICSharpCode.Decompiler.DecompilerException: Error decompiling System.Single RootMotion.FinalIK.InteractionObject/Multiplier::GetValue(RootMotion.FinalIK.InteractionObject/WeightCurve,System.Single)

 ---> System.ArgumentOutOfRangeException: Non-negative number required. (Parameter 'length')
   at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
   at System.Array.Copy(Array sourceArray, Array destinationArray, Int32 length)
   at ICSharpCode.Decompiler.ILAst.ILAstBuilder.StackSlot.ModifyStack(StackSlot[] stack, Int32 popCount, Int32 pushCount, ByteCode pushDefinition) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstBuilder.cs:line 51
   at ICSharpCode.Decompiler.ILAst.ILAstBuilder.StackAnalysis(MethodDef methodDef) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstBuilder.cs:line 401
   at ICSharpCode.Decompiler.ILAst.ILAstBuilder.Build(MethodDef methodDef, Boolean optimize, DecompilerContext context) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\ILAst\ILAstBuilder.cs:line 276
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(IEnumerable`1 parameters, MethodDebugInfoBuilder& builder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 112
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 88
   --- End of inner exception stack trace ---
   at ICSharpCode.Decompiler.Ast.AstMethodBodyBuilder.CreateMethodBody(MethodDef methodDef, DecompilerContext context, AutoPropertyProvider autoPropertyProvider, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, StringBuilder sb, MethodDebugInfoBuilder& stmtsBuilder) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstMethodBodyBuilder.cs:line 92
   at ICSharpCode.Decompiler.Ast.AstBuilder.AddMethodBody(EntityDeclaration methodNode, EntityDeclaration& updatedNode, MethodDef method, IEnumerable`1 parameters, Boolean valueParameterIsKeyword, MethodKind methodKind) in D:\a\dnSpy\dnSpy\Extensions\ILSpy.Decompiler\ICSharpCode.Decompiler\ICSharpCode.Decompiler\Ast\AstBuilder.cs:line 1618
*/;
			}

			// Token: 0x060027B6 RID: 10166 RVA: 0x00057E44 File Offset: 0x00056044
			[Token(Token = "0x60027B6")]
			[Address(RVA = "0x5FD950", Offset = "0x5FC750", VA = "0x1805FD950")]
			public Multiplier()
			{
			}

			// Token: 0x04003140 RID: 12608
			[FieldOffset(Offset = "0x10")]
			[Token(Token = "0x4003140")]
			[Tooltip("The curve type to multiply.")]
			public InteractionObject.WeightCurve.Type curve;

			// Token: 0x04003141 RID: 12609
			[FieldOffset(Offset = "0x14")]
			[Token(Token = "0x4003141")]
			[Tooltip("The multiplier of the curve's value.")]
			public float multiplier = 1f;

			// Token: 0x04003142 RID: 12610
			[FieldOffset(Offset = "0x18")]
			[Token(Token = "0x4003142")]
			[Tooltip("The resulting value will be applied to this channel.")]
			public InteractionObject.WeightCurve.Type result;
		}
	}
}
