Decompiled source of PersistentPurchasesBackport v2.0.0

Assembly-CSharp.dll

Decompiled 6 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.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using DigitalRuby.ThunderAndLightning;
using Dissonance;
using Dissonance.Audio.Playback;
using Dissonance.Datastructures;
using Dissonance.Extensions;
using Dissonance.Integrations.Unity_NFGO;
using Dissonance.Networking;
using DunGen;
using DunGen.Analysis;
using DunGen.Graph;
using DunGen.Tags;
using GameNetcodeStuff;
using JetBrains.Annotations;
using Netcode.Transports.Facepunch;
using Steamworks;
using Steamworks.Data;
using Steamworks.ServerList;
using TMPro;
using Unity.AI.Navigation;
using Unity.Collections;
using Unity.Netcode;
using Unity.Netcode.Components;
using Unity.Netcode.Samples;
using Unity.Netcode.Transports.UTP;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Animations.Rigging;
using UnityEngine.Audio;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.InputSystem.Utilities;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.SceneManagement;
using UnityEngine.Serialization;
using UnityEngine.Tilemaps;
using UnityEngine.UI;
using UnityEngine.VFX;
using UnityEngine.Video;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
public class AlarmButton : MonoBehaviour
{
	private Animator buttonAnimator;

	public float timeSincePushing;

	public void PushAlarmButton()
	{
		if (!(timeSincePushing < 1f))
		{
			buttonAnimator.SetTrigger("press");
			HUDManager.Instance.TriggerAlarmHornEffect();
		}
	}

	private void Update()
	{
		if (timeSincePushing <= 5f)
		{
			timeSincePushing += Time.deltaTime;
		}
	}
}
public class AnimatedItem : GrabbableObject
{
	public string grabItemBoolString;

	public string dropItemTriggerString;

	public bool makeAnimationWhenDropping;

	public Animator itemAnimator;

	public AudioSource itemAudio;

	public AudioClip grabAudio;

	public AudioClip dropAudio;

	public bool loopGrabAudio;

	public bool loopDropAudio;

	[Range(0f, 100f)]
	public int chanceToTriggerAnimation = 100;

	public int chanceToTriggerAlternateMesh;

	public Mesh alternateMesh;

	private Mesh normalMesh;

	private Random itemRandomChance;

	public float noiseRange;

	public float noiseLoudness;

	private int timesPlayedInOneSpot;

	private float makeNoiseInterval;

	private Vector3 lastPosition;

	public AudioLowPassFilter itemAudioLowPassFilter;

	private bool wasInPocket;

	public override void Start()
	{
		base.Start();
		itemRandomChance = new Random(StartOfRound.Instance.randomMapSeed + StartOfRound.Instance.currentLevelID + itemProperties.itemId);
		Debug.Log((object)$"Seed: {StartOfRound.Instance.randomMapSeed} + {StartOfRound.Instance.currentLevelID} + {itemProperties.itemId}");
		if (chanceToTriggerAlternateMesh > 0)
		{
			normalMesh = ((Component)this).gameObject.GetComponent<MeshFilter>().mesh;
		}
	}

	public override void EquipItem()
	{
		base.EquipItem();
		if ((Object)(object)itemAudioLowPassFilter != (Object)null)
		{
			itemAudioLowPassFilter.cutoffFrequency = 20000f;
		}
		itemAudio.volume = 1f;
		if (chanceToTriggerAlternateMesh > 0)
		{
			if (itemRandomChance.Next(0, 100) < chanceToTriggerAlternateMesh)
			{
				((Component)this).gameObject.GetComponent<MeshFilter>().mesh = alternateMesh;
				itemAudio.Stop();
				return;
			}
			((Component)this).gameObject.GetComponent<MeshFilter>().mesh = normalMesh;
		}
		if (!wasInPocket)
		{
			if (itemRandomChance.Next(0, 100) > chanceToTriggerAnimation)
			{
				itemAudio.Stop();
				return;
			}
		}
		else
		{
			wasInPocket = false;
		}
		if ((Object)(object)itemAnimator != (Object)null)
		{
			itemAnimator.SetBool(grabItemBoolString, true);
		}
		if ((Object)(object)itemAudio != (Object)null)
		{
			itemAudio.clip = grabAudio;
			itemAudio.loop = loopGrabAudio;
			itemAudio.Play();
		}
	}

	public override void DiscardItem()
	{
		base.DiscardItem();
		if ((Object)(object)itemAnimator != (Object)null)
		{
			itemAnimator.SetBool(grabItemBoolString, false);
		}
		if (chanceToTriggerAlternateMesh > 0)
		{
			((Component)this).gameObject.GetComponent<MeshFilter>().mesh = normalMesh;
		}
		if (!makeAnimationWhenDropping)
		{
			itemAudio.Stop();
			return;
		}
		if (itemRandomChance.Next(0, 100) < chanceToTriggerAnimation)
		{
			itemAudio.Stop();
			return;
		}
		if ((Object)(object)itemAnimator != (Object)null)
		{
			itemAnimator.SetTrigger(dropItemTriggerString);
		}
		if ((Object)(object)itemAudio != (Object)null)
		{
			itemAudio.loop = loopDropAudio;
			itemAudio.clip = dropAudio;
			itemAudio.Play();
			if ((Object)(object)itemAudioLowPassFilter != (Object)null)
			{
				itemAudioLowPassFilter.cutoffFrequency = 20000f;
			}
			itemAudio.volume = 1f;
		}
	}

	public override void PocketItem()
	{
		base.PocketItem();
		wasInPocket = true;
		if ((Object)(object)itemAudio != (Object)null)
		{
			if ((Object)(object)itemAudioLowPassFilter != (Object)null)
			{
				itemAudioLowPassFilter.cutoffFrequency = 1700f;
			}
			itemAudio.volume = 0.5f;
		}
	}

	public override void Update()
	{
		//IL_0041: 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_00d1: 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)
		base.Update();
		if ((Object)(object)itemAudio == (Object)null || !itemAudio.isPlaying)
		{
			return;
		}
		if (makeNoiseInterval <= 0f)
		{
			makeNoiseInterval = 0.75f;
			if (Vector3.Distance(lastPosition, ((Component)this).transform.position) < 4f)
			{
				timesPlayedInOneSpot++;
			}
			else
			{
				timesPlayedInOneSpot = 0;
			}
			if (isPocketed)
			{
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange / 2f, noiseLoudness / 2f, timesPlayedInOneSpot, isInElevator && StartOfRound.Instance.hangarDoorsClosed);
			}
			else
			{
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, noiseRange, noiseLoudness, timesPlayedInOneSpot, isInElevator && StartOfRound.Instance.hangarDoorsClosed);
			}
		}
		else
		{
			makeNoiseInterval -= Time.deltaTime;
		}
	}

	protected override void __initializeVariables()
	{
		base.__initializeVariables();
	}

	protected internal override string __getTypeName()
	{
		return "AnimatedItem";
	}
}
public class AnimatedTextureUV : MonoBehaviour
{
	private Material[] setMaterials;

	public MeshRenderer meshRenderer;

	public SkinnedMeshRenderer skinnedMeshRenderer;

	public int materialIndex;

	public int columns = 1;

	public int rows = 1;

	public float waitFrameTime = 0.005f;

	private float horizontalOffset;

	private float verticalOffset;

	private Coroutine animateMaterial;

	private bool skinnedMesh;

	private void OnEnable()
	{
		if (animateMaterial == null)
		{
			Debug.Log((object)"Animating material now");
			animateMaterial = ((MonoBehaviour)this).StartCoroutine(AnimateUV());
		}
	}

	private void OnDisable()
	{
		if (animateMaterial != null)
		{
			((MonoBehaviour)this).StopCoroutine(animateMaterial);
		}
	}

	private IEnumerator AnimateUV()
	{
		yield return null;
		if ((Object)(object)skinnedMeshRenderer != (Object)null)
		{
			setMaterials = ((Renderer)skinnedMeshRenderer).materials;
			skinnedMesh = true;
		}
		else
		{
			setMaterials = ((Renderer)meshRenderer).materials;
		}
		float maxVertical = 1f - 1f / (float)columns;
		float maxHorizontal = 1f - 1f / (float)rows;
		while (((Behaviour)this).enabled)
		{
			yield return (object)new WaitForSeconds(waitFrameTime);
			horizontalOffset += 1f / (float)rows;
			if (horizontalOffset > maxHorizontal)
			{
				horizontalOffset = 0f;
				verticalOffset += 1f / (float)columns;
				if (verticalOffset > maxVertical)
				{
					verticalOffset = 0f;
				}
			}
			setMaterials[materialIndex].SetTextureOffset("_BaseColorMap", new Vector2(horizontalOffset, verticalOffset));
			if (skinnedMesh)
			{
				((Renderer)skinnedMeshRenderer).materials = setMaterials;
			}
			else
			{
				((Renderer)skinnedMeshRenderer).materials = setMaterials;
			}
		}
	}
}
public class AnimationStopPoints : MonoBehaviour
{
	public bool canAnimationStop;

	public int animationPosition = 1;

	public void SetAnimationStopPosition1()
	{
		canAnimationStop = true;
		animationPosition = 1;
	}

	public void SetAnimationGo()
	{
		canAnimationStop = false;
	}

	public void SetAnimationStopPosition2()
	{
		canAnimationStop = true;
		animationPosition = 2;
	}
}
public class AudioReverbPresets : MonoBehaviour
{
	public AudioReverbTrigger[] audioPresets;
}
public class AutoParentToShip : NetworkBehaviour
{
	public bool disableObject;

	public Vector3 positionOffset;

	public Vector3 rotationOffset;

	[HideInInspector]
	public Vector3 startingPosition;

	[HideInInspector]
	public Vector3 startingRotation;

	public bool overrideOffset;

	private void Awake()
	{
		//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_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_0043: 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_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_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)
		//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)
		if (!overrideOffset)
		{
			positionOffset = StartOfRound.Instance.elevatorTransform.InverseTransformPoint(((Component)this).transform.position);
			rotationOffset = StartOfRound.Instance.elevatorTransform.InverseTransformDirection(((Component)this).transform.eulerAngles);
		}
		MoveToOffset();
		PlaceableShipObject component = ((Component)this).gameObject.GetComponent<PlaceableShipObject>();
		if ((Object)(object)component != (Object)null && (Object)(object)component.parentObjectSecondary != (Object)null)
		{
			startingPosition = component.parentObjectSecondary.position;
			startingRotation = component.parentObjectSecondary.eulerAngles;
		}
		else
		{
			startingPosition = positionOffset;
			startingRotation = rotationOffset;
		}
	}

	private void LateUpdate()
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		if (!StartOfRound.Instance.suckingFurnitureOutOfShip)
		{
			if (disableObject)
			{
				((Component)this).transform.position = new Vector3(800f, -100f, 0f);
			}
			else
			{
				MoveToOffset();
			}
		}
	}

	public void StartSuckingOutOfShip()
	{
		((MonoBehaviour)this).StartCoroutine(SuckObjectOutOfShip());
	}

	private IEnumerator SuckObjectOutOfShip()
	{
		Vector3 dir = Vector3.Normalize((StartOfRound.Instance.middleOfSpaceNode.position - ((Component)this).transform.position) * 10000f);
		Debug.Log((object)dir);
		Quaternion randomRotation = Random.rotation;
		while (StartOfRound.Instance.suckingFurnitureOutOfShip)
		{
			yield return null;
			((Component)this).transform.position = ((Component)this).transform.position + dir * (Time.deltaTime * Mathf.Clamp(StartOfRound.Instance.suckingPower, 1.1f, 100f) * 17f);
			((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, ((Component)this).transform.rotation * randomRotation, Time.deltaTime * StartOfRound.Instance.suckingPower);
			Debug.DrawRay(((Component)this).transform.position + Vector3.up * 0.2f, StartOfRound.Instance.middleOfSpaceNode.position - ((Component)this).transform.position, Color.blue);
			Debug.DrawRay(((Component)this).transform.position, dir, Color.green);
		}
	}

	public void MoveToOffset()
	{
		//IL_0010: 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_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_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_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_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)
		((Component)this).transform.rotation = StartOfRound.Instance.elevatorTransform.rotation;
		((Component)this).transform.Rotate(rotationOffset);
		((Component)this).transform.position = StartOfRound.Instance.elevatorTransform.position;
		Vector3 val = positionOffset;
		val = StartOfRound.Instance.elevatorTransform.rotation * val;
		Transform transform = ((Component)this).transform;
		transform.position += val;
	}

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

	protected internal override string __getTypeName()
	{
		return "AutoParentToShip";
	}
}
public class BaboonBirdAI : EnemyAI
{
	public Dictionary<Transform, Threat> threats = new Dictionary<Transform, Threat>();

	public Transform focusedThreatTransform;

	public Threat focusedThreat;

	public bool focusingOnThreat;

	public bool focusedThreatIsInView;

	private int focusLevel;

	private float fearLevel;

	private float fearLevelNoDistComparison;

	private Vector3 agentLocalVelocity;

	private float velX;

	private float velZ;

	private Vector3 previousPosition;

	public Transform animationContainer;

	public MultiAimConstraint headLookRig;

	public Transform headLookTarget;

	private Ray lookRay;

	public float fov;

	public float visionDistance;

	private int visibleThreatsMask = 524296;

	private int scrapMask = 64;

	private int leadershipLevel;

	private int previousBehaviourState = -1;

	public BaboonHawkGroup scoutingGroup;

	private float miscAnimationTimer;

	private int currentMiscAnimation;

	private Vector3 lookTarget;

	private Vector3 peekTarget;

	private float peekTimer;

	public AISearchRoutine scoutingSearchRoutine;

	public static Vector3 baboonCampPosition;

	public float scoutTimer;

	public float timeToScout;

	private float timeSinceRestWhileScouting;

	private float restingDuringScouting;

	private bool eyesClosed;

	private bool restingAtCamp;

	private float restAtCampTimer;

	private float chosenDistanceToCamp = 1f;

	private float timeSincePingingBirdInterest;

	private float timeSinceLastMiscAnimation;

	private int aggressiveMode;

	private int previousAggressiveMode;

	private float fightTimer;

	public AudioSource aggressionAudio;

	private Vector3 debugSphere;

	public Collider ownCollider;

	private float timeSinceAggressiveDisplay;

	private float timeSpentFocusingOnThreat;

	private float timeSinceFighting;

	private bool doingKillAnimation;

	private Coroutine killAnimCoroutine;

	private float timeSinceHitting;

	public Transform deadBodyPoint;

	public AudioClip[] cawScreamSFX;

	public AudioClip[] cawLaughSFX;

	private float noiseTimer;

	private float noiseInterval;

	public GrabbableObject focusedScrap;

	public GrabbableObject heldScrap;

	public bool movingToScrap;

	public Transform grabTarget;

	public TwoBoneIKConstraint leftArmRig;

	public TwoBoneIKConstraint rightArmRig;

	private bool oddAIInterval;

	private DeadBodyInfo killAnimationBody;

	private float timeSinceBeingAttackedByPlayer;

	private float timeSinceJoiningOrLeavingScoutingGroup;

	private BaboonBirdAI biggestBaboon;

	public override void Start()
	{
		//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_0114: 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_0078: 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)
		//IL_00fc: 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_0108: 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)
		base.Start();
		if (!((NetworkBehaviour)this).IsOwner)
		{
			return;
		}
		Random random = new Random(StartOfRound.Instance.randomMapSeed + thisEnemyIndex);
		leadershipLevel = random.Next(0, 500);
		if (baboonCampPosition == Vector3.zero)
		{
			List<GameObject> list = new List<GameObject>();
			for (int i = 0; i < RoundManager.Instance.outsideAINodes.Length - 2; i += 2)
			{
				if (Vector3.Distance(RoundManager.Instance.outsideAINodes[i].transform.position, StartOfRound.Instance.elevatorTransform.position) > 30f && !PathIsIntersectedByLineOfSight(RoundManager.Instance.outsideAINodes[i].transform.position, calculatePathDistance: false, avoidLineOfSight: false))
				{
					list.Add(RoundManager.Instance.outsideAINodes[i]);
				}
			}
			baboonCampPosition = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(list[random.Next(0, list.Count)].transform.position, 15f, RoundManager.Instance.navHit, random);
		}
		SyncInitialValuesServerRpc(leadershipLevel, baboonCampPosition);
	}

