Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ArcadeHoe v1.0.2
ArcadeHoe.dll
Decompiled 3 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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; } } } namespace ArcadeHoe { public static class ArcadeHoeController { public static readonly float[] RadiusPresets = new float[8] { 2.5f, 4f, 6f, 8f, 12f, 16f, 20f, 25f }; public static int RadiusIndex = 2; public static bool IsHeightLocked = false; public static float LockedHeight = 0f; public static float CurrentRadius => RadiusPresets[Mathf.Clamp(RadiusIndex, 0, RadiusPresets.Length - 1)]; public static bool IsHoldingArcadeHoe() { Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return false; } ItemData item = ReflectionExtensions.RightItemRef.Invoke((Humanoid)(object)localPlayer); return ArcadeHoeItem.IsArcadeHoe(item); } public static void Update() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: 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_0255: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null || !IsHoldingArcadeHoe()) { return; } if (Input.GetKeyDown(ArcadeHoePlugin.KeyRadiusIncrease.Value) || Input.GetKeyDown((KeyCode)61) || Input.GetKeyDown((KeyCode)43) || Input.GetKeyDown((KeyCode)270) || Input.GetKeyDown((KeyCode)93) || ((Input.GetKey((KeyCode)308) || Input.GetKey((KeyCode)307) || Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303)) && Input.mouseScrollDelta.y > 0.1f)) { if (RadiusIndex < RadiusPresets.Length - 1) { RadiusIndex++; ShowStatus($"Radius: {CurrentRadius:F1}m"); UpdatePlacementVisuals(localPlayer); } else { ShowStatus($"Radius: {CurrentRadius:F1}m (MAX)"); } } if (Input.GetKeyDown(ArcadeHoePlugin.KeyRadiusDecrease.Value) || Input.GetKeyDown((KeyCode)45) || Input.GetKeyDown((KeyCode)269) || Input.GetKeyDown((KeyCode)91) || ((Input.GetKey((KeyCode)308) || Input.GetKey((KeyCode)307) || Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303)) && Input.mouseScrollDelta.y < -0.1f)) { if (RadiusIndex > 0) { RadiusIndex--; ShowStatus($"Radius: {CurrentRadius:F1}m"); UpdatePlacementVisuals(localPlayer); } else { ShowStatus($"Radius: {CurrentRadius:F1}m (MIN)"); } } if (Input.GetKeyDown(ArcadeHoePlugin.KeyToggleHeightLock.Value)) { IsHeightLocked = !IsHeightLocked; if (IsHeightLocked) { LockedHeight = GetCurrentAimHeight(localPlayer); ShowStatus($"Height Lock: ON ({LockedHeight:F1}m)"); } else { ShowStatus("Height Lock: OFF (Following Player Feet / Terrain)"); } } if (Input.GetKeyDown(ArcadeHoePlugin.KeyResetHeight.Value)) { LockedHeight = GetCurrentAimHeight(localPlayer); IsHeightLocked = true; ShowStatus($"Height updated & locked to {LockedHeight:F1}m"); } } public static void UpdatePlacementVisuals(Player player) { if (!((Object)(object)player == (Object)null)) { GameObject val = ReflectionExtensions.PlacementGhostRef.Invoke(player); if ((Object)(object)val != (Object)null) { ArcadeHoeTerrainPatches.ApplyRadiusToCircleProjectors(val, CurrentRadius); } GameObject val2 = ReflectionExtensions.PlacementMarkerRef.Invoke(player); if ((Object)(object)val2 != (Object)null) { ArcadeHoeTerrainPatches.ApplyRadiusToCircleProjectors(val2, CurrentRadius); } } } private static float GetCurrentAimHeight(Player player) { //IL_0020: 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_004e: Unknown result type (might be due to invalid IL or missing references) GameObject val = ReflectionExtensions.PlacementGhostRef.Invoke(player); if ((Object)(object)val != (Object)null) { return val.transform.position.y; } GameObject val2 = ReflectionExtensions.PlacementMarkerRef.Invoke(player); if ((Object)(object)val2 != (Object)null) { return val2.transform.position.y; } return ((Component)player).transform.position.y; } public static void ShowStatus(string msg) { if ((Object)(object)MessageHud.instance != (Object)null) { MessageHud.instance.ShowMessage((MessageType)1, "<color=#00ffff>[Arcade Leveler]</color> " + msg, 0, (Sprite)null, false, true); } } } public static class ArcadeHoeItem { public const string PrefabName = "ArcadeHoe"; public const string ItemName = "Arcade Runic Leveler"; private static GameObject _prefabContainer; private static GameObject _arcadeHoePrefab; private static Sprite _customIcon; private const string EmbeddedIconBase64 = "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAA5UUlEQVR4nO29B3gc13U2fOZO3d4LegcJFrBXiWqUqEJ1q1hyZLnbco1jO4oTJ5bTv/TEsWP7c2Q5cpVs9S5RlFjEChY0AgSwABYLbG+zs7NT7/2fAcUv/vP/ySfLkkxK+z4seAhyOHvPe0+755wLUEcdddRRRx111FFHHXXUUUcdddRRRx111FFHHXXUUUcdddRRRx11/Cooilr8aXfYqH/7x/t+9sC//NmBnTsuuYzlOMr6Pk3TcK4D/bZf4HwGQggIIfCNr3zyrzYuabq9ODe5+Z73X73rb/74C092tLe6TNMERC1y4ZxFnQBvEgxNgyXgu2679uKdF2+4d++Bo7I3GMJEEZWIDe3ctrpn5PKLNq/ChCz+fUtTnIuoE+BN7nzDNGFlX3foc3ff9MrRgaOK02YTGkM+oBhBePhHP5xe3x7E99yx88Qt11z2QZahFzXFuUiCOgF+TVhCxBhDIOBj/var9xxamJ3BqqwyPqeAaArgoYcfw6vXrfH5W9qbfvDDH8sRF//DD99+7V/wHHeGBHBuoU6AN+H0WRrgvi985NsRt9BRLZaMlqCfcfA2eOW5l5Ed61JDV7/30cefZaqaaR8dHio5Af/hDTsu+VObTbAeAucS6gT4tUAWd/8Hbrzq+tXtkY+PDY8q0YCPoxEDI0Njudj45HdXrN9s3/Pqq7gkKcDTNA6H/eVkpfwkEtg/XrZ6ze3nmimoE+AN4Myup4BhWNiyZuWyLUvaHj99alzxud0CYNCyySy8MjD6pY4NW9Hw6ChTyBVK2DAw1g1j1rQHZpiQNKoyB2WO+4D1PIsE5wrqBHgDsASGMYFtW7d8qyUSGJmJzxksywkUAZxOZbhTk/E9F27dus3vtH18KpU3aAIoyJrHZU8QlVwNztMq5+Pb2jZXSqW/sp53LmkA5rf9AucyEDqzPzraW5Y0+B07jFrpNtrXCplSFbJFESuygqbn06c5X+iIJotf2jtwTAG1Jjjt9LdLLStyecrbljb5Z5f0Ru6qjY3/8fzQ0AFL+OeSBqgT4L+BpfIte9/b1d68dnnvWDGfmrAh86jbyV+ydNkm4cQrzyoOQRASJfm5iGZePzs9BYViibFxrEFWb8jFqsLVOUk55utu7LKpyq7DTz315wTjuhN4/oR6BFpam50Xbt3wzY7GiKYD8+eUPZCm1OopsaY+17Fmk7BQEh93stCXmJnpESuSGPK7ILpqRWzWdN8ni9IVwaZAX5ePbzvy4E92Yl07o/rPod1v4dwxRucIaBqBaWK4/PLLtl551fb9eqUssVitHjg2dN+J0YmnPnjzDQNjoyNPa4QWDF3eWiukJjkKpoONoVHwhRdGq7a+nKrfy4XcuGvZCu7wt/8tkJuJiZSVNrY0wDmGuhP4K7B2qCX8/lUrojuvuXL/wOETBjYwpijWlsuLqWjA99lnX3rl1pDP/2EiZj25fOE/Grrb91L+wEP7JjPfP5Ake3OS3qWpMmrq6bUPP/LEqt9M+NQZk/E2Oo11AryOs555JBrhrrvpphNzWdFgbU5GlOSYqsOUYZqpm66+5t6ugP26AycGr1II081zfG10JvtovFQ9ATppzBcUtsgFlYa+JVz66MkPxg/uHf3Ndj45YzLeRrNRJ8DrOOudb9669Q/nZhciI4NDGiK0bKiaJ53JJJOZQjWRLxnBptYvczy7Il2p3uYL+g6pqq4I9ghtW3NtK+VpucOQKysrifT/Hn3q8Qcp6sxpIVDoV3bxG9/NyOGhXMu3+CEUQkC/Pf56PQqA//T4t27dvGTdmrVfz+fyhqkqjFzMJdkaYkpSZYFBUJmNTTKaUpOaw+6/S+dL26fmUoeGhsaq0TbDLRrdC5invrCsM7gpdez4Z4muArJ5KGJqBAj+z71maNZ/CIt/hs3/XjIUAn715Y1c55LvO2rrTqujR/7IGD0kLRLpLdQI73kCUK97/NFohO/t7Tmxd/cupb2hUQm5Xd75UsEnSySRzhSSS3t7LmsMB8dy2XQpXxQLzaGG32nA5s2bO9t6w63dz+6dKPhPzsX71cYVBnZEERXpZimGpZEV+S0KXjeJrmKiVzHoNfJ/zMJZYS6S5D+BOBZ0xF3XGsZXMcElVw0ks98FODT6VpuD9zwBzmLF0q7P1rIpodFpy0Q9QiaRSr5WyuYcnMD25sqldEWtzanVSszvdvR1tjZBPleaS6XTdprmf8i3rI2aAulinCIfsgtMyt4URF3OVt5OUZixC4ZumFAqVFAlXwW1quFqRsVKxQRTA4t9xBK+9TV53eHDBoDTSTHuQCKXVedrmcQ+yM/GF1/0LdYA7+kwkHrd7q/pX/5+v53/fQaoqj8YFBEhDp1CHrFYfJzHsDUpVf7K5/dt1GQpV67WTmZEOaYYdE03TQOxLGtoFDF4G3a3LVvbEKCeyuKm30/RDUXIj32AF1w04jlCdDOum7XvQSEjgpyvYLWkYr1qgKpgMDRCdPWMqaAwoGCXjfa3RIFUCoTz2rFcqZGZoyVcFd9yb5B6rwu/u7Nt0wX9Sw/GEws5B8cxAs9MlKvKPh2xz7s4+u6VLU1ND+09cvlsMqU7A02cL9LQwbu9q7xuz7WGVLqBpQx3U2PT7tz8LGCsuhHDrQpHo0qeD47MpXLtM9PTHtBlQXAHQV964+8ROb6H5Es1olQlrJVlXCsqSDcwUSoG1iUTbBS4Vlx7t5Nnv5Ac3LsZ5k/XsF77L+9uOZdvTU7hPWsCLOFzPE/1tjffORmb3TE+t3CspaExKCly2UB2iuUpfWO3Z8ucWMyKimqu2rr9q3aB+UvNNK3gDBhQQfDaoVYqQevS7kuDTWFITYyB1+MCj9fjXN8U3tR1yw6tYHLyX37rB+W508MBbmbXl+iV12DwF0aNbKmCJFE0dY8EWk2jpJxM6R6TCjS5SbQ7X8H4e7TPxxsLUPuvav+tEv57VgOcjfn7lvRudzlsTkQz9kox9xICapkjGHnQ6/G0tDVGlPFTQ9tWr+1Z+sLB6d2RaHSUAHFLSFC4SAPSRBHZiYE0XQUrexSNNoADa8jOAuro7IBQpAHzvIAsYU3lVfEfHvgpQ6p5O3BOGa248jEIeR7DuVKBVCtVHRGMVFFCpaoKHo+dC0TucBqJj5ZNx99UDzz2z3huxlh8YUKAdniRu2vVmuLQvgEg/0MU8QbxntUALMtCNBp+iKOIyjP0P9x149WZE4f2DYzEEvcLAc8HMwszHdPxhOviyze38578FoSIm0aMYTd1wXLtW2/cCTVJWtQAoCoon0pBuVCBoNMOA6emwD6TRC6HHXRdA57j3RevWwFP7z+MXUi3Gyd+eSe9fLuHaVn1oqFW0v78+OdqwEhG19pv07xcJWJxm4tXw2XKsxzcbhZoxgDjDAcAMRQWfDxYJeeGRQCLzG/eNaDei0e8Vsy/bvXyFdGg94t2m/sKl9P+2ImRsZc29y99vJaKPSmb+CFvU+OO2fnCTyme4+N5FcKR8C9d0QZDVzRuITYLTbfdAlJVhvLwMJiAgAsHwUymoSUSBG97CxRn5yDAMouVw4pYhlVr1sBgIgtPv7gLc4DBqEmI8rfOQ2v/UScurFWnjrdge9MUWrb9IeJylfXpExuJu2G3Pv7KQ8bJ/VlSLZPFhNL/lDt4M+sB70Hh9y9fErj75iuH3JR+rSZmnnE7bJ9rifovfem1ga8kJX2114kcLge7ryyrR2dm08/5eLYt7PUgkwA2IlEIbtkKQPOQHRmF/puuB9XpAO+qFcD3dEJ8egZ0noOCpsNsKg/O7h7w9/ZAej4Bd+7YBpdt3YQUE5DNF8VITDeh40/dUImN2yjOpgk2tcs4+Yt7IT21nKsqYeHErm/Ynb2fpaOtPGVzURRnoxZJQNNAN/ew1NprV8KqK1opp/NNb+T3DAHQ2Wpev4+95wM3HtJKGby8qzUcdPPXnxo5/g1Nx59tinqWlTTjOZkIpFQ2CmJZUscmYkoqk/lJ0GWTSbHI0MUSdrQ0QbYmg1Qsw9DxQWi89GJQfH5QAUBnWDg1PgU504SsywkHJ2fgdDwNhUoNxkdGodHtgFBDE9BOD7IHo5jxBrBAGUGKYbmWq2/GjdsuQubhX9zF5ycudPt8fl6ev5dp3LSEsntpYlhZRQIUywLVufHyzgvXDzZt3XqE6t4afbPrwrxnnD6KAhoh+MKHbv2xKWa6gm67Fu5qQRibDdmSvPXkxNSF77v6gi+omvbYoZH4IKFItiCZSmfXSnelJpVKRfH3wk7+O7HYlLEgVZAWaYAVF2wCZ2cbVMJBiK5dDXsfexKiAT+s/MJnIJvJgcvUgXY44fSTz0I6Ng3pcgXmY6fhqi1r4fnRGVAlEdlYGrChg6EpIM3EEOd0AKY5QyVg8DaO4ZHCIc3sQYJwitAsRUydUA4HRWjG73bbQdDUcJJGPoqikm+m0ug9QwBr93/+I7fd0+alb21pCCmhYEAYG58Ah43RGgLeK0pS7dCR4enPh4IN4XhWm8YANOvt8NAsYruCrX4bx5y02agn21uj18U4h4GCASZ1Yghs8QQwLS3gbYhAw4rlsPDwI9By5CjYGpvhwP/+ESxZ1QcrrrsSjnz3B2CwPKxcuxZsNA2fv/Va+OWeQxCfngZWwICqCAoDR7EmVxDjiWTN6MohNX1yB+cKWmlklaIIoQQXIqZukpoOdGHm6ZHD6EYwNR2VF2LGm3QG39UmwNr4VoGHJfyP3nnj1Wt7mr5Ng6o0ht2CqoiQL+QwTdNcIZ2eaA/7vhZgqS+8tPe1U5j3sBpCXtbj/UyGDoSaOnr6g17P305Oxe4PeRxJTleQg2cwYRjQASD18itw4k//Gnq3bgZP/0qY+OVT0Oj1QNf61ZB4fhek9x2CZbfeBK8ePwmKiaCruxeCRIXLl3WD3ekB1u4Bxu4GBAixiAWkVELk9J6LGMFlvToAxZqIc7EUb0cUJ5w5WogNlY0jjz1hHH3qWWN2TPmvZwlvFOi9UODx8Ttv2rF9w4pnauWC0tfbIdSUGiQTCfC4PWg+Pid6IpGe+Ww+1+hhu/q7O/wUx7Bc35W9IudYpQbcX8wzcOvBI0culMrl/6WrEnIjCuWPHQdd4GH1xz8IdGMjQFGE3JHDsPyWm6BWVeD4j38O3ZdfBHRbM8y98DI4WRbart4BC0UJxk9PwMMP/wLUYgYu3rgGdN4JvD8MyOECxusFzulkaJsgcH4/MlmHDA5nHtmCNtru5yibx+IJkFqF4FKJ4HKZgK696TV615oAy96bGMOd77v26v6upmdOHhtQNvb3CCzHQjadA4qzwemTgxlgbaSSTRl2ygTB7VKqyYrHFwxdHgct5PHxWzhNjKTnFuadioJZXugFigG5WgOtpRP5OtshdnoK/Mv7wAsAw08+C62EBk//Ckjs3w+O9lbov/t3YOAfvwmDv3gceq7YDguZfYDTM+BwO6AmFaG/sxsG01GoEAQ2MEGrFAEJHFA2O2bcbmQWEwztjkZMpyuBGJahLXNWQSo2DJMs1qubv9HhEHq3hnuW8N93zaWX3XHNRc+k4rNKe2NQ8HlsYBg60AwHE2PxHKZd6PRcKjQ1l3YvXbrsdJpveiHJB79UUYpfCppTX65QwQPFZC6nB9pGIkEf6u3pwjTLQzGdg0BXB2z+yIdgaGAIWlcug0IqCYFQEMR4HKLL+8DX3g6p514ETpIguKwPOMTC+BPPAggCiMBAIBSyQhPIxCdhW3sIeL8f+PYlwLncoMoyMDYBUcEABpA5GoofZlYtbUeeiJfmbQzQPKIcIZoSXNRiochvUDLGvBuLO6yNsWpZr/fWqy998bXdLymATY6h3It1GNVqFYZGYoZiMjCTzQaz6Zyxde2qBzO2yE/3L+Dl2O7e6eXMNrFzxw9wvopwJe9FZrW1a2mfEXLbUUmUsN9pQ5kXd4G8cR30b90IHM9CPhYHezQE3uYmmNu9GwSeB8PpgsMP/gwQjYDmBOA9TkDeACimAePZeWiw8dDY6IJtK3qgl3PDf4yloFCTgCuXgIlGwbftQkQcAmSefex6bCwJomj0Xj01Om+VmVG8QGNwW4UjJlEqZLHQ5E04gu86AliLYOXfl7aEPnPywCtoeGwK1q/sQZ0djVAslUBWTJhJlxkDU8HxiWlYt2LJftkR3v3ieCZjcMI1Dl5uq3mWf1ckeBdbmbpXUUUmGIqgjhYnGj56COwuD3jtHNYNgg4/8CO44V/+Bp77twfAABpEQgElSaBlM+Du6oaOu+6Ahdg0UKa+mClEySzUJmPgbG+FGgMwL1Ug/ep+SM3OQ29fD6wRIrAvEAYzGATweqCxt2ORXOUTx8CuZi6U+M7L6EAkhg2jAoal/q1SAkyw9QsxCZjmf2qDN2gWmHdjsqe9ucHeEXX/XiGTMS7Y2C9sWNUNlUoFNB3gwJFhLKkEL6RzjM/tLomMe+ylaaOiOvyb2wLkd8tG+LvJjPyvdpvSTly+gmBzAW/WXGF/M9q8dTMUS2WQp+KgqYCzE5Nw6pnnUHN3B0yZGBpam6Htws0wKWvg626HcqkMlcQCGLoMPd0dMPnQL8GGMRSrIiiGAQKFgKYF4PIiFPYfhNb+fmhrbIWxShs4fE7IxmZBWpgH3uPDTlcIqunKGsYb8uiVig6qaVIEEzB1AoQjoDNnCPBr+gPo3di6/cWP3vZAd1OzM+JyFzav6gYwFOB5HvYePA75koQrkgRlUc609vQ+eSRDIYVmN7ZE+O/UquafzZwcvJcBjsfYNIk3eoy1OWB4bKShxjsgmUwZp0ZOyQ3h0GyDz436mqJo9OHHINTaCKFVy0EZHIXM87uglMuBGQzAaz/5KbjbW6Bt/TqYeOJpCPo8UM4koXXzBtj4qY9D6/XXQudH7oZqMAS5fAlIqQC9PA2Brl5AghOk8QkwklnAYhWlDh1HKDPdRnE+D+1tCyJ/WwA5fAJhWYoLNLsR71yUJWpcIthWb++ieDv1niLAWcfvk3fefHtvg//W3OTUzMVb+500GOCwOWAqlgBFMYEyDSOTTKLurs4nTsvORBYcuKNVuBdMsvv0y8/fR9UkDUzNILpp4JpJ0zQFNSTg7zz6HAycijGnYnE7EPXRUjnzPtY09zQRRj58/49hy603AIVNEOfmofeGq4FEw9C1cePiaWCpKgPX0ABMKAicYIP0yeHF8HR4/1Gw+70A9OIPkMoiFA7vgxUCAzZPECjNBJpQwAo2xHA2INXsEsoZXUL7WyK0NxoChmfAigsQohejAZoGoXv9hvYNm8bA6WfeMwRYDPlMEy69YGPvB66+4GexoZFC34Zlvf6Q0y5WZTg1k4KjJyaAphCeL1QEbyA0mQf+xPFY8vlQhL/UEQhC7NDh27AhY4oTWCyLEiKE0IjhdFkGUsrD2Hwa+EhjYdmyntG5grwrNpN5QalKfx51OR+3Jxa0kz94EGNEQXD1KlDjCzDxgx+Dnk5D8sARsGs6hNtaIXZ6Epb+7udBqqhQHBiE9pVLoJxMgTKfBMaSBMHAYA1gdAC63XZgg41AC04QvAFAnB1TtZITydmbUdjpAsBA0TaWFgKCUatKxIoGGA6U0f0Hx59+wksK81aO6t3vA1hev7XzO1ubbV/58G0Dp4dH5IZGv9DeHgVVLEBFI/DCnmPAcQ6YnJ5DS0LOZDHQ4x1I6xFHs+NKn8/RO7nr5RWViZM5FIjSWK3pyMQmrug67Q4nkbctySu5hpqJ8eGZFN4YEWaCdseOjo62LevX9ttnZhONQqXAGJUKBDu7IHPsGNQyGaB8QdAzefBEgjDx9HPAWE6D2w3O9auhVzPh0L/eD1d84w+gWlMglSuDUhUBCTlY0tcLwYYmoGgVKm4XzFoaIJMGsuj5OzBODFxGBd/3GuFyeyhXwMMwAoeRUMGaKoKiEJybsQT/hoR/3hPgbGWPwHPUH37qg4/lFqadnEBpvrCHK+RzUK7I8OzzByCfFXHFFDWe0D8qClEyJHOd9qjznpbO1mDitQMbkyePjFAsB6BqmHJgQgluF5iYprTUGNO1bTcz9cKdjCpDUTeDEzJzTTo1tbtSzl86n4jLTU1RI+wRgNEZJHI82DkeiMcFa77yeRh44GeglUuw5u47ITs5DZWyCAsTU2Ad+HRsWguDP38ENn7wTnBeuA0anAJM7t0D4olR2EjRIIgl6Il2QTncALnEDLAsh4jLg0k24SaV1FLkth8xJVkFYhiUyjGIttMmQsbicfHZjqJ3uwk409BB4FMfuOUTNk3cYeNACgTdHFA0jIxNw2PPHYRyDWPe5UIMTYZsze2JmMLHNKIpLT3twdzk5G0TB/cesZ5FDN2yoRTFsIgVvCFBaLyBylKXGvPjPWJ+YTFpgwgFMxVNI+HGgM/lMuSqbJ+KzbplWcaGImMxk4IaooGIVZg/fBBW3XXLYt6BUg3ov/tOaN1+KUSiUZgZGoWWCzdCcSEBY8+/AO39S2E2l4e2Sy+Cot0BJydiMDs7C7bkJKxDCiCWBcQzQHEsIIcTjMLMSsofDNNur5fiWJbwLE3xNhqsegFE/1qRADq/7T6GHRdt7r58bcd3TJAUv8/hJCaNrVg4NpMzqiqBUNCvmaoCazatlTSHn8pU1UBrd8dObX7ur4aeeORhtPSiCKy5oQ81tDIUw1NErWFdnJk0chN95uTTn8WJoXU0wwMxTGTlWjCwnGbz9F9z1eXMVRdvlpf1dOd4gWfAMJC7uRH6PnY3mL4AxF8+AFWMoWXnDjj6k0dBnJiFqSPHoZTOQfvqlcD3dMOmez4M8Vf2wMKuXeCyMZCZnIKeK7eD6vJAtKkNyoU8mMMHoZXSQKcQcDYHEkJNmMwNbQBJvpBpDPlpd0OY9jR3Ug6fDQluGmju11pHdD7b/ZamKH/3NRftY42K1t7ayMklTaRMXT589DhkSiJjtwl4fmYO0Q7+vtka/8RYrsr2bFv3ZZ5GDx/5xcN/BJ4Qcq9c8VLrqvZRtPSS7cAhitQkAwzWhvSFC5Z+/HPYtfYiw9AxMA47BHq6rZJsPC2ZeFBl0lVdHVrat+ZfEeP+JAJ8RBwcBF0UceutN4Pp9oENASy782ag7XYYeeQZ2Ljj4jPe/yPPwuiPfgmCxwfLL78IqJkZ4PJFwDUNRA2DxDsgMZ+CSCgMIa8brt24GrpaW4FyOEHwBwBRGPDYKzcTR0MP8kUuYUKt11CBoBM5/ALFnhlT+4bXEs4zLJp9AsBzLHz57ut/7uOUiM3JoXJRwoVcqSIpsn1+IQcIMXhqNoF8Xu5FLtI0dXA0Xu5c23erwLEn9vz4R3dqmkYAEaB4fpKz26znRogqmUQumIDLZZ3Yh+YPvso4HDzH2R1ANA3kUh4Ylxs5Opegl6bLoRNz5U0DJwc/y/vaHK5I+4+jAQ+efXU/NK9eDsKSLkCYwPjzu6H/zpsgP3AMUgOD0NLXCTZZAmXgKBz6m29C8tgwIE2D2tQsGAwP4yOnQRZssGc6Di/sOQSarMD8+Bisao5CpLUTTNoy9y6gSqkm86Xv/IF58IE/wqnRHXzjustRoN2HBC+zaAberQRYrOsjBL74kVu+2NvgusFuZ7WiqMLCXD4baYs0jY7FUDIrQjJXQs0B51z3plUjg2lzVXBp1x0ul9Oz5wcPbK2V8saiA1nM4dKeF++MHRpeQmIDD+FyhRBsELMwXQJX8IuFucpfZhO5nxObK4cVBcupDGYQAx6/H1h/FEn+ZhgfHwnGJo79eSI+87VEKg2soqHTL70KK99/I4zH5mD4+z8FyiZA18UbYebRp6F6OgbENCC8YR00bVy3aN/59g7wrl4Jio2HlR96P/g3rYH+D/0OlH0+eG3fATBlCRq9Dli7og8I7wDOIgDDAqrlvRTWGRTtmqQYGgNDI8ruZYBm3/h6wnkEa/q2pULvet/VF160qvMfVEWWDYyYTLyQF5ysbeDYUZhdyGBADO7yMOnm3tbHnpyCCERbVrR1tV3x2k9+ukTK52qLPfuvO0okPlzDA0+dNqaHFTD1RQeK1CRTnx8YB5L+JtUa+S4JtQ1xDg5hTUJyYhri+/aDIWuAWpfA5u07cC2fsONqNhhpakZuXYPMcy8CLpbAb+rAp5Mw+G/3Q2EhDcQ04eA//zswZREy82mgOjsgcsWlIFrjY7wOkMdGoDY7A/npOAw88SKA3QMGw4CYTQGtK7DEwUFXUwuYNhdYGUrE2zBgHVOARYqvxK3ohbK5+TNFI5aqpN49YeBips80YcOqZeG7dm7ZW0hOKA67235gzzG5q7vdY9K6MDufh1LVQFVR0pwtoYFjGerGlInm1qzv2Hrq2WfWlubipf/PwAbK6rqxvnjdc7Y6f9SaiVVJQ86om9C8AJG2fQxdXWbmaxKUEh1skUEa8KC0rANf03K0pZYBRhAgqSBYSM+Duyri0//yHYtl0HLBJght2ggL41PQvm4N6NkU5A4fAd5UgWTSi70FcrEMhdPT4MhlYPr+B2DF5z4DSacdvJIMpcQ0lMol4LM5yEzOwOY1WyCZ6IYaz0IxNo7oQAiT6T13wbKdC8jleAqzAktxdkTksvlGogF0PtX0BQM+9mv33LFvZmzYoIDhRoemJJvXx0h6VRgcnYaCpBtVUSyFg15tjg50LyjsfHdf+9a5w4fuiB0fOP7/O62DWIv0KwtFTCB6BRNf0OUIRv4FkLANEByoNF/8VXrlZbsJNsFUJYBKCoqxGAyXdbAHI+BzOQ0nVgsuSpOcyEBCYg64SnVRVU8ePAyWdokdHIDCbAJsHZ2gEYDU0RMgTswAOF1gW7YU0Mp+SMcX4PTTz0Iw7INjL74IDMfDXCYH5XIJVFWF6sIsXLC8D0q5ghUKQcvtd2PP+g2CkhhbRdkYhuIEziIAMMIbWttzngCLBzyvV/T+xRc/+gBSSj12mwD5soryBQnCET8zPZvCmZIMqCKe9rod+faVy/eliZ1q7mhbrSVm7xt86YWfveFRLYQAWO1eFEMxYDSCmEdGamEBcvOzlM05BU6vSLAOqlYGIx2HUwtFfLBIjGLN2Ovxdf24u2PL3wc90acjLptm12q4ms1AoLcbTJYGm8cBYqkCycFRsCoA3TYBtEIBwiv6oGHDGmjaeTlc+I17IX5iENiaAiuv2g75cgUM4GA+mYK2jk4o5nPQ7rPB5vXrwaQ4yO7ZDeWRQWB8kThQPAe810HxbpZibK+bgfOcAGdDvs/edfOHlzd77zQ0WQn6IriQLSnNHVHn+OQ0zGQkZBbFx2UDM65oWDyU0njKG/A4GXL02DPP/Kn1nF+nZJqYJuDpE5n89PRObW7y38zETAbLkkwQqhBOqFkl3K62Vkw4BoBmUL6xGx2NZS4YPjlwIxDb9lXrLjvW2dl1WgCMDM3AXTddC8Htl4BrzWpY/6d/DK4VKyDQ3Q08b1s8L3AFfDD6s0dg75/9Hbj9buhZugTGH3saeteuAr61CXifF6qEgnQ+B02NUWB0Ga65ZCv0LV8F5fExRKUXAFihkeJd7sUec0vuNLKOR//v6wvnw8i2Czcsv+Wy9ffHYxOyNZB/ajxmqXlIJLPG6XgGZbPlf1yoGqGm1nAhUWPcE8Xq0pDHZj/+9NNXaTWZWO3Uv9Y5OSGAi0mDjB7K6mPHkpSi6qBrKlWtIE4TGyhCoDw7ixwBL0RaG6CiAypF2rhkbr7luef+fetCfOD21ELMSheCPZ9B4z/4MbD5Epx6/FkAuQr5bAEGd+9ddBQpjls8COq8dBs0XnwxZERtsceQTuZg6OdPAIsxiKIEzmgTDJ48AeOjw6DVZNArBbjxim3gD4VBURRA1bKHMlSFMk1CFgfXm2dayc5XApxx+jD0drR4v3L3TcdmYxNaulC2nxqZNASfLTw1O8cURZUxDXgQE3D2dgTW2jqXigmdjXT3dTdMvLp7TX4+UT3j8b+JkmlDAywVsFkrGFgpKbhSFM1qZdpcdtmPCKINvVLCZqUE1blpMBYWoMo5IbD+AoiEPGjwxGu9szNT/nwmCZ0hP5QOHACXxwXr7voAxHfvg8vuvAm6LtsK1XwOECEw+8xLoKUz0HfLDeDo6ob2m28E52WXQnEhCcb0LDAY5MTUjEQTAqViGU4ODcPC/ALYKB0+/6mPYrvLjU3el6B007Q0EsXaGIq1IUDM+UmAs06fy+lAX/vMB3cn56aYklRlygVlrrW5UZqfT2JC2xhSU4+DrgWCbrolunzpP5xIK6tdfr8zPXrq9vjI8ORvPJyRmACaSsxaScOldBmn5+aNgPsRWLH9ZaRWUSE2hecPvwY4N79oyzOCC5au3wARrxeHvB6MsW71dOA2uwAjP38E2jqaIP7sLhj47gOwZMVSsC/pgvbtF4E8NwcHv/V9GH/8adBmZiF9YhCiHc0Q6esBBgwwqmWmmk0yhlpb9AHm43Nw8MhhePKp5yAzO41uuOF6MKVsCSjDIIs5IGsBTfJG2sfPWQJY+Monbv+Wi9ZXK5qOC8Wa0tXVjNKFpLtcNdB0snTwZKL0DYrB13T2tY4dWtBuzpRkSx/eP7T75YcWJ4D8ppM5CQGiVQkpJXVcSVWxWK5AoiJC54ZXqK6Nw1gqIWJqWK9VAJQq5KtVMEON0BgJo5ZICK1d1gtgqijisgM7OQFz+16DTR+7E6qzs3D8wZ9DfmIKxEoVGtf1Q3NbIwT8TpDHR6H0ystw+nvfgdKrL4PL4TAksch5HYLgdrqB41jgbYLVcg46RcPug0dBMggSwFAWxU1hawiVTnTFamU9/whwtpPnQ7dd+4HlHdFPzc4vaKlUDnvdNkCM3pTJSTidLydPzaa+JNi4L65Y3fpg0Ra5aiZd6Yw0RIeHX9n1ybd0JCu28gIywZW0iqVUCUvFCojZOarvkucI0BpWFQDTAGTV9GMCU6wDVmy5yGju6N7l8Hb8Y0fL0tccLGjNThvEfvkosDYBWrauB6LVoLGnC9KTM1CYT4IqSeBzukDPFyHc3g4OjxvcLAPVqsjIchXESgXm5ueAWL4dz4GGAVi7E/ovvRylxCqWXY15mhOExUJRU1ucO3Te5QHOnvBduHnNqusv2/Cjubm4rOs6hwBDZ0tIGB2NGYmcxMTLxt+H/I5Pbej1iHGNL+0amvc1tDRx4/v3XF4RReNXM31vCQgGUrM0QaqKK4UCZMUyhekpav3OF4mmIK0qgmaq4HY6IGEA/PTgSXjh5b0rJ+LxrbwjqidTGcMtsNhbFSHxk58BXa2AJlWgkEhA64oesN5Xzhdh4dgISMcHMcqlwUPTGGgal4p5cDht4HI7IRyOWK4d1HQTOJfHah4B3uPB46MjQJcmr8NgGETXDNBl8436Pcy5Fu61tzS4P3nnzoNzs9MaYLCrigLr1i7jTp0ax4mCyuTy4uOIYtsa/MztTGPT3+0/kvq0u6XDm50Yv25hejr9tgxlxhiIphBSLeskM1cwXeEsuAWBcjfuJxRzBdE1ThXLgGenF32BGsMxTYIQnho5GBbzWVkQOC2ZjNvD0UaQwYRyWQLKH4CAyw6VE8cgGI4Ap7cAvTAHQjGNoi3tSr5QlfOZtJfnOWBoFjheAE03wUpMBkMNQHt8YA8GYc8zz+LS7ATDtdkiplqrQS1XJZqCFyuE38i6wzk0rNFht9F/8Jnf2a8UcgLGgPLJtNjX0aRksxk8mcijdKE0IfDMNBDtc87mhh++drp8FxtqEChJ/Nrwvr1PvSV2/7+DqQNWKyaRSgou5gukkFoAQxmHYGcMNBVjTcOWzfW6XFDIFUHoXg7hhkZIzk8IyVTC7fV5FsNy1QrTvT5wR6OgVGVgNR2qY+PgUKsQBg0C/uCY4Wx6MF8u2a3DHbsvCIThrVoAICwHmmZCKpEAwnAwPDCApwcHGH7ZZa9S4ZVPk2K5guWKap1qvhH7f04RwMJX77nze34WryiJoqZIMor6vLgkSsLA4DSOZyrAYzPB0fQdG1Z1/zCnc40Fk2lxM9TLg7te+kvrQra3exI/UauEyEUdwMRmTbsQE7uXuEJpU5GQqajA2J0Q7u0FjhVgVjKhc+1GiAQ8yM7SKODzyR6e07SkVQBKA6TSwCUXIGRzKI3RFpFlbDmW986ynsbn8tNT/Wq1INicrsWBMMG2DnC1dAJjd4G3sQkiy1ZCKpXEYwf2Ilt7/zDV1PsvRiX5Q5xLFUGpaEStveGlYM6VZM8n7tj50WUt/o9MxWYUluU5tVjS2JaId3wqYaRKMoNrlVclwjS0hVwzTCSaHt0fu93f3DQ38vKu9+mqQt72q1iIVWqpAcVSQJyetS2e0l+nUsePM/bAIRRqbjdqcounqQ1KJQXsDA2FbB7m/HZobWwERVMhX8gzPG83/MEgogWOoWVl1ta8/GcmZrYUU9Mr5qfHvBQ2gx6v53dpBi3WO9RqVeSgaSgszENL32oAtw9ohwumJ6fw2L6XkaN74yju3PgX+tTknJmey5PSQpmosuUAvuGPhc4Fp+/a7Vu2XrV11fePHB2SPb6AkFlYMEIRPzM2lcBzOYmpieJPTeCKHo+919kYOv7CcOpTvrYuYeLgwbXlXFZ5x+7hIRiIjgmNuJqou8YI8ezS5Nr9avuVv4sJJ8nZLKZMyqjl04DFAozG4tC3eh30LVuaswk8drsddh8NDJ2Yk1u8DTE72C7QCvNNHNG5kD+AHTwDRFfA6XLgYMAHPMsBhWgwalUYOrAXvM3WfUVlfOK5RxET6h1FfVv/Wp+bncWVfJHUyjKu5FRcyRm/zvg45rfdyLFiSUfoth1b9g8MDCmBUMCeSszjjo42Lpcv4PlsCUTFGE5J+g/CHttzbb0d34spzjWUjXKnBo+uzsZncu/0TRy4VsHGwvgRkSz/CE3pBq5KGmOvlKm2rb/IHnn6I/TgIQQMj2mEUDpfgLhKGYkTwxVJkhiXwymwQKYC7uATs9NjHy4U8s5gOJKVa1XD6ungOBbbHA5kt9lRVZHB4fYA4wkAY2IIdfVCJZeGkReeQPbmJfNo6aU/1+fj02Y2lSOFWBYXZ6tYLpmgK+f+mLjFHj5CoDES5L/6iVunpUI2RNEMQpou8YjWMAvBE8MTmgwct5AtXeJ20r975fp26dHx6rzMB++tFQsfH967+/vv/A1c1GL3DbL7EO1u4JEzZCfR9oAQathhc9t3qAY7Q2aPXowKU/3ACVgjBPkEHlZFXVDJLIB1hhCItH+1b+l6x4njR39/ITXLWATmHE5ckyTGyieEGhtBNTXADAMGY4PQsjUgKSqkUyklPjKIsL99zrbxxm/qyfikMTc1g7PTKbMYr5iVvEHkIj4zRo6cuxpgUWgAYBN46p4PXPskrlUbCFCaj2dQqVKDMoO9w0OTuKoZnKLVXuU4Zlubn00fmpOHcwr7TUYVd40ffu3ffzvXr5HFghFcyWKsSjXGUDFyCDTlcfGOai5agdDfcl3bjtoF8velhVgw0NmNK4UiYn1hHDBUTVcVaGwMeqenh7YZuIpZlgZCYaTWRGSNmwHOtjhlTNNqILj84GhsBWSzwei+PbiYTDL2Cz7wGOVv3qfNxU4ZyZl5UkrmzEpGNqWSQWqlxSjk18U77gOcFdyHb7nyT2xEvQIbpuLgWK4iSpjYeefJsSmGFXiNYSiFUCTf5EJfpHyBsRN58jmXyynHR07eqKvqb/HqLfL6SHcMWC7qOLsg1WJjP5yLF2+BTEE0ipkZqffa+4inYR7J5UUn59ipSWQQyAf8XlGWxA+KYnY1y2LgOaubDIPb518cGOHwB4HxBkDnHcA3tYC/sxsOvvIySKkEcqzcvpty+Z4wEqdPGHOnp3E2ljQLs2WznFKJnMeL5WxvAsxvY1DjjVdedGV3g/c+2sQKRZlCsVwFu9PFFPIFCAQDWCzmUFExX+I4mhYC/v1p0/1Zm5t0ZWamNhWzGemtnJb9pmBpHktNy0VMsFkD1apD8yrYb1incTRdmB3j+i5/KDN24Fq6NNVVRgCy39lElSqQys0ARSPF4/FY1XzIavkS3H5ckhWgXV7UsGo92Ip5bPUEvPyzB1G5WFSEztUzpHPdo/rkyXEzOZsmYqqES0nZlAoGUSWrRfzNfY53kgBnhb+2f0nb1v6u58RSSXEIDFcslsDjD8N8MrO4sxgK40xFFQnFPdPREuJG8nLNdMF1LDH+fnpk+PAZDXIOXL9GLBLoQOQCMU1FI0SzhjRgQqxkPBA6CE/zKy44AMrGjerBH385yQQHr+61d9OxSZQpVISKTuGqRQCggJIl5O1cCuDw4MGjh1AyNoFKxbJGC3bF4Xa6SaAhp5fmYmbidMIsJEpYTKtEKphWxPBmp4O9owQ4eydPY0PIfutVW4+pomS4XC5OLOYRzdkgMTeLTcSCz2XHFNEg5BYOY5pfGEvXTudV+n8F3cgYPnz4D8+1m7cXYUlbrYEJOZMYVgeoUQStomApWCCVlkamOapyke5rZopKMU+FY4am9hoUAk8wiIhmAuvwAhPpG4wXyzix75nVcrWGOcFm8B4/gtU3/UQ11Cwpp141x149aWTiFVxOaaQmEsthfCvwthPgzI5ddPrQ71x38bNulvbrToeBDQ1hCkGtJmtaVSyybn+gqlTBJIRBWNtYYd0naoK7jWfwzvjo8MXlbEY71+7d/T+wdqFSJRgbJtFUBUlFHbnyNVNXTUJVK7QjeiRYHbn71VM402pv0iLtjWmJ82r5GjulMMGnCvnKvMm2Opm+67e6BIeMKRgletVHNH0Op04eNKZPZ3Epq2KpaC4K/y3Meb4jBLB2/+07L/5mc9BzUUm0BjCYHMcgICbGpiQnszWIEK3EUJoMmmH8kyva1OANdTpnp5J/SHTl4fmpyT3nrPB/FboK1tUvpi4bxFAxMbUcpYoy1bz8pzXfsgYdI1m0tfzcSEkZ3eFqBkLRoGdSdFW0rqlJgZ2Oadm0TMSyZDUj4mqlZuZjJVxKKViRMGjWzSFv7RpQ74Tdv/bSzXdff+n6BwqFsiKWi0zQ50ZiRULlTFHWMAV5RbE7sHIinSve5W7p2FDAtiaNd92eL5Wj8eETrcVstnZeEOBXgRigeBtFOXw04wvzKNTqQTTHYKmqEtbBM66AxxRoRGkUhfPzOaLKGoUYhqhijahldfEKGaVqErWCiVY7Mw/wbQDzdg9q3Lxm2fqd21Y/UC6V5ZIo2W08j/PFMiolU0mKFXAV6IZKqQwqpX1znrLNVAqVJonnT7MIf31+bOT8FL4FbABRqoRoiqHLokllEgpF88jKBiGnj8V4CesO991bLYo/MOWshItJmZgGIbqGiVIwiaEC4Nd7Ft7Gz868nWneZT3tnbddueWIJFaUqoaFqNcNYjGNknPZgqnrecTZV2TnF6A96DzOR9vTkKv2T8XFKufivh4/NbQyl1xInpfC/6+RQq1MiFo1ATEmRdMUrokmAE5RQVvRyJSSRi5WIapKziRz8Bmf4h2KdKi3a2hDS0PId/cNFyRcLMdVdUBehwPhWtEqbdKKWTFWpu3tRimrBO3UoxXB9b05lZ5y+ZqunS/KH4qNDn4yl4iPndfC/59w9hIo69oXyrr65c3P+j2nNMDZwo5w0MfffdMlR8yqKKTFGg5HokiqimBl+5RSeb7GOdvjM3FhS2fg+Tzt+LZkMirl8V2XV8l3Rw7t66qWS/F3rfAtnP1ci1U7b49tf8dTwWcFZpVyf+K2Hc9TmtylmcTweLyMwCKYT+UMIlVPSpQtkkmnhR4/Mzqnwl/nDDar2MObqorx3eN7Xg6+64X//8JvP6fxlmiAs8kZmmHgk3dceT+lSxdrOrZu3+asSr+xyVlcLZcfKxC4rFwo21v9wk8MT/Bbuj3kwKznK/mSdP2pg/ubK4V8+b0jfAvk/CfAWQ5bQrvrhku+HnKwd+cLskIBEoIBN84UK0gtFQYVA1+WyBaLXoH+yLwGJ3kieEoi+WheTr1/4dTQ8mI2k35vCf/cwG9sAs6WYN++89K7+tvC9xXyZUUSq0LI77Lq5JGYzxcUTHWnS9Jph9OxU+HtAxO5Ws7Z2HujzvJXZ6fG1+ZTyZm3vJS7jrefAPTZ072rtl25ZXnbf6RTeVmpqlw44MVFqQazs4mMJNf0TFHkRFH6GqKYQKFSq3YsXXlFScF/MnNy4BOp+Oz421rNW8fbYwLOxvoXbuhfd3F/93PZdEZRVN3e2hxd7Ek8PDSZFMtSiqbpNVjTbuUF56cbnMwj2NtcBdb1ndMnBz4+Px07U8pd3/nnFwHOpnh7Oloar9m64qgoikZNViHgdWoMx3CxuZRSKpQSDAXLtVptMyXYL9/aGh71dnRLmYXqd+PTM49Onjh2f13456EJOCv8hnDQdvuOLccNzbRm3MhEUcvugJ/JlqpWyKcggja4eO7T8wpEG3yOKdnuHD2Rqt2RSqRJbOTEp62awDrOMwKcvZDB5/WyH77pst12FoWlQjnjB1iwB32BhXQezcwmlIJY80om9XCspNtWdwSbwe0ZzpuulbNzyVWnB49tV2QZ13f/eUaAxSwfIVYDJPrYzZe8LIC2SVN1w6yIC4rX1yrKKpPNl3E8lecI4Nmarr22eUnkQ96AP85Fuy6ZK0pXzZ4+dYksVeS68M8zH+CswOw2nvrErVfeH7bDhcDYNDURK4LL3j8zn0GmqStFUWYwwQxt4p/0t4a2tbQ2/KLiag9Njqdvnh8f/WihHuuffxrgbJaPsbJ8t171N30Nnrt9wQhI8wsHqiDguVwJxZNpXFMUuVypMrqO/6k55Gvs6Wg6iqM9ntG53D8eP7T37+fjM8frO/98JMDrv9918+Vf7Y64vmwVsSzEErsong8Vda2hUBSxx+PGZcX0a4bxtYDHXetocraX3WHv0en0J/a+8srXU7Oxp+vCP08JYNn9m67YcvPm3uhfWsPSF+ayr+o6yLRTWKbWFMPjdmLN0BnKUL9FM/zJlb0NnnkI7D86Vbx14LWjuzJzs/9kPace65+nBFja2dKwriv6y1KpDPmZ5HG5XJnhXMx1w6emMcMxBqFp5GHQMMuwT4f9tqjub3isTLkuik9PM3OT43dZ411/k5st6/gtE2BFR/hPMEVDYjp5olySXw23Ru5OJVM4GPajZFEW5IqE5JryMMcwd3hDoVgso904MTl7YWZu9kK1VjMXfYh6zH/+EiDo999WmJp8ZHRw4j5b2H9rJpsx3B4PVLKZ2aiXL0QD3nvmCoq+qq8n4wx17JieSXy6mF64s5DJvIfO9d/FYWA2mfZmp2dfW79t2x/nxUKTk2U1qVLV5kW9bYkz8O14SUyu6YnwaQ2mh6dmHizncx+LT0781Pq3deG/CzTAxHxmU6S7+5MMZayTy+J8uSJyuZJo9/HC2Ol4/mC7x7FJYxwvDScKH1tIxP95ZuLUv78zr17HO6IBMlVjajUHPcnJ2G4D1+J2gxxl6ZCQLlf3dUTCnwt4/b/cN1/8WLZURjNTE195S96qjnNHA6Sy+eLxqeTGrGGclDn+JrszUMvL5CFBsLeGPO69ScS+P1+udMxOTuwwDGNxVk8d5w/+r9I668gFAl7Hkmb/p3tbWyFXVaXBofGfhJubBIrl+4cGh19WFGXR46/b/TrqqKOOOuqoo4466qijjjrqqKOOOuqoo4466qijjjrqqKOOOuqA3zb+HxaugNZLnbX4AAAAAElFTkSuQmCC"; public static Sprite GetCustomIcon() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_customIcon != (Object)null) { return _customIcon; } try { byte[] array = Convert.FromBase64String("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"); Texture2D val = new Texture2D(128, 128, (TextureFormat)4, false); if (ImageConversion.LoadImage(val, array)) { _customIcon = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f); return _customIcon; } } catch (Exception ex) { ArcadeHoePlugin.Log.LogError((object)("Failed to load custom icon: " + ex.Message)); } return null; } public static bool IsArcadeHoe(ItemData item) { if (item == null) { return false; } if ((Object)(object)item.m_dropPrefab != (Object)null && ((Object)item.m_dropPrefab).name == "ArcadeHoe") { return true; } if (item.m_shared != null && item.m_shared.m_name == "Arcade Runic Leveler") { return true; } return false; } public static void InitPrefab(GameObject baseHoe) { //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Expected O, but got Unknown //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_arcadeHoePrefab != (Object)null || (Object)(object)baseHoe == (Object)null) { return; } if ((Object)(object)_prefabContainer == (Object)null) { _prefabContainer = new GameObject("ArcadeHoe_PrefabContainer"); _prefabContainer.SetActive(false); Object.DontDestroyOnLoad((Object)(object)_prefabContainer); } _arcadeHoePrefab = Object.Instantiate<GameObject>(baseHoe, _prefabContainer.transform); ((Object)_arcadeHoePrefab).name = "ArcadeHoe"; ZNetView val = _arcadeHoePrefab.GetComponent<ZNetView>(); if ((Object)(object)val == (Object)null) { val = _arcadeHoePrefab.AddComponent<ZNetView>(); } if ((Object)(object)val != (Object)null) { val.m_persistent = true; val.m_type = (ObjectType)0; } ItemDrop component = _arcadeHoePrefab.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null && component.m_itemData != null && component.m_itemData.m_shared != null) { component.m_itemData.m_dropPrefab = _arcadeHoePrefab; SharedData shared = component.m_itemData.m_shared; shared.m_name = "Arcade Runic Leveler"; shared.m_description = "Ancient runic terraformer.\n• ⚡ Zero stamina drain\n• \ud83d\udc8e Indestructible (never breaks)\n• \ud83d\udccf True Flat Leveling (no jagged bumps)\n• \ud83c\udfaf Adjustable Radius [ [ / ] ]\n• \ud83d\udd12 Height Lock [ H ] to freeze elevation\n• \ud83c\udfaf Reset to Aim [ J ]"; shared.m_attack.m_attackStamina = 0f; shared.m_useDurability = false; shared.m_useDurabilityDrain = 0f; shared.m_maxDurability = 9999f; shared.m_weight = 0.5f; shared.m_maxQuality = 1; component.m_itemData.m_durability = 9999f; Sprite customIcon = GetCustomIcon(); if ((Object)(object)customIcon != (Object)null) { shared.m_icons = (Sprite[])(object)new Sprite[1] { customIcon }; } try { ApplyBlueStoneTexture(_arcadeHoePrefab); } catch (Exception ex) { ArcadeHoePlugin.Log.LogWarning((object)("Could not apply blue stone texture: " + ex.Message)); } try { Transform val2 = _arcadeHoePrefab.transform.Find("attach"); GameObject val3 = new GameObject("ArcadeRunicGlow"); val3.transform.SetParent(((Object)(object)val2 != (Object)null) ? val2 : _arcadeHoePrefab.transform, false); val3.transform.localPosition = new Vector3(0f, 0.45f, 0.15f); Light val4 = val3.AddComponent<Light>(); val4.type = (LightType)2; val4.color = new Color(0.1f, 0.85f, 1f); val4.range = 3.5f; val4.intensity = 1.2f; val4.shadows = (LightShadows)0; } catch (Exception ex2) { ArcadeHoePlugin.Log.LogWarning((object)("Could not attach runic light: " + ex2.Message)); } } ArcadeHoePlugin.Log.LogInfo((object)"ArcadeHoe prefab initialized with custom inventory icon."); } private static void ApplyBlueStoneTexture(GameObject prefab) { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00c4: 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_00f0: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Expected O, but got Unknown //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) Renderer[] componentsInChildren = prefab.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { if ((Object)(object)val == (Object)null || (Object)(object)val.sharedMaterial == (Object)null) { continue; } Material sharedMaterial = val.sharedMaterial; Texture mainTexture = sharedMaterial.mainTexture; if ((Object)(object)mainTexture == (Object)null) { continue; } try { RenderTexture temporary = RenderTexture.GetTemporary(mainTexture.width, mainTexture.height, 0, (RenderTextureFormat)0); Graphics.Blit(mainTexture, temporary); RenderTexture active = RenderTexture.active; RenderTexture.active = temporary; Texture2D val2 = new Texture2D(mainTexture.width, mainTexture.height, (TextureFormat)4, false); val2.ReadPixels(new Rect(0f, 0f, (float)mainTexture.width, (float)mainTexture.height), 0, 0); val2.Apply(); Texture2D val3 = new Texture2D(mainTexture.width, mainTexture.height, (TextureFormat)4, false); Color[] pixels = val2.GetPixels(); Color[] array2 = (Color[])(object)new Color[pixels.Length]; for (int j = 0; j < pixels.Length; j++) { Color val4 = pixels[j]; float num = val4.r - val4.b; if (num < 0.12f || ((Color)(ref val4)).grayscale < 0.22f) { float grayscale = ((Color)(ref val4)).grayscale; pixels[j] = new Color(grayscale * 0.1f, grayscale * 0.7f + 0.12f, grayscale * 1f + 0.3f, val4.a); array2[j] = new Color(0f, grayscale * 0.8f, grayscale * 1.1f, 1f); } else { array2[j] = Color.black; } } val2.SetPixels(pixels); val2.Apply(); val3.SetPixels(array2); val3.Apply(); RenderTexture.active = active; RenderTexture.ReleaseTemporary(temporary); Material val5 = new Material(sharedMaterial); val5.mainTexture = (Texture)(object)val2; val5.EnableKeyword("_EMISSION"); val5.SetTexture("_EmissionMap", (Texture)(object)val3); val5.SetColor("_EmissionColor", new Color(0.2f, 0.9f, 1.2f)); val.material = val5; val.sharedMaterial = val5; ArcadeHoePlugin.Log.LogInfo((object)("Applied glowing blue stone texture to: " + ((Object)((Component)val).gameObject).name)); } catch (Exception ex) { ArcadeHoePlugin.Log.LogWarning((object)("Failed to tint texture on " + ((Object)((Component)val).gameObject).name + ": " + ex.Message)); } } } public static void RegisterInObjectDB(ObjectDB odb) { if ((Object)(object)odb == (Object)null || odb.m_items == null || odb.m_items.Count == 0) { return; } if ((Object)(object)_arcadeHoePrefab == (Object)null) { GameObject val = odb.GetItemPrefab("Hoe"); if ((Object)(object)val == (Object)null) { foreach (GameObject item in odb.m_items) { if ((Object)(object)item != (Object)null && ((Object)item).name == "Hoe") { val = item; break; } } } if ((Object)(object)val == (Object)null && (Object)(object)ZNetScene.instance != (Object)null) { val = ZNetScene.instance.GetPrefab("Hoe"); } if ((Object)(object)val == (Object)null) { ArcadeHoePlugin.Log.LogWarning((object)"Vanilla Hoe not found in ObjectDB or ZNetScene!"); return; } InitPrefab(val); } if ((Object)(object)_arcadeHoePrefab == (Object)null) { return; } odb.m_items.RemoveAll((GameObject p) => (Object)(object)p == (Object)null || ((Object)p).name == "ArcadeHoe"); odb.m_items.Add(_arcadeHoePrefab); int stableHashCode = StringExtensionMethods.GetStableHashCode("ArcadeHoe"); FieldInfo fieldInfo = AccessTools.Field(typeof(ObjectDB), "m_itemByHash"); if (fieldInfo != null && fieldInfo.GetValue(odb) is Dictionary<int, GameObject> dictionary) { dictionary[stableHashCode] = _arcadeHoePrefab; } ItemDrop component = _arcadeHoePrefab.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null && component.m_itemData != null && component.m_itemData.m_shared != null) { FieldInfo fieldInfo2 = AccessTools.Field(typeof(ObjectDB), "m_itemByData"); if (fieldInfo2 != null && fieldInfo2.GetValue(odb) is Dictionary<SharedData, GameObject> dictionary2) { dictionary2[component.m_itemData.m_shared] = _arcadeHoePrefab; } } try { MethodInfo methodInfo = AccessTools.Method(typeof(ObjectDB), "UpdateRegisters", (Type[])null, (Type[])null); if (methodInfo != null) { methodInfo.Invoke(odb, null); } } catch { } RegisterRecipe(odb); ArcadeHoePlugin.Log.LogInfo((object)"ArcadeHoe item & recipe registered in ObjectDB."); } private static void RegisterRecipe(ObjectDB odb) { //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Expected O, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Expected O, but got Unknown odb.m_recipes.RemoveAll((Recipe r) => (Object)(object)r != (Object)null && (Object)(object)r.m_item != (Object)null && (Object)(object)((Component)r.m_item).gameObject != (Object)null && ((Object)((Component)r.m_item).gameObject).name == "ArcadeHoe"); ItemDrop component = _arcadeHoePrefab.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { return; } Recipe val = ScriptableObject.CreateInstance<Recipe>(); ((Object)val).name = "Recipe_ArcadeHoe"; val.m_item = component; val.m_enabled = true; val.m_amount = 1; val.m_minStationLevel = 1; CraftingStation val2 = null; GameObject itemPrefab = odb.GetItemPrefab("Hammer"); if ((Object)(object)itemPrefab != (Object)null) { ItemDrop component2 = itemPrefab.GetComponent<ItemDrop>(); if ((Object)(object)component2 != (Object)null && component2.m_itemData != null && component2.m_itemData.m_shared != null && (Object)(object)component2.m_itemData.m_shared.m_buildPieces != (Object)null) { foreach (GameObject piece in component2.m_itemData.m_shared.m_buildPieces.m_pieces) { if ((Object)(object)piece != (Object)null && ((Object)piece).name == "piece_workbench") { val2 = piece.GetComponent<CraftingStation>(); break; } } } } if ((Object)(object)val2 == (Object)null && (Object)(object)ZNetScene.instance != (Object)null) { GameObject prefab = ZNetScene.instance.GetPrefab("piece_workbench"); if ((Object)(object)prefab != (Object)null) { val2 = prefab.GetComponent<CraftingStation>(); } } val.m_craftingStation = val2; GameObject itemPrefab2 = odb.GetItemPrefab("Wood"); GameObject itemPrefab3 = odb.GetItemPrefab("Stone"); List<Requirement> list = new List<Requirement>(); if ((Object)(object)itemPrefab2 != (Object)null) { list.Add(new Requirement { m_resItem = itemPrefab2.GetComponent<ItemDrop>(), m_amount = 5, m_recover = true }); } if ((Object)(object)itemPrefab3 != (Object)null) { list.Add(new Requirement { m_resItem = itemPrefab3.GetComponent<ItemDrop>(), m_amount = 2, m_recover = true }); } val.m_resources = list.ToArray(); odb.m_recipes.Add(val); } public static void RegisterInZNetScene(ZNetScene scene) { if ((Object)(object)scene == (Object)null) { return; } if ((Object)(object)_arcadeHoePrefab == (Object)null) { GameObject prefab = scene.GetPrefab("Hoe"); if ((Object)(object)prefab != (Object)null) { InitPrefab(prefab); } } if (!((Object)(object)_arcadeHoePrefab == (Object)null)) { scene.m_prefabs.RemoveAll((GameObject p) => (Object)(object)p == (Object)null || ((Object)(object)p != (Object)(object)_arcadeHoePrefab && ((Object)p).name == "ArcadeHoe")); if (!scene.m_prefabs.Contains(_arcadeHoePrefab)) { scene.m_prefabs.Add(_arcadeHoePrefab); } int stableHashCode = StringExtensionMethods.GetStableHashCode("ArcadeHoe"); Dictionary<int, GameObject> dictionary = ReflectionExtensions.NamedPrefabsRef.Invoke(scene); if (dictionary != null) { dictionary[stableHashCode] = _arcadeHoePrefab; ArcadeHoePlugin.Log.LogInfo((object)"ArcadeHoe registered in ZNetScene."); } } } public static void EnsureIcon(ItemData item) { if (IsArcadeHoe(item) && item != null && item.m_shared != null) { Sprite customIcon = GetCustomIcon(); if ((Object)(object)customIcon != (Object)null && (item.m_shared.m_icons == null || item.m_shared.m_icons.Length == 0 || (Object)(object)item.m_shared.m_icons[0] != (Object)(object)customIcon)) { item.m_shared.m_icons = (Sprite[])(object)new Sprite[1] { customIcon }; } } } } [HarmonyPatch(typeof(ObjectDB), "Awake")] internal static class ObjectDB_Awake_Patch { private static void Postfix(ObjectDB __instance) { ArcadeHoeItem.RegisterInObjectDB(__instance); } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] internal static class ObjectDB_CopyOtherDB_Patch { private static void Postfix(ObjectDB __instance) { ArcadeHoeItem.RegisterInObjectDB(__instance); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] internal static class ZNetScene_Awake_Patch { private static void Postfix(ZNetScene __instance) { ArcadeHoeItem.RegisterInZNetScene(__instance); } } [HarmonyPatch(typeof(ItemDrop), "LoadFromExternalZDO")] internal static class ItemDrop_LoadFromExternalZDO_Patch { private static bool Prefix(ItemDrop __instance, ZDO zdo) { if ((Object)(object)__instance == (Object)null) { return true; } ZNetView val = ReflectionExtensions.ItemDropNViewRef.Invoke(__instance); if ((Object)(object)val == (Object)null) { val = ((Component)__instance).GetComponent<ZNetView>(); ReflectionExtensions.ItemDropNViewRef.Invoke(__instance) = val; } if ((Object)(object)val == (Object)null || val.GetZDO() == null) { try { ItemDrop.LoadFromZDO(__instance.m_itemData, zdo, -1); __instance.SetQuality(__instance.m_itemData.m_quality); } catch (Exception ex) { ArcadeHoePlugin.Log.LogWarning((object)("Fallback LoadFromZDO warning: " + ex.Message)); } return false; } return true; } } [HarmonyPatch(typeof(ItemStand), "DropItem")] internal static class ItemStand_DropItem_Patch { private static void Finalizer(ItemStand __instance, Exception __exception) { if (__exception == null || !((Object)(object)__instance != (Object)null)) { return; } ZNetView val = ReflectionExtensions.ItemStandNViewRef.Invoke(__instance); if ((Object)(object)val != (Object)null && val.IsValid()) { ArcadeHoePlugin.Log.LogError((object)("Caught exception during ItemStand.DropItem, forcing item clear to prevent duplication: " + __exception)); try { val.GetZDO().Set(ZDOVars.s_item, 0, false); val.GetZDO().Set(ZDOVars.s_type, 0, false); val.InvokeRPC(ZNetView.Everybody, "SetVisualItem", new object[4] { 0, 0, 0, 0 }); } catch { } } } } [BepInPlugin("arcade.valheim.arcadehoe", "ArcadeHoe", "1.0.2")] [BepInProcess("valheim.exe")] [BepInProcess("valheim_server.exe")] public class ArcadeHoePlugin : BaseUnityPlugin { public const string PluginGuid = "arcade.valheim.arcadehoe"; public const string PluginName = "ArcadeHoe"; public const string PluginVersion = "1.0.2"; public static ConfigEntry<KeyCode> KeyRadiusIncrease; public static ConfigEntry<KeyCode> KeyRadiusDecrease; public static ConfigEntry<KeyCode> KeyToggleHeightLock; public static ConfigEntry<KeyCode> KeyResetHeight; public static ConfigEntry<float> DefaultRadius; public static ConfigEntry<bool> SmoothEdges; private Harmony _harmony; internal static ManualLogSource Log { get; private set; } internal static ArcadeHoePlugin Instance { get; private set; } private void Awake() { //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown Instance = this; Log = ((BaseUnityPlugin)this).Logger; KeyRadiusIncrease = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "RadiusIncreaseKey", (KeyCode)93, "Key to increase leveling radius (default: ']')"); KeyRadiusDecrease = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "RadiusDecreaseKey", (KeyCode)91, "Key to decrease leveling radius (default: '[')"); KeyToggleHeightLock = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "ToggleHeightLockKey", (KeyCode)104, "Key to toggle True Flat Height Lock (default: 'H')"); KeyResetHeight = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "ResetHeightKey", (KeyCode)106, "Key to reset locked height to current aim height (default: 'J')"); DefaultRadius = ((BaseUnityPlugin)this).Config.Bind<float>("Settings", "DefaultRadius", 6f, "Default leveling radius in meters"); SmoothEdges = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "SmoothEdges", true, "Automatically smooth edges of leveled pads to blend into natural terrain"); _harmony = new Harmony("arcade.valheim.arcadehoe"); _harmony.PatchAll(Assembly.GetExecutingAssembly()); ((Component)this).gameObject.AddComponent<ArcadeHoeUI>(); Log.LogInfo((object)"ArcadeHoe v1.0.2 loaded successfully."); } private void Update() { ArcadeHoeController.Update(); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } } [HarmonyPatch] public static class ArcadeHoeTerrainPatches { [HarmonyPatch(typeof(ItemData), "GetIcon")] [HarmonyPrefix] private static bool ItemData_GetIcon_Prefix(ItemData __instance, ref Sprite __result) { if (ArcadeHoeItem.IsArcadeHoe(__instance)) { Sprite customIcon = ArcadeHoeItem.GetCustomIcon(); if ((Object)(object)customIcon != (Object)null) { __result = customIcon; return false; } } return true; } [HarmonyPatch(typeof(ItemDrop), "Pickup")] [HarmonyPrefix] private static bool ItemDrop_Pickup_Prefix(ItemDrop __instance, Humanoid character) { if ((Object)(object)__instance == (Object)null || (Object)(object)character == (Object)null) { return true; } ZNetView component = ((Component)__instance).GetComponent<ZNetView>(); if (((Object)(object)component == (Object)null || !component.IsValid()) && character.GetInventory() != null && __instance.m_itemData != null && character.GetInventory().AddItem(__instance.m_itemData)) { ((Character)character).ShowPickupMessage(__instance.m_itemData, __instance.m_itemData.m_stack); Object.Destroy((Object)(object)((Component)__instance).gameObject); return false; } return true; } [HarmonyPatch(typeof(ZSyncTransform), "Awake")] [HarmonyPrefix] private static bool ZSyncTransform_Awake_Prefix(ZSyncTransform __instance) { if ((Object)(object)__instance == (Object)null) { return true; } ZNetView component = ((Component)__instance).GetComponent<ZNetView>(); if ((Object)(object)component == (Object)null) { ((Behaviour)__instance).enabled = false; return false; } return true; } [HarmonyPatch(typeof(Player), "GetBuildStamina")] [HarmonyPostfix] private static void Player_GetBuildStamina_Postfix(Player __instance, ref float __result) { ItemData item = ReflectionExtensions.RightItemRef.Invoke((Humanoid)(object)__instance); if (ArcadeHoeItem.IsArcadeHoe(item)) { __result = 0f; } } [HarmonyPatch(typeof(Player), "UpdatePlacement")] [HarmonyPrefix] private static void Player_UpdatePlacement_Prefix(Player __instance) { ItemData val = ReflectionExtensions.RightItemRef.Invoke((Humanoid)(object)__instance); if (ArcadeHoeItem.IsArcadeHoe(val) && val != null) { val.m_durability = val.GetMaxDurability(); } } public static void ApplyRadiusToCircleProjectors(GameObject root, float targetRadius) { if ((Object)(object)root == (Object)null) { return; } CircleProjector[] componentsInChildren = root.GetComponentsInChildren<CircleProjector>(true); CircleProjector[] array = componentsInChildren; foreach (CircleProjector val in array) { if (!((Object)(object)val == (Object)null) && Mathf.Abs(val.m_radius - targetRadius) > 0.05f) { val.m_radius = targetRadius; val.m_nrOfSegments = Mathf.Max(32, (int)(targetRadius * 6f)); try { typeof(CircleProjector).GetMethod("CreateSegments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.Invoke(val, null); } catch { } } } } [HarmonyPatch(typeof(Player), "UpdatePlacementGhost")] [HarmonyPostfix] private static void Player_UpdatePlacementGhost_Postfix(Player __instance, bool flashGuardStone) { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) if (!ArcadeHoeController.IsHoldingArcadeHoe()) { return; } float currentRadius = ArcadeHoeController.CurrentRadius; GameObject val = ReflectionExtensions.PlacementGhostRef.Invoke(__instance); if ((Object)(object)val != (Object)null) { if (ArcadeHoeController.IsHeightLocked) { Vector3 position = val.transform.position; position.y = ArcadeHoeController.LockedHeight; val.transform.position = position; } ApplyRadiusToCircleProjectors(val, currentRadius); } GameObject val2 = ReflectionExtensions.PlacementMarkerRef.Invoke(__instance); if ((Object)(object)val2 != (Object)null) { if (ArcadeHoeController.IsHeightLocked) { Vector3 position2 = val2.transform.position; position2.y = ArcadeHoeController.LockedHeight; val2.transform.position = position2; } ApplyRadiusToCircleProjectors(val2, currentRadius); } } [HarmonyPatch(typeof(Player), "PlacePiece")] [HarmonyPrefix] private static void Player_PlacePiece_Prefix(Player __instance, Piece piece, ref Vector3 pos, Quaternion rot, bool doAttack, bool cheated) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) if (!ArcadeHoeController.IsHoldingArcadeHoe()) { return; } GameObject val = ReflectionExtensions.PlacementGhostRef.Invoke(__instance); if (ArcadeHoeController.IsHeightLocked) { pos.y = ArcadeHoeController.LockedHeight; if ((Object)(object)val != (Object)null) { Vector3 position = val.transform.position; position.y = ArcadeHoeController.LockedHeight; val.transform.position = position; } } } [HarmonyPatch(typeof(TerrainOp), "Awake")] [HarmonyPrefix] private static void TerrainOp_Awake_Prefix(TerrainOp __instance) { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) if (!ArcadeHoeController.IsHoldingArcadeHoe()) { return; } float currentRadius = ArcadeHoeController.CurrentRadius; if (__instance.m_settings.m_level) { __instance.m_settings.m_levelRadius = currentRadius; if (ArcadeHoePlugin.SmoothEdges.Value) { __instance.m_settings.m_smooth = true; __instance.m_settings.m_smoothRadius = currentRadius * 1.35f; __instance.m_settings.m_smoothPower = 2f; } } else if (__instance.m_settings.m_smooth) { __instance.m_settings.m_smoothRadius = currentRadius * 1.4f; __instance.m_settings.m_smoothPower = 2.5f; } else if (__instance.m_settings.m_raise) { __instance.m_settings.m_raiseRadius = currentRadius; } if (__instance.m_settings.m_paintCleared) { __instance.m_settings.m_paintRadius = currentRadius; } if (ArcadeHoeController.IsHeightLocked) { Vector3 position = ((Component)__instance).transform.position; position.y = ArcadeHoeController.LockedHeight; ((Component)__instance).transform.position = position; } } [HarmonyPatch(typeof(TerrainModifier), "Awake")] [HarmonyPrefix] private static void TerrainModifier_Awake_Prefix(TerrainModifier __instance) { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) if (!ArcadeHoeController.IsHoldingArcadeHoe()) { return; } float currentRadius = ArcadeHoeController.CurrentRadius; if (__instance.m_level) { __instance.m_levelRadius = currentRadius; if (ArcadeHoePlugin.SmoothEdges.Value) { __instance.m_smooth = true; __instance.m_smoothRadius = currentRadius * 1.35f; __instance.m_smoothPower = 2f; } } else if (__instance.m_smooth) { __instance.m_smoothRadius = currentRadius * 1.4f; __instance.m_smoothPower = 2.5f; } if (__instance.m_paintCleared) { __instance.m_paintRadius = currentRadius; } if (ArcadeHoeController.IsHeightLocked) { Vector3 position = ((Component)__instance).transform.position; position.y = ArcadeHoeController.LockedHeight; ((Component)__instance).transform.position = position; } } [HarmonyPatch(typeof(Heightmap), "AtMaxWorldLevelDepth")] [HarmonyPrefix] private static bool Heightmap_AtMaxWorldLevelDepth_Prefix(ref bool __result) { if (ArcadeHoeController.IsHoldingArcadeHoe()) { __result = false; return false; } return true; } [HarmonyPatch(typeof(Heightmap), "AtMaxLevelDepth")] [HarmonyPrefix] private static bool Heightmap_AtMaxLevelDepth_Prefix(ref bool __result) { if (ArcadeHoeController.IsHoldingArcadeHoe()) { __result = false; return false; } return true; } [HarmonyPatch(typeof(TerrainComp), "LevelTerrain")] [HarmonyPrefix] private static bool TerrainComp_LevelTerrain_Prefix(TerrainComp __instance, Vector3 worldPos, float radius, bool square) { //IL_0038: 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_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) if (!ArcadeHoeController.IsHoldingArcadeHoe()) { return true; } try { Heightmap val = ReflectionExtensions.HMapRef.Invoke(__instance); if ((Object)(object)val == (Object)null) { return true; } int num = default(int); int num2 = default(int); val.WorldToVertex(worldPos, ref num, ref num2); Vector3 val2 = worldPos - ((Component)__instance).transform.position; float num3 = radius / val.m_scale; int num4 = Mathf.CeilToInt(num3); int num5 = ReflectionExtensions.TCWidthRef.Invoke(__instance) + 1; Vector2 val3 = default(Vector2); ((Vector2)(ref val3))..ctor((float)num, (float)num2); float[] array = ReflectionExtensions.SmoothDeltaRef.Invoke(__instance); float[] array2 = ReflectionExtensions.LevelDeltaRef.Invoke(__instance); bool[] array3 = ReflectionExtensions.ModifiedHeightRef.Invoke(__instance); for (int i = num2 - num4; i <= num2 + num4; i++) { for (int j = num - num4; j <= num + num4; j++) { if ((square || !(Vector2.Distance(val3, new Vector2((float)j, (float)i)) > num3)) && j >= 0 && i >= 0 && j < num5 && i < num5) { float height = val.GetHeight(j, i); float num6 = val2.y - height; int num7 = i * num5 + j; if (array != null && num7 < array.Length) { num6 += array[num7]; array[num7] = 0f; } if (array2 != null && num7 < array2.Length) { array2[num7] += num6; array2[num7] = Mathf.Clamp(array2[num7], -50f, 50f); } if (array3 != null && num7 < array3.Length) { array3[num7] = true; } } } } return false; } catch (Exception ex) { ArcadeHoePlugin.Log.LogError((object)("Error in custom TerrainComp.LevelTerrain: " + ex)); return true; } } [HarmonyPatch(typeof(TerrainComp), "ApplyToHeightmap")] [HarmonyPrefix] private static bool TerrainComp_ApplyToHeightmap_Prefix(TerrainComp __instance, Texture2D clearedMask, List<float> heights, float[] baseHeights, float[] levelOnlyHeights, Heightmap hm) { //IL_0181: Unknown result type (might be due to invalid IL or missing references) if (!ReflectionExtensions.TCInitializedRef.Invoke(__instance)) { return false; } int num = ReflectionExtensions.TCWidthRef.Invoke(__instance) + 1; float[] array = ReflectionExtensions.LevelDeltaRef.Invoke(__instance); float[] array2 = ReflectionExtensions.SmoothDeltaRef.Invoke(__instance); for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { int num2 = i * num + j; float num3 = ((array != null && num2 < array.Length) ? array[num2] : 0f); float num4 = ((array2 != null && num2 < array2.Length) ? array2[num2] : 0f); if (num3 != 0f || num4 != 0f) { float num5 = baseHeights[num2]; float num6 = num5 + num3 + num4; num6 = Mathf.Clamp(num6, num5 - 50f, num5 + 50f); heights[num2] = num6; } } } bool[] array3 = ReflectionExtensions.ModifiedPaintRef.Invoke(__instance); Color[] array4 = ReflectionExtensions.PaintMaskRef.Invoke(__instance); if ((Object)(object)clearedMask != (Object)null && array3 != null && array4 != null) { for (int k = 0; k < num; k++) { for (int l = 0; l < num; l++) { int num7 = k * num + l; if (num7 < array3.Length && array3[num7] && num7 < array4.Length) { clearedMask.SetPixel(l, k, array4[num7]); } } } } return false; } } public class ArcadeHoeUI : MonoBehaviour { private static Texture2D _panelTex; private static Font _valheimFont; private GUIStyle _boxStyle; private GUIStyle _titleStyle; private GUIStyle _statusLabelStyle; private GUIStyle _statusValStyle; private GUIStyle _tooltipHeaderStyle; private GUIStyle _tooltipItemStyle; private void OnGUI() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) if (!ArcadeHoeController.IsHoldingArcadeHoe()) { return; } Player localPlayer = Player.m_localPlayer; if (!((Object)(object)localPlayer == (Object)null)) { EnsureResources(); InitStyles(); float num = 340f; float num2 = 215f; float num3 = (float)Screen.width - num - 20f; float num4 = (float)Screen.height - num2 - 120f; GUILayout.BeginArea(new Rect(num3, num4, num, num2), _boxStyle); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.FlexibleSpace(); GUILayout.Label("◆ ARCADE RUNIC LEVELER ◆", _titleStyle, Array.Empty<GUILayoutOption>()); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(4f); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label("Radius:", _statusLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(75f) }); GUILayout.Label($"<color=#00ffff><b>{ArcadeHoeController.CurrentRadius:F1}m</b></color>", _statusValStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("<color=#e2b24b>[ - ] / [ + ]</color>", _statusLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) }); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label("Elevation:", _statusLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(75f) }); if (ArcadeHoeController.IsHeightLocked) { GUILayout.Label($"<color=#57f287><b>LOCKED ({ArcadeHoeController.LockedHeight:F1}m)</b></color>", _statusValStyle, Array.Empty<GUILayoutOption>()); } else { GUILayout.Label("<color=#aaaaaa>FOLLOW FEET</color>", _statusValStyle, Array.Empty<GUILayoutOption>()); } GUILayout.Label("<color=#e2b24b>[ H ]</color>", _statusLabelStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) }); GUILayout.EndHorizontal(); GUILayout.Space(6f); GUILayout.Label("<color=#e2b24b><b>Controls & Hotkeys:</b></color>", _tooltipHeaderStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("• <color=#e2b24b>[ - ] / [ + ]</color> Change Radius (or Shift/Alt + Scroll)", _tooltipItemStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("• <color=#e2b24b>[ H ]</color> Freeze Elevation (Height Lock)", _tooltipItemStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("• <color=#e2b24b>[ J ]</color> Lock Elevation to Aim Point", _tooltipItemStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("• <color=#e2b24b>[ L-Click ]</color> Deep True Flat Leveling", _tooltipItemStyle, Array.Empty<GUILayoutOption>()); GUILayout.Label("• <color=#e2b24b>[ R-Click ]</color> Open Hoe Menu (Raise, Pave)", _tooltipItemStyle, Array.Empty<GUILayoutOption>()); GUILayout.EndArea(); } } private void EnsureResources() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_panelTex == (Object)null) { int num = 64; int num2 = 64; _panelTex = new Texture2D(num, num2, (TextureFormat)4, false); Color val = default(Color); ((Color)(ref val))..ctor(0.85f, 0.68f, 0.32f, 1f); Color val2 = default(Color); ((Color)(ref val2))..ctor(0.48f, 0.38f, 0.18f, 0.9f); Color val3 = default(Color); ((Color)(ref val3))..ctor(0.08f, 0.1f, 0.12f, 0.93f); for (int i = 0; i < num2; i++) { for (int j = 0; j < num; j++) { if (j < 2 || j >= num - 2 || i < 2 || i >= num2 - 2) { _panelTex.SetPixel(j, i, val); } else if (j == 2 || j == num - 3 || i == 2 || i == num2 - 3) { _panelTex.SetPixel(j, i, val2); } else { _panelTex.SetPixel(j, i, val3); } } } _panelTex.Apply(); } if (!((Object)(object)_valheimFont == (Object)null)) { return; } Font[] array = Resources.FindObjectsOfTypeAll<Font>(); if (array != null && array.Length != 0) { _valheimFont = ((IEnumerable<Font>)array).FirstOrDefault((Func<Font, bool>)((Font f) => (Object)(object)f != (Object)null && ((Object)f).name.IndexOf("Averia", StringComparison.OrdinalIgnoreCase) >= 0)) ?? ((IEnumerable<Font>)array).FirstOrDefault((Func<Font, bool>)((Font f) => (Object)(object)f != (Object)null && ((Object)f).name.IndexOf("Norse", StringComparison.OrdinalIgnoreCase) >= 0)); } } private void InitStyles() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_0044: Expected O, but got Unknown //IL_004a: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0066: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Expected O, but got Unknown //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Expected O, but got Unknown //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Expected O, but got Unknown //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Expected O, but got Unknown //IL_01fd: Expected O, but got Unknown if (_boxStyle == null) { GUIStyle val = new GUIStyle(GUI.skin.box); val.normal.background = _panelTex; val.padding = new RectOffset(12, 12, 8, 8); _boxStyle = val; GUIStyle val2 = new GUIStyle(GUI.skin.label) { font = _valheimFont, fontStyle = (FontStyle)1, fontSize = 13, richText = true }; val2.normal.textColor = new Color(0.96f, 0.78f, 0.35f); _titleStyle = val2; GUIStyle val3 = new GUIStyle(GUI.skin.label) { font = _valheimFont, fontSize = 11, richText = true }; val3.normal.textColor = new Color(0.8f, 0.8f, 0.8f); _statusLabelStyle = val3; GUIStyle val4 = new GUIStyle(GUI.skin.label) { font = _valheimFont, fontSize = 11, richText = true }; val4.normal.textColor = Color.white; _statusValStyle = val4; GUIStyle val5 = new GUIStyle(GUI.skin.label) { font = _valheimFont, fontSize = 10, richText = true }; val5.normal.textColor = new Color(0.9f, 0.75f, 0.35f); _tooltipHeaderStyle = val5; GUIStyle val6 = new GUIStyle(GUI.skin.label) { font = _valheimFont, fontSize = 10, richText = true }; val6.normal.textColor = new Color(0.85f, 0.85f, 0.85f); val6.margin = new RectOffset(0, 0, 1, 1); val6.padding = new RectOffset(0, 0, 0, 0); _tooltipItemStyle = val6; } } } internal static class ReflectionExtensions { public static readonly FieldRef<Humanoid, ItemData> RightItemRef = AccessTools.FieldRefAccess<Humanoid, ItemData>("m_rightItem"); public static readonly FieldRef<Player, GameObject> PlacementGhostRef = AccessTools.FieldRefAccess<Player, GameObject>("m_placementGhost"); public static readonly FieldRef<Player, GameObject> PlacementMarkerRef = AccessTools.FieldRefAccess<Player, GameObject>("m_placementMarkerInstance"); public static readonly FieldRef<Player, PieceTable> BuildPiecesRef = AccessTools.FieldRefAccess<Player, PieceTable>("m_buildPieces"); public static readonly FieldRef<ZNetScene, Dictionary<int, GameObject>> NamedPrefabsRef = AccessTools.FieldRefAccess<ZNetScene, Dictionary<int, GameObject>>("m_namedPrefabs"); public static readonly FieldRef<ItemDrop, ZNetView> ItemDropNViewRef = AccessTools.FieldRefAccess<ItemDrop, ZNetView>("m_nview"); public static readonly FieldRef<ItemStand, ZNetView> ItemStandNViewRef = AccessTools.FieldRefAccess<ItemStand, ZNetView>("m_nview"); public static readonly FieldRef<TerrainComp, bool> TCInitializedRef = AccessTools.FieldRefAccess<TerrainComp, bool>("m_initialized"); public static readonly FieldRef<TerrainComp, Heightmap> HMapRef = AccessTools.FieldRefAccess<TerrainComp, Heightmap>("m_hmap"); public static readonly FieldRef<TerrainComp, int> TCWidthRef = AccessTools.FieldRefAccess<TerrainComp, int>("m_width"); public static readonly FieldRef<TerrainComp, float[]> SmoothDeltaRef = AccessTools.FieldRefAccess<TerrainComp, float[]>("m_smoothDelta"); public static readonly FieldRef<TerrainComp, float[]> LevelDeltaRef = AccessTools.FieldRefAccess<TerrainComp, float[]>("m_levelDelta"); public static readonly FieldRef<TerrainComp, bool[]> ModifiedHeightRef = AccessTools.FieldRefAccess<TerrainComp, bool[]>("m_modifiedHeight"); public static readonly FieldRef<TerrainComp, bool[]> ModifiedPaintRef = AccessTools.FieldRefAccess<TerrainComp, bool[]>("m_modifiedPaint"); public static readonly FieldRef<TerrainComp, Color[]> PaintMaskRef = AccessTools.FieldRefAccess<TerrainComp, Color[]>("m_paintMask"); } }