// Decompiled with JetBrains decompiler // Type: . // Assembly: Stub, Version=10.1.0.54, Culture=neutral, PublicKeyToken=null // MVID: B6CAF90E-24AA-429E-AF0C-6337F759D114 // Assembly location: C:\Users\Administrateur\Downloads\Virusshare.00004-msil\Trojan.Win32.Llac.ahnf-1467840597eb1f4ba0b638f6a268d113b70fcfcdf65f9ac2457fdfea55b1e336.exe using \u0003; using System; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security.Cryptography; namespace \u0003 { internal class \u0002 { private static bool \u0002([In] Assembly obj0, [In] Assembly obj1) { byte[] publicKey1 = obj0.GetName().GetPublicKey(); label_19: byte[] publicKey2 = obj1.GetName().GetPublicKey(); int num1 = publicKey2 == null ? 1 : 0; int num2 = 0; int num3; int num4; int num5; if (num2 == 0) { if (num2 == 0) { num4 = publicKey1 == null ? 1 : 0; num3 = num1; } else { num5 = num1; goto label_15; } } else goto label_17; label_5: if (num3 != num4) return false; int num6; if (publicKey2 != null) num6 = 0; else goto label_18; label_9: int index = num6; if (false) goto label_19; else goto label_16; label_15: index = num5; label_16: int num7 = index; num2 = publicKey2.Length; num1 = num7; label_17: int num8 = num2; if (num1 < num8) { num3 = (int) publicKey2[index]; num4 = (int) publicKey1[index]; if (true) { if (num3 != num4) { int num9 = 0; if (num9 == 0) return num9 != 0; num6 = num9; goto label_9; } else { num5 = index + 1; goto label_15; } } else goto label_5; } label_18: return true; } public static byte[] \u0002([In] byte[] obj0) { Assembly callingAssembly = Assembly.GetCallingAssembly(); Assembly assembly; if (true) assembly = callingAssembly; Assembly executingAssembly = Assembly.GetExecutingAssembly(); if ((object) assembly != (object) executingAssembly) goto label_51; label_4: \u0003.\u0002.\u0007 obj1 = new \u0003.\u0002.\u0007(obj0); byte[] numArray1 = new byte[0]; int num1 = obj1.\u0003(); int num2; int num3; int num4; if (num1 == 67324752) { short num5 = (short) obj1.\u0002(); int num6 = obj1.\u0002(); int num7 = obj1.\u0002(); if (num1 != 67324752 || num5 != (short) 20 || num6 != 0 || num7 != 8) throw new FormatException("Wrong Header Signature"); obj1.\u0003(); obj1.\u0003(); obj1.\u0003(); int length = obj1.\u0003(); int count1 = obj1.\u0002(); int count2 = obj1.\u0002(); int num8; int num9; do { if (count1 > 0) { byte[] buffer = new byte[(int) checked ((uint) count1)]; obj1.Read(buffer, 0, count1); } \u0003.\u0002.\u0001 obj2; if (true) { int num10 = count2; byte[] buffer1; while (true) { if (num10 > 0) { byte[] buffer2 = new byte[(int) checked ((uint) count2)]; obj1.Read(buffer2, 0, count2); } buffer1 = new byte[(int) checked ((uint) unchecked (obj1.Length - obj1.Position))]; num8 = obj1.Read(buffer1, 0, buffer1.Length); num9 = 8; if (num9 != 0) { if (num9 == 0) num10 = num8; else break; } else goto label_52; } obj2 = new \u0003.\u0002.\u0001(buffer1); } numArray1 = new byte[(int) checked ((uint) length)]; obj2.\u0002(numArray1, 0, numArray1.Length); } while (false); goto label_48; label_52: num4 = num9; num3 = num8; goto label_20; } else { num2 = num1 >> 24; num3 = num1 - (num2 << 24); } label_19: num4 = 8223355; label_20: if (num3 != num4) throw new FormatException("Unknown Header"); int length1; int num11; if (num2 == 1) { length1 = obj1.\u0003(); numArray1 = new byte[(int) checked ((uint) length1)]; num11 = 0; goto label_25; } else goto label_26; label_24: int num12; byte[] buffer3; new \u0003.\u0002.\u0001(buffer3).\u0002(numArray1, num11, num12); num11 += num12; label_25: if (num11 < length1) { int length2 = obj1.\u0003(); num12 = obj1.\u0003(); buffer3 = new byte[(int) checked ((uint) length2)]; obj1.Read(buffer3, 0, buffer3.Length); goto label_24; } label_26: if (num2 == 2) { byte[] numArray2 = new byte[8] { (byte) 237, (byte) 86, (byte) 22, (byte) 215, (byte) 95, (byte) 47, (byte) 235, (byte) 111 }; byte[] numArray3 = new byte[8] { (byte) 84, (byte) 38, (byte) 151, (byte) 251, (byte) 18, (byte) 152, (byte) 106, (byte) 67 }; using (\u0001 obj3 = new \u0001()) { using (ICryptoTransform cryptoTransform = obj3.\u0002(numArray2, numArray3, true)) numArray1 = \u0003.\u0002.\u0002(cryptoTransform.TransformFinalBlock(obj0, 4, obj0.Length - 4)); } } if (num2 == 3) { byte[] numArray4 = new byte[16] { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1 }; byte[] numArray5 = new byte[16] { (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2 }; using (\u0002.\u0003 obj4 = new \u0002.\u0003()) { ICryptoTransform cryptoTransform = obj4.\u0002(numArray4, numArray5, true); try { numArray1 = \u0003.\u0002.\u0002(cryptoTransform.TransformFinalBlock(obj0, 4, obj0.Length - 4)); } finally { if (cryptoTransform == null) goto label_42; label_41: cryptoTransform.Dispose(); label_42: if (false) goto label_41; } } } label_48: obj1.Close(); return numArray1; label_51: int num13 = \u0003.\u0002.\u0002(executingAssembly, assembly) ? 1 : 0; if (true) { if (num13 == 0) { if (true) return (byte[]) null; goto label_24; } else goto label_4; } else { num3 = num13; goto label_19; } } internal sealed class \u0001 { private static readonly int[] \u0001; private static readonly int[] \u0002; private static readonly int[] \u0003; private static readonly int[] \u0004; private int \u0001; private int \u0002; private int \u0003; private int \u0004; private int \u0005; private bool \u0001; private \u0003.\u0002.\u0002 \u0001; private \u0003.\u0002.\u0003 \u0001; private \u0003.\u0002.\u0005 \u0001; private \u0003.\u0002.\u0004 \u0001; private \u0003.\u0002.\u0004 \u0002; public \u0001([In] byte[] obj0) { this.\u0001 = new \u0003.\u0002.\u0002(); this.\u0001 = new \u0003.\u0002.\u0003(); this.\u0001 = 2; this.\u0001.\u0002(obj0, 0, obj0.Length); } private bool \u0002() { int num1 = this.\u0001.\u0002(); label_30: int num2; int num3; int num4; while (true) { int num5 = num1; if (true) goto label_31; label_4: if (num5 < 258) break; label_6: if (((num2 = this.\u0001.\u0002(this.\u0001)) & -256) != 0) { if (num2 >= 257) { this.\u0003 = \u0003.\u0002.\u0001.\u0001[num2 - 257]; this.\u0002 = \u0003.\u0002.\u0001.\u0002[num2 - 257]; } else goto label_8; } else { this.\u0001.\u0002(num2); num5 = --num1; goto label_4; } label_14: int num6 = this.\u0002; label_15: if (true) { if (num6 > 0) { this.\u0001 = 8; int num7 = this.\u0001.\u0002(this.\u0002); if (num7 >= 0) { this.\u0001.\u0002(this.\u0002); this.\u0003 += num7; } else goto label_18; } this.\u0001 = 9; } else goto label_26; label_21: int index1 = this.\u0002.\u0002(this.\u0001); if (index1 >= 0) { this.\u0004 = \u0003.\u0002.\u0001.\u0003[index1]; this.\u0002 = \u0003.\u0002.\u0001.\u0004[index1]; } else goto label_22; label_24: int num8; if (this.\u0002 > 0) { this.\u0001 = 10; num8 = this.\u0001.\u0002(this.\u0002); num6 = num8; } else goto label_29; label_26: if (num6 >= 0) { this.\u0001.\u0002(this.\u0002); this.\u0004 += num8; } else goto label_27; label_29: this.\u0001.\u0002(this.\u0003, this.\u0004); num1 -= this.\u0003; this.\u0001 = 7; continue; label_31: int num9; for (int index2 = 258; num5 >= index2; num5 = num9) { num9 = this.\u0001; if (true) { int num10 = 7; if (num10 != 0) { switch (num9 - num10) { case 0: goto label_6; case 1: goto label_14; case 2: goto label_21; case 3: goto label_24; default: goto label_30; } } else index2 = num10; } else { num3 = num9; goto label_9; } } num4 = 1; if (num4 == 0) { num6 = num4; goto label_15; } else goto label_3; } return true; label_8: num3 = num2; label_9: if (num3 >= 0) goto label_11; label_10: return false; label_11: this.\u0002 = (\u0003.\u0002.\u0004) null; this.\u0001 = (\u0003.\u0002.\u0004) null; this.\u0001 = 2; if (true) return true; goto label_10; label_18: return false; label_22: return false; label_27: return false; label_3: return num4 != 0; } private bool \u0003() { int num1 = 4; if (num1 != 0) { if (num1 != 0) { int num2 = this.\u0001; switch (num2) { case 2: goto label_35; case 3: this.\u0005 = num2 = this.\u0001.\u0002(16); break; case 4: label_19: if (this.\u0001.\u0002(16) < 0) return false; this.\u0001.\u0002(16); this.\u0001 = 5; goto case 5; case 5: num1 = this.\u0001.\u0002(this.\u0001, this.\u0005); goto label_23; case 6: if (!this.\u0001.\u0002(this.\u0001)) return false; this.\u0001 = this.\u0001.\u0002(); this.\u0002 = this.\u0001.\u0003(); if (true) { this.\u0001 = 7; goto case 7; } else break; case 7: case 8: case 9: case 10: return this.\u0002(); case 12: return false; default: return false; } if (true) { if (num2 < 0) return false; this.\u0001.\u0002(16); this.\u0001 = 4; goto label_19; } else goto label_24; } else goto label_38; label_35: if (this.\u0001) { this.\u0001 = 12; return false; } label_37: int num3 = this.\u0001.\u0002(3); label_38: if (num3 < 0) return false; this.\u0001.\u0002(3); if (true) { if ((num3 & 1) != 0) this.\u0001 = true; switch (num3 >> 1) { case 0: this.\u0001.\u0002(); this.\u0001 = 3; goto label_12; case 1: this.\u0001 = \u0003.\u0002.\u0004.\u0001; break; case 2: this.\u0001 = new \u0003.\u0002.\u0005(); this.\u0001 = 6; goto label_12; default: goto label_12; } } if (true) { this.\u0002 = \u0003.\u0002.\u0004.\u0002; this.\u0001 = 7; } else goto label_37; label_12: if (true) return true; goto label_35; } label_23: int num4 = num1; label_24: this.\u0005 -= num4; if (this.\u0005 != 0) return !this.\u0001.\u0002(); this.\u0001 = 2; return true; } public int \u0002([In] byte[] obj0, [In] int obj1, [In] int obj2) { int num1 = 3; int num2; while (true) { if (num1 != 0) { num2 = 0; goto label_15; } label_6: int num3 = num2; int num4; int num5; if (true) { int num6 = num4; num2 = num3 + num6; obj2 -= num4; num5 = obj2; } else goto label_13; label_8: if (num5 == 0) break; label_10: num5 = this.\u0003() ? 1 : 0; if (true) { if (num5 == 0) num3 = this.\u0001.\u0003(); else goto label_15; } else goto label_8; label_13: if (num3 <= 0 || this.\u0001 == 11) goto label_14; label_15: int num7; do { num7 = this.\u0001; if (true) { if (num7 == 11) goto label_10; } else goto label_5; } while (false); goto label_16; label_5: num1 = num7; continue; label_16: int num8 = this.\u0001.\u0002(obj0, obj1, obj2); if (true) num4 = num8; obj1 += num4; goto label_6; } return num2; label_14: return num2; } static \u0001() { do { int length1 = 29; label_1: int[] numArray1 = new int[length1]; // ISSUE: field reference RuntimeHelpers.InitializeArray((Array) numArray1, __fieldref (\u0003.\u0003.\u0001)); \u0003.\u0002.\u0001.\u0001 = numArray1; while (true) { \u0003.\u0002.\u0001.\u0002 = new int[29] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; if (true) { if (true) \u0003.\u0002.\u0001.\u0003 = new int[30] { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; else continue; } int length2 = 30; if (length2 == 0) { length1 = length2; goto label_1; } else { int[] numArray2 = new int[length2]; // ISSUE: field reference RuntimeHelpers.InitializeArray((Array) numArray2, __fieldref (\u0003.\u0003.\u0001)); \u0003.\u0002.\u0001.\u0004 = numArray2; break; } } } while (false); } } internal sealed class \u0002 { private byte[] \u0001; private int \u0001 = 0; private int \u0002 = 0; private uint \u0001 = 0; private int \u0003 = 0; public int \u0002([In] int obj0) { label_0: int num1 = this.\u0003; int num2; while (true) { int num3 = obj0; if (num1 < num3) goto label_14; label_5: long num4 = (long) this.\u0001; int num5 = 1; int num6 = obj0; label_6: int num7 = 31; int num8; int num9; while (true) { int num10 = num6 & num7; num8 = num5 << num10; num9 = 1; if (num9 != 0) { while (true) { if (true) { if (num9 == 0) { num6 = num9; num5 = num8; goto label_6; } else goto label_11; } } num7 = num9; num6 = num9; num5 = num8; } else break; } label_11: long num11 = (long) (num8 - num9); num2 = (int) (num4 & num11); if (false) { num1 = num2; continue; } goto label_3; label_14: if (this.\u0001 != this.\u0002) { \u0003.\u0002.\u0002 obj1 = this; int num12 = (int) obj1.\u0001; byte[] numArray = this.\u0001; \u0003.\u0002.\u0002 obj2 = this; int num13; int num14 = num13 = obj2.\u0001; obj2.\u0001 = num13 + 1; int index = num14; int num15 = ((int) numArray[index] & (int) byte.MaxValue | ((int) this.\u0001[this.\u0001++] & (int) byte.MaxValue) << 8) << this.\u0003; obj1.\u0001 = (uint) (num12 | num15); if (true) { this.\u0003 += 16; goto label_5; } else goto label_0; } else break; } return -1; label_3: return num2; } public void \u0002([In] int obj0) { label_0: this.\u0001 >>= obj0; label_1: if (true) { label_6: this.\u0003 -= obj0; do { if (true) { if (false) goto label_1; } else goto label_6; } while (false); } else goto label_0; } [SpecialName] public int \u0002() => this.\u0003; [SpecialName] public int \u0003() { int num1 = this.\u0002; int num2; while (true) { int num3 = this.\u0001; int num4 = num1 - num3; if (true) { if (false) { num1 = num4; } else { num1 = num4; break; } } else { num2 = num4; goto label_5; } } goto label_8; label_5: if (true) return num2; num1 = num2; label_8: int num5 = this.\u0003 >> 3; num2 = num1 + num5; goto label_5; } public void \u0002() { this.\u0001 >>= this.\u0003 & 7; this.\u0003 &= -8; } [SpecialName] public bool \u0002() => this.\u0001 == this.\u0002; public int \u0002([In] byte[] obj0, [In] int obj1, [In] int obj2) { if (true) goto label_22; label_4: int num1; int num2; while (true) { int num3 = this.\u0003; int num4 = 0; if (num4 == 0) goto label_5; label_3: num1 = num3 + num4; continue; label_5: int num5; int num6; if (num4 == 0) { if (true) { if (num3 <= num4 || obj2 <= 0) { num2 = obj2; } else { obj0[obj1++] = (byte) this.\u0001; goto label_24; } } else { num6 = num4; num5 = num3; goto label_13; } } else goto label_21; label_9: int num7; if (num2 != 0) num7 = this.\u0002; else break; label_12: int num8 = this.\u0001; int num9 = num7 - num8; num5 = obj2; num6 = num9; label_13: if (num5 > num6) obj2 = num9; Array.Copy((Array) this.\u0001, this.\u0001, (Array) obj0, obj1, obj2); this.\u0001 += obj2; if ((this.\u0001 - this.\u0002 & 1) != 0) { this.\u0001 = (uint) this.\u0001[this.\u0001++] & (uint) byte.MaxValue; this.\u0003 = 8; } if (true) { if (true) { int num10 = num1; if (false) { num7 = num10; goto label_12; } else { num4 = obj2; num3 = num10; } } else break; } else goto label_24; label_21: num2 = num3 + num4; if (false) goto label_9; else goto label_2; label_24: this.\u0001 >>= 8; this.\u0003 -= 8; obj2--; int num11 = num1; num4 = 1; num3 = num11; goto label_3; } return num1; label_2: return num2; label_22: num1 = 0; goto label_4; } public void \u0002([In] byte[] obj0, [In] int obj1, [In] int obj2) { if (true) goto label_6; label_4: this.\u0003 += 8; label_5: this.\u0001 = obj0; this.\u0001 = obj1; int num; this.\u0002 = num; return; label_6: if (this.\u0001 < this.\u0002) throw new InvalidOperationException(); num = obj1 + obj2; if (0 > obj1 || obj1 > num || num > obj0.Length) throw new ArgumentOutOfRangeException(); if ((obj2 & 1) != 0) { this.\u0001 |= (uint) (((int) obj0[obj1++] & (int) byte.MaxValue) << this.\u0003); goto label_4; } else goto label_5; } } internal sealed class \u0003 { private byte[] \u0001 = new byte[32768]; private int \u0001 = 0; private int \u0002 = 0; public void \u0002([In] int obj0) { int num1; if (true) { \u0003.\u0002.\u0003 obj = this; int num2; num1 = num2 = obj.\u0002; obj.\u0002 = num2 + 1; } int num3 = num1; if (false) goto label_2; label_1: if (num3 != 32768) { byte[] numArray = this.\u0001; \u0003.\u0002.\u0003 obj = this; int num4; int num5 = num4 = obj.\u0001; obj.\u0001 = num4 + 1; int index = num5; int num6 = (int) (byte) obj0; numArray[index] = (byte) num6; num3 = -1; } else goto label_7; label_2: if (true) { if (num3 != 0) { this.\u0001 &= (int) short.MaxValue; return; } } else goto label_1; label_7: throw new InvalidOperationException(); } private void \u0002([In] int obj0, [In] int obj1, [In] int obj2) { int num1 = 0; if (num1 == 0) { if (num1 == 0) goto label_5; } else goto label_6; label_2: if (false) return; byte[] numArray = this.\u0001; \u0003.\u0002.\u0003 obj = this; int num2; int num3 = num2 = obj.\u0001; obj.\u0001 = num2 + 1; int index = num3; int num4 = (int) this.\u0001[obj0++]; numArray[index] = (byte) num4; this.\u0001 &= (int) short.MaxValue; goto label_10; label_5: num1 = 0; label_6: int num5; int num6; if (num1 == 0) { int num7 = obj1; num6 = num7 - 1; num5 = num7; } else goto label_10; label_8: obj1 = num6; if (num5 <= 0) return; goto label_2; label_10: num5 = obj0; num6 = (int) short.MaxValue; if (num6 != 0) { obj0 = num5 & num6; goto label_5; } else goto label_8; } public void \u0002([In] int obj0, [In] int obj1) { if ((this.\u0002 += obj0) > 32768) throw new InvalidOperationException(); int sourceIndex = this.\u0001 - obj1 & (int) short.MaxValue; int num = 32768 - obj0; if (sourceIndex <= num && this.\u0001 < num) { if (obj0 <= obj1) { Array.Copy((Array) this.\u0001, sourceIndex, (Array) this.\u0001, this.\u0001, obj0); this.\u0001 += obj0; } else { while (obj0-- > 0) this.\u0001[this.\u0001++] = this.\u0001[sourceIndex++]; } } else this.\u0002(sourceIndex, obj0, obj1); } public int \u0002([In] \u0003.\u0002.\u0002 obj0, [In] int obj1) { int val1_1 = obj1; int val1_2; int val2_1; if (true) { int val2_2 = 32768; if (val2_2 != 0) val2_2 -= this.\u0002; int num = Math.Min(val1_1, val2_2); val2_1 = obj0.\u0003(); val1_2 = num; } else goto label_16; label_15: int num1 = Math.Min(val1_2, val2_1); if (true) { obj1 = num1; val1_1 = 32768; } else val1_1 = num1; label_16: int num2 = this.\u0001; int num3; while (true) { int num4 = val1_1 - num2; int num5; int num6; do { val1_2 = obj1; val2_1 = num4; if (true) { if (val1_2 > val2_1) { num3 = obj0.\u0002(this.\u0001, this.\u0001, num4); num5 = num3; num6 = num4; if (true) { if (num5 == num6) num3 += obj0.\u0002(this.\u0001, 0, obj1 - num4); } else goto label_2; } else num3 = obj0.\u0002(this.\u0001, this.\u0001, obj1); this.\u0001 = this.\u0001 + num3 & (int) short.MaxValue; } else goto label_15; } while (false); break; label_2: num2 = num6; val1_1 = num5; } this.\u0002 += num3; return num3; } public int \u0002() => 32768 - this.\u0002; public int \u0003() => this.\u0002; public int \u0002([In] byte[] obj0, [In] int obj1, [In] int obj2) { int num1 = this.\u0001; int num2 = obj2; int num3; while (true) { int num4 = this.\u0002; if (num2 <= num4) goto label_18; else goto label_17; label_3: int num5; int num6; if (num6 == 0) { num2 = num5; continue; } label_4: num1 = num5 & (int) short.MaxValue; label_5: num3 = obj2; num5 = obj2; num6 = 0; int num7; int num8; if (num6 == 0) { int length; if (num6 == 0) { if (num6 == 0) { int num9 = num1; length = num5 - num9; int num10 = length; num6 = 0; num5 = num10; } else goto label_4; } if (num5 > num6) { Array.Copy((Array) this.\u0001, 32768 - length, (Array) obj0, obj1, length); int num11 = obj1; num8 = length; num7 = num11; } else goto label_12; } else goto label_3; label_11: obj1 = num7 + num8; obj2 = num1; label_12: Array.Copy((Array) this.\u0001, num1 - obj2, (Array) obj0, obj1, obj2); this.\u0002 -= num3; if (this.\u0002 >= 0) { if (false) goto label_5; else goto label_15; } else break; label_17: obj2 = this.\u0002; goto label_5; label_18: num7 = this.\u0001 - this.\u0002; num8 = obj2; if (true) { int num12 = num7 + num8; num6 = 8; num5 = num12; goto label_3; } else goto label_11; } throw new InvalidOperationException(); label_15: return num3; } } internal sealed class \u0004 { private short[] \u0001; public static readonly \u0003.\u0002.\u0004 \u0001; public static readonly \u0003.\u0002.\u0004 \u0002; static \u0004() { label_0: byte[] numArray = new byte[288]; int num = 0; if (false) goto label_6; else goto label_16; label_4: while (num < 280) numArray[num++] = (byte) 7; goto label_8; label_6: if (true) numArray[num++] = (byte) 8; else goto label_13; label_8: if (num >= 288) { if (true) { \u0003.\u0002.\u0004.\u0001 = new \u0003.\u0002.\u0004(numArray); numArray = new byte[32]; num = 0; while (num < 32) numArray[num++] = (byte) 5; } else goto label_0; } else goto label_6; label_13: if (false) goto label_4; label_14: \u0003.\u0002.\u0004.\u0002 = new \u0003.\u0002.\u0004(numArray); if (true) return; goto label_13; label_16: while (num < 144) numArray[num++] = (byte) 8; for (; num < 256; numArray[num++] = (byte) 9) { if (false) goto label_14; } goto label_4; } public \u0004([In] byte[] obj0) => this.\u0002(obj0); private void \u0002([In] byte[] obj0) { int[] numArray1 = new int[16]; label_1: int[] numArray2 = new int[16]; for (int index1 = 0; index1 < obj0.Length; ++index1) { int num1 = (int) obj0[index1]; int num2; if (true) num2 = num1; if (num2 <= 0) continue; int[] numArray3; int index2; int num3 = (numArray3 = numArray1)[(IntPtr) (index2 = num2)] + 1; numArray3[index2] = num3; } int num4 = 0; int length = 512; for (int index = 1; index <= 15; ++index) { numArray2[index] = num4; num4 += numArray1[index] << 16 - index; if (index >= 10) { int num5 = numArray2[index] & 130944; if (true) { if (true) { int num6 = num4 & 130944; if (true) length += num6 - num5 >> 16 - index; else goto label_1; } else goto label_17; } else goto label_27; } } this.\u0001 = new short[(int) checked ((uint) length)]; int num7 = 512; int num8 = 15; label_13: int index3 = num8; goto label_23; label_15: int num9 = numArray1[index3] << 16 - index3; int num10; num8 = num10 - num9; int num11; if (true) { num4 = num8; num11 = num4 & 130944; } else goto label_13; label_17: int num12; for (int index4 = num11; index4 < num12; index4 = num10 + 128) { if (true) { this.\u0001[(int) \u0003.\u0002.\u0006.\u0002(index4)] = (short) (-num7 << 4 | index3); num7 += 1 << index3 - 9; num10 = index4; if (false) goto label_15; } else goto label_17; } --index3; label_23: if (index3 >= 10) { num12 = num4 & 130944; num10 = num4; goto label_15; } label_24: int index5 = 0; goto label_36; label_27: int index6; int index7; int num13; int num14; if (true) { if (index6 <= 9) { do { this.\u0001[index7] = (short) (index5 << 4 | index6); index7 += 1 << index6; } while (index7 < 512); } else { int num15 = (int) this.\u0001[index7 & 511]; int num16 = 1; int num17 = num15 & 15; if (true) { int num18 = num17 & 31; int num19 = num16 << num18; int num20 = -(num15 >> 4); do { this.\u0001[num20 | index7 >> 9] = (short) (index5 << 4 | index6); index7 += 1 << index6; } while (index7 < num19); } else { num14 = num17; num13 = num16; goto label_37; } } numArray2[index6] = num4 + (1 << 16 - index6); } else goto label_24; label_35: ++index5; label_36: num13 = index5; num14 = obj0.Length; label_37: if (num13 >= num14) return; index6 = (int) obj0[index5]; if (index6 != 0) { num4 = numArray2[index6]; index7 = (int) \u0003.\u0002.\u0006.\u0002(num4); goto label_27; } else goto label_35; } public int \u0002([In] \u0003.\u0002.\u0002 obj0) { int num1 = obj0.\u0002(9); int num2; int num3; int num4; int num5; int num6; int num7; int num8; while (true) { int index = num1; if (num1 < 0) goto label_20; else goto label_25; label_3: int num9; if (num5 < 0) { num9 = -(num2 >> 4); int num10 = num2 & 15; num5 = obj0.\u0002(num10); } else { obj0.\u0002(num2 & 15); num7 = num2; if (false) { num5 = num7; goto label_12; } else break; } label_8: if (true) { if (true) num6 = num5; else goto label_18; } else goto label_3; label_11: index = num6; label_12: if (true) { if (num5 >= 0) { num3 = (int) this.\u0001[num9 | index >> 9]; if (false) goto label_20; else goto label_15; } else { int num11 = obj0.\u0002(); int num12 = obj0.\u0002(num11); int num13 = (int) this.\u0001[num9 | num12 >> 9]; if ((num13 & 15) <= num11) { obj0.\u0002(num13 & 15); num5 = num13; } else goto label_19; } } else goto label_8; label_18: num8 = num5 >> 4; if (false) { num1 = num8; continue; } goto label_5; label_20: num4 = obj0.\u0002(); num2 = (int) this.\u0001[obj0.\u0002(num4)]; if (num2 >= 0) { num5 = num2; num6 = 15; if (num6 == 0) goto label_11; else goto label_22; } else goto label_24; label_25: num5 = num2 = (int) this.\u0001[index]; goto label_3; } return num7 >> 4; label_15: obj0.\u0002(num3 & 15); return num3 >> 4; label_5: return num8; label_19: return -1; label_22: if ((num5 & num6) <= num4) { obj0.\u0002(num2 & 15); return num2 >> 4; } label_24: return -1; } } internal sealed class \u0005 { private static readonly int[] \u0001; private static readonly int[] \u0002; private byte[] \u0001; private byte[] \u0002; private \u0003.\u0002.\u0004 \u0001; private int \u0001; private int \u0002; private int \u0003; private int \u0004; private int \u0005; private int \u0006; private byte \u0001; private int \u0007; private static readonly int[] \u0003; public bool \u0002([In] \u0003.\u0002.\u0002 obj0) { while (true) { switch (this.\u0001) { case 0: this.\u0002 = obj0.\u0002(5); if (this.\u0002 >= 0) { this.\u0002 += 257; obj0.\u0002(5); this.\u0001 = 1; goto case 1; } else goto label_1; case 1: this.\u0003 = obj0.\u0002(5); if (this.\u0003 >= 0) { ++this.\u0003; obj0.\u0002(5); this.\u0005 = this.\u0002 + this.\u0003; this.\u0002 = new byte[(int) checked ((uint) this.\u0005)]; this.\u0001 = 2; goto case 2; } else goto label_3; case 2: this.\u0004 = obj0.\u0002(4); if (this.\u0004 >= 0) { this.\u0004 += 4; obj0.\u0002(4); this.\u0001 = new byte[19]; this.\u0007 = 0; this.\u0001 = 3; goto case 3; } else goto label_6; case 3: for (; this.\u0007 < this.\u0004; ++this.\u0007) { int num = obj0.\u0002(3); if (num < 0) return false; obj0.\u0002(3); this.\u0001[\u0003.\u0002.\u0005.\u0003[this.\u0007]] = (byte) num; } this.\u0001 = new \u0003.\u0002.\u0004(this.\u0001); this.\u0001 = (byte[]) null; this.\u0007 = 0; this.\u0001 = 4; goto case 4; case 4: int num1; while (((num1 = this.\u0001.\u0002(obj0)) & -16) == 0) { this.\u0002[this.\u0007++] = this.\u0001 = (byte) num1; if (this.\u0007 == this.\u0005) return true; } if (num1 >= 0) { if (num1 >= 17) this.\u0001 = (byte) 0; this.\u0006 = num1 - 16; this.\u0001 = 5; goto case 5; } else goto label_17; case 5: int num2 = \u0003.\u0002.\u0005.\u0002[this.\u0006]; int num3 = obj0.\u0002(num2); if (num3 >= 0) { obj0.\u0002(num2); int num4 = num3 + \u0003.\u0002.\u0005.\u0001[this.\u0006]; while (num4-- > 0) this.\u0002[this.\u0007++] = this.\u0001; if (this.\u0007 != this.\u0005) { this.\u0001 = 4; continue; } goto label_27; } else goto label_22; default: continue; } } label_1: return false; label_3: return false; label_6: return false; label_17: return false; label_22: return false; label_27: return true; } public \u0003.\u0002.\u0004 \u0002() { byte[] destinationArray = new byte[(int) checked ((uint) this.\u0002)]; Array.Copy((Array) this.\u0002, 0, (Array) destinationArray, 0, this.\u0002); return new \u0003.\u0002.\u0004(destinationArray); } public \u0003.\u0002.\u0004 \u0003() { int num = this.\u0003; int length; while (true) { length = (int) checked ((uint) num); if (false) num = length; else break; } byte[] destinationArray = new byte[length]; if (true) Array.Copy((Array) this.\u0002, this.\u0002, (Array) destinationArray, 0, this.\u0003); return new \u0003.\u0002.\u0004(destinationArray); } static \u0005() { int length = 3; if (length != 0) { int[] numArray = new int[length]; // ISSUE: field reference RuntimeHelpers.InitializeArray((Array) numArray, __fieldref (\u0003.\u0003.\u0001)); \u0003.\u0002.\u0005.\u0001 = numArray; } else goto label_4; label_2: do { \u0003.\u0002.\u0005.\u0002 = new int[3] { 2, 3, 7 }; } while (false); length = 19; label_4: int[] numArray1 = new int[length]; // ISSUE: field reference RuntimeHelpers.InitializeArray((Array) numArray1, __fieldref (\u0003.\u0003.\u0001)); \u0003.\u0002.\u0005.\u0003 = numArray1; if (false) goto label_2; } } internal sealed class \u0006 { private static readonly int[] \u0001; private static readonly byte[] \u0001; private static readonly short[] \u0001; private static readonly byte[] \u0002; private static readonly short[] \u0002; private static readonly byte[] \u0003; public static short \u0002([In] int obj0) => (short) ((int) \u0003.\u0002.\u0006.\u0001[obj0 & 15] << 12 | (int) \u0003.\u0002.\u0006.\u0001[obj0 >> 4 & 15] << 8 | (int) \u0003.\u0002.\u0006.\u0001[obj0 >> 8 & 15] << 4 | (int) \u0003.\u0002.\u0006.\u0001[obj0 >> 12]); static \u0006() { label_0: \u0003.\u0002.\u0006.\u0001 = new int[19] { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; int length1; if (true) { \u0003.\u0002.\u0006.\u0001 = new byte[16] { (byte) 0, (byte) 8, (byte) 4, (byte) 12, (byte) 2, (byte) 10, (byte) 6, (byte) 14, (byte) 1, (byte) 9, (byte) 5, (byte) 13, (byte) 3, (byte) 11, (byte) 7, (byte) 15 }; \u0003.\u0002.\u0006.\u0001 = new short[286]; \u0003.\u0002.\u0006.\u0002 = new byte[286]; if (true) { length1 = 0; goto label_23; } } else goto label_15; label_7: int index; int num1; while (true) { num1 = index; if (true) { if (num1 < 256) { \u0003.\u0002.\u0006.\u0001[index] = \u0003.\u0002.\u0006.\u0002(256 + index << 7); \u0003.\u0002.\u0006.\u0002[index++] = (byte) 9; } else break; } else goto label_12; } label_11: num1 = index; label_12: if (num1 < 280) { \u0003.\u0002.\u0006.\u0001[index] = \u0003.\u0002.\u0006.\u0002(index - 256 << 9); if (true) { \u0003.\u0002.\u0006.\u0002[index++] = (byte) 7; goto label_11; } else goto label_0; } label_15: for (; index < 286; \u0003.\u0002.\u0006.\u0002[index++] = (byte) 8) \u0003.\u0002.\u0006.\u0001[index] = \u0003.\u0002.\u0006.\u0002(index - 88 << 8); int length2 = 30; label_17: if (length2 != 0) { \u0003.\u0002.\u0006.\u0002 = new short[length2]; length1 = 30; if (length1 != 0) { \u0003.\u0002.\u0006.\u0003 = new byte[length1]; index = 0; } else goto label_23; } else goto label_22; label_21: length2 = index; label_22: if (length2 >= 30) return; \u0003.\u0002.\u0006.\u0002[index] = \u0003.\u0002.\u0006.\u0002(index << 11); \u0003.\u0002.\u0006.\u0003[index] = (byte) 5; ++index; goto label_21; label_23: index = length1; int num2; int num3; while (true) { num2 = index; num3 = 144; if (num3 != 0) { if (num2 < num3) { \u0003.\u0002.\u0006.\u0001[index] = \u0003.\u0002.\u0006.\u0002(48 + index << 8); \u0003.\u0002.\u0006.\u0002[index++] = (byte) 8; } else goto label_7; } else break; } length2 = num3; length2 = num2; goto label_17; } } internal sealed class \u0007 : MemoryStream { public int \u0002() => this.ReadByte() | this.ReadByte() << 8; public int \u0003() => this.\u0002() | this.\u0002() << 16; public \u0007([In] byte[] obj0) : base(obj0, false) { } } } }