	[ServerRpc]
	public void SyncInitialValuesServerRpc(int syncLeadershipLevel, Vector3 campPosition)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Invalid comparison between Unknown and I4
		//IL_011d: 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_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_00b7: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3452382367u, val, (RpcDelivery)0);
			BytePacker.WriteValueBitPacked(val2, syncLeadershipLevel);
			((FastBufferWriter)(ref val2)).WriteValueSafe(ref campPosition);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3452382367u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			SyncInitialValuesClientRpc(syncLeadershipLevel, campPosition);
		}
	}

	[ClientRpc]
	public void SyncInitialValuesClientRpc(int syncLeadershipLevel, Vector3 campPosition)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3856685904u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, syncLeadershipLevel);
				((FastBufferWriter)(ref val2)).WriteValueSafe(ref campPosition);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3856685904u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				leadershipLevel = syncLeadershipLevel;
				baboonCampPosition = campPosition;
				((Component)this).transform.localScale = ((Component)this).transform.localScale * Mathf.Max((float)leadershipLevel / 200f * 0.6f, 0.9f);
			}
		}
	}

	public void LateUpdate()
	{
		//IL_00d9: 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)
		if ((!inSpecialAnimation && ((Object)(object)focusedThreatTransform == (Object)null || currentBehaviourStateIndex != 2) && peekTimer < 0f) || isEnemyDead)
		{
			agent.angularSpeed = 300f;
			((RigConstraint<MultiAimConstraintJob, MultiAimConstraintData, MultiAimConstraintJobBinder<MultiAimConstraintData>>)(object)headLookRig).weight = Mathf.Lerp(((RigConstraint<MultiAimConstraintJob, MultiAimConstraintData, MultiAimConstraintJobBinder<MultiAimConstraintData>>)(object)headLookRig).weight, 0f, Time.deltaTime * 10f);
			return;
		}
		agent.angularSpeed = 0f;
		((RigConstraint<MultiAimConstraintJob, MultiAimConstraintData, MultiAimConstraintJobBinder<MultiAimConstraintData>>)(object)headLookRig).weight = Mathf.Lerp(((RigConstraint<MultiAimConstraintJob, MultiAimConstraintData, MultiAimConstraintJobBinder<MultiAimConstraintData>>)(object)headLookRig).weight, 1f, Time.deltaTime * 10f);
		if (peekTimer >= 0f)
		{
			peekTimer -= Time.deltaTime;
			AnimateLooking(peekTarget);
		}
		else
		{
			AnimateLooking(lookTarget);
		}
	}

	public override void OnCollideWithPlayer(Collider other)
	{
		//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_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_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_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)
		//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_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_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_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_0087: 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_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_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_00fa: 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_0181: Unknown result type (might be due to invalid IL or missing references)
		base.OnCollideWithPlayer(other);
		if (timeSinceHitting < 0.5f)
		{
			return;
		}
		Vector3 val = Vector3.Normalize(((Component)this).transform.position + Vector3.up * 0.7f - (((Component)other).transform.position + Vector3.up * 0.4f)) * 0.5f;
		if (Physics.Linecast(((Component)this).transform.position + Vector3.up * 0.7f + val, ((Component)other).transform.position + Vector3.up * 0.4f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
		{
			return;
		}
		PlayerControllerB playerControllerB = MeetsStandardPlayerCollisionConditions(other, inSpecialAnimation || doingKillAnimation);
		if ((Object)(object)playerControllerB != (Object)null)
		{
			timeSinceHitting = 0f;
			playerControllerB.DamagePlayer(30);
			if (playerControllerB.isPlayerDead)
			{
				StabPlayerDeathAnimServerRpc((int)playerControllerB.playerClientId);
				return;
			}
			creatureAnimator.ResetTrigger("Hit");
			creatureAnimator.SetTrigger("Hit");
			creatureSFX.PlayOneShot(enemyType.audioClips[5]);
			WalkieTalkie.TransmitOneShotAudio(creatureSFX, enemyType.audioClips[5]);
			RoundManager.Instance.PlayAudibleNoise(((Component)creatureSFX).transform.position, 8f, 0.7f);
		}
	}

	public override void OnCollideWithEnemy(Collider other, EnemyAI enemyScript = null)
	{
		//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
		base.OnCollideWithEnemy(other);
		if (!((Object)(object)enemyScript.enemyType == (Object)(object)enemyType) && !(timeSinceHitting < 0.75f) && ((NetworkBehaviour)this).IsOwner && enemyScript.enemyType.canDie)
		{
			timeSinceHitting = 0f;
			creatureAnimator.ResetTrigger("Hit");
			creatureAnimator.SetTrigger("Hit");
			creatureSFX.PlayOneShot(enemyType.audioClips[5]);
			WalkieTalkie.TransmitOneShotAudio(creatureSFX, enemyType.audioClips[5]);
			RoundManager.Instance.PlayAudibleNoise(((Component)creatureSFX).transform.position, 8f, 0.7f);
			enemyScript.HitEnemy(1, null, playHitSFX: true);
		}
	}

	public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false)
	{
		base.HitEnemy(force, playerWhoHit, playHitSFX);
		if (isEnemyDead)
		{
			return;
		}
		creatureAnimator.SetTrigger("TakeDamage");
		if ((Object)(object)playerWhoHit != (Object)null)
		{
			timeSinceBeingAttackedByPlayer = 0f;
			if (threats.TryGetValue(((Component)playerWhoHit).transform, out var value))
			{
				value.hasAttacked = true;
			}
		}
		enemyHP -= force;
		if (((NetworkBehaviour)this).IsOwner && enemyHP <= 0 && !isEnemyDead)
		{
			KillEnemyOnOwnerClient();
		}
		StopKillAnimation();
	}

	public override void KillEnemy(bool destroy = false)
	{
		base.KillEnemy(destroy);
		creatureAnimator.SetBool("IsDead", true);
		if ((Object)(object)heldScrap != (Object)null && ((NetworkBehaviour)this).IsOwner)
		{
			DropHeldItemAndSync();
		}
		StopKillAnimation();
	}

	public void StopKillAnimation()
	{
		if (killAnimCoroutine != null)
		{
			((MonoBehaviour)this).StopCoroutine(killAnimCoroutine);
		}
		agent.acceleration = 17f;
		inSpecialAnimation = false;
		doingKillAnimation = false;
		if ((Object)(object)killAnimationBody != (Object)null)
		{
			killAnimationBody.attachedLimb = null;
			killAnimationBody.attachedTo = null;
			killAnimationBody = null;
		}
	}

	[ServerRpc(RequireOwnership = false)]
	public void StabPlayerDeathAnimServerRpc(int playerObject)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2476579270u, val, (RpcDelivery)0);
			BytePacker.WriteValueBitPacked(val2, playerObject);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2476579270u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost) && !doingKillAnimation)
		{
			if (((NetworkBehaviour)this).IsOwner && (Object)(object)heldScrap != (Object)null)
			{
				DropHeldItemAndSync();
			}
			doingKillAnimation = true;
			StabPlayerDeathAnimClientRpc(playerObject);
		}
	}

	[ClientRpc]
	public void StabPlayerDeathAnimClientRpc(int playerObject)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
		{
			ClientRpcParams val = default(ClientRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3749667856u, val, (RpcDelivery)0);
			BytePacker.WriteValueBitPacked(val2, playerObject);
			((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3749667856u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
		{
			doingKillAnimation = true;
			inSpecialAnimation = true;
			agent.acceleration = 70f;
			agent.speed = 0f;
			if (killAnimCoroutine != null)
			{
				((MonoBehaviour)this).StopCoroutine(killAnimCoroutine);
			}
			killAnimCoroutine = ((MonoBehaviour)this).StartCoroutine(killPlayerAnimation(playerObject));
		}
	}

	private IEnumerator killPlayerAnimation(int playerObject)
	{
		PlayerControllerB killedPlayer = StartOfRound.Instance.allPlayerScripts[playerObject];
		creatureAnimator.ResetTrigger("KillAnimation");
		creatureAnimator.SetTrigger("KillAnimation");
		creatureVoice.PlayOneShot(enemyType.audioClips[4]);
		WalkieTalkie.TransmitOneShotAudio(creatureVoice, enemyType.audioClips[4]);
		float startTime = Time.realtimeSinceStartup;
		yield return (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - startTime > 1f || (Object)(object)killedPlayer.deadBody != (Object)null));
		if ((Object)(object)killedPlayer.deadBody != (Object)null)
		{
			killAnimationBody = killedPlayer.deadBody;
			killAnimationBody.attachedLimb = killedPlayer.deadBody.bodyParts[5];
			killAnimationBody.attachedTo = deadBodyPoint;
			killAnimationBody.matchPositionExactly = true;
			killAnimationBody.canBeGrabbedBackByPlayers = false;
			yield return (object)new WaitForSeconds(1.7f);
			killAnimationBody.attachedLimb = null;
			killAnimationBody.attachedTo = null;
		}
		agent.acceleration = 17f;
		inSpecialAnimation = false;
		doingKillAnimation = false;
	}

	private void InteractWithScrap()
	{
		//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_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_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_00b0: 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_00d7: 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_00f6: 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)
		if ((Object)(object)heldScrap != (Object)null)
		{
			focusedScrap = null;
			if (Vector3.Distance(((Component)this).transform.position, baboonCampPosition) < Random.Range(1f, 7f) || heldScrap.isHeld)
			{
				DropHeldItemAndSync();
			}
		}
		else if ((Object)(object)focusedScrap != (Object)null)
		{
			if (debugEnemyAI)
			{
				Debug.DrawRay(((Component)focusedScrap).transform.position, Vector3.up * 3f, Color.yellow);
			}
			if (!CanGrabScrap(focusedScrap))
			{
				focusedScrap = null;
			}
			else if (Vector3.Distance(((Component)this).transform.position, ((Component)focusedScrap).transform.position) < 0.4f && !Physics.Linecast(((Component)this).transform.position, ((Component)focusedScrap).transform.position + Vector3.up * 0.5f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
			{
				GrabItemAndSync(((NetworkBehaviour)focusedScrap).NetworkObject);
			}
		}
	}

	private bool CanGrabScrap(GrabbableObject scrap)
	{
		//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)
		if (scrap.itemProperties.itemId == 1531)
		{
			return false;
		}
		if (scrap.isInShipRoom && !isInsidePlayerShip)
		{
			return false;
		}
		if (isEnemyDead)
		{
			return false;
		}
		if (!scrap.heldByPlayerOnServer && !scrap.isHeld && ((Object)(object)scrap == (Object)(object)heldScrap || !scrap.isHeldByEnemy))
		{
			return Vector3.Distance(((Component)scrap).transform.position, baboonCampPosition) > 8f;
		}
		return false;
	}

	private void DropHeldItemAndSync()
	{
		//IL_006f: 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_007e: 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_008b: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)heldScrap == (Object)null)
		{
			Debug.LogError((object)$"Baboon #{thisEnemyIndex} Error: DropItemAndSync called when baboon has no scrap!");
		}
		NetworkObject networkObject = ((NetworkBehaviour)heldScrap).NetworkObject;
		if ((Object)(object)networkObject == (Object)null)
		{
			Debug.LogError((object)$"Baboon #{thisEnemyIndex} Error: No network object in held scrap {((Object)((Component)heldScrap).gameObject).name}");
		}
		Vector3 itemFloorPosition = heldScrap.GetItemFloorPosition();
		DropScrap(networkObject, itemFloorPosition);
		DropScrapServerRpc(NetworkObjectReference.op_Implicit(networkObject), itemFloorPosition, (int)GameNetworkManager.Instance.localPlayerController.playerClientId);
	}

	[ServerRpc]
	public void DropScrapServerRpc(NetworkObjectReference item, Vector3 targetFloorPosition, int clientWhoSentRPC)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0107: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: Invalid comparison between Unknown and I4
		//IL_0137: 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_00a5: 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_00c3: 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_00df: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1418775270u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref item, default(ForNetworkSerializable));
			((FastBufferWriter)(ref val2)).WriteValueSafe(ref targetFloorPosition);
			BytePacker.WriteValueBitPacked(val2, clientWhoSentRPC);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1418775270u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			DropScrapClientRpc(item, targetFloorPosition, clientWhoSentRPC);
		}
	}

	[ClientRpc]
	public void DropScrapClientRpc(NetworkObjectReference item, Vector3 targetFloorPosition, int clientWhoSentRPC)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_0099: 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_0112: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
		{
			ClientRpcParams val = default(ClientRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1865475504u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref item, default(ForNetworkSerializable));
			((FastBufferWriter)(ref val2)).WriteValueSafe(ref targetFloorPosition);
			BytePacker.WriteValueBitPacked(val2, clientWhoSentRPC);
			((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1865475504u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && clientWhoSentRPC != (int)GameNetworkManager.Instance.localPlayerController.playerClientId)
		{
			NetworkObject item2 = default(NetworkObject);
			if (((NetworkObjectReference)(ref item)).TryGet(ref item2, (NetworkManager)null))
			{
				DropScrap(item2, targetFloorPosition);
			}
			else
			{
				Debug.LogError((object)$"Baboon #{thisEnemyIndex}; Error, was not able to get network object from dropped item client rpc");
			}
		}
	}

	private void DropScrap(NetworkObject item, Vector3 targetFloorPosition)
	{
		//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_00cd: 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_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)
		if ((Object)(object)heldScrap == (Object)null)
		{
			Debug.LogError((object)"Baboon: my held item is null when attempting to drop it!!");
			return;
		}
		if (heldScrap.isHeld)
		{
			heldScrap.DiscardItemFromEnemy();
			heldScrap.isHeldByEnemy = false;
			heldScrap = null;
			Debug.Log((object)$"Baboon #{thisEnemyIndex}: Dropped item which was held by a player");
			return;
		}
		heldScrap.parentObject = null;
		((Component)heldScrap).transform.SetParent(StartOfRound.Instance.propsContainer, true);
		heldScrap.EnablePhysics(enable: true);
		heldScrap.fallTime = 0f;
		heldScrap.startFallingPosition = ((Component)heldScrap).transform.parent.InverseTransformPoint(((Component)heldScrap).transform.position);
		heldScrap.targetFloorPosition = ((Component)heldScrap).transform.parent.InverseTransformPoint(targetFloorPosition);
		heldScrap.floorYRot = -1;
		heldScrap.DiscardItemFromEnemy();
		heldScrap.isHeldByEnemy = false;
		heldScrap = null;
		Debug.Log((object)$"Baboon #{thisEnemyIndex}: Dropped item");
	}

	private void GrabItemAndSync(NetworkObject item)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)heldScrap != (Object)null)
		{
			Debug.LogError((object)$"Baboon #{thisEnemyIndex} Error: GrabItemAndSync called when baboon is already carrying scrap!");
		}
		GrabScrap(item);
		GrabScrapServerRpc(NetworkObjectReference.op_Implicit(item), (int)GameNetworkManager.Instance.localPlayerController.playerClientId);
	}

	[ServerRpc]
	public void GrabScrapServerRpc(NetworkObjectReference item, int clientWhoSentRPC)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0104: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00c3: 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_00d2: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Invalid comparison between Unknown and I4
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(869682226u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref item, default(ForNetworkSerializable));
			BytePacker.WriteValueBitPacked(val2, clientWhoSentRPC);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 869682226u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			NetworkObject val3 = default(NetworkObject);
			if (!((NetworkObjectReference)(ref item)).TryGet(ref val3, (NetworkManager)null))
			{
				Debug.LogError((object)$"Baboon #{thisEnemyIndex} error: Could not get grabbed network object from reference on server");
			}
			else if (Object.op_Implicit((Object)(object)((Component)val3).GetComponent<GrabbableObject>()) && !((Component)val3).GetComponent<GrabbableObject>().heldByPlayerOnServer)
			{
				GrabScrapClientRpc(item, clientWhoSentRPC);
			}
		}
	}

	[ClientRpc]
	public void GrabScrapClientRpc(NetworkObjectReference item, int clientWhoSentRPC)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_00be: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_008c: 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)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
		{
			ClientRpcParams val = default(ClientRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1564051222u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref item, default(ForNetworkSerializable));
			BytePacker.WriteValueBitPacked(val2, clientWhoSentRPC);
			((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1564051222u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && clientWhoSentRPC != (int)GameNetworkManager.Instance.localPlayerController.playerClientId)
		{
			NetworkObject item2 = default(NetworkObject);
			if (((NetworkObjectReference)(ref item)).TryGet(ref item2, (NetworkManager)null))
			{
				GrabScrap(item2);
			}
			else
			{
				Debug.LogError((object)$"Baboon #{thisEnemyIndex}; Error, was not able to get id from grabbed item client rpc");
			}
		}
	}

	private void GrabScrap(NetworkObject item)
	{
		//IL_0077: 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)
		Debug.Log((object)$"held item null: {(Object)(object)heldScrap == (Object)null}");
		if ((Object)(object)heldScrap != (Object)null)
		{
			Debug.Log((object)$"Baboon #{thisEnemyIndex}: Trying to grab another item ({((Object)((Component)item).gameObject).name}) while hands are already full with item ({((Object)((Component)heldScrap).gameObject).name}). Dropping the currently held one.");
			DropScrap(((Component)heldScrap).GetComponent<NetworkObject>(), heldScrap.GetItemFloorPosition());
		}
		GrabbableObject grabbableObject = (heldScrap = ((Component)item).gameObject.GetComponent<GrabbableObject>());
		grabbableObject.parentObject = grabTarget;
		grabbableObject.hasHitGround = false;
		grabbableObject.GrabItemFromEnemy();
		grabbableObject.isHeldByEnemy = true;
		grabbableObject.EnablePhysics(enable: false);
		Debug.Log((object)$"Baboon #{thisEnemyIndex}: Grabbing item!!! {((Object)((Component)heldScrap).gameObject).name}");
	}

	public override void ReachedNodeInSearch()
	{
		base.ReachedNodeInSearch();
		if (currentSearch.nodesEliminatedInCurrentSearch > 14 && timeSinceRestWhileScouting > 17f && timeSinceAggressiveDisplay > 6f)
		{
			timeSinceRestWhileScouting = 0f;
			restingDuringScouting = 12f;
		}
	}

	public override void DoAIInterval()
	{
		//IL_009e: 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_05d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_05e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_07b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_07c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0389: Unknown result type (might be due to invalid IL or missing references)
		//IL_039e: Unknown result type (might be due to invalid IL or missing references)
		//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_040e: Unknown result type (might be due to invalid IL or missing references)
		//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
		//IL_049a: Unknown result type (might be due to invalid IL or missing references)
		//IL_04af: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a76: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a86: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a90: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a95: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a9a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a9c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a9e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aa8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aad: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ac5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aca: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ad4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ad9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ae4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ae9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0af3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0af8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0afd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b09: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b0e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b18: Unknown result type (might be due to invalid IL or missing references)
		//IL_0921: Unknown result type (might be due to invalid IL or missing references)
		//IL_0931: Unknown result type (might be due to invalid IL or missing references)
		//IL_093b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0940: Unknown result type (might be due to invalid IL or missing references)
		//IL_0945: Unknown result type (might be due to invalid IL or missing references)
		//IL_0947: Unknown result type (might be due to invalid IL or missing references)
		//IL_0949: Unknown result type (might be due to invalid IL or missing references)
		//IL_0953: Unknown result type (might be due to invalid IL or missing references)
		//IL_0958: Unknown result type (might be due to invalid IL or missing references)
		//IL_0969: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b60: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b6a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b75: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b7a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b38: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b42: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b4d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b52: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a61: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b7c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b7e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b83: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b98: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bbc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bce: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bd0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ba3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ba5: Unknown result type (might be due to invalid IL or missing references)
		base.DoAIInterval();
		if (isEnemyDead)
		{
			agent.speed = 0f;
			if (scoutingSearchRoutine.inProgress)
			{
				StopSearch(scoutingSearchRoutine, clear: false);
			}
			return;
		}
		if (stunNormalizedTimer > 0f || miscAnimationTimer > 0f)
		{
			agent.speed = 0f;
			if ((Object)(object)heldScrap != (Object)null && ((NetworkBehaviour)this).IsOwner)
			{
				DropHeldItemAndSync();
			}
			if ((Object)(object)stunnedByPlayer != (Object)null)
			{
				PingBaboonInterest(((Component)stunnedByPlayer.gameplayCamera).transform.position, 4);
			}
		}
		if (inSpecialAnimation)
		{
			agent.speed = 0f;
			return;
		}
		if (!eyesClosed)
		{
			DoLOSCheck();
		}
		InteractWithScrap();
		switch (currentBehaviourStateIndex)
		{
		case 0:
			if (previousBehaviourState != currentBehaviourStateIndex)
			{
				timeToScout = Random.Range(25, 70);
				scoutTimer = 0f;
				Debug.Log((object)$"Baboon #{thisEnemyIndex} changed to state 0; set time to scout: {timeToScout}");
				restingAtCamp = false;
				restAtCampTimer = 0f;
				SetAggressiveMode(0);
				previousBehaviourState = currentBehaviourStateIndex;
			}
			if (!((NetworkBehaviour)this).IsOwner)
			{
				break;
			}
			if ((Object)(object)focusedScrap != (Object)null)
			{
				SetDestinationToPosition(((Component)focusedScrap).transform.position);
			}
			if (scoutingGroup == null || (Object)(object)scoutingGroup.leader == (Object)(object)this || !scoutingGroup.members.Contains(this))
			{
				Debug.Log((object)$"{((Object)((Component)this).gameObject).name}: scouting group null?: {scoutingGroup == null};");
				if (scoutingGroup != null)
				{
					Debug.Log((object)$"Scouting group not null. Leader: {((Object)((Component)scoutingGroup.leader).gameObject).name}; members contains this: {!scoutingGroup.members.Contains(this)}");
				}
				if (restingDuringScouting >= 0f)
				{
					if (scoutingSearchRoutine.inProgress)
					{
						StopSearch(scoutingSearchRoutine, clear: false);
					}
					if (!creatureAnimator.GetBool("sit"))
					{
						EnemyEnterRestModeServerRpc(sleep: false, atCamp: false);
					}
					creatureAnimator.SetBool("sit", true);
					restingDuringScouting -= AIIntervalTime;
					agent.speed = 0f;
				}
				else
				{
					if (!scoutingSearchRoutine.inProgress && (Object)(object)focusedScrap == (Object)null)
					{
						StartSearch(baboonCampPosition, scoutingSearchRoutine);
					}
					if (creatureAnimator.GetBool("sit"))
					{
						EnemyGetUpServerRpc();
						creatureAnimator.SetBool("sit", false);
					}
					agent.speed = 10f;
				}
			}
			else
			{
				if (scoutingSearchRoutine.inProgress)
				{
					Debug.Log((object)$"Baboon #{thisEnemyIndex} joined a group; Stopping scouting.");
					StopSearch(scoutingSearchRoutine);
				}
				if (creatureAnimator.GetBool("sit"))
				{
					EnemyGetUpServerRpc();
					creatureAnimator.SetBool("sit", false);
				}
				agent.speed = 12f;
				if (Vector3.Distance(((Component)this).transform.position, ((Component)scoutingGroup.leader).transform.position) > 60f || PathIsIntersectedByLineOfSight(((Component)scoutingGroup.leader).transform.position, calculatePathDistance: false, avoidLineOfSight: false))
				{
					Debug.Log((object)$"Baboon #{thisEnemyIndex} leaving group with leader {scoutingGroup.leader.thisEnemyIndex}; distance: {Vector3.Distance(((Component)this).transform.position, ((Component)scoutingGroup.leader).transform.position)}");
					LeaveCurrentScoutingGroup(sync: true);
				}
				else
				{
					Debug.Log((object)$"Baboon #{thisEnemyIndex}: following leader. {scoutingGroup == null}; {(Object)(object)scoutingGroup.leader == (Object)(object)this}; {scoutingGroup.members.Contains(this)}");
					if (Vector3.Distance(destination, ((Component)scoutingGroup.leader).transform.position) > 8f && (Object)(object)focusedScrap == (Object)null)
					{
						SetDestinationToPosition(RoundManager.Instance.GetRandomNavMeshPositionInRadiusSpherical(((Component)scoutingGroup.leader).transform.position, 6f, RoundManager.Instance.navHit));
					}
				}
			}
			if (scoutTimer < timeToScout && (Object)(object)heldScrap == (Object)null)
			{
				scoutTimer += AIIntervalTime;
			}
			else
			{
				SwitchToBehaviourState(1);
			}
			break;
		case 1:
			if (previousBehaviourState != currentBehaviourStateIndex)
			{
				restingDuringScouting = 0f;
				scoutTimer = 0f;
				chosenDistanceToCamp = Random.Range(1f, 7f);
				LeaveCurrentScoutingGroup(sync: true);
				SetAggressiveMode(0);
				previousBehaviourState = currentBehaviourStateIndex;
			}
			if (scoutingSearchRoutine.inProgress)
			{
				StopSearch(scoutingSearchRoutine);
			}
			if ((Object)(object)focusedScrap != (Object)null)
			{
				SetDestinationToPosition(((Component)focusedScrap).transform.position);
			}
			else
			{
				SetDestinationToPosition(baboonCampPosition);
			}
			if (Vector3.Distance(((Component)this).transform.position, baboonCampPosition) < chosenDistanceToCamp && peekTimer < 0f)
			{
				if (!restingAtCamp)
				{
					restingAtCamp = true;
					restAtCampTimer = Random.Range(15f, 30f);
					if ((Object)(object)heldScrap != (Object)null)
					{
						DropHeldItemAndSync();
					}
					bool sleep = false;
					if (Random.Range(0, 100) < 35)
					{
						sleep = true;
					}
					EnemyEnterRestModeServerRpc(sleep, atCamp: true);
				}
				else if (restAtCampTimer <= 0f)
				{
					SwitchToBehaviourState(0);
				}
				else
				{
					restAtCampTimer -= AIIntervalTime;
				}
				agent.speed = 0f;
			}
			else
			{
				if (restingAtCamp)
				{
					restingAtCamp = false;
					EnemyGetUpServerRpc();
				}
				creatureAnimator.SetBool("sit", false);
				creatureAnimator.SetBool("sleep", false);
				agent.speed = 9f;
			}
			break;
		case 2:
		{
			if (previousBehaviourState != currentBehaviourStateIndex)
			{
				timeSpentFocusingOnThreat = 0f;
				creatureAnimator.SetBool("sleep", false);
				creatureAnimator.SetBool("sit", false);
				EnemyGetUpServerRpc();
				previousBehaviourState = currentBehaviourStateIndex;
			}
			if (focusedThreat == null || !focusingOnThreat)
			{
				StopFocusingThreat();
			}
			if (scoutingSearchRoutine.inProgress)
			{
				StopSearch(scoutingSearchRoutine, clear: false);
			}
			agent.speed = 9f;
			float num = fearLevelNoDistComparison * 2f;
			if (focusedThreat.interestLevel <= 0 || enemyHP <= 3)
			{
				num = Mathf.Max(num, 1f);
			}
			float num2 = GetComfortableDistanceToThreat(focusedThreat) + num;
			float num3 = Vector3.Distance(((Component)this).transform.position, focusedThreat.lastSeenPosition);
			bool flag = false;
			float num4 = Time.realtimeSinceStartup - focusedThreat.timeLastSeen;
			if (num4 > 5f)
			{
				SetThreatInView(inView: false);
				focusLevel = 0;
				StopFocusingThreat();
				break;
			}
			if (num4 > 3f)
			{
				SetThreatInView(inView: false);
				focusLevel = 1;
				if (num2 - num3 > 2f)
				{
					StopFocusingThreat();
					break;
				}
			}
			else if (num4 > 1f)
			{
				flag = true;
				focusedThreatIsInView = false;
				SetThreatInView(inView: false);
				focusLevel = 2;
				SetAggressiveMode(0);
			}
			else if (num4 < 0.55f)
			{
				flag = true;
				SetThreatInView(inView: true);
			}
			bool flag2 = fearLevel > 0f || focusedThreat.interestLevel > 0 || fearLevel < -6f || focusedThreat.hasAttacked;
			if (aggressiveMode == 2)
			{
				focusLevel = 3;
				if ((Object)(object)heldScrap != (Object)null)
				{
					DropHeldItemAndSync();
					focusedScrap = heldScrap;
				}
				Debug.Log((object)("Baboon: Entered fight mode with threat '" + ((Object)focusedThreat.threatScript.GetThreatTransform()).name + "'"));
				Debug.Log((object)$"Fight timer: {fightTimer}");
				Vector3 val = focusedThreat.threatScript.GetThreatTransform().position + focusedThreat.threatScript.GetThreatVelocity() * 10f;
				Debug.DrawRay(val, Vector3.up * 5f, Color.red, AIIntervalTime);
				SetDestinationToPosition(val, checkForPath: true);
				if (fightTimer > 4f || timeSinceBeingAttackedByPlayer < 4f || (fightTimer > 2f && (fearLevel >= 1f || !flag2)) || (enemyHP <= 3 && !flag2))
				{
					scoutTimer = timeToScout - 20f;
					fightTimer = -7f;
					SetAggressiveMode(1);
				}
				else if (num3 > 4f)
				{
					fightTimer += AIIntervalTime * 2f;
				}
				else if (num3 > 1f)
				{
					fightTimer += AIIntervalTime;
				}
				else
				{
					fightTimer += AIIntervalTime / 2f;
				}
				break;
			}
			bool flag3 = false;
			if ((Object)(object)focusedScrap != (Object)null && (!flag || fearLevel <= 0f))
			{
				SetDestinationToPosition(((Component)focusedScrap).transform.position);
				flag3 = true;
			}
			Vector3 val2 = focusedThreat.lastSeenPosition + focusedThreat.threatScript.GetThreatVelocity() * -17f;
			Debug.DrawRay(val2, Vector3.up * 3f, Color.red, AIIntervalTime);
			Ray val3 = default(Ray);
			((Ray)(ref val3))..ctor(((Component)this).transform.position + Vector3.up * 0.5f, Vector3.Normalize((((Component)this).transform.position + Vector3.up * 0.5f - val2) * 100f));
			RaycastHit val4 = default(RaycastHit);
			Vector3 val5 = ((!Physics.Raycast(val3, ref val4, num2 - num3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1)) ? RoundManager.Instance.GetNavMeshPosition(((Ray)(ref val3)).GetPoint(num2 - num3), RoundManager.Instance.navHit, 8f) : RoundManager.Instance.GetNavMeshPosition(((RaycastHit)(ref val4)).point, RoundManager.Instance.navHit, 8f));
			Debug.DrawRay(val5, Vector3.up, Color.blue, AIIntervalTime);
			if (!flag3)
			{
				if (SetDestinationToPosition(val5, checkForPath: true))
				{
					debugSphere = val5;
				}
				else
				{
					Debug.Log((object)$"Baboon #{thisEnemyIndex}: Could not get path to avoidance position at {val5}");
					debugSphere = val5;
				}
			}
			if (fightTimer > 7f && timeSinceFighting > 4f)
			{
				fightTimer = -6f;
				SetAggressiveMode(2);
				break;
			}
			bool flag4 = false;
			if (scoutingGroup != null)
			{
				for (int i = 0; i < scoutingGroup.members.Count; i++)
				{
					if (scoutingGroup.members[i].aggressiveMode == 2)
					{
						flag4 = true;
					}
				}
			}
			float num5 = GetComfortableDistanceToThreat(focusedThreat) - num3;
			if (fearLevel < -5f && flag2)
			{
				if (noiseTimer >= noiseInterval)
				{
					noiseInterval = Random.Range(0.2f, 0.7f);
					noiseTimer = 0f;
					RoundManager.PlayRandomClip(creatureVoice, cawLaughSFX, randomize: true, 1f, 1105);
				}
				else
				{
					noiseTimer += Time.deltaTime;
				}
			}
			if ((flag && ((num5 > 8f && flag2) || num3 < 5f)) || timeSinceBeingAttackedByPlayer < 2.5f)
			{
				if (timeSinceFighting > 5f)
				{
					fightTimer += AIIntervalTime * 10.6f / (focusedThreat.distanceToThreat * 0.3f);
				}
				SetAggressiveMode(1);
			}
			else if (num5 > 4f && fearLevel < 3f && flag2)
			{
				fightTimer += AIIntervalTime * 7.4f / (focusedThreat.distanceToThreat * 0.3f);
				SetAggressiveMode(1);
			}
			else
			{
				if (!(num5 < 2f))
				{
					break;
				}
				if (timeSinceAggressiveDisplay > 2.5f)
				{
					SetAggressiveMode(0);
				}
				fightTimer -= Mathf.Max(-6f, AIIntervalTime * 0.2f);
				if (timeSpentFocusingOnThreat > 4f + (float)focusedThreat.interestLevel * 8f && !flag4)
				{
					if (fightTimer > 4f)
					{
						fightTimer -= Mathf.Max(-6f, AIIntervalTime * 0.5f * (focusedThreat.distanceToThreat * 0.1f));
					}
					else
					{
						StopFocusingThreat();
					}
				}
			}
			break;
		}
		}
	}

	private void StopFocusingThreat()
	{
		if (currentBehaviourStateIndex == 2)
		{
			Debug.Log((object)$"Stopped focusing on threat '{focusedThreat.threatScript.GetThreatTransform()}'");
			aggressiveMode = 0;
			focusingOnThreat = false;
			focusedThreatIsInView = false;
			focusedThreatTransform = null;
			focusedThreat = null;
			if ((Object)(object)heldScrap == (Object)null)
			{
				SwitchToBehaviourStateOnLocalClient(0);
			}
			else
			{
				SwitchToBehaviourStateOnLocalClient(1);
			}
			StopFocusingThreatServerRpc((Object)(object)heldScrap == (Object)null);
		}
	}

	[ServerRpc]
	public void StopFocusingThreatServerRpc(bool enterScoutingMode)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00c3: 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_00dd: 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_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1546030380u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref enterScoutingMode, default(ForPrimitives));
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1546030380u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			StopFocusingThreatClientRpc(enterScoutingMode);
		}
	}

	[ClientRpc]
	public void StopFocusingThreatClientRpc(bool enterScoutingMode)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_0097: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
		{
			ClientRpcParams val = default(ClientRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3360048400u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref enterScoutingMode, default(ForPrimitives));
			((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3360048400u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsOwner)
		{
			aggressiveMode = 0;
			focusedThreatTransform = null;
			focusedThreat = null;
			if (enterScoutingMode)
			{
				SwitchToBehaviourStateOnLocalClient(0);
			}
			else
			{
				SwitchToBehaviourStateOnLocalClient(1);
			}
		}
	}

	private void SetAggressiveMode(int mode)
	{
		if (aggressiveMode != mode)
		{
			if (mode == 2)
			{
				Debug.Log((object)"Baboon entering fight mode (aggressive mode 2)");
			}
			aggressiveMode = mode;
			SetAggressiveModeServerRpc(mode);
		}
	}

	[ServerRpc]
	public void SetAggressiveModeServerRpc(int mode)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00df: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e9: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00b7: 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_007a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(443869275u, val, (RpcDelivery)0);
			BytePacker.WriteValueBitPacked(val2, mode);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 443869275u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			SetAggressiveModeClientRpc(mode);
		}
	}

	[ClientRpc]
	public void SetAggressiveModeClientRpc(int mode)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a3: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1782649174u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, mode);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1782649174u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsOwner)
			{
				aggressiveMode = mode;
			}
		}
	}

	private void SetThreatInView(bool inView)
	{
		if (focusedThreatIsInView != inView)
		{
			focusedThreatIsInView = inView;
			SetThreatInViewServerRpc(inView);
		}
	}

	[ServerRpc]
	public void SetThreatInViewServerRpc(bool inView)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00c3: 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_00dd: 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_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3428942850u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref inView, default(ForPrimitives));
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3428942850u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			SetThreatInViewClientRpc(inView);
		}
	}

	[ClientRpc]
	public void SetThreatInViewClientRpc(bool inView)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b1: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_0097: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2073937320u, val, (RpcDelivery)0);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref inView, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2073937320u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsOwner)
			{
				focusedThreatIsInView = inView;
			}
		}
	}

	[ServerRpc]
	public void EnemyEnterRestModeServerRpc(bool sleep, bool atCamp)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_0108: Unknown result type (might be due to invalid IL or missing references)
		//IL_0112: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00c3: 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_00de: 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_00f8: 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_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1806580287u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref sleep, default(ForPrimitives));
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref atCamp, default(ForPrimitives));
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1806580287u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			EnemyEnterRestModeClientRpc(sleep, atCamp);
		}
	}

	[ClientRpc]
	public void EnemyEnterRestModeClientRpc(bool sleep, bool atCamp)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cc: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007d: 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_0098: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
		{
			ClientRpcParams val = default(ClientRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1567928363u, val, (RpcDelivery)0);
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref sleep, default(ForPrimitives));
			((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref atCamp, default(ForPrimitives));
			((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1567928363u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
		{
			restingAtCamp = atCamp;
			if (sleep)
			{
				eyesClosed = true;
				creatureAnimator.SetBool("sleep", true);
				creatureAnimator.SetBool("sit", false);
			}
			else
			{
				eyesClosed = false;
				creatureAnimator.SetBool("sleep", false);
				creatureAnimator.SetBool("sit", true);
			}
		}
	}

	[ServerRpc]
	public void EnemyGetUpServerRpc()
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00dc: Invalid comparison between Unknown and I4
		//IL_00a5: 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_00c2: 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_0084: Invalid comparison between Unknown and I4
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager == null || !networkManager.IsListening)
		{
			return;
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
		{
			if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
			{
				if ((int)networkManager.LogLevel <= 1)
				{
					Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
				}
				return;
			}
			ServerRpcParams val = default(ServerRpcParams);
			FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3614203845u, val, (RpcDelivery)0);
			((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3614203845u, val, (RpcDelivery)0);
		}
		if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
		{
			EnemyGetUpClientRpc();
		}
	}

	[ClientRpc]
	public void EnemyGetUpClientRpc()
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Invalid comparison between Unknown and I4
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
		if (networkManager != null && networkManager.IsListening)
		{
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1155909339u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1155909339u, val, (RpcDelivery)0);
			}
			if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsOwner)
			{
				creatureAnimator.SetBool("sit", false);
			}
		}
	}

	public override void OnDrawGizmos()
	{
		//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_0029: 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_0042: 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_00aa: 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_00c4: 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_00d3: 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_00e8: 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)
		//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_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)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		//IL_0085: Unknown result type (might be due to invalid IL or missing references)
		if (!debugEnemyAI)
		{
			return;
		}
		if (currentBehaviourStateIndex == 1)
		{
			Gizmos.DrawCube(((Component)this).transform.position + Vector3.up * 2f, new Vector3(0.2f, 0.2f, 0.2f));
		}
		else if (scoutingGroup != null)
		{
			if ((Object)(object)scoutingGroup.leader == (Object)(object)this)
			{
				Gizmos.DrawSphere(((Component)this).transform.position + Vector3.up * 2f, 0.6f);
				return;
			}
			Gizmos.DrawLine(((Component)scoutingGroup.leader).transform.position + Vector3.up * 2f, ((Component)this).transform.position + Vector3.up * 2f);
			Gizmos.DrawSphere(((Component)this).transform.position + Vector3.up * 2f, 0.1f);
		}
	}

	public override void DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot = 0, int noiseID = 0)
	{
		//IL_0013: 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_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_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_0067: 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_0112: Unknown result type (might be due to invalid IL or missing references)
		if (!((NetworkBehaviour)this).IsOwner || isEnemyDead)
		{
			return;
		}
		base.DetectNoise(noisePosition, noiseLoudness, timesPlayedInOneSpot, noiseID);
		if (Vector3.Distance(noisePosition, ((Component)this).transform.position + Vector3.up * 0.4f) < 0.75f || noiseID == 1105 || noiseID == 24751)
		{
			return;
		}
		Debug.Log((object)"Detected noise");
		float num = Vector3.Distance(noisePosition, ((Component)this).transform.position);
		float num2 = noiseLoudness / num;
		Debug.Log((object)$"noise relative loudness: {noiseLoudness / num}");
		if (eyesClosed)
		{
			num2 *= 0.75f;
		}
		if (num2 < 0.12f && peekTimer >= 0f && focusLevel > 0)
		{
			return;
		}
		if (focusLevel >= 3)
		{
			if (num > 3f || num2 <= 0.06f)
			{
				return;
			}
		}
		else if (focusLevel == 2)
		{
			if (num > 25f || num2 <= 0.05f)
			{
				return;
			}
		}
		else if (focusLevel == 1 && (num > 40f || num2 <= 0.05f))
		{
			return;
		}
		PingBaboonInterest(noisePosition, focusLevel);
	}

	private void AnimateLooking(Vector3 lookAtPosition)
	{
		//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_001d: 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_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_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_0085: 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_00ab: 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_00ca: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
		headLookTarget.position = Vector3.Lerp(headLookTarget.position, lookAtPosition, 15f * Time.deltaTime);
		Vector3 position = headLookTarget.position;
		position.y = ((Component)this).transform.position.y;
		if (Vector3.Angle(((Component)this).transform.forward, position - ((Component)this).transform.position) > 30f)
		{
			RoundManager.Instance.tempTransform.position = ((Component)this).transform.position;
			RoundManager.Instance.tempTransform.LookAt(position);
			((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, RoundManager.Instance.tempTransform.rotation, 4f * Time.deltaTime);
			((Component)this).transform.eulerAngles = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
		}
	}

	public override void Update()
	{
		//IL_0525: Unknown result type (might be due to invalid IL or missing references)
		//IL_052a: Unknown result type (might be due to invalid IL or missing references)
		base.Update();
		if (isEnemyDead)
		{
			return;
		}
		timeSinceHitting += Time.deltaTime;
		if (stunNormalizedTimer > 0f || miscAnimationTimer > 0f)
		{
			agent.speed = 0f;
		}
		creatureAnimator.SetBool("stunned", stunNormalizedTimer > 0f);
		if (miscAnimationTimer <= 0f)
		{
			currentMiscAnimation = -1;
		}
		else
		{
			miscAnimationTimer -= Time.deltaTime;
		}
		CalculateAnimationDirection(2f);
		timeSinceLastMiscAnimation += Time.deltaTime;
		timeSincePingingBirdInterest += Time.deltaTime;
		timeSinceBeingAttackedByPlayer += Time.deltaTime;
		timeSinceJoiningOrLeavingScoutingGroup += Time.deltaTime;
		if (debugEnemyAI)
		{
			if (focusedThreat != null && focusingOnThreat)
			{
				HUDManager.Instance.SetDebugText(string.Format("{0}; {1}; \n Focused threat level: {2}", fearLevel.ToString("0.0"), fearLevelNoDistComparison.ToString("0.0"), focusedThreat.threatLevel));
			}
			else
			{
				HUDManager.Instance.SetDebugText(fearLevel.ToString("0.0") + "; " + fearLevelNoDistComparison.ToString("0.0"));
			}
		}
		if ((Object)(object)heldScrap != (Object)null && !isEnemyDead)
		{
			creatureAnimator.SetLayerWeight(1, Mathf.Lerp(creatureAnimator.GetLayerWeight(1), 1f, 12f * Time.deltaTime));
			((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)rightArmRig).weight = Mathf.Lerp(((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)rightArmRig).weight, 0f, 12f * Time.deltaTime);
			((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)leftArmRig).weight = Mathf.Lerp(((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)leftArmRig).weight, 0f, 12f * Time.deltaTime);
		}
		else
		{
			creatureAnimator.SetLayerWeight(1, Mathf.Lerp(creatureAnimator.GetLayerWeight(1), 0f, 12f * Time.deltaTime));
			((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)rightArmRig).weight = Mathf.Lerp(((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)rightArmRig).weight, 1f, 12f * Time.deltaTime);
			((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)leftArmRig).weight = Mathf.Lerp(((RigConstraint<TwoBoneIKConstraintJob, TwoBoneIKConstraintData, TwoBoneIKConstraintJobBinder<TwoBoneIKConstraintData>>)(object)leftArmRig).weight, 1f, 12f * Time.deltaTime);
		}
		switch (aggressiveMode)
		{
		case 0:
			if (previousAggressiveMode != aggressiveMode)
			{
				creatureAnimator.SetBool("aggressiveDisplay", false);
				creatureAnimator.SetBool("fighting", false);
				previousAggressiveMode = aggressiveMode;
			}
			if (aggressionAudio.volume <= 0f)
			{
				aggressionAudio.Stop();
			}
			else
			{
				aggressionAudio.volume = Mathf.Max(aggressionAudio.volume - Time.deltaTime * 5f, 0f);
			}
			timeSinceAggressiveDisplay = 0f;
			break;
		case 1:
			if (previousAggressiveMode != aggressiveMode)
			{
				creatureAnimator.SetBool("aggressiveDisplay", true);
				creatureAnimator.SetBool("fighting", false);
				RoundManager.PlayRandomClip(creatureVoice, cawScreamSFX, randomize: true, 1f, 1105);
				WalkieTalkie.TransmitOneShotAudio(creatureVoice, enemyType.audioClips[1]);
				aggressionAudio.clip = enemyType.audioClips[2];
				aggressionAudio.Play();
				previousAggressiveMode = aggressiveMode;
			}
			timeSinceAggressiveDisplay += Time.deltaTime;
			aggressionAudio.volume = Mathf.Min(aggressionAudio.volume + Time.deltaTime * 4f, 1f);
			break;
		case 2:
			if (previousAggressiveMode != aggressiveMode)
			{
				creatureAnimator.SetBool("fighting", true);
				aggressionAudio.clip = enemyType.audioClips[3];
				aggressionAudio.Play();
				previousAggressiveMode = aggressiveMode;
			}
			timeSinceAggressiveDisplay += Time.deltaTime;
			aggressionAudio.volume = Mathf.Min(aggressionAudio.volume + Time.deltaTime * 5f, 1f);
			break;
		}
		switch (currentBehaviourStateIndex)
		{
		case 0:
			creatureAnimator.SetBool("sleep", false);
			restingAtCamp = false;
			eyesClosed = false;
			focusedThreatTransform = null;
			break;
		case 1:
			focusedThreatTransform = null;
			break;
		case 2:
			if ((Object)(object)focusedThreatTransform != (Object)null && focusedThreatIsInView)
			{
				lookTarget = focusedThreatTransform.position;
			}
			timeSpentFocusingOnThreat += Time.deltaTime;
			timeSinceFighting += Time.deltaTime;
			break;
		}
	}

	private float GetComfortableDistanceToThreat(Threat focusedThreat)
	{
		return Mathf.Min((float)focusedThreat.threatLevel * 6f, 25f);
	}

	private void ReactToThreat(Threat closestThreat)
	{
		//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_00b4: Unknown result type (might be due to invalid IL or missing references)
		if (Vector3.Distance(closestThreat.lastSeenPosition, baboonCampPosition) < 18f)
		{
			closestThreat.interestLevel++;
		}
		if (closestThreat != focusedThreat && (focusedThreat == null || focusedThreat.threatLevel <= closestThreat.threatLevel) && closestThreat.distanceToThreat < GetComfortableDistanceToThreat(closestThreat))
		{
			Transform threatTransform = closestThreat.threatScript.GetThreatTransform();
			NetworkObject component = ((Component)threatTransform).gameObject.GetComponent<NetworkObject>();
			if ((Object)(object)component == (Object)null)
			{
				Debug.LogError((object)"Baboon: Error, threat did not contain network object. All objects implementing IVisibleThreat must have a NetworkObject");
				return;
			}
			Debug.Log((object)("Focusing on new threat: '" + ((Object)threatTransform).name + "'"));
			fightTimer = 0f;
			focusingOnThreat = true;
			StartFocusOnThreatServerRpc(NetworkObjectReference.op_Implicit(component));
			focusedThreat = closestThreat;
			focusedThreatTransform = closestThreat.threatScript.GetThreatLookTransform();
		}
	}

	[ServerRpc]
	public void StartFocusOnThreatServerRpc(NetworkObjectReference netObject)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002e: Invalid comparison between Unknown and I4
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f7: Invalid comparison between Unknown and I4
		//IL_011d: 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_00ae: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b3: Unknown result 

Assembly-CSharp-firstpass.dll

Decompiled 6 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Security.Cryptography;
using System.Text;
using ES3Internal;
using ES3Types;
using Unity.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
using UnityEngine.Scripting;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field)]
public class ES3Serializable : Attribute
{
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field)]
public class ES3NonSerializable : Attribute
{
}
public class ES3AutoSave : MonoBehaviour, ISerializationCallbackReceiver
{
	public bool saveLayer = true;

