// Decompiled with JetBrains decompiler
// Type: .
// Assembly: WindowsBC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9909ee17073e3364
// MVID: 658BFC85-36E1-493D-98E6-AE9127D73D60
// Assembly location: C:\Users\Administrateur\Downloads\Virusshare.00004-msil\Trojan-Downloader.MSIL.BitCoinMiner.c-64f742a0b28b2c3d2a62ef6607fcfd5fa55b793a1aff3a6c11e014e3b119149e.exe

using \u000E;
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

namespace \u0090
{
  internal sealed class \u008F
  {
    private uint \u0001;

    [SpecialName]
    public long \u0088\u0003() => (long) this.\u0001;

    public \u008F() => this.Reset();

    public void Reset() => this.\u0001 = 1U;

    public void \u0089\u0003([In] byte[] obj0, [In] int obj1, [In] int obj2)
    {
      if (obj0 == null)
        throw new ArgumentNullException(\u0008.\u000E\u0003(568));
      if (obj1 < 0)
        throw new ArgumentOutOfRangeException(\u0008.\u000E\u0003(577), \u0008.\u000E\u0003(586));
      if (obj2 < 0)
        throw new ArgumentOutOfRangeException(\u0008.\u000E\u0003(611), \u0008.\u000E\u0003(586));
      if (obj1 >= obj0.Length)
        throw new ArgumentOutOfRangeException(\u0008.\u000E\u0003(577), \u0008.\u000E\u0003(620));
      if (obj1 + obj2 > obj0.Length)
        throw new ArgumentOutOfRangeException(\u0008.\u000E\u0003(611), \u0008.\u000E\u0003(661));
      uint num1 = this.\u0001 & (uint) ushort.MaxValue;
      uint num2 = this.\u0001 >> 16;
      while (obj2 > 0)
      {
        int num3 = 3800;
        if (num3 > obj2)
          num3 = obj2;
        obj2 -= num3;
        while (--num3 >= 0)
        {
          num1 += (uint) obj0[obj1++] & (uint) byte.MaxValue;
          num2 += num1;
        }
        num1 %= 65521U;
        num2 %= 65521U;
      }
      this.\u0001 = num2 << 16 | num1;
    }
  }
}