	public bool saveTag = true;

	public bool saveName = true;

	public bool saveHideFlags = true;

	public bool saveActive = true;

	public bool saveChildren;

	private bool isQuitting;

	public List<Component> componentsToSave = new List<Component>();

	public void Reset()
	{
		saveLayer = false;
		saveTag = false;
		saveName = false;
		saveHideFlags = false;
		saveActive = false;
		saveChildren = false;
	}

	public void Awake()
	{
		if ((Object)(object)ES3AutoSaveMgr.Current == (Object)null)
		{
			ES3Debug.LogWarning("<b>No GameObjects in this scene will be autosaved</b> because there is no Easy Save 3 Manager. To add a manager to this scene, exit playmode and go to Assets > Easy Save 3 > Add Manager to Scene.", (Object)(object)this);
		}
		else
		{
			ES3AutoSaveMgr.AddAutoSave(this);
		}
	}

	public void OnApplicationQuit()
	{
		isQuitting = true;
	}

	public void OnDestroy()
	{
		if (!isQuitting)
		{
			ES3AutoSaveMgr.RemoveAutoSave(this);
		}
	}

	public void OnBeforeSerialize()
	{
	}

	public void OnAfterDeserialize()
	{
		componentsToSave.RemoveAll((Component c) => (Object)(object)c == (Object)null || ((object)c).GetType() == typeof(Component));
	}
}
public class ES3AutoSaveMgr : MonoBehaviour
{
	public enum LoadEvent
	{
		None,
		Awake,
		Start
	}

	public enum SaveEvent
	{
		None,
		OnApplicationQuit,
		OnApplicationPause
	}

	public static ES3AutoSaveMgr _current;

	public string key = Guid.NewGuid().ToString();

	public SaveEvent saveEvent = SaveEvent.OnApplicationQuit;

	public LoadEvent loadEvent = LoadEvent.Awake;

	public ES3SerializableSettings settings = new ES3SerializableSettings("AutoSave.es3", ES3.Location.Cache);

	public HashSet<ES3AutoSave> autoSaves = new HashSet<ES3AutoSave>();

	public static ES3AutoSaveMgr Current
	{
		get
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_current == (Object)null)
			{
				Scene activeScene = SceneManager.GetActiveScene();
				GameObject[] rootGameObjects = ((Scene)(ref activeScene)).GetRootGameObjects();
				GameObject[] array = rootGameObjects;
				foreach (GameObject val in array)
				{
					if (((Object)val).name == "Easy Save 3 Manager")
					{
						return _current = val.GetComponent<ES3AutoSaveMgr>();
					}
				}
				array = rootGameObjects;
				for (int i = 0; i < array.Length; i++)
				{
					if ((Object)(object)(_current = array[i].GetComponentInChildren<ES3AutoSaveMgr>()) != (Object)null)
					{
						return _current;
					}
				}
			}
			return _current;
		}
	}

	public static ES3AutoSaveMgr Instance => Current;

	public void Save()
	{
		if (autoSaves == null || autoSaves.Count == 0)
		{
			return;
		}
		if (settings.location == ES3.Location.Cache && !ES3.FileExists(settings))
		{
			ES3.CacheFile(settings);
		}
		if (autoSaves == null || autoSaves.Count == 0)
		{
			ES3.DeleteKey(key, settings);
		}
		else
		{
			List<GameObject> list = new List<GameObject>();
			foreach (ES3AutoSave autoSafe in autoSaves)
			{
				if ((Object)(object)autoSafe != (Object)null && ((Behaviour)autoSafe).enabled)
				{
					list.Add(((Component)autoSafe).gameObject);
				}
			}
			ES3.Save(key, list.OrderBy((GameObject x) => GetDepth(x.transform)).ToArray(), settings);
		}
		if (settings.location == ES3.Location.Cache && ES3.FileExists(settings))
		{
			ES3.StoreCachedFile(settings);
		}
	}

	public void Load()
	{
		try
		{
			if (settings.location == ES3.Location.Cache && !ES3.FileExists(settings))
			{
				ES3.CacheFile(settings);
			}
		}
		catch
		{
		}
		ES3.Load(key, (GameObject[])(object)new GameObject[0], settings);
	}

	private void Start()
	{
		if (loadEvent == LoadEvent.Start)
		{
			Load();
		}
	}

	public void Awake()
	{
		GetAutoSaves();
		if (loadEvent == LoadEvent.Awake)
		{
			Load();
		}
	}

	private void OnApplicationQuit()
	{
		if (saveEvent == SaveEvent.OnApplicationQuit)
		{
			Save();
		}
	}

	private void OnApplicationPause(bool paused)
	{
		if ((saveEvent == SaveEvent.OnApplicationPause || (Application.isMobilePlatform && saveEvent == SaveEvent.OnApplicationQuit)) && paused)
		{
			Save();
		}
	}

	public static void AddAutoSave(ES3AutoSave autoSave)
	{
		if ((Object)(object)Current != (Object)null)
		{
			Current.autoSaves.Add(autoSave);
		}
	}

	public static void RemoveAutoSave(ES3AutoSave autoSave)
	{
		if ((Object)(object)Current != (Object)null)
		{
			Current.autoSaves.Remove(autoSave);
		}
	}

	public void GetAutoSaves()
	{
		//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)
		autoSaves = new HashSet<ES3AutoSave>();
		Scene scene = ((Component)this).gameObject.scene;
		GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
		foreach (GameObject val in rootGameObjects)
		{
			autoSaves.UnionWith(val.GetComponentsInChildren<ES3AutoSave>(true));
		}
	}

	private static int GetDepth(Transform t)
	{
		int num = 0;
		while ((Object)(object)t.parent != (Object)null)
		{
			t = t.parent;
			num++;
		}
		return num;
	}
}
public class ES3
{
	public enum Location
	{
		File,
		PlayerPrefs,
		InternalMS,
		Resources,
		Cache
	}

	public enum Directory
	{
		PersistentDataPath,
		DataPath
	}

	public enum EncryptionType
	{
		None,
		AES
	}

	public enum CompressionType
	{
		None,
		Gzip
	}

	public enum Format
	{
		JSON
	}

	public enum ReferenceMode
	{
		ByRef,
		ByValue,
		ByRefAndValue
	}

	public enum ImageType
	{
		JPEG,
		PNG
	}

	public static void Save(string key, object value)
	{
		ES3.Save<object>(key, value, new ES3Settings());
	}

	public static void Save(string key, object value, string filePath)
	{
		ES3.Save<object>(key, value, new ES3Settings(filePath));
	}

	public static void Save(string key, object value, string filePath, ES3Settings settings)
	{
		ES3.Save<object>(key, value, new ES3Settings(filePath, settings));
	}

	public static void Save(string key, object value, ES3Settings settings)
	{
		ES3.Save<object>(key, value, settings);
	}

	public static void Save<T>(string key, T value)
	{
		Save(key, value, new ES3Settings());
	}

	public static void Save<T>(string key, T value, string filePath)
	{
		Save(key, value, new ES3Settings(filePath));
	}

	public static void Save<T>(string key, T value, string filePath, ES3Settings settings)
	{
		Save(key, value, new ES3Settings(filePath, settings));
	}

	public static void Save<T>(string key, T value, ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			ES3File.GetOrCreateCachedFile(settings).Save(key, value);
			return;
		}
		using ES3Writer eS3Writer = ES3Writer.Create(settings);
		eS3Writer.Write<T>(key, value);
		eS3Writer.Save();
	}

	public static void SaveRaw(byte[] bytes)
	{
		SaveRaw(bytes, new ES3Settings());
	}

	public static void SaveRaw(byte[] bytes, string filePath)
	{
		SaveRaw(bytes, new ES3Settings(filePath));
	}

	public static void SaveRaw(byte[] bytes, string filePath, ES3Settings settings)
	{
		SaveRaw(bytes, new ES3Settings(filePath, settings));
	}

	public static void SaveRaw(byte[] bytes, ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			ES3File.GetOrCreateCachedFile(settings).SaveRaw(bytes, settings);
			return;
		}
		using (Stream stream = ES3Stream.CreateStream(settings, ES3FileMode.Write))
		{
			stream.Write(bytes, 0, bytes.Length);
		}
		ES3IO.CommitBackup(settings);
	}

	public static void SaveRaw(string str)
	{
		SaveRaw(str, new ES3Settings());
	}

	public static void SaveRaw(string str, string filePath)
	{
		SaveRaw(str, new ES3Settings(filePath));
	}

	public static void SaveRaw(string str, string filePath, ES3Settings settings)
	{
		SaveRaw(str, new ES3Settings(filePath, settings));
	}

	public static void SaveRaw(string str, ES3Settings settings)
	{
		SaveRaw(settings.encoding.GetBytes(str), settings);
	}

	public static void AppendRaw(byte[] bytes)
	{
		AppendRaw(bytes, new ES3Settings());
	}

	public static void AppendRaw(byte[] bytes, string filePath, ES3Settings settings)
	{
		AppendRaw(bytes, new ES3Settings(filePath, settings));
	}

	public static void AppendRaw(byte[] bytes, ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			ES3File.GetOrCreateCachedFile(settings).AppendRaw(bytes);
			return;
		}
		using Stream stream = ES3Stream.CreateStream(new ES3Settings(settings.path, settings)
		{
			encryptionType = EncryptionType.None,
			compressionType = CompressionType.None
		}, ES3FileMode.Append);
		stream.Write(bytes, 0, bytes.Length);
	}

	public static void AppendRaw(string str)
	{
		AppendRaw(str, new ES3Settings());
	}

	public static void AppendRaw(string str, string filePath)
	{
		AppendRaw(str, new ES3Settings(filePath));
	}

	public static void AppendRaw(string str, string filePath, ES3Settings settings)
	{
		AppendRaw(str, new ES3Settings(filePath, settings));
	}

	public static void AppendRaw(string str, ES3Settings settings)
	{
		byte[] bytes = settings.encoding.GetBytes(str);
		ES3Settings eS3Settings = new ES3Settings(settings.path, settings);
		eS3Settings.encryptionType = EncryptionType.None;
		eS3Settings.compressionType = CompressionType.None;
		if (settings.location == Location.Cache)
		{
			ES3File.GetOrCreateCachedFile(settings).SaveRaw(bytes);
			return;
		}
		using Stream stream = ES3Stream.CreateStream(eS3Settings, ES3FileMode.Append);
		stream.Write(bytes, 0, bytes.Length);
	}

	public static void SaveImage(Texture2D texture, string imagePath)
	{
		SaveImage(texture, new ES3Settings(imagePath));
	}

	public static void SaveImage(Texture2D texture, string imagePath, ES3Settings settings)
	{
		SaveImage(texture, new ES3Settings(imagePath, settings));
	}

	public static void SaveImage(Texture2D texture, ES3Settings settings)
	{
		SaveImage(texture, 75, settings);
	}

	public static void SaveImage(Texture2D texture, int quality, string imagePath)
	{
		SaveImage(texture, quality, new ES3Settings(imagePath));
	}

	public static void SaveImage(Texture2D texture, int quality, string imagePath, ES3Settings settings)
	{
		SaveImage(texture, quality, new ES3Settings(imagePath, settings));
	}

	public static void SaveImage(Texture2D texture, int quality, ES3Settings settings)
	{
		string text = ES3IO.GetExtension(settings.path).ToLower();
		if (string.IsNullOrEmpty(text))
		{
			throw new ArgumentException("File path must have a file extension when using ES3.SaveImage.");
		}
		byte[] bytes;
		switch (text)
		{
		case ".jpg":
		case ".jpeg":
			bytes = ImageConversion.EncodeToJPG(texture, quality);
			break;
		case ".png":
			bytes = ImageConversion.EncodeToPNG(texture);
			break;
		default:
			throw new ArgumentException("File path must have extension of .png, .jpg or .jpeg when using ES3.SaveImage.");
		}
		SaveRaw(bytes, settings);
	}

	public static byte[] SaveImageToBytes(Texture2D texture, int quality, ImageType imageType)
	{
		if (imageType == ImageType.JPEG)
		{
			return ImageConversion.EncodeToJPG(texture, quality);
		}
		return ImageConversion.EncodeToPNG(texture);
	}

	public static object Load(string key)
	{
		return Load<object>(key, new ES3Settings());
	}

	public static object Load(string key, string filePath)
	{
		return Load<object>(key, new ES3Settings(filePath));
	}

	public static object Load(string key, string filePath, ES3Settings settings)
	{
		return Load<object>(key, new ES3Settings(filePath, settings));
	}

	public static object Load(string key, ES3Settings settings)
	{
		return Load<object>(key, settings);
	}

	public static object Load(string key, object defaultValue)
	{
		return ES3.Load<object>(key, defaultValue, new ES3Settings());
	}

	public static object Load(string key, string filePath, object defaultValue)
	{
		return ES3.Load<object>(key, defaultValue, new ES3Settings(filePath));
	}

	public static object Load(string key, string filePath, object defaultValue, ES3Settings settings)
	{
		return ES3.Load<object>(key, defaultValue, new ES3Settings(filePath, settings));
	}

	public static object Load(string key, object defaultValue, ES3Settings settings)
	{
		return ES3.Load<object>(key, defaultValue, settings);
	}

	public static T Load<T>(string key)
	{
		return Load<T>(key, new ES3Settings());
	}

	public static T Load<T>(string key, string filePath)
	{
		return Load<T>(key, new ES3Settings(filePath));
	}

	public static T Load<T>(string key, string filePath, ES3Settings settings)
	{
		return Load<T>(key, new ES3Settings(filePath, settings));
	}

	public static T Load<T>(string key, ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			return ES3File.GetOrCreateCachedFile(settings).Load<T>(key);
		}
		using ES3Reader eS3Reader = ES3Reader.Create(settings);
		if (eS3Reader == null)
		{
			throw new FileNotFoundException("File \"" + settings.FullPath + "\" could not be found.");
		}
		return eS3Reader.Read<T>(key);
	}

	public static T Load<T>(string key, T defaultValue)
	{
		return Load(key, defaultValue, new ES3Settings());
	}

	public static T Load<T>(string key, string filePath, T defaultValue)
	{
		return Load(key, defaultValue, new ES3Settings(filePath));
	}

	public static T Load<T>(string key, string filePath, T defaultValue, ES3Settings settings)
	{
		return Load(key, defaultValue, new ES3Settings(filePath, settings));
	}

	public static T Load<T>(string key, T defaultValue, ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			return ES3File.GetOrCreateCachedFile(settings).Load(key, defaultValue);
		}
		using ES3Reader eS3Reader = ES3Reader.Create(settings);
		if (eS3Reader == null)
		{
			return defaultValue;
		}
		return eS3Reader.Read(key, defaultValue);
	}

	public static void LoadInto<T>(string key, object obj) where T : class
	{
		ES3.LoadInto<object>(key, obj, new ES3Settings());
	}

	public static void LoadInto(string key, string filePath, object obj)
	{
		ES3.LoadInto<object>(key, obj, new ES3Settings(filePath));
	}

	public static void LoadInto(string key, string filePath, object obj, ES3Settings settings)
	{
		ES3.LoadInto<object>(key, obj, new ES3Settings(filePath, settings));
	}

	public static void LoadInto(string key, object obj, ES3Settings settings)
	{
		ES3.LoadInto<object>(key, obj, settings);
	}

	public static void LoadInto<T>(string key, T obj) where T : class
	{
		LoadInto(key, obj, new ES3Settings());
	}

	public static void LoadInto<T>(string key, string filePath, T obj) where T : class
	{
		LoadInto(key, obj, new ES3Settings(filePath));
	}

	public static void LoadInto<T>(string key, string filePath, T obj, ES3Settings settings) where T : class
	{
		LoadInto(key, obj, new ES3Settings(filePath, settings));
	}

	public static void LoadInto<T>(string key, T obj, ES3Settings settings) where T : class
	{
		if (ES3Reflection.IsValueType(obj.GetType()))
		{
			throw new InvalidOperationException("ES3.LoadInto can only be used with reference types, but the data you're loading is a value type. Use ES3.Load instead.");
		}
		if (settings.location == Location.Cache)
		{
			ES3File.GetOrCreateCachedFile(settings).LoadInto(key, obj);
			return;
		}
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		using ES3Reader eS3Reader = ES3Reader.Create(settings);
		if (eS3Reader == null)
		{
			throw new FileNotFoundException("File \"" + settings.FullPath + "\" could not be found.");
		}
		eS3Reader.ReadInto(key, obj);
	}

	public static string LoadString(string key, string defaultValue, ES3Settings settings)
	{
		return Load(key, null, defaultValue, settings);
	}

	public static string LoadString(string key, string defaultValue, string filePath = null, ES3Settings settings = null)
	{
		return Load(key, filePath, defaultValue, settings);
	}

	public static byte[] LoadRawBytes()
	{
		return LoadRawBytes(new ES3Settings());
	}

	public static byte[] LoadRawBytes(string filePath)
	{
		return LoadRawBytes(new ES3Settings(filePath));
	}

	public static byte[] LoadRawBytes(string filePath, ES3Settings settings)
	{
		return LoadRawBytes(new ES3Settings(filePath, settings));
	}

	public static byte[] LoadRawBytes(ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			return ES3File.GetOrCreateCachedFile(settings).LoadRawBytes();
		}
		using Stream stream = ES3Stream.CreateStream(settings, ES3FileMode.Read);
		if (stream == null)
		{
			throw new FileNotFoundException("File " + settings.path + " could not be found");
		}
		if (stream.GetType() == typeof(GZipStream))
		{
			GZipStream source = (GZipStream)stream;
			using MemoryStream memoryStream = new MemoryStream();
			ES3Stream.CopyTo(source, memoryStream);
			return memoryStream.ToArray();
		}
		byte[] array = new byte[stream.Length];
		stream.Read(array, 0, array.Length);
		return array;
	}

	public static string LoadRawString()
	{
		return LoadRawString(new ES3Settings());
	}

	public static string LoadRawString(string filePath)
	{
		return LoadRawString(new ES3Settings(filePath));
	}

	public static string LoadRawString(string filePath, ES3Settings settings)
	{
		return LoadRawString(new ES3Settings(filePath, settings));
	}

	public static string LoadRawString(ES3Settings settings)
	{
		byte[] array = LoadRawBytes(settings);
		return settings.encoding.GetString(array, 0, array.Length);
	}

	public static Texture2D LoadImage(string imagePath)
	{
		return LoadImage(new ES3Settings(imagePath));
	}

	public static Texture2D LoadImage(string imagePath, ES3Settings settings)
	{
		return LoadImage(new ES3Settings(imagePath, settings));
	}

	public static Texture2D LoadImage(ES3Settings settings)
	{
		return LoadImage(LoadRawBytes(settings));
	}

	public static Texture2D LoadImage(byte[] bytes)
	{
		//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: Expected O, but got Unknown
		//IL_0010: Expected O, but got Unknown
		Texture2D val = new Texture2D(1, 1);
		ImageConversion.LoadImage(val, bytes);
		return val;
	}

	public static AudioClip LoadAudio(string audioFilePath, AudioType audioType)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		return LoadAudio(audioFilePath, audioType, new ES3Settings());
	}

	public static AudioClip LoadAudio(string audioFilePath, AudioType audioType, ES3Settings settings)
	{
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Invalid comparison between Unknown and I4
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Invalid comparison between Unknown and I4
		//IL_00a3: 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_006c: Invalid comparison between Unknown and I4
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Invalid comparison between Unknown and I4
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0075: Invalid comparison between Unknown and I4
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Invalid comparison between Unknown and I4
		if (settings.location != 0)
		{
			throw new InvalidOperationException("ES3.LoadAudio can only be used with the File save location");
		}
		if ((int)Application.platform == 17)
		{
			throw new InvalidOperationException("You cannot use ES3.LoadAudio with WebGL");
		}
		string text = ES3IO.GetExtension(audioFilePath).ToLower();
		if (text == ".mp3" && ((int)Application.platform == 2 || (int)Application.platform == 1))
		{
			throw new InvalidOperationException("You can only load Ogg, WAV, XM, IT, MOD or S3M on Unity Standalone");
		}
		if (text == ".ogg" && ((int)Application.platform == 8 || (int)Application.platform == 11 || (int)Application.platform == 20))
		{
			throw new InvalidOperationException("You can only load MP3, WAV, XM, IT, MOD or S3M on Unity Standalone");
		}
		ES3Settings eS3Settings = new ES3Settings(audioFilePath, settings);
		UnityWebRequest audioClip = UnityWebRequestMultimedia.GetAudioClip("file://" + eS3Settings.FullPath, audioType);
		try
		{
			audioClip.SendWebRequest();
			while (!audioClip.isDone)
			{
			}
			if (ES3WebClass.IsNetworkError(audioClip))
			{
				throw new Exception(audioClip.error);
			}
			return DownloadHandlerAudioClip.GetContent(audioClip);
		}
		finally
		{
			((IDisposable)audioClip)?.Dispose();
		}
	}

	public static byte[] Serialize<T>(T value, ES3Settings settings = null)
	{
		return Serialize(value, ES3TypeMgr.GetOrCreateES3Type(typeof(T)), settings);
	}

	internal static byte[] Serialize(object value, ES3Type type, ES3Settings settings = null)
	{
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		using MemoryStream memoryStream = new MemoryStream();
		using Stream stream = ES3Stream.CreateStream(memoryStream, settings, ES3FileMode.Write);
		using (ES3Writer eS3Writer = ES3Writer.Create(stream, settings, writeHeaderAndFooter: false, overwriteKeys: false))
		{
			eS3Writer.Write(value, type, settings.referenceMode);
		}
		return memoryStream.ToArray();
	}

	public static T Deserialize<T>(byte[] bytes, ES3Settings settings = null)
	{
		return (T)Deserialize(ES3TypeMgr.GetOrCreateES3Type(typeof(T)), bytes, settings);
	}

	internal static object Deserialize(ES3Type type, byte[] bytes, ES3Settings settings = null)
	{
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		using MemoryStream stream = new MemoryStream(bytes, writable: false);
		using Stream stream2 = ES3Stream.CreateStream(stream, settings, ES3FileMode.Read);
		using ES3Reader eS3Reader = ES3Reader.Create(stream2, settings, readHeaderAndFooter: false);
		return eS3Reader.Read<object>(type);
	}

	public static void DeserializeInto<T>(byte[] bytes, T obj, ES3Settings settings = null) where T : class
	{
		DeserializeInto(ES3TypeMgr.GetOrCreateES3Type(typeof(T)), bytes, obj, settings);
	}

	public static void DeserializeInto<T>(ES3Type type, byte[] bytes, T obj, ES3Settings settings = null) where T : class
	{
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		using MemoryStream stream = new MemoryStream(bytes, writable: false);
		using ES3Reader eS3Reader = ES3Reader.Create(stream, settings, readHeaderAndFooter: false);
		eS3Reader.ReadInto<T>(obj, type);
	}

	public static byte[] EncryptBytes(byte[] bytes, string password = null)
	{
		if (string.IsNullOrEmpty(password))
		{
			password = ES3Settings.defaultSettings.encryptionPassword;
		}
		return new AESEncryptionAlgorithm().Encrypt(bytes, password, ES3Settings.defaultSettings.bufferSize);
	}

	public static byte[] DecryptBytes(byte[] bytes, string password = null)
	{
		if (string.IsNullOrEmpty(password))
		{
			password = ES3Settings.defaultSettings.encryptionPassword;
		}
		return new AESEncryptionAlgorithm().Decrypt(bytes, password, ES3Settings.defaultSettings.bufferSize);
	}

	public static string EncryptString(string str, string password = null)
	{
		return Convert.ToBase64String(EncryptBytes(ES3Settings.defaultSettings.encoding.GetBytes(str), password));
	}

	public static string DecryptString(string str, string password = null)
	{
		return ES3Settings.defaultSettings.encoding.GetString(DecryptBytes(Convert.FromBase64String(str), password));
	}

	public static byte[] CompressBytes(byte[] bytes)
	{
		using MemoryStream memoryStream = new MemoryStream();
		ES3Settings eS3Settings = new ES3Settings();
		eS3Settings.location = Location.InternalMS;
		eS3Settings.compressionType = CompressionType.Gzip;
		eS3Settings.encryptionType = EncryptionType.None;
		using (Stream stream = ES3Stream.CreateStream(memoryStream, eS3Settings, ES3FileMode.Write))
		{
			stream.Write(bytes, 0, bytes.Length);
		}
		return memoryStream.ToArray();
	}

	public static byte[] DecompressBytes(byte[] bytes)
	{
		using MemoryStream stream = new MemoryStream(bytes);
		ES3Settings eS3Settings = new ES3Settings();
		eS3Settings.location = Location.InternalMS;
		eS3Settings.compressionType = CompressionType.Gzip;
		eS3Settings.encryptionType = EncryptionType.None;
		using MemoryStream memoryStream = new MemoryStream();
		using (Stream source = ES3Stream.CreateStream(stream, eS3Settings, ES3FileMode.Read))
		{
			ES3Stream.CopyTo(source, memoryStream);
		}
		return memoryStream.ToArray();
	}

	public static string CompressString(string str)
	{
		return Convert.ToBase64String(CompressBytes(ES3Settings.defaultSettings.encoding.GetBytes(str)));
	}

	public static string DecompressString(string str)
	{
		return ES3Settings.defaultSettings.encoding.GetString(DecompressBytes(Convert.FromBase64String(str)));
	}

	public static void DeleteFile()
	{
		DeleteFile(new ES3Settings());
	}

	public static void DeleteFile(string filePath)
	{
		DeleteFile(new ES3Settings(filePath));
	}

	public static void DeleteFile(string filePath, ES3Settings settings)
	{
		DeleteFile(new ES3Settings(filePath, settings));
	}

	public static void DeleteFile(ES3Settings settings)
	{
		if (settings.location == Location.File)
		{
			ES3IO.DeleteFile(settings.FullPath);
		}
		else if (settings.location == Location.PlayerPrefs)
		{
			PlayerPrefs.DeleteKey(settings.FullPath);
		}
		else if (settings.location == Location.Cache)
		{
			ES3File.RemoveCachedFile(settings);
		}
		else if (settings.location == Location.Resources)
		{
			throw new NotSupportedException("Deleting files from Resources is not possible.");
		}
	}

	public static void CopyFile(string oldFilePath, string newFilePath)
	{
		CopyFile(new ES3Settings(oldFilePath), new ES3Settings(newFilePath));
	}

	public static void CopyFile(string oldFilePath, string newFilePath, ES3Settings oldSettings, ES3Settings newSettings)
	{
		CopyFile(new ES3Settings(oldFilePath, oldSettings), new ES3Settings(newFilePath, newSettings));
	}

	public static void CopyFile(ES3Settings oldSettings, ES3Settings newSettings)
	{
		if (oldSettings.location != newSettings.location)
		{
			throw new InvalidOperationException("Cannot copy file from " + oldSettings.location.ToString() + " to " + newSettings.location.ToString() + ". Location must be the same for both source and destination.");
		}
		if (oldSettings.location == Location.File)
		{
			if (ES3IO.FileExists(oldSettings.FullPath))
			{
				string directoryPath = ES3IO.GetDirectoryPath(newSettings.FullPath);
				if (!ES3IO.DirectoryExists(directoryPath))
				{
					ES3IO.CreateDirectory(directoryPath);
				}
				else
				{
					ES3IO.DeleteFile(newSettings.FullPath);
				}
				ES3IO.CopyFile(oldSettings.FullPath, newSettings.FullPath);
			}
		}
		else if (oldSettings.location == Location.PlayerPrefs)
		{
			PlayerPrefs.SetString(newSettings.FullPath, PlayerPrefs.GetString(oldSettings.FullPath));
		}
		else if (oldSettings.location == Location.Cache)
		{
			ES3File.CopyCachedFile(oldSettings, newSettings);
		}
		else if (oldSettings.location == Location.Resources)
		{
			throw new NotSupportedException("Modifying files from Resources is not allowed.");
		}
	}

	public static void RenameFile(string oldFilePath, string newFilePath)
	{
		RenameFile(new ES3Settings(oldFilePath), new ES3Settings(newFilePath));
	}

	public static void RenameFile(string oldFilePath, string newFilePath, ES3Settings oldSettings, ES3Settings newSettings)
	{
		RenameFile(new ES3Settings(oldFilePath, oldSettings), new ES3Settings(newFilePath, newSettings));
	}

	public static void RenameFile(ES3Settings oldSettings, ES3Settings newSettings)
	{
		if (oldSettings.location != newSettings.location)
		{
			throw new InvalidOperationException("Cannot rename file in " + oldSettings.location.ToString() + " to " + newSettings.location.ToString() + ". Location must be the same for both source and destination.");
		}
		if (oldSettings.location == Location.File)
		{
			if (ES3IO.FileExists(oldSettings.FullPath))
			{
				ES3IO.DeleteFile(newSettings.FullPath);
				ES3IO.MoveFile(oldSettings.FullPath, newSettings.FullPath);
			}
		}
		else if (oldSettings.location == Location.PlayerPrefs)
		{
			PlayerPrefs.SetString(newSettings.FullPath, PlayerPrefs.GetString(oldSettings.FullPath));
			PlayerPrefs.DeleteKey(oldSettings.FullPath);
		}
		else if (oldSettings.location == Location.Cache)
		{
			ES3File.CopyCachedFile(oldSettings, newSettings);
			ES3File.RemoveCachedFile(oldSettings);
		}
		else if (oldSettings.location == Location.Resources)
		{
			throw new NotSupportedException("Modifying files from Resources is not allowed.");
		}
	}

	public static void CopyDirectory(string oldDirectoryPath, string newDirectoryPath)
	{
		CopyDirectory(new ES3Settings(oldDirectoryPath), new ES3Settings(newDirectoryPath));
	}

	public static void CopyDirectory(string oldDirectoryPath, string newDirectoryPath, ES3Settings oldSettings, ES3Settings newSettings)
	{
		CopyDirectory(new ES3Settings(oldDirectoryPath, oldSettings), new ES3Settings(newDirectoryPath, newSettings));
	}

	public static void CopyDirectory(ES3Settings oldSettings, ES3Settings newSettings)
	{
		if (oldSettings.location != 0)
		{
			throw new InvalidOperationException("ES3.CopyDirectory can only be used when the save location is 'File'");
		}
		if (!DirectoryExists(oldSettings))
		{
			throw new DirectoryNotFoundException("Directory " + oldSettings.FullPath + " not found");
		}
		if (!DirectoryExists(newSettings))
		{
			ES3IO.CreateDirectory(newSettings.FullPath);
		}
		string[] files = GetFiles(oldSettings);
		foreach (string fileOrDirectoryName in files)
		{
			CopyFile(ES3IO.CombinePathAndFilename(oldSettings.path, fileOrDirectoryName), ES3IO.CombinePathAndFilename(newSettings.path, fileOrDirectoryName));
		}
		files = GetDirectories(oldSettings);
		foreach (string fileOrDirectoryName2 in files)
		{
			CopyDirectory(ES3IO.CombinePathAndFilename(oldSettings.path, fileOrDirectoryName2), ES3IO.CombinePathAndFilename(newSettings.path, fileOrDirectoryName2));
		}
	}

	public static void RenameDirectory(string oldDirectoryPath, string newDirectoryPath)
	{
		RenameDirectory(new ES3Settings(oldDirectoryPath), new ES3Settings(newDirectoryPath));
	}

	public static void RenameDirectory(string oldDirectoryPath, string newDirectoryPath, ES3Settings oldSettings, ES3Settings newSettings)
	{
		RenameDirectory(new ES3Settings(oldDirectoryPath, oldSettings), new ES3Settings(newDirectoryPath, newSettings));
	}

	public static void RenameDirectory(ES3Settings oldSettings, ES3Settings newSettings)
	{
		if (oldSettings.location == Location.File)
		{
			if (ES3IO.DirectoryExists(oldSettings.FullPath))
			{
				ES3IO.DeleteDirectory(newSettings.FullPath);
				ES3IO.MoveDirectory(oldSettings.FullPath, newSettings.FullPath);
			}
			return;
		}
		if (oldSettings.location == Location.PlayerPrefs || oldSettings.location == Location.Cache)
		{
			throw new NotSupportedException("Directories cannot be renamed when saving to Cache, PlayerPrefs, tvOS or using WebGL.");
		}
		if (oldSettings.location != Location.Resources)
		{
			return;
		}
		throw new NotSupportedException("Modifying files from Resources is not allowed.");
	}

	public static void DeleteDirectory(string directoryPath)
	{
		DeleteDirectory(new ES3Settings(directoryPath));
	}

	public static void DeleteDirectory(string directoryPath, ES3Settings settings)
	{
		DeleteDirectory(new ES3Settings(directoryPath, settings));
	}

	public static void DeleteDirectory(ES3Settings settings)
	{
		if (settings.location == Location.File)
		{
			ES3IO.DeleteDirectory(settings.FullPath);
			return;
		}
		if (settings.location == Location.PlayerPrefs || settings.location == Location.Cache)
		{
			throw new NotSupportedException("Deleting Directories using Cache or PlayerPrefs is not supported.");
		}
		if (settings.location != Location.Resources)
		{
			return;
		}
		throw new NotSupportedException("Deleting directories from Resources is not allowed.");
	}

	public static void DeleteKey(string key)
	{
		DeleteKey(key, new ES3Settings());
	}

	public static void DeleteKey(string key, string filePath)
	{
		DeleteKey(key, new ES3Settings(filePath));
	}

	public static void DeleteKey(string key, string filePath, ES3Settings settings)
	{
		DeleteKey(key, new ES3Settings(filePath, settings));
	}

	public static void DeleteKey(string key, ES3Settings settings)
	{
		if (settings.location == Location.Resources)
		{
			throw new NotSupportedException("Modifying files in Resources is not allowed.");
		}
		if (settings.location == Location.Cache)
		{
			ES3File.DeleteKey(key, settings);
		}
		else if (FileExists(settings))
		{
			using (ES3Writer eS3Writer = ES3Writer.Create(settings))
			{
				eS3Writer.MarkKeyForDeletion(key);
				eS3Writer.Save();
			}
		}
	}

	public static bool KeyExists(string key)
	{
		return KeyExists(key, new ES3Settings());
	}

	public static bool KeyExists(string key, string filePath)
	{
		return KeyExists(key, new ES3Settings(filePath));
	}

	public static bool KeyExists(string key, string filePath, ES3Settings settings)
	{
		return KeyExists(key, new ES3Settings(filePath, settings));
	}

	public static bool KeyExists(string key, ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			return ES3File.KeyExists(key, settings);
		}
		using ES3Reader eS3Reader = ES3Reader.Create(settings);
		return eS3Reader?.Goto(key) ?? false;
	}

	public static bool FileExists()
	{
		return FileExists(new ES3Settings());
	}

	public static bool FileExists(string filePath)
	{
		return FileExists(new ES3Settings(filePath));
	}

	public static bool FileExists(string filePath, ES3Settings settings)
	{
		return FileExists(new ES3Settings(filePath, settings));
	}

	public static bool FileExists(ES3Settings settings)
	{
		if (settings.location == Location.File)
		{
			return ES3IO.FileExists(settings.FullPath);
		}
		if (settings.location == Location.PlayerPrefs)
		{
			return PlayerPrefs.HasKey(settings.FullPath);
		}
		if (settings.location == Location.Cache)
		{
			return ES3File.FileExists(settings);
		}
		if (settings.location == Location.Resources)
		{
			return Resources.Load(settings.FullPath) != (Object)null;
		}
		return false;
	}

	public static bool DirectoryExists(string folderPath)
	{
		return DirectoryExists(new ES3Settings(folderPath));
	}

	public static bool DirectoryExists(string folderPath, ES3Settings settings)
	{
		return DirectoryExists(new ES3Settings(folderPath, settings));
	}

	public static bool DirectoryExists(ES3Settings settings)
	{
		if (settings.location == Location.File)
		{
			return ES3IO.DirectoryExists(settings.FullPath);
		}
		if (settings.location == Location.PlayerPrefs || settings.location == Location.Cache)
		{
			throw new NotSupportedException("Directories are not supported for the Cache and PlayerPrefs location.");
		}
		if (settings.location == Location.Resources)
		{
			throw new NotSupportedException("Checking existence of folder in Resources not supported.");
		}
		return false;
	}

	public static string[] GetKeys()
	{
		return GetKeys(new ES3Settings());
	}

	public static string[] GetKeys(string filePath)
	{
		return GetKeys(new ES3Settings(filePath));
	}

	public static string[] GetKeys(string filePath, ES3Settings settings)
	{
		return GetKeys(new ES3Settings(filePath, settings));
	}

	public static string[] GetKeys(ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			return ES3File.GetKeys(settings);
		}
		List<string> list = new List<string>();
		using (ES3Reader eS3Reader = ES3Reader.Create(settings))
		{
			foreach (string property in eS3Reader.Properties)
			{
				list.Add(property);
				eS3Reader.Skip();
			}
		}
		return list.ToArray();
	}

	public static string[] GetFiles()
	{
		ES3Settings eS3Settings = new ES3Settings();
		if (eS3Settings.location == Location.File)
		{
			if (eS3Settings.directory == Directory.PersistentDataPath)
			{
				eS3Settings.path = ES3IO.persistentDataPath;
			}
			else
			{
				eS3Settings.path = ES3IO.dataPath;
			}
		}
		return GetFiles(new ES3Settings());
	}

	public static string[] GetFiles(string directoryPath)
	{
		return GetFiles(new ES3Settings(directoryPath));
	}

	public static string[] GetFiles(string directoryPath, ES3Settings settings)
	{
		return GetFiles(new ES3Settings(directoryPath, settings));
	}

	public static string[] GetFiles(ES3Settings settings)
	{
		if (settings.location == Location.Cache)
		{
			return ES3File.GetFiles();
		}
		if (settings.location != 0)
		{
			throw new NotSupportedException("ES3.GetFiles can only be used when the location is set to File or Cache.");
		}
		return ES3IO.GetFiles(settings.FullPath, getFullPaths: false);
	}

	public static string[] GetDirectories()
	{
		return GetDirectories(new ES3Settings());
	}

	public static string[] GetDirectories(string directoryPath)
	{
		return GetDirectories(new ES3Settings(directoryPath));
	}

	public static string[] GetDirectories(string directoryPath, ES3Settings settings)
	{
		return GetDirectories(new ES3Settings(directoryPath, settings));
	}

	public static string[] GetDirectories(ES3Settings settings)
	{
		if (settings.location != 0)
		{
			throw new NotSupportedException("ES3.GetDirectories can only be used when the location is set to File.");
		}
		return ES3IO.GetDirectories(settings.FullPath, getFullPaths: false);
	}

	public static void CreateBackup()
	{
		CreateBackup(new ES3Settings());
	}

	public static void CreateBackup(string filePath)
	{
		CreateBackup(new ES3Settings(filePath));
	}

	public static void CreateBackup(string filePath, ES3Settings settings)
	{
		CreateBackup(new ES3Settings(filePath, settings));
	}

	public static void CreateBackup(ES3Settings settings)
	{
		ES3Settings newSettings = new ES3Settings(settings.path + ".bac", settings);
		CopyFile(settings, newSettings);
	}

	public static bool RestoreBackup(string filePath)
	{
		return RestoreBackup(new ES3Settings(filePath));
	}

	public static bool RestoreBackup(string filePath, ES3Settings settings)
	{
		return RestoreBackup(new ES3Settings(filePath, settings));
	}

	public static bool RestoreBackup(ES3Settings settings)
	{
		ES3Settings eS3Settings = new ES3Settings(settings.path + ".bac", settings);
		if (!FileExists(eS3Settings))
		{
			return false;
		}
		RenameFile(eS3Settings, settings);
		return true;
	}

	public static DateTime GetTimestamp()
	{
		return GetTimestamp(new ES3Settings());
	}

	public static DateTime GetTimestamp(string filePath)
	{
		return GetTimestamp(new ES3Settings(filePath));
	}

	public static DateTime GetTimestamp(string filePath, ES3Settings settings)
	{
		return GetTimestamp(new ES3Settings(filePath, settings));
	}

	public static DateTime GetTimestamp(ES3Settings settings)
	{
		if (settings.location == Location.File)
		{
			return ES3IO.GetTimestamp(settings.FullPath);
		}
		if (settings.location == Location.PlayerPrefs)
		{
			return new DateTime(long.Parse(PlayerPrefs.GetString("timestamp_" + settings.FullPath, "0")), DateTimeKind.Utc);
		}
		if (settings.location == Location.Cache)
		{
			return ES3File.GetTimestamp(settings);
		}
		return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
	}

	public static void StoreCachedFile()
	{
		ES3File.Store();
	}

	public static void StoreCachedFile(string filePath)
	{
		StoreCachedFile(new ES3Settings(filePath));
	}

	public static void StoreCachedFile(string filePath, ES3Settings settings)
	{
		StoreCachedFile(new ES3Settings(filePath, settings));
	}

	public static void StoreCachedFile(ES3Settings settings)
	{
		ES3File.Store(settings);
	}

	public static void CacheFile()
	{
		CacheFile(new ES3Settings());
	}

	public static void CacheFile(string filePath)
	{
		CacheFile(new ES3Settings(filePath));
	}

	public static void CacheFile(string filePath, ES3Settings settings)
	{
		CacheFile(new ES3Settings(filePath, settings));
	}

	public static void CacheFile(ES3Settings settings)
	{
		ES3File.CacheFile(settings);
	}

	public static void Init()
	{
		_ = ES3Settings.defaultSettings;
		_ = ES3IO.persistentDataPath;
		ES3TypeMgr.Init();
	}
}
public class ES3File
{
	[EditorBrowsable(EditorBrowsableState.Never)]
	public static Dictionary<string, ES3File> cachedFiles = new Dictionary<string, ES3File>();

	public ES3Settings settings;

	private Dictionary<string, ES3Data> cache = new Dictionary<string, ES3Data>();

	private bool syncWithFile;

	private DateTime timestamp = DateTime.UtcNow;

	public ES3File()
		: this(new ES3Settings(), syncWithFile: true)
	{
	}

	public ES3File(string filePath)
		: this(new ES3Settings(filePath), syncWithFile: true)
	{
	}

	public ES3File(string filePath, ES3Settings settings)
		: this(new ES3Settings(filePath, settings), syncWithFile: true)
	{
	}

	public ES3File(ES3Settings settings)
		: this(settings, syncWithFile: true)
	{
	}

	public ES3File(bool syncWithFile)
		: this(new ES3Settings(), syncWithFile)
	{
	}

	public ES3File(string filePath, bool syncWithFile)
		: this(new ES3Settings(filePath), syncWithFile)
	{
	}

	public ES3File(string filePath, ES3Settings settings, bool syncWithFile)
		: this(new ES3Settings(filePath, settings), syncWithFile)
	{
	}

	public ES3File(ES3Settings settings, bool syncWithFile)
	{
		this.settings = settings;
		this.syncWithFile = syncWithFile;
		if (!syncWithFile)
		{
			return;
		}
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.typeChecking = true;
		using (ES3Reader eS3Reader = ES3Reader.Create(eS3Settings))
		{
			if (eS3Reader == null)
			{
				return;
			}
			foreach (KeyValuePair<string, ES3Data> item in eS3Reader.RawEnumerator)
			{
				cache[item.Key] = item.Value;
			}
		}
		timestamp = ES3.GetTimestamp(eS3Settings);
	}

	public ES3File(byte[] bytes, ES3Settings settings = null)
	{
		if (settings == null)
		{
			this.settings = new ES3Settings();
		}
		else
		{
			this.settings = settings;
		}
		syncWithFile = true;
		SaveRaw(bytes, settings);
	}

	public void Sync()
	{
		Sync(settings);
	}

	public void Sync(string filePath, ES3Settings settings = null)
	{
		Sync(new ES3Settings(filePath, settings));
	}

	public void Sync(ES3Settings settings = null)
	{
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		if (cache.Count == 0)
		{
			ES3.DeleteFile(settings);
			return;
		}
		using ES3Writer eS3Writer = ES3Writer.Create(settings, writeHeaderAndFooter: true, !syncWithFile, append: false);
		foreach (KeyValuePair<string, ES3Data> item in cache)
		{
			eS3Writer.Write(type: (item.Value.type != null) ? item.Value.type.type : typeof(object), key: item.Key, value: item.Value.bytes);
		}
		eS3Writer.Save(!syncWithFile);
	}

	public void Clear()
	{
		cache.Clear();
	}

	public string[] GetKeys()
	{
		Dictionary<string, ES3Data>.KeyCollection keys = cache.Keys;
		string[] array = new string[keys.Count];
		keys.CopyTo(array, 0);
		return array;
	}

	public void Save<T>(string key, T value)
	{
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.encryptionType = ES3.EncryptionType.None;
		eS3Settings.compressionType = ES3.CompressionType.None;
		Type type = ((value != null) ? value.GetType() : typeof(T));
		cache[key] = new ES3Data(ES3TypeMgr.GetOrCreateES3Type(type), ES3.Serialize(value, eS3Settings));
	}

	public void SaveRaw(byte[] bytes, ES3Settings settings = null)
	{
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.typeChecking = true;
		using ES3Reader eS3Reader = ES3Reader.Create(bytes, eS3Settings);
		if (eS3Reader == null)
		{
			return;
		}
		foreach (KeyValuePair<string, ES3Data> item in eS3Reader.RawEnumerator)
		{
			cache[item.Key] = item.Value;
		}
	}

	public void AppendRaw(byte[] bytes, ES3Settings settings = null)
	{
		if (settings == null)
		{
			settings = new ES3Settings();
		}
		SaveRaw(bytes, settings);
	}

	public object Load(string key)
	{
		return Load<object>(key);
	}

	public object Load(string key, object defaultValue)
	{
		return this.Load<object>(key, defaultValue);
	}

	public T Load<T>(string key)
	{
		if (!cache.TryGetValue(key, out var value))
		{
			throw new KeyNotFoundException("Key \"" + key + "\" was not found in this ES3File. Use Load<T>(key, defaultValue) if you want to return a default value if the key does not exist.");
		}
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.encryptionType = ES3.EncryptionType.None;
		eS3Settings.compressionType = ES3.CompressionType.None;
		if (typeof(T) == typeof(object))
		{
			return (T)ES3.Deserialize(value.type, value.bytes, eS3Settings);
		}
		return ES3.Deserialize<T>(value.bytes, eS3Settings);
	}

	public T Load<T>(string key, T defaultValue)
	{
		if (!cache.TryGetValue(key, out var value))
		{
			return defaultValue;
		}
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.encryptionType = ES3.EncryptionType.None;
		eS3Settings.compressionType = ES3.CompressionType.None;
		if (typeof(T) == typeof(object))
		{
			return (T)ES3.Deserialize(value.type, value.bytes, eS3Settings);
		}
		return ES3.Deserialize<T>(value.bytes, eS3Settings);
	}

	public void LoadInto<T>(string key, T obj) where T : class
	{
		if (!cache.TryGetValue(key, out var value))
		{
			throw new KeyNotFoundException("Key \"" + key + "\" was not found in this ES3File. Use Load<T>(key, defaultValue) if you want to return a default value if the key does not exist.");
		}
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.encryptionType = ES3.EncryptionType.None;
		eS3Settings.compressionType = ES3.CompressionType.None;
		if (typeof(T) == typeof(object))
		{
			ES3.DeserializeInto(value.type, value.bytes, obj, eS3Settings);
		}
		else
		{
			ES3.DeserializeInto(value.bytes, obj, eS3Settings);
		}
	}

	public byte[] LoadRawBytes()
	{
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		if (!eS3Settings.postprocessRawCachedData)
		{
			eS3Settings.encryptionType = ES3.EncryptionType.None;
			eS3Settings.compressionType = ES3.CompressionType.None;
		}
		return GetBytes(eS3Settings);
	}

	public string LoadRawString()
	{
		if (cache.Count == 0)
		{
			return "";
		}
		return settings.encoding.GetString(LoadRawBytes());
	}

	internal byte[] GetBytes(ES3Settings settings = null)
	{
		if (cache.Count == 0)
		{
			return new byte[0];
		}
		if (settings == null)
		{
			settings = this.settings;
		}
		using MemoryStream memoryStream = new MemoryStream();
		ES3Settings eS3Settings = (ES3Settings)settings.Clone();
		eS3Settings.location = ES3.Location.InternalMS;
		if (!eS3Settings.postprocessRawCachedData)
		{
			eS3Settings.encryptionType = ES3.EncryptionType.None;
			eS3Settings.compressionType = ES3.CompressionType.None;
		}
		using (ES3Writer eS3Writer = ES3Writer.Create(ES3Stream.CreateStream(memoryStream, eS3Settings, ES3FileMode.Write), eS3Settings, writeHeaderAndFooter: true, overwriteKeys: false))
		{
			foreach (KeyValuePair<string, ES3Data> item in cache)
			{
				eS3Writer.Write(item.Key, item.Value.type.type, item.Value.bytes);
			}
			eS3Writer.Save(overwriteKeys: false);
		}
		return memoryStream.ToArray();
	}

	public void DeleteKey(string key)
	{
		cache.Remove(key);
	}

	public bool KeyExists(string key)
	{
		return cache.ContainsKey(key);
	}

	public int Size()
	{
		int num = 0;
		foreach (KeyValuePair<string, ES3Data> item in cache)
		{
			num += item.Value.bytes.Length;
		}
		return num;
	}

	public Type GetKeyType(string key)
	{
		if (!cache.TryGetValue(key, out var value))
		{
			throw new KeyNotFoundException("Key \"" + key + "\" was not found in this ES3File. Use Load<T>(key, defaultValue) if you want to return a default value if the key does not exist.");
		}
		return value.type.type;
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static ES3File GetOrCreateCachedFile(ES3Settings settings)
	{
		if (!cachedFiles.TryGetValue(settings.path, out var value))
		{
			value = new ES3File(settings, syncWithFile: false);
			cachedFiles.Add(settings.path, value);
			value.syncWithFile = true;
		}
		value.settings = settings;
		return value;
	}

	internal static void CacheFile(ES3Settings settings)
	{
		if (settings.location == ES3.Location.Cache)
		{
			settings = (ES3Settings)settings.Clone();
			settings.location = ((ES3Settings.defaultSettings.location != ES3.Location.Cache) ? ES3Settings.defaultSettings.location : ES3.Location.File);
		}
		if (ES3.FileExists(settings))
		{
			ES3Settings eS3Settings = (ES3Settings)settings.Clone();
			eS3Settings.compressionType = ES3.CompressionType.None;
			eS3Settings.encryptionType = ES3.EncryptionType.None;
			cachedFiles[settings.path] = new ES3File(ES3.LoadRawBytes(eS3Settings), settings);
		}
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static void Store(ES3Settings settings = null)
	{
		if (settings == null)
		{
			settings = new ES3Settings(ES3.Location.File);
		}
		else if (settings.location == ES3.Location.Cache)
		{
			settings = (ES3Settings)settings.Clone();
			settings.location = ((ES3Settings.defaultSettings.location != ES3.Location.Cache) ? ES3Settings.defaultSettings.location : ES3.Location.File);
		}
		if (!cachedFiles.TryGetValue(settings.path, out var value))
		{
			throw new FileNotFoundException("The file '" + settings.path + "' could not be stored because it could not be found in the cache.");
		}
		value.Sync(settings);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static void RemoveCachedFile(ES3Settings settings)
	{
		cachedFiles.Remove(settings.path);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static void CopyCachedFile(ES3Settings oldSettings, ES3Settings newSettings)
	{
		if (!cachedFiles.TryGetValue(oldSettings.path, out var value))
		{
			throw new FileNotFoundException("The file '" + oldSettings.path + "' could not be copied because it could not be found in the cache.");
		}
		if (cachedFiles.ContainsKey(newSettings.path))
		{
			throw new InvalidOperationException("Cannot copy file '" + oldSettings.path + "' to '" + newSettings.path + "' because '" + newSettings.path + "' already exists");
		}
		cachedFiles.Add(newSettings.path, (ES3File)value.MemberwiseClone());
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static void DeleteKey(string key, ES3Settings settings)
	{
		if (cachedFiles.TryGetValue(settings.path, out var value))
		{
			value.DeleteKey(key);
		}
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static bool KeyExists(string key, ES3Settings settings)
	{
		if (cachedFiles.TryGetValue(settings.path, out var value))
		{
			return value.KeyExists(key);
		}
		return false;
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static bool FileExists(ES3Settings settings)
	{
		return cachedFiles.ContainsKey(settings.path);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static string[] GetKeys(ES3Settings settings)
	{
		if (!cachedFiles.TryGetValue(settings.path, out var value))
		{
			throw new FileNotFoundException("Could not get keys from the file '" + settings.path + "' because it could not be found in the cache.");
		}
		return value.cache.Keys.ToArray();
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal static string[] GetFiles()
	{
		return cachedFiles.Keys.ToArray();
	}

	internal static DateTime GetTimestamp(ES3Settings settings)
	{
		if (!cachedFiles.TryGetValue(settings.path, out var value))
		{
			return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
		}
		return value.timestamp;
	}
}
[ExecuteInEditMode]
public class ES3GameObject : MonoBehaviour
{
	public List<Component> components = new List<Component>();

	private void Update()
	{
		_ = Application.isPlaying;
	}
}
public class ES3InspectorInfo : MonoBehaviour
{
}
public class ES3ReferenceMgr : ES3ReferenceMgrBase
{
}
public class ES3Spreadsheet
{
	protected struct Index
	{
		public int col;

		public int row;

		public Index(int col, int row)
		{
			this.col = col;
			this.row = row;
		}
	}

	private int cols;

	private int rows;

	private Dictionary<Index, string> cells = new Dictionary<Index, string>();

	private const string QUOTE = "\"";

	private const char QUOTE_CHAR = '"';

	private const char COMMA_CHAR = ',';

	private const char NEWLINE_CHAR = '\n';

	private const string ESCAPED_QUOTE = "\"\"";

	private static char[] CHARS_TO_ESCAPE = new char[4] { ',', '"', '\n', ' ' };

	public int ColumnCount => cols;

	public int RowCount => rows;

	public int GetColumnLength(int col)
	{
		if (col >= cols)
		{
			return 0;
		}
		int num = -1;
		foreach (Index key in cells.Keys)
		{
			if (key.col == col && key.row > num)
			{
				num = key.row;
			}
		}
		return num + 1;
	}

	public int GetRowLength(int row)
	{
		if (row >= rows)
		{
			return 0;
		}
		int num = -1;
		foreach (Index key in cells.Keys)
		{
			if (key.row == row && key.col > num)
			{
				num = key.col;
			}
		}
		return num + 1;
	}

	public void SetCell(int col, int row, object value)
	{
		Type type = value.GetType();
		if (type == typeof(string))
		{
			SetCellString(col, row, (string)value);
			return;
		}
		ES3Settings eS3Settings = new ES3Settings();
		if (ES3Reflection.IsPrimitive(type))
		{
			SetCellString(col, row, value.ToString());
		}
		else
		{
			SetCellString(col, row, eS3Settings.encoding.GetString(ES3.Serialize(value, ES3TypeMgr.GetOrCreateES3Type(type))));
		}
		if (col >= cols)
		{
			cols = col + 1;
		}
		if (row >= rows)
		{
			rows = row + 1;
		}
	}

	private void SetCellString(int col, int row, string value)
	{
		cells[new Index(col, row)] = value;
		if (col >= cols)
		{
			cols = col + 1;
		}
		if (row >= rows)
		{
			rows = row + 1;
		}
	}

	public T GetCell<T>(int col, int row)
	{
		object cell = GetCell(typeof(T), col, row);
		if (cell == null)
		{
			return default(T);
		}
		return (T)cell;
	}

	public object GetCell(Type type, int col, int row)
	{
		if (col >= cols || row >= rows)
		{
			throw new IndexOutOfRangeException("Cell (" + col + ", " + row + ") is out of bounds of spreadsheet (" + cols + ", " + rows + ").");
		}
		if (!cells.TryGetValue(new Index(col, row), out var value) || value == null)
		{
			return null;
		}
		if (type == typeof(string))
		{
			return value;
		}
		ES3Settings eS3Settings = new ES3Settings();
		return ES3.Deserialize(ES3TypeMgr.GetOrCreateES3Type(type), eS3Settings.encoding.GetBytes(value), eS3Settings);
	}

	public void Load(string filePath)
	{
		Load(new ES3Settings(filePath));
	}

	public void Load(string filePath, ES3Settings settings)
	{
		Load(new ES3Settings(filePath, settings));
	}

	public void Load(ES3Settings settings)
	{
		Load(ES3Stream.CreateStream(settings, ES3FileMode.Read), settings);
	}

	public void LoadRaw(string str)
	{
		Load(new MemoryStream(new ES3Settings().encoding.GetBytes(str)), new ES3Settings());
	}

	public void LoadRaw(string str, ES3Settings settings)
	{
		Load(new MemoryStream(settings.encoding.GetBytes(str)), settings);
	}

	private void Load(Stream stream, ES3Settings settings)
	{
		using StreamReader streamReader = new StreamReader(stream);
		string text = "";
		int num = 0;
		int num2 = 0;
		while (true)
		{
			int num3 = streamReader.Read();
			char c = (char)num3;
			if (c == '"')
			{
				while (true)
				{
					c = (char)streamReader.Read();
					if (c == '"')
					{
						if ((ushort)streamReader.Peek() != 34)
						{
							break;
						}
						c = (char)streamReader.Read();
					}
					text += c;
				}
			}
			else if (c == ',' || c == '\n' || num3 == -1)
			{
				SetCell(num, num2, text);
				text = "";
				switch (c)
				{
				case ',':
					num++;
					break;
				case '\n':
					num = 0;
					num2++;
					break;
				default:
					return;
				}
			}
			else
			{
				text += c;
			}
		}
	}

	public void Save(string filePath)
	{
		Save(new ES3Settings(filePath), append: false);
	}

	public void Save(string filePath, ES3Settings settings)
	{
		Save(new ES3Settings(filePath, settings), append: false);
	}

	public void Save(ES3Settings settings)
	{
		Save(settings, append: false);
	}

	public void Save(string filePath, bool append)
	{
		Save(new ES3Settings(filePath), append);
	}

	public void Save(string filePath, ES3Settings settings, bool append)
	{
		Save(new ES3Settings(filePath, settings), append);
	}

	public void Save(ES3Settings settings, bool append)
	{
		using (StreamWriter streamWriter = new StreamWriter(ES3Stream.CreateStream(settings, (!append) ? ES3FileMode.Write : ES3FileMode.Append)))
		{
			if (append && ES3.FileExists(settings))
			{
				streamWriter.Write('\n');
			}
			string[,] array = ToArray();
			for (int i = 0; i < rows; i++)
			{
				if (i != 0)
				{
					streamWriter.Write('\n');
				}
				for (int j = 0; j < cols; j++)
				{
					if (j != 0)
					{
						streamWriter.Write(',');
					}
					streamWriter.Write(Escape(array[j, i]));
				}
			}
		}
		if (!append)
		{
			ES3IO.CommitBackup(settings);
		}
	}

	private static string Escape(string str, bool isAlreadyWrappedInQuotes = false)
	{
		if (str == "")
		{
			return "\"\"";
		}
		if (str == null)
		{
			return null;
		}
		if (str.Contains("\""))
		{
			str = str.Replace("\"", "\"\"");
		}
		if (str.IndexOfAny(CHARS_TO_ESCAPE) > -1)
		{
			str = "\"" + str + "\"";
		}
		return str;
	}

	private static string Unescape(string str)
	{
		if (str.StartsWith("\"") && str.EndsWith("\""))
		{
			str = str.Substring(1, str.Length - 2);
			if (str.Contains("\"\""))
			{
				str = str.Replace("\"\"", "\"");
			}
		}
		return str;
	}

	private string[,] ToArray()
	{
		string[,] array = new string[cols, rows];
		foreach (KeyValuePair<Index, string> cell in cells)
		{
			array[cell.Key.col, cell.Key.row] = cell.Value;
		}
		return array;
	}
}
public abstract class ES3Reader : IDisposable
{
	[EditorBrowsable(EditorBrowsableState.Never)]
	public class ES3ReaderPropertyEnumerator
	{
		public ES3Reader reader;

		public ES3ReaderPropertyEnumerator(ES3Reader reader)
		{
			this.reader = reader;
		}

		public IEnumerator GetEnumerator()
		{
			while (true)
			{
				if (reader.overridePropertiesName != null)
				{
					string overridePropertiesName = reader.overridePropertiesName;
					reader.overridePropertiesName = null;
					yield return overridePropertiesName;
					continue;
				}
				string text;
				if ((text = reader.ReadPropertyName()) == null)
				{
					break;
				}
				yield return text;
			}
		}
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public class ES3ReaderRawEnumerator
	{
		public ES3Reader reader;

		public ES3ReaderRawEnumerator(ES3Reader reader)
		{
			this.reader = reader;
		}

		public IEnumerator GetEnumerator()
		{
			while (true)
			{
				string text = reader.ReadPropertyName();
				if (text == null)
				{
					break;
				}
				Type type = reader.ReadTypeFromHeader<object>();
				byte[] bytes = reader.ReadElement();
				reader.ReadKeySuffix();
				if (type != null)
				{
					yield return new KeyValuePair<string, ES3Data>(text, new ES3Data(type, bytes));
				}
			}
		}
	}

	public ES3Settings settings;

	protected int serializationDepth;

	internal string overridePropertiesName;

	public virtual ES3ReaderPropertyEnumerator Properties => new ES3ReaderPropertyEnumerator(this);

	internal virtual ES3ReaderRawEnumerator RawEnumerator => new ES3ReaderRawEnumerator(this);

	internal abstract int Read_int();

	internal abstract float Read_float();

	internal abstract bool Read_bool();

	internal abstract char Read_char();

	internal abstract decimal Read_decimal();

	internal abstract double Read_double();

	internal abstract long Read_long();

	internal abstract ulong Read_ulong();

	internal abstract byte Read_byte();

	internal abstract sbyte Read_sbyte();

	internal abstract short Read_short();

	internal abstract ushort Read_ushort();

	internal abstract uint Read_uint();

	internal abstract string Read_string();

	internal abstract byte[] Read_byteArray();

	internal abstract long Read_ref();

	[EditorBrowsable(EditorBrowsableState.Never)]
	public abstract string ReadPropertyName();

	protected abstract Type ReadKeyPrefix(bool ignore = false);

	protected abstract void ReadKeySuffix();

	internal abstract byte[] ReadElement(bool skip = false);

	public abstract void Dispose();

	internal virtual bool Goto(string key)
	{
		if (key == null)
		{
			throw new ArgumentNullException("Key cannot be NULL when loading data.");
		}
		string text;
		while ((text = ReadPropertyName()) != key)
		{
			if (text == null)
			{
				return false;
			}
			Skip();
		}
		return true;
	}

	internal virtual bool StartReadObject()
	{
		serializationDepth++;
		return false;
	}

	internal virtual void EndReadObject()
	{
		serializationDepth--;
	}

	internal abstract bool StartReadDictionary();

	internal abstract void EndReadDictionary();

	internal abstract bool StartReadDictionaryKey();

	internal abstract void EndReadDictionaryKey();

	internal abstract void StartReadDictionaryValue();

	internal abstract bool EndReadDictionaryValue();

	internal abstract bool StartReadCollection();

	internal abstract void EndReadCollection();

	internal abstract bool StartReadCollectionItem();

	internal abstract bool EndReadCollectionItem();

	internal ES3Reader(ES3Settings settings, bool readHeaderAndFooter = true)
	{
		this.settings = settings;
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void Skip()
	{
		ReadElement(skip: true);
	}

	public virtual T Read<T>()
	{
		return Read<T>(ES3TypeMgr.GetOrCreateES3Type(typeof(T)));
	}

	public virtual void ReadInto<T>(object obj)
	{
		ReadInto<T>(obj, ES3TypeMgr.GetOrCreateES3Type(typeof(T)));
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public T ReadProperty<T>()
	{
		return ReadProperty<T>(ES3TypeMgr.GetOrCreateES3Type(typeof(T)));
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public T ReadProperty<T>(ES3Type type)
	{
		ReadPropertyName();
		return Read<T>(type);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public long ReadRefProperty()
	{
		ReadPropertyName();
		return Read_ref();
	}

	internal Type ReadType()
	{
		return ES3Reflection.GetType(Read<string>(ES3Type_string.Instance));
	}

	public object SetPrivateProperty(string name, object value, object objectContainingProperty)
	{
		ES3Reflection.ES3ReflectedMember eS3ReflectedProperty = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name);
		if (eS3ReflectedProperty.IsNull)
		{
			throw new MissingMemberException("A private property named " + name + " does not exist in the type " + objectContainingProperty.GetType());
		}
		eS3ReflectedProperty.SetValue(objectContainingProperty, value);
		return objectContainingProperty;
	}

	public object SetPrivateField(string name, object value, object objectContainingField)
	{
		ES3Reflection.ES3ReflectedMember eS3ReflectedMember = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name);
		if (eS3ReflectedMember.IsNull)
		{
			throw new MissingMemberException("A private field named " + name + " does not exist in the type " + objectContainingField.GetType());
		}
		eS3ReflectedMember.SetValue(objectContainingField, value);
		return objectContainingField;
	}

	public virtual T Read<T>(string key)
	{
		if (!Goto(key))
		{
			throw new KeyNotFoundException("Key \"" + key + "\" was not found in file \"" + settings.FullPath + "\". Use Load<T>(key, defaultValue) if you want to return a default value if the key does not exist.");
		}
		Type type = ReadTypeFromHeader<T>();
		return Read<T>(ES3TypeMgr.GetOrCreateES3Type(type));
	}

	public virtual T Read<T>(string key, T defaultValue)
	{
		if (!Goto(key))
		{
			return defaultValue;
		}
		Type type = ReadTypeFromHeader<T>();
		return Read<T>(ES3TypeMgr.GetOrCreateES3Type(type));
	}

	public virtual void ReadInto<T>(string key, T obj) where T : class
	{
		if (!Goto(key))
		{
			throw new KeyNotFoundException("Key \"" + key + "\" was not found in file \"" + settings.FullPath + "\"");
		}
		Type type = ReadTypeFromHeader<T>();
		ReadInto<T>(obj, ES3TypeMgr.GetOrCreateES3Type(type));
	}

	protected virtual void ReadObject<T>(object obj, ES3Type type)
	{
		if (!StartReadObject())
		{
			type.ReadInto<T>(this, obj);
			EndReadObject();
		}
	}

	protected virtual T ReadObject<T>(ES3Type type)
	{
		if (StartReadObject())
		{
			return default(T);
		}
		object obj = type.Read<T>(this);
		EndReadObject();
		return (T)obj;
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual T Read<T>(ES3Type type)
	{
		if (type == null || type.isUnsupported)
		{
			throw new NotSupportedException("Type of " + type?.ToString() + " is not currently supported, and could not be loaded using reflection.");
		}
		if (type.isPrimitive)
		{
			return (T)type.Read<T>(this);
		}
		if (type.isCollection)
		{
			return (T)((ES3CollectionType)type).Read(this);
		}
		if (type.isDictionary)
		{
			return (T)((ES3DictionaryType)type).Read(this);
		}
		return ReadObject<T>(type);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void ReadInto<T>(object obj, ES3Type type)
	{
		if (type == null || type.isUnsupported)
		{
			throw new NotSupportedException("Type of " + obj.GetType()?.ToString() + " is not currently supported, and could not be loaded using reflection.");
		}
		if (type.isCollection)
		{
			((ES3CollectionType)type).ReadInto(this, obj);
		}
		else if (type.isDictionary)
		{
			((ES3DictionaryType)type).ReadInto(this, obj);
		}
		else
		{
			ReadObject<T>(obj, type);
		}
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	internal Type ReadTypeFromHeader<T>()
	{
		if (typeof(T) == typeof(object))
		{
			return ReadKeyPrefix();
		}
		if (settings.typeChecking)
		{
			Type type = ReadKeyPrefix();
			if (type != typeof(T))
			{
				throw new InvalidOperationException("Trying to load data of type " + typeof(T)?.ToString() + ", but data contained in file is type of " + type?.ToString() + ".");
			}
			return type;
		}
		ReadKeyPrefix(ignore: true);
		return typeof(T);
	}

	public static ES3Reader Create()
	{
		return Create(new ES3Settings());
	}

	public static ES3Reader Create(string filePath)
	{
		return Create(new ES3Settings(filePath));
	}

	public static ES3Reader Create(string filePath, ES3Settings settings)
	{
		return Create(new ES3Settings(filePath, settings));
	}

	public static ES3Reader Create(ES3Settings settings)
	{
		Stream stream = ES3Stream.CreateStream(settings, ES3FileMode.Read);
		if (stream == null)
		{
			return null;
		}
		if (settings.format == ES3.Format.JSON)
		{
			return new ES3JSONReader(stream, settings);
		}
		return null;
	}

	public static ES3Reader Create(byte[] bytes)
	{
		return Create(bytes, new ES3Settings());
	}

	public static ES3Reader Create(byte[] bytes, ES3Settings settings)
	{
		Stream stream = ES3Stream.CreateStream(new MemoryStream(bytes), settings, ES3FileMode.Read);
		if (stream == null)
		{
			return null;
		}
		if (settings.format == ES3.Format.JSON)
		{
			return new ES3JSONReader(stream, settings);
		}
		return null;
	}

	internal static ES3Reader Create(Stream stream, ES3Settings settings)
	{
		stream = ES3Stream.CreateStream(stream, settings, ES3FileMode.Read);
		if (settings.format == ES3.Format.JSON)
		{
			return new ES3JSONReader(stream, settings);
		}
		return null;
	}

	internal static ES3Reader Create(Stream stream, ES3Settings settings, bool readHeaderAndFooter)
	{
		if (settings.format == ES3.Format.JSON)
		{
			return new ES3JSONReader(stream, settings, readHeaderAndFooter);
		}
		return null;
	}
}
public class ES3XMLReader
{
}
public class ES3Defaults : ScriptableObject
{
	[SerializeField]
	public ES3SerializableSettings settings = new ES3SerializableSettings();

	public bool addMgrToSceneAutomatically;

	public bool autoUpdateReferences = true;

	public bool addAllPrefabsToManager = true;

	public int collectDependenciesDepth = 4;

	public int collectDependenciesTimeout = 10;

	public bool updateReferencesWhenSceneChanges = true;

	public bool updateReferencesWhenSceneIsSaved = true;

	public bool updateReferencesWhenSceneIsOpened = true;

	[Tooltip("Folders listed here will be searched for references every time the reference manager is refreshed. Path should be relative to the project folder.")]
	public string[] referenceFolders = new string[0];

	public bool logDebugInfo;

	public bool logWarnings = true;

	public bool logErrors = true;
}
public class ES3Settings : ICloneable
{
	private static ES3Settings _defaults = null;

	private static ES3Defaults _defaultSettingsScriptableObject;

	private const string defaultSettingsPath = "ES3/ES3Defaults";

	private static ES3Settings _unencryptedUncompressedSettings = null;

	private static readonly string[] resourcesExtensions = new string[9] { ".txt", ".htm", ".html", ".xml", ".bytes", ".json", ".csv", ".yaml", ".fnt" };

	[SerializeField]
	private ES3.Location _location;

	public string path = "SaveFile.es3";

	public ES3.EncryptionType encryptionType;

	public ES3.CompressionType compressionType;

	public string encryptionPassword = "password";

	public ES3.Directory directory;

	public ES3.Format format;

	public bool prettyPrint = true;

	public int bufferSize = 2048;

	public Encoding encoding = Encoding.UTF8;

	public bool saveChildren = true;

	public bool postprocessRawCachedData;

	[EditorBrowsable(EditorBrowsableState.Never)]
	public bool typeChecking = true;

	[EditorBrowsable(EditorBrowsableState.Never)]
	public bool safeReflection = true;

	[EditorBrowsable(EditorBrowsableState.Never)]
	public ES3.ReferenceMode memberReferenceMode;

	[EditorBrowsable(EditorBrowsableState.Never)]
	public ES3.ReferenceMode referenceMode = ES3.ReferenceMode.ByRefAndValue;

	[EditorBrowsable(EditorBrowsableState.Never)]
	public int serializationDepthLimit = 64;

	[EditorBrowsable(EditorBrowsableState.Never)]
	public string[] assemblyNames = new string[2] { "Assembly-CSharp-firstpass", "Assembly-CSharp" };

	public static ES3Defaults defaultSettingsScriptableObject
	{
		get
		{
			if ((Object)(object)_defaultSettingsScriptableObject == (Object)null)
			{
				_defaultSettingsScriptableObject = Resources.Load<ES3Defaults>("ES3/ES3Defaults");
			}
			return _defaultSettingsScriptableObject;
		}
	}

	public static ES3Settings defaultSettings
	{
		get
		{
			if (_defaults == null && (Object)(object)defaultSettingsScriptableObject != (Object)null)
			{
				_defaults = defaultSettingsScriptableObject.settings;
			}
			return _defaults;
		}
	}

	internal static ES3Settings unencryptedUncompressedSettings
	{
		get
		{
			if (_unencryptedUncompressedSettings == null)
			{
				_unencryptedUncompressedSettings = new ES3Settings(ES3.EncryptionType.None, ES3.CompressionType.None);
			}
			return _unencryptedUncompressedSettings;
		}
	}

	public ES3.Location location
	{
		get
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Invalid comparison between Unknown and I4
			if (_location == ES3.Location.File && ((int)Application.platform == 17 || (int)Application.platform == 31))
			{
				return ES3.Location.PlayerPrefs;
			}
			return _location;
		}
		set
		{
			_location = value;
		}
	}

	public string FullPath
	{
		get
		{
			if (path == null)
			{
				throw new NullReferenceException("The 'path' field of this ES3Settings is null, indicating that it was not possible to load the default settings from Resources. Please check that the ES3 Default Settings.prefab exists in Assets/Plugins/Resources/ES3/");
			}
			if (IsAbsolute(path))
			{
				return path;
			}
			if (location == ES3.Location.File)
			{
				if (directory == ES3.Directory.PersistentDataPath)
				{
					return ES3IO.persistentDataPath + "/" + path;
				}
				if (directory == ES3.Directory.DataPath)
				{
					return Application.dataPath + "/" + path;
				}
				throw new NotImplementedException("File directory \"" + directory.ToString() + "\" has not been implemented.");
			}
			if (location == ES3.Location.Resources)
			{
				string extension = Path.GetExtension(path);
				bool flag = false;
				string[] array = resourcesExtensions;
				foreach (string text in array)
				{
					if (extension == text)
					{
						flag = true;
						break;
					}
				}
				if (!flag)
				{
					throw new ArgumentException("Extension of file in Resources must be .json, .bytes, .txt, .csv, .htm, .html, .xml, .yaml or .fnt, but path given was \"" + path + "\"");
				}
				return path.Replace(extension, "");
			}
			return path;
		}
	}

	public ES3Settings(string path = null, ES3Settings settings = null)
		: this(applyDefaults: true)
	{
		settings?.CopyInto(this);
		if (path != null)
		{
			this.path = path;
		}
	}

	public ES3Settings(string path, params Enum[] enums)
		: this(enums)
	{
		if (path != null)
		{
			this.path = path;
		}
	}

	public ES3Settings(params Enum[] enums)
		: this(applyDefaults: true)
	{
		foreach (Enum @enum in enums)
		{
			if (@enum is ES3.EncryptionType)
			{
				encryptionType = (ES3.EncryptionType)(object)@enum;
			}
			else if (@enum is ES3.Location)
			{
				location = (ES3.Location)(object)@enum;
			}
			else if (@enum is ES3.CompressionType)
			{
				compressionType = (ES3.CompressionType)(object)@enum;
			}
			else if (@enum is ES3.ReferenceMode)
			{
				referenceMode = (ES3.ReferenceMode)(object)@enum;
			}
			else if (@enum is ES3.Format)
			{
				format = (ES3.Format)(object)@enum;
			}
			else if (@enum is ES3.Directory)
			{
				directory = (ES3.Directory)(object)@enum;
			}
		}
	}

	public ES3Settings(ES3.EncryptionType encryptionType, string encryptionPassword)
		: this(applyDefaults: true)
	{
		this.encryptionType = encryptionType;
		this.encryptionPassword = encryptionPassword;
	}

	public ES3Settings(string path, ES3.EncryptionType encryptionType, string encryptionPassword, ES3Settings settings = null)
		: this(path, settings)
	{
		this.encryptionType = encryptionType;
		this.encryptionPassword = encryptionPassword;
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public ES3Settings(bool applyDefaults)
	{
		if (applyDefaults && defaultSettings != null)
		{
			_defaults.CopyInto(this);
		}
	}

	private static bool IsAbsolute(string path)
	{
		if (path.Length > 0 && (path[0] == '/' || path[0] == '\\'))
		{
			return true;
		}
		if (path.Length > 1 && path[1] == ':')
		{
			return true;
		}
		return false;
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public object Clone()
	{
		ES3Settings eS3Settings = new ES3Settings();
		CopyInto(eS3Settings);
		return eS3Settings;
	}

	private void CopyInto(ES3Settings newSettings)
	{
		newSettings._location = _location;
		newSettings.directory = directory;
		newSettings.format = format;
		newSettings.prettyPrint = prettyPrint;
		newSettings.path = path;
		newSettings.encryptionType = encryptionType;
		newSettings.encryptionPassword = encryptionPassword;
		newSettings.compressionType = compressionType;
		newSettings.bufferSize = bufferSize;
		newSettings.encoding = encoding;
		newSettings.typeChecking = typeChecking;
		newSettings.safeReflection = safeReflection;
		newSettings.referenceMode = referenceMode;
		newSettings.memberReferenceMode = memberReferenceMode;
		newSettings.assemblyNames = assemblyNames;
		newSettings.saveChildren = saveChildren;
		newSettings.serializationDepthLimit = serializationDepthLimit;
		newSettings.postprocessRawCachedData = postprocessRawCachedData;
	}
}
[Serializable]
[EditorBrowsable(EditorBrowsableState.Never)]
public class ES3SerializableSettings : ES3Settings
{
	public ES3SerializableSettings()
		: base(applyDefaults: false)
	{
	}

	public ES3SerializableSettings(bool applyDefaults)
		: base(applyDefaults)
	{
	}

	public ES3SerializableSettings(string path)
		: base(applyDefaults: false)
	{
		base.path = path;
	}

	public ES3SerializableSettings(string path, ES3.Location location)
		: base(applyDefaults: false)
	{
		base.location = location;
	}
}
public class ES3Ref
{
	public long id;

	public ES3Ref(long id)
	{
		this.id = id;
	}
}
public class UnityObjectType : MonoBehaviour
{
	public List<Object> objs;

	private void Start()
	{
		if (!ES3.KeyExists("this"))
		{
			ES3.Save("this", this);
		}
		else
		{
			ES3.LoadInto("this", this);
		}
		foreach (Object obj in objs)
		{
			Debug.Log((object)obj);
		}
	}
}
public class ES3Cloud : ES3WebClass
{
	private int timeout = 20;

	public Encoding encoding = Encoding.UTF8;

	private byte[] _data;

	public byte[] data => _data;

	public string text
	{
		get
		{
			if (data == null)
			{
				return null;
			}
			return encoding.GetString(data);
		}
	}

	public string[] filenames
	{
		get
		{
			if (data == null || data.Length == 0)
			{
				return new string[0];
			}
			return text.Split(new char[1] { ';' }, StringSplitOptions.RemoveEmptyEntries);
		}
	}

	public DateTime timestamp
	{
		get
		{
			if (data == null || data.Length == 0)
			{
				return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
			}
			if (!double.TryParse(text, out var result))
			{
				throw new FormatException("Could not convert downloaded data to a timestamp. Data downloaded was: " + text);
			}
			return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(result);
		}
	}

	public ES3Cloud(string url, string apiKey)
		: base(url, apiKey)
	{
	}

	public ES3Cloud(string url, string apiKey, int timeout)
		: base(url, apiKey)
	{
		this.timeout = timeout;
	}

	public IEnumerator Sync()
	{
		return Sync(new ES3Settings(), "", "");
	}

	public IEnumerator Sync(string filePath)
	{
		return Sync(new ES3Settings(filePath), "", "");
	}

	public IEnumerator Sync(string filePath, string user)
	{
		return Sync(new ES3Settings(filePath), user, "");
	}

	public IEnumerator Sync(string filePath, string user, string password)
	{
		return Sync(new ES3Settings(filePath), user, password);
	}

	public IEnumerator Sync(string filePath, ES3Settings settings)
	{
		return Sync(new ES3Settings(filePath, settings), "", "");
	}

	public IEnumerator Sync(string filePath, string user, ES3Settings settings)
	{
		return Sync(new ES3Settings(filePath, settings), user, "");
	}

	public IEnumerator Sync(string filePath, string user, string password, ES3Settings settings)
	{
		return Sync(new ES3Settings(filePath, settings), user, password);
	}

	private IEnumerator Sync(ES3Settings settings, string user, string password)
	{
		Reset();
		yield return DownloadFile(settings, user, password, GetFileTimestamp(settings));
		if (errorCode == 3)
		{
			Reset();
			if (ES3.FileExists(settings))
			{
				yield return UploadFile(settings, user, password);
			}
		}
		isDone = true;
	}

	public IEnumerator UploadFile()
	{
		return UploadFile(new ES3Settings(), "", "");
	}

	public IEnumerator UploadFile(string filePath)
	{
		return UploadFile(new ES3Settings(filePath), "", "");
	}

	public IEnumerator UploadFile(string filePath, string user)
	{
		return UploadFile(new ES3Settings(filePath), user, "");
	}

	public IEnumerator UploadFile(string filePath, string user, string password)
	{
		return UploadFile(new ES3Settings(filePath), user, password);
	}

	public IEnumerator UploadFile(string filePath, ES3Settings settings)
	{
		return UploadFile(new ES3Settings(filePath, settings), "", "");
	}

	public IEnumerator UploadFile(string filePath, string user, ES3Settings settings)
	{
		return UploadFile(new ES3Settings(filePath, settings), user, "");
	}

	public IEnumerator UploadFile(string filePath, string user, string password, ES3Settings settings)
	{
		return UploadFile(new ES3Settings(filePath, settings), user, password);
	}

	public IEnumerator UploadFile(ES3File es3File)
	{
		return UploadFile(es3File.GetBytes(), es3File.settings, "", "", DateTimeToUnixTimestamp(DateTime.Now));
	}

	public IEnumerator UploadFile(ES3File es3File, string user)
	{
		return UploadFile(es3File.GetBytes(), es3File.settings, user, "", DateTimeToUnixTimestamp(DateTime.Now));
	}

	public IEnumerator UploadFile(ES3File es3File, string user, string password)
	{
		return UploadFile(es3File.GetBytes(), es3File.settings, user, password, DateTimeToUnixTimestamp(DateTime.Now));
	}

	public IEnumerator UploadFile(ES3Settings settings, string user, string password)
	{
		return UploadFile(ES3.LoadRawBytes(settings), settings, user, password);
	}

	public IEnumerator UploadFile(byte[] bytes, ES3Settings settings, string user, string password)
	{
		return UploadFile(bytes, settings, user, password, DateTimeToUnixTimestamp(ES3.GetTimestamp(settings)));
	}

	private IEnumerator UploadFile(byte[] bytes, ES3Settings settings, string user, string password, long fileTimestamp)
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("putFile", settings.path);
		val.AddField("timestamp", fileTimestamp.ToString());
		val.AddField("user", GetUser(user, password));
		val.AddBinaryData("data", bytes, "data.dat", "multipart/form-data");
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			HandleError(webRequest, errorIfDataIsDownloaded: true);
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	public IEnumerator DownloadFile()
	{
		return DownloadFile(new ES3Settings(), "", "", 0L);
	}

	public IEnumerator DownloadFile(string filePath)
	{
		return DownloadFile(new ES3Settings(filePath), "", "", 0L);
	}

	public IEnumerator DownloadFile(string filePath, string user)
	{
		return DownloadFile(new ES3Settings(filePath), user, "", 0L);
	}

	public IEnumerator DownloadFile(string filePath, string user, string password)
	{
		return DownloadFile(new ES3Settings(filePath), user, password, 0L);
	}

	public IEnumerator DownloadFile(string filePath, ES3Settings settings)
	{
		return DownloadFile(new ES3Settings(filePath, settings), "", "", 0L);
	}

	public IEnumerator DownloadFile(string filePath, string user, ES3Settings settings)
	{
		return DownloadFile(new ES3Settings(filePath, settings), user, "", 0L);
	}

	public IEnumerator DownloadFile(string filePath, string user, string password, ES3Settings settings)
	{
		return DownloadFile(new ES3Settings(filePath, settings), user, password, 0L);
	}

	public IEnumerator DownloadFile(ES3File es3File)
	{
		return DownloadFile(es3File, "", "", 0L);
	}

	public IEnumerator DownloadFile(ES3File es3File, string user)
	{
		return DownloadFile(es3File, user, "", 0L);
	}

	public IEnumerator DownloadFile(ES3File es3File, string user, string password)
	{
		return DownloadFile(es3File, user, password, 0L);
	}

	private IEnumerator DownloadFile(ES3File es3File, string user, string password, long timestamp)
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("getFile", es3File.settings.path);
		val.AddField("user", GetUser(user, password));
		if (timestamp > 0)
		{
			val.AddField("timestamp", timestamp.ToString());
		}
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			if (!HandleError(webRequest, errorIfDataIsDownloaded: false))
			{
				if (webRequest.downloadedBytes != 0)
				{
					es3File.Clear();
					es3File.SaveRaw(webRequest.downloadHandler.data);
				}
				else
				{
					error = $"File {es3File.settings.path} was not found on the server.";
					errorCode = 3L;
				}
			}
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	private IEnumerator DownloadFile(ES3Settings settings, string user, string password, long timestamp)
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("getFile", settings.path);
		val.AddField("user", GetUser(user, password));
		if (timestamp > 0)
		{
			val.AddField("timestamp", timestamp.ToString());
		}
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			if (!HandleError(webRequest, errorIfDataIsDownloaded: false))
			{
				if (webRequest.downloadedBytes != 0)
				{
					ES3.SaveRaw(webRequest.downloadHandler.data, settings);
				}
				else
				{
					error = $"File {settings.path} was not found on the server.";
					errorCode = 3L;
				}
			}
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	public IEnumerator DeleteFile()
	{
		return DeleteFile(new ES3Settings(), "", "");
	}

	public IEnumerator DeleteFile(string filePath)
	{
		return DeleteFile(new ES3Settings(filePath), "", "");
	}

	public IEnumerator DeleteFile(string filePath, string user)
	{
		return DeleteFile(new ES3Settings(filePath), user, "");
	}

	public IEnumerator DeleteFile(string filePath, string user, string password)
	{
		return DeleteFile(new ES3Settings(filePath), user, password);
	}

	public IEnumerator DeleteFile(string filePath, ES3Settings settings)
	{
		return DeleteFile(new ES3Settings(filePath, settings), "", "");
	}

	public IEnumerator DeleteFile(string filePath, string user, ES3Settings settings)
	{
		return DeleteFile(new ES3Settings(filePath, settings), user, "");
	}

	public IEnumerator DeleteFile(string filePath, string user, string password, ES3Settings settings)
	{
		return DeleteFile(new ES3Settings(filePath, settings), user, password);
	}

	private IEnumerator DeleteFile(ES3Settings settings, string user, string password)
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("deleteFile", settings.path);
		val.AddField("user", GetUser(user, password));
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			HandleError(webRequest, errorIfDataIsDownloaded: true);
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	public IEnumerator RenameFile(string filePath, string newFilePath)
	{
		return RenameFile(new ES3Settings(filePath), new ES3Settings(newFilePath), "", "");
	}

	public IEnumerator RenameFile(string filePath, string newFilePath, string user)
	{
		return RenameFile(new ES3Settings(filePath), new ES3Settings(newFilePath), user, "");
	}

	public IEnumerator RenameFile(string filePath, string newFilePath, string user, string password)
	{
		return RenameFile(new ES3Settings(filePath), new ES3Settings(newFilePath), user, password);
	}

	public IEnumerator RenameFile(string filePath, string newFilePath, ES3Settings settings)
	{
		return RenameFile(new ES3Settings(filePath, settings), new ES3Settings(newFilePath, settings), "", "");
	}

	public IEnumerator RenameFile(string filePath, string newFilePath, string user, ES3Settings settings)
	{
		return RenameFile(new ES3Settings(filePath, settings), new ES3Settings(newFilePath, settings), user, "");
	}

	public IEnumerator RenameFile(string filePath, string newFilePath, string user, string password, ES3Settings settings)
	{
		return RenameFile(new ES3Settings(filePath, settings), new ES3Settings(newFilePath, settings), user, password);
	}

	private IEnumerator RenameFile(ES3Settings settings, ES3Settings newSettings, string user, string password)
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("renameFile", settings.path);
		val.AddField("newFilename", newSettings.path);
		val.AddField("user", GetUser(user, password));
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			HandleError(webRequest, errorIfDataIsDownloaded: true);
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	public IEnumerator DownloadFilenames(string user = "", string password = "")
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("getFilenames", "");
		val.AddField("user", GetUser(user, password));
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			if (!HandleError(webRequest, errorIfDataIsDownloaded: false))
			{
				_data = webRequest.downloadHandler.data;
			}
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	public IEnumerator SearchFilenames(string searchPattern, string user = "", string password = "")
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("getFilenames", "");
		val.AddField("user", GetUser(user, password));
		if (!string.IsNullOrEmpty(searchPattern))
		{
			val.AddField("pattern", searchPattern);
		}
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			if (!HandleError(webRequest, errorIfDataIsDownloaded: false))
			{
				_data = webRequest.downloadHandler.data;
			}
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	public IEnumerator DownloadTimestamp()
	{
		return DownloadTimestamp(new ES3Settings(), "", "");
	}

	public IEnumerator DownloadTimestamp(string filePath)
	{
		return DownloadTimestamp(new ES3Settings(filePath), "", "");
	}

	public IEnumerator DownloadTimestamp(string filePath, string user)
	{
		return DownloadTimestamp(new ES3Settings(filePath), user, "");
	}

	public IEnumerator DownloadTimestamp(string filePath, string user, string password)
	{
		return DownloadTimestamp(new ES3Settings(filePath), user, password);
	}

	public IEnumerator DownloadTimestamp(string filePath, ES3Settings settings)
	{
		return DownloadTimestamp(new ES3Settings(filePath, settings), "", "");
	}

	public IEnumerator DownloadTimestamp(string filePath, string user, ES3Settings settings)
	{
		return DownloadTimestamp(new ES3Settings(filePath, settings), user, "");
	}

	public IEnumerator DownloadTimestamp(string filePath, string user, string password, ES3Settings settings)
	{
		return DownloadTimestamp(new ES3Settings(filePath, settings), user, password);
	}

	private IEnumerator DownloadTimestamp(ES3Settings settings, string user, string password)
	{
		Reset();
		WWWForm val = CreateWWWForm();
		val.AddField("apiKey", apiKey);
		val.AddField("getTimestamp", settings.path);
		val.AddField("user", GetUser(user, password));
		UnityWebRequest webRequest = UnityWebRequest.Post(url, val);
		try
		{
			webRequest.timeout = timeout;
			yield return SendWebRequest(webRequest);
			if (!HandleError(webRequest, errorIfDataIsDownloaded: false))
			{
				_data = webRequest.downloadHandler.data;
			}
		}
		finally
		{
			((IDisposable)webRequest)?.Dispose();
		}
		isDone = true;
	}

	private long DateTimeToUnixTimestamp(DateTime dt)
	{
		return Convert.ToInt64((dt.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds);
	}

	private long GetFileTimestamp(ES3Settings settings)
	{
		return DateTimeToUnixTimestamp(ES3.GetTimestamp(settings));
	}

	protected override void Reset()
	{
		_data = null;
		base.Reset();
	}
}
public abstract class ES3Writer : IDisposable
{
	public ES3Settings settings;

	protected HashSet<string> keysToDelete = new HashSet<string>();

	internal bool writeHeaderAndFooter = true;

	internal bool overwriteKeys = true;

	protected int serializationDepth;

	internal abstract void WriteNull();

	internal virtual void StartWriteFile()
	{
		serializationDepth++;
	}

	internal virtual void EndWriteFile()
	{
		serializationDepth--;
	}

	internal virtual void StartWriteObject(string name)
	{
		serializationDepth++;
	}

	internal virtual void EndWriteObject(string name)
	{
		serializationDepth--;
	}

	internal virtual void StartWriteProperty(string name)
	{
		if (name == null)
		{
			throw new ArgumentNullException("Key or field name cannot be NULL when saving data.");
		}
		ES3Debug.Log("<b>" + name + "</b> (writing property)", null, serializationDepth);
	}

	internal virtual void EndWriteProperty(string name)
	{
	}

	internal virtual void StartWriteCollection()
	{
		serializationDepth++;
	}

	internal virtual void EndWriteCollection()
	{
		serializationDepth--;
	}

	internal abstract void StartWriteCollectionItem(int index);

	internal abstract void EndWriteCollectionItem(int index);

	internal abstract void StartWriteDictionary();

	internal abstract void EndWriteDictionary();

	internal abstract void StartWriteDictionaryKey(int index);

	internal abstract void EndWriteDictionaryKey(int index);

	internal abstract void StartWriteDictionaryValue(int index);

	internal abstract void EndWriteDictionaryValue(int index);

	public abstract void Dispose();

	internal abstract void WriteRawProperty(string name, byte[] bytes);

	internal abstract void WritePrimitive(int value);

	internal abstract void WritePrimitive(float value);

	internal abstract void WritePrimitive(bool value);

	internal abstract void WritePrimitive(decimal value);

	internal abstract void WritePrimitive(double value);

	internal abstract void WritePrimitive(long value);

	internal abstract void WritePrimitive(ulong value);

	internal abstract void WritePrimitive(uint value);

	internal abstract void WritePrimitive(byte value);

	internal abstract void WritePrimitive(sbyte value);

	internal abstract void WritePrimitive(short value);

	internal abstract void WritePrimitive(ushort value);

	internal abstract void WritePrimitive(char value);

	internal abstract void WritePrimitive(string value);

	internal abstract void WritePrimitive(byte[] value);

	protected ES3Writer(ES3Settings settings, bool writeHeaderAndFooter, bool overwriteKeys)
	{
		this.settings = settings;
		this.writeHeaderAndFooter = writeHeaderAndFooter;
		this.overwriteKeys = overwriteKeys;
	}

	internal virtual void Write(string key, Type type, byte[] value)
	{
		StartWriteProperty(key);
		StartWriteObject(key);
		WriteType(type);
		WriteRawProperty("value", value);
		EndWriteObject(key);
		EndWriteProperty(key);
		MarkKeyForDeletion(key);
	}

	public virtual void Write<T>(string key, object value)
	{
		if (typeof(T) == typeof(object))
		{
			Write(value.GetType(), key, value);
		}
		else
		{
			Write(typeof(T), key, value);
		}
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void Write(Type type, string key, object value)
	{
		StartWriteProperty(key);
		StartWriteObject(key);
		WriteType(type);
		WriteProperty("value", value, ES3TypeMgr.GetOrCreateES3Type(type), settings.referenceMode);
		EndWriteObject(key);
		EndWriteProperty(key);
		MarkKeyForDeletion(key);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void Write(object value, ES3.ReferenceMode memberReferenceMode = ES3.ReferenceMode.ByRef)
	{
		if (value == null)
		{
			WriteNull();
			return;
		}
		ES3Type orCreateES3Type = ES3TypeMgr.GetOrCreateES3Type(value.GetType());
		Write(value, orCreateES3Type, memberReferenceMode);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void Write(object value, ES3Type type, ES3.ReferenceMode memberReferenceMode = ES3.ReferenceMode.ByRef)
	{
		if (value == null || (ES3Reflection.IsAssignableFrom(typeof(Object), value.GetType()) && (Object)((value is Object) ? value : null) == (Object)null))
		{
			WriteNull();
			return;
		}
		if (type == null || type.type == typeof(object))
		{
			Type type2 = value.GetType();
			type = ES3TypeMgr.GetOrCreateES3Type(type2);
			if (type == null)
			{
				throw new NotSupportedException("Types of " + type2?.ToString() + " are not supported. Please see the Supported Types guide for more information: https://docs.moodkie.com/easy-save-3/es3-supported-types/");
			}
			if (!type.isCollection && !type.isDictionary)
			{
				StartWriteObject(null);
				WriteType(type2);
				type.Write(value, this);
				EndWriteObject(null);
				return;
			}
		}
		if (type == null)
		{
			throw new ArgumentNullException("ES3Type argument cannot be null.");
		}
		if (type.isUnsupported)
		{
			if (type.isCollection || type.isDictionary)
			{
				throw new NotSupportedException(type.type?.ToString() + " is not supported because it's element type is not supported. Please see the Supported Types guide for more information: https://docs.moodkie.com/easy-save-3/es3-supported-types/");
			}
			throw new NotSupportedException("Types of " + type.type?.ToString() + " are not supported. Please see the Supported Types guide for more information: https://docs.moodkie.com/easy-save-3/es3-supported-types/");
		}
		if (type.isPrimitive || type.isEnum)
		{
			type.Write(value, this);
			return;
		}
		if (type.isCollection)
		{
			StartWriteCollection();
			((ES3CollectionType)type).Write(value, this, memberReferenceMode);
			EndWriteCollection();
			return;
		}
		if (type.isDictionary)
		{
			StartWriteDictionary();
			((ES3DictionaryType)type).Write(value, this, memberReferenceMode);
			EndWriteDictionary();
			return;
		}
		if (type.type == typeof(GameObject))
		{
			((ES3Type_GameObject)type).saveChildren = settings.saveChildren;
		}
		StartWriteObject(null);
		if (type.isES3TypeUnityObject)
		{
			((ES3UnityObjectType)type).WriteObject(value, this, memberReferenceMode);
		}
		else
		{
			type.Write(value, this);
		}
		EndWriteObject(null);
	}

	internal virtual void WriteRef(Object obj)
	{
		ES3ReferenceMgrBase current = ES3ReferenceMgrBase.Current;
		if ((Object)(object)current == (Object)null)
		{
			throw new InvalidOperationException("An Easy Save 3 Manager is required to save references. To add one to your scene, exit playmode and go to Tools > Easy Save 3 > Add Manager to Scene");
		}
		long num = current.Get(obj);
		if (num == -1)
		{
			num = current.Add(obj);
		}
		WriteProperty("_ES3Ref", num.ToString());
	}

	public virtual void WriteProperty(string name, object value)
	{
		WriteProperty(name, value, settings.memberReferenceMode);
	}

	public virtual void WriteProperty(string name, object value, ES3.ReferenceMode memberReferenceMode)
	{
		if (!SerializationDepthLimitExceeded())
		{
			StartWriteProperty(name);
			Write(value, memberReferenceMode);
			EndWriteProperty(name);
		}
	}

	public virtual void WriteProperty<T>(string name, object value)
	{
		WriteProperty(name, value, ES3TypeMgr.GetOrCreateES3Type(typeof(T)), settings.memberReferenceMode);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void WriteProperty(string name, object value, ES3Type type)
	{
		WriteProperty(name, value, type, settings.memberReferenceMode);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void WriteProperty(string name, object value, ES3Type type, ES3.ReferenceMode memberReferenceMode)
	{
		if (!SerializationDepthLimitExceeded())
		{
			StartWriteProperty(name);
			Write(value, type, memberReferenceMode);
			EndWriteProperty(name);
		}
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public virtual void WritePropertyByRef(string name, Object value)
	{
		if (!SerializationDepthLimitExceeded())
		{
			StartWriteProperty(name);
			if (value == (Object)null)
			{
				WriteNull();
				return;
			}
			StartWriteObject(name);
			WriteRef(value);
			EndWriteObject(name);
			EndWriteProperty(name);
		}
	}

	public void WritePrivateProperty(string name, object objectContainingProperty)
	{
		ES3Reflection.ES3ReflectedMember eS3ReflectedProperty = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name);
		if (eS3ReflectedProperty.IsNull)
		{
			throw new MissingMemberException("A private property named " + name + " does not exist in the type " + objectContainingProperty.GetType());
		}
		WriteProperty(name, eS3ReflectedProperty.GetValue(objectContainingProperty), ES3TypeMgr.GetOrCreateES3Type(eS3ReflectedProperty.MemberType));
	}

	public void WritePrivateField(string name, object objectContainingField)
	{
		ES3Reflection.ES3ReflectedMember eS3ReflectedMember = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name);
		if (eS3ReflectedMember.IsNull)
		{
			throw new MissingMemberException("A private field named " + name + " does not exist in the type " + objectContainingField.GetType());
		}
		WriteProperty(name, eS3ReflectedMember.GetValue(objectContainingField), ES3TypeMgr.GetOrCreateES3Type(eS3ReflectedMember.MemberType));
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public void WritePrivateProperty(string name, object objectContainingProperty, ES3Type type)
	{
		ES3Reflection.ES3ReflectedMember eS3ReflectedProperty = ES3Reflection.GetES3ReflectedProperty(objectContainingProperty.GetType(), name);
		if (eS3ReflectedProperty.IsNull)
		{
			throw new MissingMemberException("A private property named " + name + " does not exist in the type " + objectContainingProperty.GetType());
		}
		WriteProperty(name, eS3ReflectedProperty.GetValue(objectContainingProperty), type);
	}

	[EditorBrowsable(EditorBrowsableState.Never)]
	public void WritePrivateField(string name, object objectContainingField, ES3Type type)
	{
		ES3Reflection.ES3ReflectedMember eS3ReflectedMember = ES3Reflection.GetES3ReflectedMember(objectContainingField.GetType(), name);
		if (eS3ReflectedMember.IsNull

PersistentPurchases.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using PersistentPurchases;
using Unity.Netcode;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("PersistentPurchases")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Bought cosmetics never leave you")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+9b0b3632fd7c37c882fe0f1421c863585ff320ae")]
[assembly: AssemblyProduct("PersistentPurchases")]
[assembly: AssemblyTitle("PersistentPurchases")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
[HarmonyPatch]
public class Patches
{
	[HarmonyPrefix]
	[HarmonyPatch(typeof(GameNetworkManager), "ResetUnlockablesListValues")]
	public static bool dontResetAnything()
	{
		//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_00a6: 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)
		if ((Object)(object)StartOfRound.Instance != (Object)null)
		{
			Debug.Log((object)"CONDITIONALLY resetting unlockables list!");
			List<UnlockableItem> unlockables = StartOfRound.Instance.unlockablesList.unlockables;
			for (int i = 0; i < unlockables.Count; i++)
			{
				if (Plugin.shouldReset(i, "dontResetAnything"))
				{
					Plugin.log.LogInfo((object)("Resetting " + unlockables[i].unlockableName));
					unlockables[i].hasBeenUnlockedByPlayer = false;
					if (unlockables[i].unlockableType == 1)
					{
						unlockables[i].placedPosition = Vector3.zero;
						unlockables[i].placedRotation = Vector3.zero;
						unlockables[i].hasBeenMoved = false;
						unlockables[i].inStorage = false;
					}
				}
			}
		}
		return false;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(GameNetworkManager), "ResetSavedGameValues")]
	public static void okayMaybeDoALittleResetting()
	{
		if (!ES3.KeyExists("UnlockedShipObjects", GameNetworkManager.Instance.currentSaveFileName))
		{
			return;
		}
		int[] source = ES3.Load<int[]>("UnlockedShipObjects", GameNetworkManager.Instance.currentSaveFileName);
		source = source.Where((int id) => !Plugin.shouldReset(id, "okayMaybeDoALittleResetting1")).ToArray();
		ES3.Save<int[]>("UnlockedShipObjects", source, GameNetworkManager.Instance.currentSaveFileName);
		for (int i = 0; i < StartOfRound.Instance.unlockablesList.unlockables.Count; i++)
		{
			UnlockableItem val = StartOfRound.Instance.unlockablesList.unlockables[i];
			if (Plugin.shouldReset(i, "okayMaybeDoALittleResetting2") && val.unlockableType == 1)
			{
				ES3.DeleteKey("ShipUnlockMoved_" + val.unlockableName, GameNetworkManager.Instance.currentSaveFileName);
				ES3.DeleteKey("ShipUnlockStored_" + val.unlockableName, GameNetworkManager.Instance.currentSaveFileName);
				ES3.DeleteKey("ShipUnlockPos_" + val.unlockableName, GameNetworkManager.Instance.currentSaveFileName);
				ES3.DeleteKey("ShipUnlockRot_" + val.unlockableName, GameNetworkManager.Instance.currentSaveFileName);
			}
		}
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(StartOfRound), "ResetShip")]
	public static void unfuckObjects()
	{
		//IL_0161: Unknown result type (might be due to invalid IL or missing references)
		PlaceableShipObject[] array = Object.FindObjectsOfType<PlaceableShipObject>();
		for (int i = 0; i < array.Length; i++)
		{
			UnlockableItem val = StartOfRound.Instance.unlockablesList.unlockables[array[i].unlockableID];
			if (val.spawnPrefab)
			{
				if (val.hasBeenUnlockedByPlayer && !Plugin.shouldReset(array[i].unlockableID))
				{
					if (Plugin.shouldDefault())
					{
						val.inStorage = true;
					}
				}
				else
				{
					val.hasBeenUnlockedByPlayer = false;
					val.inStorage = false;
				}
				Collider[] componentsInChildren = ((Component)array[i].parentObject).GetComponentsInChildren<Collider>();
				for (int j = 0; j < componentsInChildren.Length; j++)
				{
					componentsInChildren[j].enabled = true;
				}
			}
			else
			{
				if (!Plugin.shouldDefault())
				{
					continue;
				}
				if (val.alreadyUnlocked)
				{
					val.inStorage = false;
					array[i].parentObject.disableObject = false;
					ShipBuildModeManager.Instance.ResetShipObjectToDefaultPosition(array[i]);
					continue;
				}
				if (Plugin.shouldReset(array[i].unlockableID))
				{
					val.hasBeenUnlockedByPlayer = false;
					val.inStorage = false;
				}
				else
				{
					val.hasBeenUnlockedByPlayer = true;
					val.inStorage = true;
				}
				array[i].parentObject.disableObject = true;
				ShipBuildModeManager.Instance.StoreObjectServerRpc(NetworkObjectReference.op_Implicit(((Component)array[i].parentObject).GetComponent<NetworkObject>()), (int)GameNetworkManager.Instance.localPlayerController.playerClientId);
			}
		}
		for (int k = 0; k < StartOfRound.Instance.unlockablesList.unlockables.Count; k++)
		{
			UnlockableItem val2 = StartOfRound.Instance.unlockablesList.unlockables[k];
			if (val2.alreadyUnlocked || !val2.spawnPrefab || !Plugin.shouldReset(k))
			{
				continue;
			}
			if (!StartOfRound.Instance.SpawnedShipUnlockables.TryGetValue(k, out var value))
			{
				StartOfRound.Instance.SpawnedShipUnlockables.Remove(k);
				continue;
			}
			if ((Object)(object)value == (Object)null)
			{
				StartOfRound.Instance.SpawnedShipUnlockables.Remove(k);
				continue;
			}
			StartOfRound.Instance.SpawnedShipUnlockables.Remove(k);
			NetworkObject component = value.GetComponent<NetworkObject>();
			if ((Object)(object)component != (Object)null && component.IsSpawned)
			{
				component.Despawn(true);
			}
		}
	}
}
[HarmonyPatch(typeof(GameNetworkManager), "ResetSavedGameValues")]
public class ResetSavedGameValues
{
	private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
	{
		Plugin.log.LogWarning((object)"Beginning transpilation of GameNetworkManager.ResetSavedGameValues()");
		List<CodeInstruction> list = new List<CodeInstruction>(instructions);
		int num = -1;
		List<int> list2 = new List<int>();
		for (int i = 0; i < list.Count; i++)
		{
			if (list[i].opcode == OpCodes.Ldstr)
			{
				if (list[i].operand.ToString() == "UnlockedShipObjects")
				{
					num = i;
					Plugin.log.LogInfo((object)$"Found ship object opcode at {i}");
				}
				else if (list[i].operand.ToString().EndsWith("_"))
				{
					list2.Add(i);
					Plugin.log.LogInfo((object)$"Found placeable ship object data opcode at {i}");
				}
			}
		}
		for (int num2 = list2.Count - 1; num2 >= 0; num2--)
		{
			list.RemoveRange(list2[num2], 11);
		}
		if (num >= 0)
		{
			list.RemoveRange(num, 4);
		}
		return list.AsEnumerable();
	}
}
[HarmonyPatch(typeof(StartOfRound), "ResetShip")]
public class ResetShip
{
	private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
	{
		//IL_0221: Unknown result type (might be due to invalid IL or missing references)
		//IL_0227: Expected O, but got Unknown
		//IL_0251: Unknown result type (might be due to invalid IL or missing references)
		//IL_0257: Expected O, but got Unknown
		//IL_0263: Unknown result type (might be due to invalid IL or missing references)
		//IL_0269: Expected O, but got Unknown
		//IL_0286: Unknown result type (might be due to invalid IL or missing references)
		//IL_028c: Expected O, but got Unknown
		Plugin.log.LogWarning((object)"Beginning transpilation of StartOfRound.ResetShip()");
		List<CodeInstruction> list = new List<CodeInstruction>(instructions);
		int num = -1;
		CodeInstruction val = null;
		int num2 = -1;
		CodeInstruction val2 = null;
		int num3 = -1;
		for (int i = 0; i < list.Count; i++)
		{
			if (list[i].opcode == OpCodes.Ldfld && list[i].operand.ToString() == "System.Boolean spawnPrefab")
			{
				if (num == -1)
				{
					num = i + 2;
					val = list[i + 1].Clone();
					val.opcode = OpCodes.Brfalse_S;
					Plugin.log.LogInfo((object)$"Found ship object prefab opcode at {i} (1)");
				}
				else if (num2 == -1)
				{
					num2 = i + 2;
					val2 = list[i + 1].Clone();
					val2.opcode = OpCodes.Brfalse_S;
					Plugin.log.LogInfo((object)$"Found ship object prefab opcode at {i} (1)");
				}
			}
			if (list[i].opcode == OpCodes.Call && list[i].operand.ToString() == "Void SwitchSuitForPlayer(GameNetcodeStuff.PlayerControllerB, Int32, Boolean)")
			{
				num3 = i;
				Plugin.log.LogInfo((object)$"Found suit reset opcode at {i}");
			}
			if (list[i].opcode == OpCodes.Stfld && list[i].operand.ToString() == "System.Boolean disableObject")
			{
				list[i - 1].opcode = OpCodes.Ldc_I4_1;
			}
		}
		if (num3 >= 0)
		{
			list.RemoveRange(num3 - 6, 7);
		}
		if (num2 >= 0)
		{
			list.InsertRange(num2, (IEnumerable<CodeInstruction>)(object)new CodeInstruction[2]
			{
				new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(Plugin), "shouldDefault", (Type[])null, (Type[])null)),
				val2
			});
		}
		if (num >= 0)
		{
			list.InsertRange(num, (IEnumerable<CodeInstruction>)(object)new CodeInstruction[4]
			{
				new CodeInstruction(OpCodes.Ldloc_3, (object)null),
				new CodeInstruction(OpCodes.Ldstr, (object)"StartOfRound1"),
				new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(Plugin), "shouldReset", (Type[])null, (Type[])null)),
				val
			});
		}
		return list.AsEnumerable();
	}
}
[HarmonyPatch(typeof(StartOfRound), "SyncShipUnlockablesServerRpc")]
public class InSanityCheck
{
	private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
	{
		//IL_0072: Unknown result type (might be due to invalid IL or missing references)
		//IL_0078: Expected O, but got Unknown
		//IL_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_008c: Expected O, but got Unknown
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_009a: Expected O, but got Unknown
		//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bd: Expected O, but got Unknown
		Plugin.log.LogWarning((object)"Beginning transpilation of StartOfRound.SyncShipUnlockablesServerRpc()");
		List<CodeInstruction> list = new List<CodeInstruction>(instructions);
		for (int i = 0; i < list.Count; i++)
		{
			if (list[i].opcode == OpCodes.Ldstr && list[i].operand.ToString() == "Server: placeableObject #{0}: {1}")
			{
				list.InsertRange(i - 1, (IEnumerable<CodeInstruction>)(object)new CodeInstruction[4]
				{
					new CodeInstruction(OpCodes.Ldloc_S, (object)5),
					new CodeInstruction(OpCodes.Ldloc_S, (object)10),
					new CodeInstruction(OpCodes.Ldelem_Ref, (object)null),
					new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(InSanityCheck), "WhatIsGoingOn", (Type[])null, (Type[])null))
				});
				Plugin.log.LogWarning((object)"This crash is not evading me");
				break;
			}
		}
		return list.AsEnumerable();
	}

	public static void WhatIsGoingOn(PlaceableShipObject pso)
	{
		//IL_00ea: 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)
		Plugin.log.LogWarning((object)"Seeing what the fuck is going wrong here with syncing unlockables, prepare for spam");
		Plugin.log.LogInfo((object)$"ship object is not null? {(Object)(object)pso != (Object)null}");
		Plugin.log.LogInfo((object)$"ship object transform is not null? {(Object)(object)((Component)pso).transform != (Object)null}");
		int unlockableID = pso.unlockableID;
		Plugin.log.LogInfo((object)$"ship object unlockable id {unlockableID}");
		Plugin.log.LogInfo((object)$"unlockables has id? {unlockableID < StartOfRound.Instance.unlockablesList.unlockables.Count}");
		UnlockableItem val = StartOfRound.Instance.unlockablesList.unlockables[unlockableID];
		Plugin.log.LogInfo((object)$"unlockable is not null? {val != null}");
		Plugin.log.LogInfo((object)$"unlockable position {val.placedPosition}");
		Plugin.log.LogInfo((object)$"unlockable rotation {val.placedPosition}");
		Plugin.log.LogInfo((object)$"unlockable in storage? {val.inStorage}");
	}
}
namespace PersistentPurchases
{
	[BepInPlugin("beeisyou.PersistentPurchases", "Persistent Purchases", "1.1.0")]
	public class Plugin : BaseUnityPlugin
	{
		private static ConfigEntry<bool> resetSuits;

		private static ConfigEntry<bool> resetFurniture;

		private static ConfigEntry<bool> resetUpgrades;

		private static ConfigEntry<bool> defaultPlacement;

		public static ManualLogSource log = new ManualLogSource("Persistent Purchases");

		public static Harmony harmony = new Harmony("beeisyou.PersistentPurchases");

		public static int[] suits = new int[4] { 0, 1, 2, 3 };

		public static int[] upgrades = new int[3] { 5, 18, 19 };

		public static int[] defaults = new int[5] { 7, 8, 11, 15, 16 };

		private void Awake()
		{
			Logger.Sources.Add((ILogSource)(object)log);
			resetSuits = ((BaseUnityPlugin)this).Config.Bind<bool>("Resetting", "ResetSuits", false, "Remove all but the orange suit on game over");
			resetFurniture = ((BaseUnityPlugin)this).Config.Bind<bool>("Resetting", "ResetFurniture", false, "Remove cosmetic purchases on game over");
			resetUpgrades = ((BaseUnityPlugin)this).Config.Bind<bool>("Resetting", "ResetUpgrades", true, "Remove ship upgrades on game over");
			defaultPlacement = ((BaseUnityPlugin)this).Config.Bind<bool>("Resetting", "DefaultPlacement", true, "Reset objects to their default position, and put everything else in storage");
			harmony.PatchAll(typeof(Patches));
			harmony.PatchAll(typeof(ResetSavedGameValues));
			harmony.PatchAll(typeof(ResetShip));
			harmony.PatchAll(typeof(InSanityCheck));
			log.LogMessage((object)"Plugin Persistent Purchases is loaded!");
		}

		public static bool shouldReset(int id, string debugType = "")
		{
			if (suits.Contains(id))
			{
				if (!resetSuits.Value)
				{
					log.LogInfo((object)$"Not resetting {id} {debugType}");
					return false;
				}
			}
			else if (upgrades.Contains(id))
			{
				if (!resetUpgrades.Value)
				{
					log.LogInfo((object)$"Not resetting {id} {debugType}");
					return false;
				}
			}
			else if (!resetFurniture.Value)
			{
				log.LogInfo((object)$"Not resetting {id} {debugType}");
				return false;
			}
			if (defaults.Contains(id))
			{
				log.LogInfo((object)$"Not resetting {id} {debugType}");
				return false;
			}
			log.LogInfo((object)$"Is resetting {id} {debugType}");
			return true;
		}

		public static bool shouldDefault()
		{
			return defaultPlacement.Value;
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "PersistentPurchases";

		public const string PLUGIN_NAME = "PersistentPurchases";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}

Unity.InputSystem.dll

Decompiled 6 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.XR.GoogleVr;
using Unity.XR.Oculus.Input;
using Unity.XR.OpenVR;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.Experimental.Rendering;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Composites;
using UnityEngine.InputSystem.Controls;
using UnityEngine.InputSystem.DualShock;
using UnityEngine.InputSystem.DualShock.LowLevel;
using UnityEngine.InputSystem.HID;
using UnityEngine.InputSystem.Haptics;
using UnityEngine.InputSystem.Interactions;
using UnityEngine.InputSystem.Layouts;
using UnityEngine.InputSystem.LowLevel;
using UnityEngine.InputSystem.Processors;
using UnityEngine.InputSystem.Switch;
using UnityEngine.InputSystem.Switch.LowLevel;
using UnityEngine.InputSystem.UI;
using UnityEngine.InputSystem.Users;
using UnityEngine.InputSystem.Utilities;
using UnityEngine.InputSystem.XInput;
using UnityEngine.InputSystem.XInput.LowLevel;
using UnityEngine.InputSystem.XR;
using UnityEngine.InputSystem.XR.Haptics;
using UnityEngine.Networking.PlayerConnection;
using UnityEngine.Pool;
using UnityEngine.Scripting;
using UnityEngine.Serialization;
using UnityEngine.UI;
using UnityEngine.UIElements;
using UnityEngine.XR;
using UnityEngine.XR.WindowsMR.Input;
using UnityEngineInternal.Input;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("Unity.InputSystem.TestFramework")]
[assembly: InternalsVisibleTo("Unity.InputSystem.Tests.Editor")]
[assembly: InternalsVisibleTo("Unity.InputSystem.Tests")]
[assembly: InternalsVisibleTo("Unity.InputSystem.IntegrationTests")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.7.0.0")]
[module: UnverifiableCode]
internal static class UISupport
{
	public static void Initialize()
	{
		InputSystem.RegisterLayout("\n            {\n                \"name\" : \"VirtualMouse\",\n                \"extend\" : \"Mouse\"\n            }\n        ");
	}
}
[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[24040]
		{
			0, 0, 0, 1, 0, 0, 0, 97, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			65, 99, 116, 105, 111, 110, 115, 92, 67, 111,
			109, 112, 111, 115, 105, 116, 101, 115, 92, 65,
			120, 105, 115, 67, 111, 109, 112, 111, 115, 105,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 105, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 65, 99, 116, 105, 111,
			110, 115, 92, 67, 111, 109, 112, 111, 115, 105,
			116, 101, 115, 92, 66, 117, 116, 116, 111, 110,
			87, 105, 116, 104, 79, 110, 101, 77, 111, 100,
			105, 102, 105, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 106, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 65, 99,
			116, 105, 111, 110, 115, 92, 67, 111, 109, 112,
			111, 115, 105, 116, 101, 115, 92, 66, 117, 116,
			116, 111, 110, 87, 105, 116, 104, 84, 119, 111,
			77, 111, 100, 105, 102, 105, 101, 114, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 104,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 65, 99, 116, 105, 111, 110, 115, 92,
			67, 111, 109, 112, 111, 115, 105, 116, 101, 115,
			92, 79, 110, 101, 77, 111, 100, 105, 102, 105,
			101, 114, 67, 111, 109, 112, 111, 115, 105, 116,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 105, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 65, 99, 116, 105, 111, 110,
			115, 92, 67, 111, 109, 112, 111, 115, 105, 116,
			101, 115, 92, 84, 119, 111, 77, 111, 100, 105,
			102, 105, 101, 114, 115, 67, 111, 109, 112, 111,
			115, 105, 116, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 100, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 65, 99, 116,
			105, 111, 110, 115, 92, 67, 111, 109, 112, 111,
			115, 105, 116, 101, 115, 92, 86, 101, 99, 116,
			111, 114, 50, 67, 111, 109, 112, 111, 115, 105,
			116, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 100, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 65, 99, 116, 105, 111,
			110, 115, 92, 67, 111, 109, 112, 111, 115, 105,
			116, 101, 115, 92, 86, 101, 99, 116, 111, 114,
			51, 67, 111, 109, 112, 111, 115, 105, 116, 101,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			95, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 65, 99, 116, 105, 111, 110, 115,
			92, 73, 73, 110, 112, 117, 116, 65, 99, 116,
			105, 111, 110, 67, 111, 108, 108, 101, 99, 116,
			105, 111, 110, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 90, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 65, 99, 116, 105,
			111, 110, 115, 92, 73, 73, 110, 112, 117, 116,
			73, 110, 116, 101, 114, 97, 99, 116, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 84, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 65, 99, 116, 105, 111, 110,
			115, 92, 73, 110, 112, 117, 116, 65, 99, 116,
			105, 111, 110, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 89, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 65, 99, 116, 105,
			111, 110, 115, 92, 73, 110, 112, 117, 116, 65,
			99, 116, 105, 111, 110, 65, 115, 115, 101, 116,
			46, 99, 115, 0, 0, 0, 11, 0, 0, 0,
			87, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 65, 99, 116, 105, 111, 110, 115,
			92, 73, 110, 112, 117, 116, 65, 99, 116, 105,
			111, 110, 77, 97, 112, 46, 99, 115, 0, 0,
			0, 5, 0, 0, 0, 94, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 65, 99,
			116, 105, 111, 110, 115, 92, 73, 110, 112, 117,
			116, 65, 99, 116, 105, 111, 110, 80, 97, 114,
			97, 109, 101, 116, 101, 114, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 92, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			65, 99, 116, 105, 111, 110, 115, 92, 73, 110,
			112, 117, 116, 65, 99, 116, 105, 111, 110, 80,
			114, 111, 112, 101, 114, 116, 121, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 103, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			65, 99, 116, 105, 111, 110, 115, 92, 73, 110,
			112, 117, 116, 65, 99, 116, 105, 111, 110, 82,
			101, 98, 105, 110, 100, 105, 110, 103, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 93, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 65, 99, 116, 105, 111, 110, 115, 92, 73,
			110, 112, 117, 116, 65, 99, 116, 105, 111, 110,
			82, 101, 102, 101, 114, 101, 110, 99, 101, 46,
			99, 115, 0, 0, 0, 4, 0, 0, 0, 99,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 65, 99, 116, 105, 111, 110, 115, 92,
			73, 110, 112, 117, 116, 65, 99, 116, 105, 111,
			110, 83, 101, 116, 117, 112, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 7, 0, 0, 0, 89, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 65,
			99, 116, 105, 111, 110, 115, 92, 73, 110, 112,
			117, 116, 65, 99, 116, 105, 111, 110, 83, 116,
			97, 116, 101, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 89, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 65, 99, 116, 105,
			111, 110, 115, 92, 73, 110, 112, 117, 116, 65,
			99, 116, 105, 111, 110, 84, 114, 97, 99, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			85, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 65, 99, 116, 105, 111, 110, 115,
			92, 73, 110, 112, 117, 116, 66, 105, 110, 100,
			105, 110, 103, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 94, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 65, 99, 116, 105,
			111, 110, 115, 92, 73, 110, 112, 117, 116, 66,
			105, 110, 100, 105, 110, 103, 67, 111, 109, 112,
			111, 115, 105, 116, 101, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 101, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 65, 99,
			116, 105, 111, 110, 115, 92, 73, 110, 112, 117,
			116, 66, 105, 110, 100, 105, 110, 103, 67, 111,
			109, 112, 111, 115, 105, 116, 101, 67, 111, 110,
			116, 101, 120, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 93, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 65, 99, 116,
			105, 111, 110, 115, 92, 73, 110, 112, 117, 116,
			66, 105, 110, 100, 105, 110, 103, 82, 101, 115,
			111, 108, 118, 101, 114, 46, 99, 115, 0, 0,
			0, 7, 0, 0, 0, 91, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 65, 99,
			116, 105, 111, 110, 115, 92, 73, 110, 112, 117,
			116, 67, 111, 110, 116, 114, 111, 108, 83, 99,
			104, 101, 109, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 96, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 65, 99, 116,
			105, 111, 110, 115, 92, 73, 110, 112, 117, 116,
			73, 110, 116, 101, 114, 97, 99, 116, 105, 111,
			110, 67, 111, 110, 116, 101, 120, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 101, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 65, 99, 116, 105, 111, 110, 115, 92, 73,
			110, 116, 101, 114, 97, 99, 116, 105, 111, 110,
			115, 92, 72, 111, 108, 100, 73, 110, 116, 101,
			114, 97, 99, 116, 105, 111, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 105, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			65, 99, 116, 105, 111, 110, 115, 92, 73, 110,
			116, 101, 114, 97, 99, 116, 105, 111, 110, 115,
			92, 77, 117, 108, 116, 105, 84, 97, 112, 73,
			110, 116, 101, 114, 97, 99, 116, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			102, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 65, 99, 116, 105, 111, 110, 115,
			92, 73, 110, 116, 101, 114, 97, 99, 116, 105,
			111, 110, 115, 92, 80, 114, 101, 115, 115, 73,
			110, 116, 101, 114, 97, 99, 116, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			104, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 65, 99, 116, 105, 111, 110, 115,
			92, 73, 110, 116, 101, 114, 97, 99, 116, 105,
			111, 110, 115, 92, 83, 108, 111, 119, 84, 97,
			112, 73, 110, 116, 101, 114, 97, 99, 116, 105,
			111, 110, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 100, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 65, 99, 116, 105, 111,
			110, 115, 92, 73, 110, 116, 101, 114, 97, 99,
			116, 105, 111, 110, 115, 92, 84, 97, 112, 73,
			110, 116, 101, 114, 97, 99, 116, 105, 111, 110,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			77, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 65, 115, 115, 101, 109, 98, 108,
			121, 73, 110, 102, 111, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 87, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 67, 111,
			110, 116, 114, 111, 108, 115, 92, 65, 110, 121,
			75, 101, 121, 67, 111, 110, 116, 114, 111, 108,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			85, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 67, 111, 110, 116, 114, 111, 108,
			115, 92, 65, 120, 105, 115, 67, 111, 110, 116,
			114, 111, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 87, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 67, 111, 110, 116,
			114, 111, 108, 115, 92, 66, 117, 116, 116, 111,
			110, 67, 111, 110, 116, 114, 111, 108, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 86, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 67, 111, 110, 116, 114, 111, 108, 115, 92,
			67, 111, 109, 109, 111, 110, 85, 115, 97, 103,
			101, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 86, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 67, 111, 110, 116, 114,
			111, 108, 115, 92, 68, 101, 108, 116, 97, 67,
			111, 110, 116, 114, 111, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 95, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 67,
			111, 110, 116, 114, 111, 108, 115, 92, 68, 105,
			115, 99, 114, 101, 116, 101, 66, 117, 116, 116,
			111, 110, 67, 111, 110, 116, 114, 111, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 87,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 68, 111, 117, 98, 108, 101, 67, 111, 110,
			116, 114, 111, 108, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 85, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 67, 111, 110,
			116, 114, 111, 108, 115, 92, 68, 112, 97, 100,
			67, 111, 110, 116, 114, 111, 108, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 86, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			67, 111, 110, 116, 114, 111, 108, 115, 92, 73,
			110, 112, 117, 116, 67, 111, 110, 116, 114, 111,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 95, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 67, 111, 110, 116, 114, 111,
			108, 115, 92, 73, 110, 112, 117, 116, 67, 111,
			110, 116, 114, 111, 108, 65, 116, 116, 114, 105,
			98, 117, 116, 101, 46, 99, 115, 0, 0, 0,
			5, 0, 0, 0, 96, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 67, 111, 110,
			116, 114, 111, 108, 115, 92, 73, 110, 112, 117,
			116, 67, 111, 110, 116, 114, 111, 108, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 46, 99,
			115, 0, 0, 0, 13, 0, 0, 0, 92, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 67, 111, 110, 116, 114, 111, 108, 115, 92,
			73, 110, 112, 117, 116, 67, 111, 110, 116, 114,
			111, 108, 76, 97, 121, 111, 117, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 101, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 67, 111, 110, 116, 114, 111, 108, 115, 92,
			73, 110, 112, 117, 116, 67, 111, 110, 116, 114,
			111, 108, 76, 97, 121, 111, 117, 116, 65, 116,
			116, 114, 105, 98, 117, 116, 101, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 90, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			67, 111, 110, 116, 114, 111, 108, 115, 92, 73,
			110, 112, 117, 116, 67, 111, 110, 116, 114, 111,
			108, 76, 105, 115, 116, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 90, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 67, 111,
			110, 116, 114, 111, 108, 115, 92, 73, 110, 112,
			117, 116, 67, 111, 110, 116, 114, 111, 108, 80,
			97, 116, 104, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 88, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 67, 111, 110, 116,
			114, 111, 108, 115, 92, 73, 110, 112, 117, 116,
			80, 114, 111, 99, 101, 115, 115, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 88,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 73, 110, 116, 101, 103, 101, 114, 67, 111,
			110, 116, 114, 111, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 84, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 67, 111,
			110, 116, 114, 111, 108, 115, 92, 75, 101, 121,
			67, 111, 110, 116, 114, 111, 108, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 106, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			67, 111, 110, 116, 114, 111, 108, 115, 92, 80,
			114, 111, 99, 101, 115, 115, 111, 114, 115, 92,
			65, 120, 105, 115, 68, 101, 97, 100, 122, 111,
			110, 101, 80, 114, 111, 99, 101, 115, 115, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 99, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 67, 111, 110, 116, 114, 111,
			108, 115, 92, 80, 114, 111, 99, 101, 115, 115,
			111, 114, 115, 92, 67, 108, 97, 109, 112, 80,
			114, 111, 99, 101, 115, 115, 111, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 113, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 67, 111, 110, 116, 114, 111, 108, 115, 92,
			80, 114, 111, 99, 101, 115, 115, 111, 114, 115,
			92, 67, 111, 109, 112, 101, 110, 115, 97, 116,
			101, 68, 105, 114, 101, 99, 116, 105, 111, 110,
			80, 114, 111, 99, 101, 115, 115, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 112,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 80, 114, 111, 99, 101, 115, 115, 111, 114,
			115, 92, 67, 111, 109, 112, 101, 110, 115, 97,
			116, 101, 82, 111, 116, 97, 116, 105, 111, 110,
			80, 114, 111, 99, 101, 115, 115, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 100,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 80, 114, 111, 99, 101, 115, 115, 111, 114,
			115, 92, 73, 110, 118, 101, 114, 116, 80, 114,
			111, 99, 101, 115, 115, 111, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 107, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			67, 111, 110, 116, 114, 111, 108, 115, 92, 80,
			114, 111, 99, 101, 115, 115, 111, 114, 115, 92,
			73, 110, 118, 101, 114, 116, 86, 101, 99, 116,
			111, 114, 50, 80, 114, 111, 99, 101, 115, 115,
			111, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 107, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 67, 111, 110, 116, 114,
			111, 108, 115, 92, 80, 114, 111, 99, 101, 115,
			115, 111, 114, 115, 92, 73, 110, 118, 101, 114,
			116, 86, 101, 99, 116, 111, 114, 51, 80, 114,
			111, 99, 101, 115, 115, 111, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 103, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			67, 111, 110, 116, 114, 111, 108, 115, 92, 80,
			114, 111, 99, 101, 115, 115, 111, 114, 115, 92,
			78, 111, 114, 109, 97, 108, 105, 122, 101, 80,
			114, 111, 99, 101, 115, 115, 111, 114, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 110, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 67, 111, 110, 116, 114, 111, 108, 115, 92,
			80, 114, 111, 99, 101, 115, 115, 111, 114, 115,
			92, 78, 111, 114, 109, 97, 108, 105, 122, 101,
			86, 101, 99, 116, 111, 114, 50, 80, 114, 111,
			99, 101, 115, 115, 111, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 110, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 67,
			111, 110, 116, 114, 111, 108, 115, 92, 80, 114,
			111, 99, 101, 115, 115, 111, 114, 115, 92, 78,
			111, 114, 109, 97, 108, 105, 122, 101, 86, 101,
			99, 116, 111, 114, 51, 80, 114, 111, 99, 101,
			115, 115, 111, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 99, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 67, 111, 110,
			116, 114, 111, 108, 115, 92, 80, 114, 111, 99,
			101, 115, 115, 111, 114, 115, 92, 83, 99, 97,
			108, 101, 80, 114, 111, 99, 101, 115, 115, 111,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 106, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 67, 111, 110, 116, 114, 111,
			108, 115, 92, 80, 114, 111, 99, 101, 115, 115,
			111, 114, 115, 92, 83, 99, 97, 108, 101, 86,
			101, 99, 116, 111, 114, 50, 80, 114, 111, 99,
			101, 115, 115, 111, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 106, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 67, 111,
			110, 116, 114, 111, 108, 115, 92, 80, 114, 111,
			99, 101, 115, 115, 111, 114, 115, 92, 83, 99,
			97, 108, 101, 86, 101, 99, 116, 111, 114, 51,
			80, 114, 111, 99, 101, 115, 115, 111, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 107,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 80, 114, 111, 99, 101, 115, 115, 111, 114,
			115, 92, 83, 116, 105, 99, 107, 68, 101, 97,
			100, 122, 111, 110, 101, 80, 114, 111, 99, 101,
			115, 115, 111, 114, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 91, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 67, 111, 110,
			116, 114, 111, 108, 115, 92, 81, 117, 97, 116,
			101, 114, 110, 105, 111, 110, 67, 111, 110, 116,
			114, 111, 108, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 86, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 67, 111, 110, 116,
			114, 111, 108, 115, 92, 83, 116, 105, 99, 107,
			67, 111, 110, 116, 114, 111, 108, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 86, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			67, 111, 110, 116, 114, 111, 108, 115, 92, 84,
			111, 117, 99, 104, 67, 111, 110, 116, 114, 111,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 91, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 67, 111, 110, 116, 114, 111,
			108, 115, 92, 84, 111, 117, 99, 104, 80, 104,
			97, 115, 101, 67, 111, 110, 116, 114, 111, 108,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			91, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 67, 111, 110, 116, 114, 111, 108,
			115, 92, 84, 111, 117, 99, 104, 80, 114, 101,
			115, 115, 67, 111, 110, 116, 114, 111, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 88,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 86, 101, 99, 116, 111, 114, 50, 67, 111,
			110, 116, 114, 111, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 88, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 67, 111,
			110, 116, 114, 111, 108, 115, 92, 86, 101, 99,
			116, 111, 114, 51, 67, 111, 110, 116, 114, 111,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 102, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 67, 111, 109, 109, 97, 110, 100, 115,
			92, 68, 105, 115, 97, 98, 108, 101, 68, 101,
			118, 105, 99, 101, 67, 111, 109, 109, 97, 110,
			100, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 101, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 67, 111, 109, 109, 97, 110, 100, 115,
			92, 69, 110, 97, 98, 108, 101, 68, 101, 118,
			105, 99, 101, 67, 111, 109, 109, 97, 110, 100,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			109, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 67, 111, 109, 109, 97, 110, 100, 115, 92,
			69, 110, 97, 98, 108, 101, 73, 77, 69, 67,
			111, 109, 112, 111, 115, 105, 116, 105, 111, 110,
			67, 111, 109, 109, 97, 110, 100, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 105, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			68, 101, 118, 105, 99, 101, 115, 92, 67, 111,
			109, 109, 97, 110, 100, 115, 92, 73, 73, 110,
			112, 117, 116, 68, 101, 118, 105, 99, 101, 67,
			111, 109, 109, 97, 110, 100, 73, 110, 102, 111,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			115, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 67, 111, 109, 109, 97, 110, 100, 115, 92,
			73, 110, 105, 116, 105, 97, 116, 101, 85, 115,
			101, 114, 65, 99, 99, 111, 117, 110, 116, 80,
			97, 105, 114, 105, 110, 103, 67, 111, 109, 109,
			97, 110, 100, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 100, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 68, 101, 118, 105,
			99, 101, 115, 92, 67, 111, 109, 109, 97, 110,
			100, 115, 92, 73, 110, 112, 117, 116, 68, 101,
			118, 105, 99, 101, 67, 111, 109, 109, 97, 110,
			100, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 105, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 67, 111, 109, 109, 97, 110, 100, 115,
			92, 81, 117, 101, 114, 121, 67, 97, 110, 82,
			117, 110, 73, 110, 66, 97, 99, 107, 103, 114,
			111, 117, 110, 100, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 104, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 68, 101, 118,
			105, 99, 101, 115, 92, 67, 111, 109, 109, 97,
			110, 100, 115, 92, 81, 117, 101, 114, 121, 68,
			105, 109, 101, 110, 115, 105, 111, 110, 115, 67,
			111, 109, 109, 97, 110, 100, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 106, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 68,
			101, 118, 105, 99, 101, 115, 92, 67, 111, 109,
			109, 97, 110, 100, 115, 92, 81, 117, 101, 114,
			121, 69, 110, 97, 98, 108, 101, 100, 83, 116,
			97, 116, 101, 67, 111, 109, 109, 97, 110, 100,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			108, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 67, 111, 109, 109, 97, 110, 100, 115, 92,
			81, 117, 101, 114, 121, 75, 101, 121, 98, 111,
			97, 114, 100, 76, 97, 121, 111, 117, 116, 67,
			111, 109, 109, 97, 110, 100, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 101, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 68,
			101, 118, 105, 99, 101, 115, 92, 67, 111, 109,
			109, 97, 110, 100, 115, 92, 81, 117, 101, 114,
			121, 75, 101, 121, 78, 97, 109, 101, 67, 111,
			109, 109, 97, 110, 100, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 111, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 68, 101,
			118, 105, 99, 101, 115, 92, 67, 111, 109, 109,
			97, 110, 100, 115, 92, 81, 117, 101, 114, 121,
			80, 97, 105, 114, 101, 100, 85, 115, 101, 114,
			65, 99, 99, 111, 117, 110, 116, 67, 111, 109,
			109, 97, 110, 100, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 111, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 68, 101, 118,
			105, 99, 101, 115, 92, 67, 111, 109, 109, 97,
			110, 100, 115, 92, 81, 117, 101, 114, 121, 83,
			97, 109, 112, 108, 105, 110, 103, 70, 114, 101,
			113, 117, 101, 110, 99, 121, 67, 111, 109, 109,
			97, 110, 100, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 100, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 68, 101, 118, 105,
			99, 101, 115, 92, 67, 111, 109, 109, 97, 110,
			100, 115, 92, 81, 117, 101, 114, 121, 85, 115,
			101, 114, 73, 100, 67, 111, 109, 109, 97, 110,
			100, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 101, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 67, 111, 109, 109, 97, 110, 100, 115,
			92, 82, 101, 113, 117, 101, 115, 116, 82, 101,
			115, 101, 116, 67, 111, 109, 109, 97, 110, 100,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			100, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 67, 111, 109, 109, 97, 110, 100, 115, 92,
			82, 101, 113, 117, 101, 115, 116, 83, 121, 110,
			99, 67, 111, 109, 109, 97, 110, 100, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 109, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 68, 101, 118, 105, 99, 101, 115, 92, 67,
			111, 109, 109, 97, 110, 100, 115, 92, 83, 101,
			116, 73, 77, 69, 67, 117, 114, 115, 111, 114,
			80, 111, 115, 105, 116, 105, 111, 110, 67, 111,
			109, 109, 97, 110, 100, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 109, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 68, 101,
			118, 105, 99, 101, 115, 92, 67, 111, 109, 109,
			97, 110, 100, 115, 92, 83, 101, 116, 83, 97,
			109, 112, 108, 105, 110, 103, 70, 114, 101, 113,
			117, 101, 110, 99, 121, 67, 111, 109, 109, 97,
			110, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 110, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 68, 101, 118, 105, 99,
			101, 115, 92, 67, 111, 109, 109, 97, 110, 100,
			115, 92, 85, 115, 101, 87, 105, 110, 100, 111,
			119, 115, 71, 97, 109, 105, 110, 103, 73, 110,
			112, 117, 116, 67, 111, 109, 109, 97, 110, 100,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			106, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 67, 111, 109, 109, 97, 110, 100, 115, 92,
			87, 97, 114, 112, 77, 111, 117, 115, 101, 80,
			111, 115, 105, 116, 105, 111, 110, 67, 111, 109,
			109, 97, 110, 100, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 80, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 68, 101, 118,
			105, 99, 101, 115, 92, 71, 97, 109, 101, 112,
			97, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 96, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 68, 101, 118, 105, 99,
			101, 115, 92, 72, 97, 112, 116, 105, 99, 115,
			92, 68, 117, 97, 108, 77, 111, 116, 111, 114,
			82, 117, 109, 98, 108, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 103, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 68,
			101, 118, 105, 99, 101, 115, 92, 72, 97, 112,
			116, 105, 99, 115, 92, 68, 117, 97, 108, 77,
			111, 116, 111, 114, 82, 117, 109, 98, 108, 101,
			67, 111, 109, 109, 97, 110, 100, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 97, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			68, 101, 118, 105, 99, 101, 115, 92, 72, 97,
			112, 116, 105, 99, 115, 92, 73, 68, 117, 97,
			108, 77, 111, 116, 111, 114, 82, 117, 109, 98,
			108, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 89, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 68, 101, 118, 105, 99,
			101, 115, 92, 72, 97, 112, 116, 105, 99, 115,
			92, 73, 72, 97, 112, 116, 105, 99, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 91,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 68, 101, 118, 105, 99, 101, 115, 92,
			73, 67, 117, 115, 116, 111, 109, 68, 101, 118,
			105, 99, 101, 82, 101, 115, 101, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 85, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 68, 101, 118, 105, 99, 101, 115, 92, 73,
			69, 118, 101, 110, 116, 77, 101, 114, 103, 101,
			114, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 91, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 73, 69, 118, 101, 110, 116, 80, 114,
			101, 80, 114, 111, 99, 101, 115, 115, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			101, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 73, 73, 110, 112, 117, 116, 85, 112, 100,
			97, 116, 101, 67, 97, 108, 108, 98, 97, 99,
			107, 82, 101, 99, 101, 105, 118, 101, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 84,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 68, 101, 118, 105, 99, 101, 115, 92,
			73, 110, 112, 117, 116, 68, 101, 118, 105, 99,
			101, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 91, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 73, 110, 112, 117, 116, 68, 101, 118,
			105, 99, 101, 66, 117, 105, 108, 100, 101, 114,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			95, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 73, 110, 112, 117, 116, 68, 101, 118, 105,
			99, 101, 68, 101, 115, 99, 114, 105, 112, 116,
			105, 111, 110, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 91, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 68, 101, 118, 105,
			99, 101, 115, 92, 73, 110, 112, 117, 116, 68,
			101, 118, 105, 99, 101, 77, 97, 116, 99, 104,
			101, 114, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 91, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 68, 101, 118, 105, 99,
			101, 115, 92, 73, 84, 101, 120, 116, 73, 110,
			112, 117, 116, 82, 101, 99, 101, 105, 118, 101,
			114, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 81, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 74, 111, 121, 115, 116, 105, 99, 107,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			81, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 68, 101, 118, 105, 99, 101, 115,
			92, 75, 101, 121, 98, 111, 97, 114, 100, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 78,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 68, 101, 118, 105, 99, 101, 115, 92,
			77, 111, 117, 115, 101, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 76, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 68, 101,
			118, 105, 99, 101, 115, 92, 80, 101, 110, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 80,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 68, 101, 118, 105, 99, 101, 115, 92,
			80, 111, 105, 110, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 97, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			68, 101, 118, 105, 99, 101, 115, 92, 80, 114,
			101, 99, 111, 109, 112, 105, 108, 101, 100, 92,
			70, 97, 115, 116, 75, 101, 121, 98, 111, 97,
			114, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 94, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 68, 101, 118, 105, 99,
			101, 115, 92, 80, 114, 101, 99, 111, 109, 112,
			105, 108, 101, 100, 92, 70, 97, 115, 116, 77,
			111, 117, 115, 101, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 102, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 68, 101, 118,
			105, 99, 101, 115, 92, 80, 114, 101, 99, 111,
			109, 112, 105, 108, 101, 100, 92, 70, 97, 115,
			116, 77, 111, 117, 115, 101, 46, 112, 97, 114,
			116, 105, 97, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 100, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 68, 101, 118,
			105, 99, 101, 115, 92, 80, 114, 101, 99, 111,
			109, 112, 105, 108, 101, 100, 92, 70, 97, 115,
			116, 84, 111, 117, 99, 104, 115, 99, 114, 101,
			101, 110, 46, 99, 115, 0, 0, 0, 17, 0,
			0, 0, 93, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 68, 101, 118, 105, 99,
			101, 115, 92, 82, 101, 109, 111, 116, 101, 92,
			73, 110, 112, 117, 116, 82, 101, 109, 111, 116,
			105, 110, 103, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 107, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 68, 101, 118, 105,
			99, 101, 115, 92, 82, 101, 109, 111, 116, 101,
			92, 82, 101, 109, 111, 116, 101, 73, 110, 112,
			117, 116, 80, 108, 97, 121, 101, 114, 67, 111,
			110, 110, 101, 99, 116, 105, 111, 110, 46, 99,
			115, 0, 0, 0, 18, 0, 0, 0, 79, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 68, 101, 118, 105, 99, 101, 115, 92, 83,
			101, 110, 115, 111, 114, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 84, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 68, 101,
			118, 105, 99, 101, 115, 92, 84, 111, 117, 99,
			104, 115, 99, 114, 101, 101, 110, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 86, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			68, 101, 118, 105, 99, 101, 115, 92, 84, 114,
			97, 99, 107, 101, 100, 68, 101, 118, 105, 99,
			101, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 83, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 69, 118, 101, 110, 116, 115,
			92, 65, 99, 116, 105, 111, 110, 69, 118, 101,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 87, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 69, 118, 101, 110, 116,
			115, 92, 68, 101, 108, 116, 97, 83, 116, 97,
			116, 101, 69, 118, 101, 110, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 96, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			69, 118, 101, 110, 116, 115, 92, 68, 101, 118,
			105, 99, 101, 67, 111, 110, 102, 105, 103, 117,
			114, 97, 116, 105, 111, 110, 69, 118, 101, 110,
			116, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 89, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 69, 118, 101, 110, 116, 115,
			92, 68, 101, 118, 105, 99, 101, 82, 101, 109,
			111, 118, 101, 69, 118, 101, 110, 116, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 88, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 69, 118, 101, 110, 116, 115, 92, 68, 101,
			118, 105, 99, 101, 82, 101, 115, 101, 116, 69,
			118, 101, 110, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 91, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 69, 118, 101,
			110, 116, 115, 92, 73, 73, 110, 112, 117, 116,
			69, 118, 101, 110, 116, 84, 121, 112, 101, 73,
			110, 102, 111, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 91, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 69, 118, 101, 110,
			116, 115, 92, 73, 77, 69, 67, 111, 109, 112,
			111, 115, 105, 116, 105, 111, 110, 69, 118, 101,
			110, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 82, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 69, 118, 101, 110, 116,
			115, 92, 73, 110, 112, 117, 116, 69, 118, 101,
			110, 116, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 88, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 69, 118, 101, 110, 116,
			115, 92, 73, 110, 112, 117, 116, 69, 118, 101,
			110, 116, 66, 117, 102, 102, 101, 114, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 90, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 69, 118, 101, 110, 116, 115, 92, 73, 110,
			112, 117, 116, 69, 118, 101, 110, 116, 76, 105,
			115, 116, 101, 110, 101, 114, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 85, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 69,
			118, 101, 110, 116, 115, 92, 73, 110, 112, 117,
			116, 69, 118, 101, 110, 116, 80, 116, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 88,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 69, 118, 101, 110, 116, 115, 92, 73,
			110, 112, 117, 116, 69, 118, 101, 110, 116, 83,
			116, 114, 101, 97, 109, 46, 99, 115, 0, 0,
			0, 4, 0, 0, 0, 87, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 69, 118,
			101, 110, 116, 115, 92, 73, 110, 112, 117, 116,
			69, 118, 101, 110, 116, 84, 114, 97, 99, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			82, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 69, 118, 101, 110, 116, 115, 92,
			83, 116, 97, 116, 101, 69, 118, 101, 110, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			81, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 69, 118, 101, 110, 116, 115, 92,
			84, 101, 120, 116, 69, 118, 101, 110, 116, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 78,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 73, 73, 110, 112, 117, 116, 82, 117,
			110, 116, 105, 109, 101, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 80, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 73, 110,
			112, 117, 116, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 82, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 73, 110, 112, 117,
			116, 70, 101, 97, 116, 117, 114, 101, 78, 97,
			109, 101, 115, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 77, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 73, 110, 112, 117,
			116, 77, 97, 110, 97, 103, 101, 114, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 90, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 73, 110, 112, 117, 116, 77, 97, 110, 97,
			103, 101, 114, 83, 116, 97, 116, 101, 77, 111,
			110, 105, 116, 111, 114, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 77, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 73,
			110, 112, 117, 116, 77, 101, 116, 114, 105, 99,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 78, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 73, 110, 112, 117, 116, 83,
			101, 116, 116, 105, 110, 103, 115, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 76, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 80, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 73, 110, 112, 117, 116, 85,
			112, 100, 97, 116, 101, 84, 121, 112, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 83,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 78, 97, 116, 105, 118, 101, 73, 110,
			112, 117, 116, 82, 117, 110, 116, 105, 109, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			99, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 80, 108, 117, 103, 105, 110, 115,
			92, 68, 117, 97, 108, 83, 104, 111, 99, 107,
			92, 68, 117, 97, 108, 83, 104, 111, 99, 107,
			71, 97, 109, 101, 112, 97, 100, 46, 99, 115,
			0, 0, 0, 15, 0, 0, 0, 102, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 68, 117,
			97, 108, 83, 104, 111, 99, 107, 92, 68, 117,
			97, 108, 83, 104, 111, 99, 107, 71, 97, 109,
			101, 112, 97, 100, 72, 73, 68, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 99, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 68, 117,
			97, 108, 83, 104, 111, 99, 107, 92, 68, 117,
			97, 108, 83, 104, 111, 99, 107, 83, 117, 112,
			112, 111, 114, 116, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 100, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 68, 117, 97, 108, 83,
			104, 111, 99, 107, 92, 73, 68, 117, 97, 108,
			83, 104, 111, 99, 107, 72, 97, 112, 116, 105,
			99, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 107, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 69, 110, 104, 97, 110, 99, 101,
			100, 84, 111, 117, 99, 104, 92, 69, 110, 104,
			97, 110, 99, 101, 100, 84, 111, 117, 99, 104,
			83, 117, 112, 112, 111, 114, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 93, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 69, 110,
			104, 97, 110, 99, 101, 100, 84, 111, 117, 99,
			104, 92, 70, 105, 110, 103, 101, 114, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 92, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 69,
			110, 104, 97, 110, 99, 101, 100, 84, 111, 117,
			99, 104, 92, 84, 111, 117, 99, 104, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 99, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 69,
			110, 104, 97, 110, 99, 101, 100, 84, 111, 117,
			99, 104, 92, 84, 111, 117, 99, 104, 72, 105,
			115, 116, 111, 114, 121, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 102, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 80, 108,
			117, 103, 105, 110, 115, 92, 69, 110, 104, 97,
			110, 99, 101, 100, 84, 111, 117, 99, 104, 92,
			84, 111, 117, 99, 104, 83, 105, 109, 117, 108,
			97, 116, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 6, 0, 0, 0, 80, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 80, 108,
			117, 103, 105, 110, 115, 92, 72, 73, 68, 92,
			72, 73, 68, 46, 99, 115, 0, 0, 0, 4,
			0, 0, 0, 86, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 80, 108, 117, 103,
			105, 110, 115, 92, 72, 73, 68, 92, 72, 73,
			68, 80, 97, 114, 115, 101, 114, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 87, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 72, 73,
			68, 92, 72, 73, 68, 83, 117, 112, 112, 111,
			114, 116, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 96, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 79, 110, 83, 99, 114, 101, 101,
			110, 92, 79, 110, 83, 99, 114, 101, 101, 110,
			66, 117, 116, 116, 111, 110, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 97, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 80,
			108, 117, 103, 105, 110, 115, 92, 79, 110, 83,
			99, 114, 101, 101, 110, 92, 79, 110, 83, 99,
			114, 101, 101, 110, 67, 111, 110, 116, 114, 111,
			108, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 95, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 80, 108, 117, 103, 105, 110,
			115, 92, 79, 110, 83, 99, 114, 101, 101, 110,
			92, 79, 110, 83, 99, 114, 101, 101, 110, 83,
			116, 105, 99, 107, 46, 99, 115, 0, 0, 0,
			5, 0, 0, 0, 104, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 80, 108, 97, 121, 101,
			114, 73, 110, 112, 117, 116, 92, 68, 101, 102,
			97, 117, 108, 116, 73, 110, 112, 117, 116, 65,
			99, 116, 105, 111, 110, 115, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 95, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 80,
			108, 117, 103, 105, 110, 115, 92, 80, 108, 97,
			121, 101, 114, 73, 110, 112, 117, 116, 92, 73,
			110, 112, 117, 116, 86, 97, 108, 117, 101, 46,
			99, 115, 0, 0, 0, 5, 0, 0, 0, 96,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 80, 108, 117, 103, 105, 110, 115, 92,
			80, 108, 97, 121, 101, 114, 73, 110, 112, 117,
			116, 92, 80, 108, 97, 121, 101, 114, 73, 110,
			112, 117, 116, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 103, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			117, 110, 105, 116, 121, 46, 105, 110, 112, 117,
			116, 115, 121, 115, 116, 101, 109, 64, 49, 46,
			55, 46, 48, 92, 73, 110, 112, 117, 116, 83,
			121, 115, 116, 101, 109, 92, 80, 108, 117, 103,
			105, 110, 115, 92, 80, 108, 97, 121, 101, 114,
			73, 110, 112, 117, 116, 92, 80, 108, 97, 121,
			101, 114, 73, 110, 112, 117, 116, 77, 97, 110,
			97, 103, 101, 114, 46, 99, 115, 0, 0, 0,
			9, 0, 0, 0, 102, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 83, 119, 105, 116, 99,
			104, 92, 83, 119, 105, 116, 99, 104, 80, 114,
			111, 67, 111, 110, 116, 114, 111, 108, 108, 101,
			114, 72, 73, 68, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 96, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 83, 119, 105, 116, 99,
			104, 92, 83, 119, 105, 116, 99, 104, 83, 117,
			112, 112, 111, 114, 116, 72, 73, 68, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 93, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 85,
			73, 92, 66, 97, 115, 101, 73, 110, 112, 117,
			116, 79, 118, 101, 114, 114, 105, 100, 101, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 97,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 80, 108, 117, 103, 105, 110, 115, 92,
			85, 73, 92, 69, 120, 116, 101, 110, 100, 101,
			100, 65, 120, 105, 115, 69, 118, 101, 110, 116,
			68, 97, 116, 97, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 100, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 85, 73, 92, 69, 120,
			116, 101, 110, 100, 101, 100, 80, 111, 105, 110,
			116, 101, 114, 69, 118, 101, 110, 116, 68, 97,
			116, 97, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 100, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 85, 73, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 85, 73, 73,
			110, 112, 117, 116, 77, 111, 100, 117, 108, 101,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			98, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 80, 108, 117, 103, 105, 110, 115,
			92, 85, 73, 92, 77, 117, 108, 116, 105, 112,
			108, 97, 121, 101, 114, 69, 118, 101, 110, 116,
			83, 121, 115, 116, 101, 109, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 91, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 80,
			108, 117, 103, 105, 110, 115, 92, 85, 73, 92,
			78, 97, 118, 105, 103, 97, 116, 105, 111, 110,
			77, 111, 100, 101, 108, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 88, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 117, 110, 105, 116, 121, 46, 105, 110,
			112, 117, 116, 115, 121, 115, 116, 101, 109, 64,
			49, 46, 55, 46, 48, 92, 73, 110, 112, 117,
			116, 83, 121, 115, 116, 101, 109, 92, 80, 108,
			117, 103, 105, 110, 115, 92, 85, 73, 92, 80,
			111, 105, 110, 116, 101, 114, 77, 111, 100, 101,
			108, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 98, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 80, 108, 117, 103, 105, 110,
			115, 92, 85, 73, 92, 84, 114, 97, 99, 107,
			101, 100, 68, 101, 118, 105, 99, 101, 82, 97,
			121, 99, 97, 115, 116, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 85, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 85, 73,
			92, 85, 73, 83, 117, 112, 112, 111, 114, 116,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			93, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 80, 108, 117, 103, 105, 110, 115,
			92, 85, 73, 92, 86, 105, 114, 116, 117, 97,
			108, 77, 111, 117, 115, 101, 73, 110, 112, 117,
			116, 46, 99, 115, 0, 0, 0, 6, 0, 0,
			0, 88, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 80, 108, 117, 103, 105, 110,
			115, 92, 85, 115, 101, 114, 115, 92, 73, 110,
			112, 117, 116, 85, 115, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 101, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 85, 115,
			101, 114, 115, 92, 73, 110, 112, 117, 116, 85,
			115, 101, 114, 65, 99, 99, 111, 117, 110, 116,
			72, 97, 110, 100, 108, 101, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 96, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 80,
			108, 117, 103, 105, 110, 115, 92, 85, 115, 101,
			114, 115, 92, 73, 110, 112, 117, 116, 85, 115,
			101, 114, 83, 101, 116, 116, 105, 110, 103, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			94, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 80, 108, 117, 103, 105, 110, 115,
			92, 88, 73, 110, 112, 117, 116, 92, 73, 88,
			98, 111, 120, 79, 110, 101, 82, 117, 109, 98,
			108, 101, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 96, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 88, 73, 110, 112, 117, 116, 92,
			88, 73, 110, 112, 117, 116, 67, 111, 110, 116,
			114, 111, 108, 108, 101, 114, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 103, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 117, 110, 105, 116, 121, 46, 105,
			110, 112, 117, 116, 115, 121, 115, 116, 101, 109,
			64, 49, 46, 55, 46, 48, 92, 73, 110, 112,
			117, 116, 83, 121, 115, 116, 101, 109, 92, 80,
			108, 117, 103, 105, 110, 115, 92, 88, 73, 110,
			112, 117, 116, 92, 88, 73, 110, 112, 117, 116,
			67, 111, 110, 116, 114, 111, 108, 108, 101, 114,
			87, 105, 110, 100, 111, 119, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 93, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			80, 108, 117, 103, 105, 110, 115, 92, 88, 73,
			110, 112, 117, 116, 92, 88, 73, 110, 112, 117,
			116, 83, 117, 112, 112, 111, 114, 116, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 96, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 88,
			82, 92, 67, 111, 110, 116, 114, 111, 108, 115,
			92, 80, 111, 115, 101, 67, 111, 110, 116, 114,
			111, 108, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 92, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 88, 82, 92, 68, 101, 118, 105,
			99, 101, 115, 92, 71, 111, 111, 103, 108, 101,
			86, 82, 46, 99, 115, 0, 0, 0, 6, 0,
			0, 0, 90, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 88, 82, 92, 68, 101, 118, 105,
			99, 101, 115, 92, 79, 99, 117, 108, 117, 115,
			46, 99, 115, 0, 0, 0, 7, 0, 0, 0,
			90, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 80, 108, 117, 103, 105, 110, 115,
			92, 88, 82, 92, 68, 101, 118, 105, 99, 101,
			115, 92, 79, 112, 101, 110, 86, 82, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 93, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 88,
			82, 92, 68, 101, 118, 105, 99, 101, 115, 92,
			87, 105, 110, 100, 111, 119, 115, 77, 82, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 91,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 80, 108, 117, 103, 105, 110, 115, 92,
			88, 82, 92, 71, 101, 110, 101, 114, 105, 99,
			88, 82, 68, 101, 118, 105, 99, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 98, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 88,
			82, 92, 72, 97, 112, 116, 105, 99, 115, 92,
			66, 117, 102, 102, 101, 114, 101, 100, 82, 117,
			109, 98, 108, 101, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 112, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 88, 82, 92, 72, 97,
			112, 116, 105, 99, 115, 92, 71, 101, 116, 67,
			117, 114, 114, 101, 110, 116, 72, 97, 112, 116,
			105, 99, 83, 116, 97, 116, 101, 67, 111, 109,
			109, 97, 110, 100, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 112, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 88, 82, 92, 72, 97,
			112, 116, 105, 99, 115, 92, 71, 101, 116, 72,
			97, 112, 116, 105, 99, 67, 97, 112, 97, 98,
			105, 108, 105, 116, 105, 101, 115, 67, 111, 109,
			109, 97, 110, 100, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 110, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 117, 110, 105, 116, 121, 46, 105, 110, 112,
			117, 116, 115, 121, 115, 116, 101, 109, 64, 49,
			46, 55, 46, 48, 92, 73, 110, 112, 117, 116,
			83, 121, 115, 116, 101, 109, 92, 80, 108, 117,
			103, 105, 110, 115, 92, 88, 82, 92, 72, 97,
			112, 116, 105, 99, 115, 92, 83, 101, 110, 100,
			66, 117, 102, 102, 101, 114, 101, 100, 72, 97,
			112, 116, 105, 99, 115, 67, 111, 109, 109, 97,
			110, 100, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 108, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 117,
			110, 105, 116, 121, 46, 105, 110, 112, 117, 116,
			115, 121, 115, 116, 101, 109, 64, 49, 46, 55,
			46, 48, 92, 73, 110, 112, 117, 116, 83, 121,
			115, 116, 101, 109, 92, 80, 108, 117, 103, 105,
			110, 115, 92, 88, 82, 92, 72, 97, 112, 116,
			105, 99, 115, 92, 83, 101, 110, 100, 72, 97,
			112, 116, 105, 99, 73, 109, 112, 117, 108, 115,
			101, 67, 111, 109, 109, 97, 110, 100, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 93, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 88,
			82, 92, 84, 114, 97, 99, 107, 101, 100, 80,
			111, 115, 101, 68, 114, 105, 118, 101, 114, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 91,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 117, 110, 105, 116,
			121, 46, 105, 110, 112, 117, 116, 115, 121, 115,
			116, 101, 109, 64, 49, 46, 55, 46, 48, 92,
			73, 110, 112, 117, 116, 83, 121, 115, 116, 101,
			109, 92, 80, 108, 117, 103, 105, 110, 115, 92,
			88, 82, 92, 88, 82, 76, 97, 121, 111, 117,
			116, 66, 117, 105, 108, 100, 101, 114, 46, 99,
			115, 0, 0, 0, 9, 0, 0, 0, 85, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 80, 108, 117, 103, 105, 110, 115, 92, 88,
			82, 92, 88, 82, 83, 117, 112, 112, 111, 114,
			116, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 98, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 83, 116, 97, 116, 101, 92,
			73, 73, 110, 112, 117, 116, 83, 116, 97, 116,
			101, 67, 97, 108, 108, 98, 97, 99, 107, 82,
			101, 99, 101, 105, 118, 101, 114, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 95, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			83, 116, 97, 116, 101, 92, 73, 73, 110, 112,
			117, 116, 83, 116, 97, 116, 101, 67, 104, 97,
			110, 103, 101, 77, 111, 110, 105, 116, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			90, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 117, 110, 105,
			116, 121, 46, 105, 110, 112, 117, 116, 115, 121,
			115, 116, 101, 109, 64, 49, 46, 55, 46, 48,
			92, 73, 110, 112, 117, 116, 83, 121, 115, 116,
			101, 109, 92, 83, 116, 97, 116, 101, 92, 73,
			73, 110, 112, 117, 116, 83, 116, 97, 116, 101,
			84, 121, 112, 101, 73, 110, 102, 111, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 81, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 117, 110, 105, 116, 121,
			46, 105, 110, 112, 117, 116, 115, 121, 115, 116,
			101, 109, 64, 49, 46, 55, 46, 48, 92, 73,
			110, 112, 117, 116, 83, 121, 115, 116, 101, 109,
			92, 83, 116, 97, 116, 101, 92, 73, 110, 112,
			117, 116, 83, 116, 97, 116, 101, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 86, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			83, 116, 97, 116, 101, 92, 73, 110, 112, 117,
			116, 83, 116, 97, 116, 101, 66, 108, 111, 99,
			107, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 88, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 117, 110,
			105, 116, 121, 46, 105, 110, 112, 117, 116, 115,
			121, 115, 116, 101, 109, 64, 49, 46, 55, 46,
			48, 92, 73, 110, 112, 117, 116, 83, 121, 115,
			116, 101, 109, 92, 83, 116, 97, 116, 101, 92,
			73, 110, 112, 117, 116, 83, 116, 97, 116, 101,
			66, 117, 102, 102, 101, 114, 115, 46, 99, 115,
			0, 0, 0, 7, 0, 0, 0, 88, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 117, 110, 105, 116, 121, 46,
			105, 110, 112, 117, 116, 115, 121, 115, 116, 101,
			109, 64, 49, 46, 55, 46, 48, 92, 73, 110,
			112, 117, 116, 83, 121, 115, 116, 101, 109, 92,
			83, 116, 97, 116, 101, 92, 73, 110, 112, 117,
			116, 83, 116, 97, 116, 101, 72, 105, 115, 116,