Contract 0x8da25b8ed753a5910013167945a676921e864436

 

Contract Overview

Bellevue Network: BLV Token
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash
Block
From
To
Value
0x92ee3cbfde2128aac4f6fe627f9ebd8b5d7ecb5acb6045d448ab43e2adde4109119450582021-02-28 9:43:204 days 21 hrs ago0x44b2fdcb41d0acc1d3fe4068588bf2d38f2abe33 IN  Bellevue Network: BLV Token0 Ether0.005156316116
0xe0bb644cc9e2f5d49114e293a334166350feeb7114bc8fea8400a3812d7a68a6119128252021-02-23 10:50:299 days 19 hrs ago0xe2a8a29fb076cef3a243b9a6456da882e3abdb57 IN  Bellevue Network: BLV Token0 Ether0.01942869645
0xc29be4e2a08c1262e58fba104d07481011a9d8c3bd1a49766fecbfaba00c673d118711192021-02-17 0:44:4016 days 6 hrs ago0x442e393d8aef99dddfc8b2fb40ede8dbbd9acb2d IN  Bellevue Network: BLV Token0 Ether0.006356493143
0x05f59c53146e6009a0c45b5deeff1c5506bcbd61a4b92cd981955508a491301f118676242021-02-16 11:46:4116 days 19 hrs ago0xfaf32c4112080c610e6657a76243957cd145e0f3 IN  Bellevue Network: BLV Token0 Ether0.006400944144
0xefbfd3eaff740c1d3718407588ada0062acff8d16bfa483220587971828f9150118543242021-02-14 10:40:3618 days 20 hrs ago0xce864729ab8b45b8464993e5f7d873e6f6fc9a56 IN  Bellevue Network: BLV Token0 Ether0.005823081131
0xcda5343ad5a40dc9285dd3ac91c68895b8f15cc1d4821d1c3593f92f4dc8946c118532922021-02-14 6:48:0819 days 1 min ago0x00f8832bd1f7b5f1558f5cb8f22f49a13359f685 IN  Bellevue Network: BLV Token0 Ether0.004304014143
0x4bc7a43b33ba157c9b447a6ace405044546285f2605a491a83266ab5bfb9b3bc118532612021-02-14 6:40:5719 days 9 mins ago0x00f8832bd1f7b5f1558f5cb8f22f49a13359f685 IN  Bellevue Network: BLV Token0 Ether0.0037080736123.2
0xbf726c663c0f7a5f0a024a468c97fad3215dfe2dc6773064cfbf6b2f5277ac4d118159992021-02-08 13:13:5724 days 17 hrs ago0x991a3c90c9e49c80be86f968cbc749488d902b07 IN  Bellevue Network: BLV Token0 Ether0.015957909064359.000001459
0xe84c24cdcfa7e9340373a6589df7c26597ff7610441d0821d9f7dd7d29c42d5f118096402021-02-07 13:50:3225 days 16 hrs ago0xf5746259a7e800a94f9bfd2d12ada5316aa802ab IN  Bellevue Network: BLV Token0 Ether0.005022963113
0x27eb970357e202224ddf7b24b11b721329ff36a2d2b042e5a285796933f1ad56117842832021-02-03 16:08:1629 days 14 hrs ago0x00f8832bd1f7b5f1558f5cb8f22f49a13359f685 IN  Bellevue Network: BLV Token0 Ether0.0134953236303.6
0x3c36ad656685a3feb0cde827dca0e5bd16b5b5d4469241b6f77fd50638175971117775132021-02-02 15:03:1430 days 15 hrs ago0xec0907d4122196a494a002148ab3360a737f5d66 IN  Bellevue Network: BLV Token0 Ether0.010001475225
0xddd3d950670fe23a105007a79cd973678d2161b5e457701f5e38ce072e8a69f1117652142021-01-31 17:43:4732 days 13 hrs ago0xe2a8a29fb076cef3a243b9a6456da882e3abdb57 IN  Bellevue Network: BLV Token0 Ether0.005150862171
0x54fc11419987399a12c45127b6ca8fcd58c2dab9b2c0a6a3d3bf5f751aa758c7117652092021-01-31 17:43:1032 days 13 hrs ago0xe2a8a29fb076cef3a243b9a6456da882e3abdb57 IN  Bellevue Network: BLV Token0 Ether0.005090618169
0x1b32de7a4ce74dec914abc74ca191fe6c834561b615fd7bd9427158ce3ce6781117631432021-01-31 10:08:2432 days 20 hrs ago0x35f105e802da60d3312e5a89f51453a0c46b9dad IN  Bellevue Network: BLV Token0 Ether0.00346717878
0x7bbe263196f0b396a509c491b2fc8c1155da97a645364a32562e60a415a4db66117562842021-01-30 8:51:1333 days 21 hrs ago0x80b759f0a9391e64351e6b94e32c384a40d96b7d IN  Bellevue Network: BLV Token0 Ether0.00391168888
0xf09a445debd6e8e5d7806b3a7a343620040c4c4d0a4e677d420cf1770bda2743117469392021-01-28 22:04:0535 days 8 hrs ago0x0d0a0a00e47bf803bed7a2fe2954445c95c59bb5 IN  Bellevue Network: BLV Token0 Ether0.00440064999
0xf6795a15d4579c9feb09c8b31998445a72d67c70752f092f076c617aabc118dd117452592021-01-28 16:05:1235 days 14 hrs ago0xfaa2fa09b21ee8833d737dbae6636f586459c139 IN  Bellevue Network: BLV Token0 Ether0.005156316116
0x7532ae20bc5b8b370ab6314a37403b5da18ba9c55c35cdfe406371b0db951ed9117358202021-01-27 4:59:0337 days 1 hr ago0xd6c2ca9250bb228d7cf676127213f89ed6a147b0 IN  Bellevue Network: BLV Token0 Ether0.00320047272
0xe4bf552487fc9d027b76d286b606b79d2c06a7ced77a59a81a46c95138dc3d39117354952021-01-27 3:44:4937 days 3 hrs ago0x48b576c87e788a762d6f95a456f2a39113b46950 IN  Bellevue Network: BLV Token0 Ether0.00088657402161.000001459
0xe7aa2cf27bb2288e3bc3e4fb694b6153e1e707a7834381f5c1e51b1d76ccf323117322692021-01-26 15:56:4137 days 14 hrs ago0x769d5e6beb097eaebf7164c6760f77d05fd0b059 IN  Bellevue Network: BLV Token0 Ether0.00275596262
0x3d7c5ba62d061a2e44434a8e660464273614513659ef10a3e14354c5e15bf4db117224232021-01-25 3:37:4039 days 3 hrs ago0x3a52f35af4e6699c26b3cbd8021eb68343fe4879 IN  Bellevue Network: BLV Token0 Ether0.003862791986.9
0x6ca5fb5400a7912f4b8e44a1c6cdaa761ba54cbfd6b849cb00c4d4b0229caa75117140832021-01-23 20:44:1140 days 10 hrs ago0xde3ae7bc44c6f3b8e8e7ee800a1953ab8b721c4d IN  Bellevue Network: BLV Token0 Ether0.00324492373
0x06d0b7a0b8b92169c5593a0290fdda0ae9b7f7bd8a46f3c79c1256d6635e1511116946382021-01-20 20:52:1143 days 9 hrs ago0x0094bad01b4ce6dc840976a703971c0625b8e83b IN  Bellevue Network: BLV Token0 Ether0.00253370706457.000001459
0xe72c2cbf71b4d94916a722b46b452e5d76128a243a8d15e75a29f596f843724b116895152021-01-20 2:14:3244 days 4 hrs ago0x51115f73f927fcf13ef6f27f6baa170156d44489 IN  Bellevue Network: BLV Token0 Ether0.00271151161
0x2ab00a46049658a188e553e68258c772e4aac66ef33584790f63d59e8d053423116864102021-01-19 14:56:0344 days 15 hrs ago0x3e6c854da77b15f2f728a296d62fba1efadb7ed1 IN  Bellevue Network: BLV Token0 Ether0.00426729696
[ Download CSV Export 

OVERVIEW

Bellevue Network is a decentralized price-reactive cryptocurrency, which is backed by an open source treasury. It rewards its token holders from staking.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-28
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
  /**
   * @dev Returns true if `account` is a contract.
   *
   * [IMPORTANT]
   * ====
   * It is unsafe to assume that an address for which this function returns
   * false is an externally-owned account (EOA) and not a contract.
   *
   * Among others, `isContract` will return false for the following
   * types of addresses:
   *
   *  - an externally-owned account
   *  - a contract in construction
   *  - an address where a contract will be created
   *  - an address where a contract lived, but was destroyed
   * ====
   */
  function isContract(address account) internal view returns (bool) {
    // This method relies in extcodesize, which returns 0 for contracts in
    // construction, since the code is only stored at the end of the
    // constructor execution.

    uint256 size;
    // solhint-disable-next-line no-inline-assembly
    assembly { size := extcodesize(account) }
    return size > 0;
  }

  /**
   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
   * `recipient`, forwarding all available gas and reverting on errors.
   *
   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
   * of certain opcodes, possibly making contracts go over the 2300 gas limit
   * imposed by `transfer`, making them unable to receive funds via
   * `transfer`. {sendValue} removes this limitation.
   *
   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
   *
   * IMPORTANT: because control is transferred to `recipient`, care must be
   * taken to not create reentrancy vulnerabilities. Consider using
   * {ReentrancyGuard} or the
   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
   */
  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
    (bool success, ) = recipient.call{ value: amount }("");
    require(success, "Address: unable to send value, recipient may have reverted");
  }

  /**
   * @dev Performs a Solidity function call using a low level `call`. A
   * plain`call` is an unsafe replacement for a function call: use this
   * function instead.
   *
   * If `target` reverts with a revert reason, it is bubbled up by this
   * function (like regular Solidity function calls).
   *
   * Returns the raw returned data. To convert to the expected return value,
   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
   *
   * Requirements:
   *
   * - `target` must be a contract.
   * - calling `target` with `data` must not revert.
   *
   * _Available since v3.1._
   */
  function functionCall(address target, bytes memory data) internal returns (bytes memory) {
    return functionCall(target, data, "Address: low-level call failed");
  }

  /**
   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
   * `errorMessage` as a fallback revert reason when `target` reverts.
   *
   * _Available since v3.1._
   */
  function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
    return _functionCallWithValue(target, data, 0, errorMessage);
  }

  /**
   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
   * but also transferring `value` wei to `target`.
   *
   * Requirements:
   *
   * - the calling contract must have an ETH balance of at least `value`.
   * - the called Solidity function must be `payable`.
   *
   * _Available since v3.1._
   */
  function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
    return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
  }

  /**
   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
   * with `errorMessage` as a fallback revert reason when `target` reverts.
   *
   * _Available since v3.1._
   */
  function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
    require(address(this).balance >= value, "Address: insufficient balance for call");
    return _functionCallWithValue(target, data, value, errorMessage);
  }

  function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
    require(isContract(target), "Address: call to non-contract");

    // solhint-disable-next-line avoid-low-level-calls
    (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
    if (success) {
      return returndata;
    } else {
      // Look for revert reason and bubble it up if present
      if (returndata.length > 0) {
        // The easiest way to bubble the revert reason is using memory via assembly

        // solhint-disable-next-line no-inline-assembly
        assembly {
          let returndata_size := mload(returndata)
          revert(add(32, returndata), returndata_size)
        }
      } else {
        revert(errorMessage);
      }
    }
  }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);

}

abstract contract Context {
  function _msgSender() internal view virtual returns (address payable) {
    return msg.sender;
  }

  function _msgData() internal view virtual returns (bytes memory) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b > 0, errorMessage);
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts with custom message when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

contract Ownable is Context {
  address private _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () internal {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  /**
   * @dev Leaves the contract without owner. It will not be possible to call
   * `onlyOwner` functions anymore. Can only be called by the current owner.
   *
   * NOTE: Renouncing ownership will leave the contract without an owner,
   * thereby removing any functionality that is only available to the owner.
   */
  function renounceOwnership() public virtual onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

abstract contract StakeBLVToken {
  function transferHook(address sender, address recipient, uint256 amount, uint256 senderBalance, uint256 recipientBalance) external virtual returns (uint256, uint256, uint256);
  function updateMyStakes(address staker, uint256 balance, uint256 totalSupply) external virtual returns (uint256);
}


/**
 * @dev Implementation of the  BLV
 * BLV is a price-reactive cryptocurrency.
 * That is, the inflation rate of the token is wholly dependent on its market activity.
 * Minting does not happen when the price is less than the day prior.
 * When the price is greater than the day prior, the inflation for that day is
 * a function of its price, percent increase, volume, any positive price streaks,
 * and the amount of time any given holder has been holding.
 * In the first iteration, the dev team acts as the price oracle, but in the future, we plan to integrate a Chainlink price oracle.
 */
contract Token is Ownable, IERC20 {
  using SafeMath for uint256;
  using Address for address;

  mapping (address => uint256) private _balances;

  mapping (address => mapping (address => uint256)) private _allowances;

  uint256 private _totalSupply;

  string public constant _name = "Bellevue Network";
  string public constant _symbol = "BLV";
  uint8 public constant _decimals = 18;

  StakeBLVToken public _stakingContract;

  address public _intervalWatcher;

  address public _teamWallet;
  address public _treasuryWallet;
    
  uint public startTimestamp;
  
  bool public freeze;
  
  bool private _stakingEnabled;
  
  struct Vester {
      uint lastRelease;
      uint balanceRemaining;
      uint balanceInit;
  }
    
  mapping (address => Vester) public vesters;


  modifier onlyWatcher() {
    assert(_msgSender() == _intervalWatcher/*, "Caller must be watcher."*/);
    _;
  }

  modifier onlyStakingContract() {
    require(msg.sender == address(_stakingContract), "Ownable: caller is not the staking contract");
    _;
  }

  event ErrorMessage(string errorMessage);

  constructor () public {
    
    startTimestamp = block.timestamp;

    _stakingEnabled = false;
    _treasuryWallet = 0xF40B0918D6b78fd705F30D92C9626ad218F1aEcE;
    _teamWallet = 0x2BFA783D7f38aAAa997650aE0EfdBDF632288A7F;
    _intervalWatcher = msg.sender;
    
    freeze = false;
    transferOwnership(0x6f3Bdb71C8d42b5a5DEe58b1a66f8a299EC4d216);
    
    _mint(0xb1412DFFBb7db18F8686Ea4787c30cA40BC6D1a8, 1000000E18);
    _mint(0xd1d784920983CdB17EE125887c875548D149E856, 1000000E18);
    _mint(0x2366ff0577e53984Bc0E103c803658DA1Ef7d19A, 425000E18);
    _mint(0x380D463383201f1758a7c59aE569d79bA84D7263, 425000E18);
    _mint(0xf8880975805Fc659C756aBfE879002FDa1470768, 425000E18);
    _mint(0xE20cf34fD6B38689eb68968E90F25CC6B80B16FB, 425000E18);
    _mint(0xa2B9a5f796ef1f68B2aEF0c984F961beD1085500, 425000E18);
    _mint(0x15DD94C2F7A78Be9b7d8711C09083F4F6EFc1029, 425000E18);
    _mint(0xD388BD277F390Cb36A90DEf9771c47869b266BAE, 425000E18);
    _mint(0x93f5af632Ce523286e033f0510E9b3C9710F4489, 425000E18);
    _mint(0x85D72d2D43c7BF149abf2132bDA2992087a9527e, 425000E18);
    _mint(0x4f5304E7CC2efD8a12d92703fF4964A79276a638, 425000E18);
    _mint(0xD733801c2512ce294a34b3a8878365dd30c7d791, 425000E18);
    
    _mint(0x7af6701EF2456F25e22a6e4Bfd70bCdFA0aEeB97, 425000E18);
    _mint(0x41a9A2bb121FE08592678Fc2c6fd0498b914a3c7, 425000E18);
    _mint(0x4530B100BF6400268E22fE64d7548fFaafA8dC39, 425000E18);
    _mint(0xbb257625458a12374daf2AD0c91d5A215732F206, 425000E18);
    _mint(0x84998f375355AE7AE7f60e8ecF1D24ad59948e9a, 425000E18);
    _mint(0x25054f27C9972B341Aee6c0D373A652566075431, 425000E18);
    _mint(0x7Da3c02716676f81790726c91BF4D05f14E98677, 425000E18);
    _mint(0xbbDBD6Bb3C05a7c966c203502e0a5A373E01e103, 425000E18);
    _mint(0x2604afb5A64992e5aBBF25865C9d3387adE92bad, 425000E18);
    _mint(0x4f6EB296cCAC2668640934208538EE8e3d3C846c, 425000E18);
    _mint(0x2F7B7aFbcaC8A70a1E0fe712a644e4621EdBB832, 425000E18);
    _mint(0x0C780749E6d0bE3C64c130450B20C40b843fbEC4, 425000E18);
    
    
    _mint(0xa4e74aE45F53045e07e3189933Bb5B1286BaeD54, 425000E18);
    _mint(0x6766c0Ad04d5aA6B53D8E42738dafBA490B0A7a3, 425000E18);
    _mint(0xC419528eDA383691e1aA13C381D977343CB9E5D0, 425000E18);
    _mint(0x515e4940850c217B8f4f2E3D2bE0aC6A52F17624, 425000E18);
    _mint(0x946C2a67373e64D5B318f9A669fE5664256491d6, 425000E18);
    _mint(0x6CDB0A4902C81E9C63De8c486F31e8d5DDc0A9f7, 425000E18);
    _mint(0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E, 425000E18);
    _mint(0x3481fBA85c1b227Cd401d4ef2e2390f505738B08, 425000E18);
    _mint(0x06C8940CFEc1e9596123a2b0fA965F9E3758422f, 425000E18);
    _mint(0x5AaAEF91F93bE4dE932b8e7324aBBF9f26DAa706, 425000E18);
    _mint(0xEF572FbBdB552A00bdc2a3E3Bc9306df9E9e169d, 425000E18);
    _mint(0xE8609d2608Fb5555cb84e5D03c5B837A116fA8AD, 425000E18);
    
    _mint(0x05BaD2724b1415a8B6B3000a30E37d9C637D7340, 425000E18);
    _mint(0x2b82FEaC8778CE69eBbaE549DcfB558C6024714a, 425000E18);
    _mint(0xDBe24A37f06CAb8C8A786dDF0439ea5cB28e5328, 425000E18);
    _mint(0x318f1cFD866BE8a0835412A02127271B3e0F6485, 425000E18);
    _mint(0x5516F15603707EE1e854E149F0f0E33F443cC9C4, 425000E18);
    _mint(0x7723000de847d13856Aa46993e6D1d499D13af1B, 425000E18);
    _mint(0x76a7aa09e047fc0Cd56d206b986A67772ED936FD, 425000E18);
    _mint(0x4d6f7D3EC5ab66D14a494b4650717e7D44E527bD, 425000E18);
    _mint(0xA3839Cb3b18d0d8372cc1ba8ACb3C693329FD92B, 425000E18);
    _mint(0x7729370DA4bfeE1Ee183eEdD35176fCB20F9E8eb, 425000E18);
    _mint(0xa4b949fb6B2979E383b753f7b086ee1a7adB552a, 425000E18);
    _mint(0xc7861b59e2193424AfC83a83bD65c8B5216c7EB0, 425000E18);
    _mint(0x94054865f83f9Df3fAE7D4B8E6B08b7ff420b0e2, 425000E18);
    
    _mint(0x6766c0Ad04d5aA6B53D8E42738dafBA490B0A7a3, 29125000E18);
    
    
    
    
    vesters[_treasuryWallet] = (Vester(now, 25000000E18, 25000000E18));  // Treasury
    vesters[_teamWallet] = (Vester(now, 25000000E18, 25000000E18));  // Team
    
    
    vesters[0x8Ff5Ceb90FAb0e98fDfB3b9eACdF162dFFAaFeb4] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x48FFB1b31D30b59b54FEe7744fFd2Be62ae40E80] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xa626FDF1F62176EFFB78E00d579E421e67ADa485] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x814035FD80140Af0a5b7502c9b1a10f6eC8aD38A] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x3300D317713938007cFeC35268aaC7d54dB3a85b] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x99D34cAf247fCfB23570D1B29468DB1659604c96] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xFEDED73b3b2b74441C8Bf42218e7Ff24030A9705] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0793F2c24bDc8353951Dcb9b14D30801bb608421] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x4342e82B94b128fcCBe1bDDF454e51336cC5fde2] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xd62a38Bd99376013D485214CC968322C20A6cC40] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xC419528eDA383691e1aA13C381D977343CB9E5D0] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xdF1cb2e9B48C830154CE6030FFc5E2ce7fD6c328] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x88Eb97E5ECbf1c5b4ecA19aCF659d4724392eD86] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x13f0B3e3351ff54bA8daF733167436D46CBa8623] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0793F2c24bDc8353951Dcb9b14D30801bb608421] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xd7741872efC695be77C9bc8B7E7AFCF928dd4912] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xbcd670eB38fE7937245324F8a9689c49c7A8e91e] = (Vester(now, 875000E18, 875000E18));
    vesters[0x875e5d68cED80a84F1D0bdE9a864CF387690aBC1] = (Vester(now, 425000E18, 425000E18));
    vesters[0xD61545c9f495Da3d556e0474A102DE3937eB8451] = (Vester(now, 425000E18, 425000E18));
    vesters[0x42415d75FD3Bfc6cD44F232109925e04Fc5610d8] = (Vester(now, 425000E18, 425000E18));
    vesters[0xaC6dE509E1B5c1C619afe64e0dfA567bd5b58503] = (Vester(now, 850000E18, 850000E18));
    vesters[0x88B1fAb25703a07cACd2C9Da4797df2379F43A32] = (Vester(now, 850000E18, 850000E18));
    vesters[0xDfBB98446715dCCFcE6Fc231952d2e16884fD0d5] = (Vester(now, 850000E18, 850000E18));
    vesters[0x7947dD50cF73fdd44dBc8f7A4BE28E490B4D5D1B] = (Vester(now, 850000E18, 850000E18));
    
    vesters[0x6F0AB036b74a8d8263823609858C3F7efB9Ab782] = (Vester(now, 500000E18, 500000E18));
    vesters[0xB6f526ef7820BCA52058Be5c75dC05c7C456d22B] = (Vester(now, 500000E18, 500000E18));
    vesters[0xa3ccA0E4B6C70c2fdFbf95bB35BEA1CA604F7207] = (Vester(now, 750000E18, 750000E18));
    vesters[0x7BE8C8FEF3C323bEBd0338D7DB2F9370f896fecD] = (Vester(now, 750000E18, 750000E18));
    vesters[0x9c10FfeF1AeC731b616cc22fEdECA5d81d61859e] = (Vester(now, 750000E18, 750000E18));
    vesters[0x9F22318d7ceE9e22be01bD3bf64fB9257FB7F4B8] = (Vester(now, 750000E18, 750000E18));
    vesters[0xf4EdFf75aD10030DF1412317ea38Ed84e12Ef41C] = (Vester(now, 750000E18, 750000E18));
    vesters[0xbaFf5f62BF40cbBFC0Be450F11126Fc4e094aAc3] = (Vester(now, 500000E18, 500000E18));
    vesters[0x1C96aFc64A706695A9558E76679f8Bc72e354854] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0d0D3321bBeAFF438D68Ad58a77fdA6309920E86] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xB016539a2d7A0dFa98237C93AC4AF0f46Ba74BAD] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x66d4bdF37AA4c04c7C66a743396caE3FA2425f79] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x00893fAc04C1F1B6e30847Dcc1F24761271c81c7] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x20d256Ae504F7459532f3711035133624F83C15B] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x082faa352c52365c0B6e0D8F52523Acf8eA511f4] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0Bbc35b239209C7819bC8e0008FF476DD637DFca] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xb2103ACE0eca26D55dfC827cD59d51DD87Bd0e03] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x80DFbf3cF73f6bbA8B5175976ae8338D4Ced26A7] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xE1aF2f6ba1B34656e72005d1cFc25a80a6248211] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x9E667b5277A38fE2d0f9297447fa7C62d3d6aE69] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x1BAf30992f4F37e0c5909276bA0e1a3F96Eaf9Cb] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xbDfBFd5B4123566D358f69882A5909492049be8A] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x19e61Dbc204BA4A5E3Ef57721c7ab139399df7c6] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x87f84EEc3adAC507372018DA187661726867f316] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0Cbd15145285B9cd05e95c19cB1E2d1Fdc71Cf90] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x174818EB82C976083591d0eaa720B70498616561] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x643a7B5Cb05486626594b17280dcb051D2725155] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xf422c173264dCd512E3CEE0DB4AcB568707C0b8D] = (Vester(now, 850000E18, 850000E18));
    vesters[0xf916D5D0310BFCD0D9B8c43D0a29070670D825f9] = (Vester(now, 850000E18, 850000E18));
    vesters[0xE58Ea0ceD4417f0551Fb82ddF4F6477072DFb430] = (Vester(now, 850000E18, 850000E18));
  }
  
  
  
  function release() public {
      
    if(msg.sender == _treasuryWallet) {
        releaseTreasury();
        return;
    } else if (msg.sender == _teamWallet) {
        releaseTeam();
        return;
    }
    
    Vester storage vester = vesters[msg.sender];
    require(vester.balanceInit > 0 && vester.balanceRemaining > 0, "Timelock: no tokens to release");
    
    if(vester.lastRelease == startTimestamp) {
        uint tokens = mulDiv(vester.balanceInit, 25, 100);
        vester.lastRelease = block.timestamp;
        vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
        _mint(msg.sender, tokens);
        return;
    }
    
    uint daysSinceLast = block.timestamp.sub(vester.lastRelease) / 86400;
    
    require(daysSinceLast >= 30);
    
    uint tokens = mulDiv(vester.balanceInit, 25, 100);
    if(tokens > vester.balanceRemaining) {
        tokens = vester.balanceRemaining;
    }
    vester.lastRelease = block.timestamp;
    vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
    _mint(msg.sender, tokens);
}

    function releaseTreasury() internal {
        Vester storage vester = vesters[_treasuryWallet];
        if(vester.lastRelease == startTimestamp) {
            uint tokens = mulDiv(vester.balanceInit, 25, 100);
            vester.lastRelease = block.timestamp;
            vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
            _mint(_treasuryWallet, tokens);
            return;
        }
        uint daysSinceLast = block.timestamp.sub(vester.lastRelease) / 86400;
        require(daysSinceLast >= 90);
        uint tokens = mulDiv(vester.balanceInit, 25, 100);
        if(tokens > vester.balanceRemaining) {
            tokens = vester.balanceRemaining;
        }
        vester.lastRelease = block.timestamp;
        vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
        _mint(_treasuryWallet, tokens);
    }
    
    function releaseTeam() internal {
        Vester storage vester = vesters[_teamWallet];
        uint daysSinceLast = block.timestamp.sub(vester.lastRelease) / 86400;
        require(daysSinceLast >= 90);
        uint tokens = mulDiv(vester.balanceInit, 25, 100);
        if(tokens > vester.balanceRemaining) {
            tokens = vester.balanceRemaining;
        }
        vester.lastRelease = block.timestamp;
        vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
        _mint(_teamWallet, tokens);
    }


  function updateMyStakes() public {
    require(_stakingEnabled, "Staking is disabled");
    try _stakingContract.updateMyStakes(msg.sender, _balances[msg.sender], _totalSupply) returns (uint256 numTokens) {
      _mint(msg.sender, numTokens);
    } catch Error (string memory error) {
      emit ErrorMessage(error);
    }
  }

  function updateTreasuryWallet(address treasuryWallet) external onlyOwner {
    _treasuryWallet = treasuryWallet;
  }

  function updateIntervalWatcher(address treasuryWatcher) external onlyOwner {
    _intervalWatcher = treasuryWatcher;
  }

  function updateTreasuryStakes() external onlyWatcher {
    require(_stakingEnabled, "Staking is disabled");
    try _stakingContract.updateMyStakes(_treasuryWallet, balanceOf(_treasuryWallet), _totalSupply) returns (uint256 numTokens) {
      _mint(_treasuryWallet, numTokens);
    } catch Error (string memory error) {
      emit ErrorMessage(error);
    }
  }

  function updateTeamStakes() external onlyWatcher {
    require(_stakingEnabled, "Staking is disabled");
    try _stakingContract.updateMyStakes(_teamWallet, balanceOf(_teamWallet), _totalSupply) returns (uint256 numTokens) {
      _mint(_teamWallet, numTokens);
    } catch Error (string memory error) {
      emit ErrorMessage(error);
    }
  }

  function updateStakingContract(StakeBLVToken stakingContract) external onlyOwner {
    _stakingContract = stakingContract;
    _stakingEnabled = true;
  }


  /**
   * @dev Returns the name of the token.
   */
  function name() public view returns (string memory) {
    return _name;
  }

  /**
   * @dev Returns the symbol of the token, usually a shorter version of the
   * name.
   */
  function symbol() public view returns (string memory) {
    return _symbol;
  }

  /**
   * @dev Returns the number of decimals used to get its user representation.
   * For example, if `decimals` equals `2`, a balance of `505` tokens should
   * be displayed to a user as `5,05` (`505 / 10 ** 2`).
   *
   * Tokens usually opt for a value of 18, imitating the relationship between
   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
   * called.
   *
   * NOTE: This information is only used for _display_ purposes: it in
   * no way affects any of the arithmetic of the contract, including
   * {IERC20-balanceOf} and {IERC20-transfer}.
   */
  function decimals() public view returns (uint8) {
    return _decimals;
  }

  /**
   * @dev See {IERC20-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return _totalSupply;
  }

  /**
   * @dev See {IERC20-balanceOf}.
   */
  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account].add(vesters[account].balanceRemaining);
  }
  
  function balanceOfNoVesting(address account) public view returns (uint256) {
    return _balances[account];
  }

  /**
   * @dev See {IERC20-transfer}.
   *
   * Requirements:
   *
   * - `recipient` cannot be the zero address.
   * - the caller must have a balance of at least `amount`.
   */
  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  /**
   * @dev See {IERC20-allowance}.
   */
  function allowance(address owner, address spender) public view virtual override returns (uint256) {
    return _allowances[owner][spender];
  }

  /**
   * @dev See {IERC20-approve}.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function approve(address spender, uint256 amount) public virtual override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  /**
   * @dev See {IERC20-transferFrom}.
   *
   * Emits an {Approval} event indicating the updated allowance. This is not
   * required by the EIP. See the note at the beginning of {ERC20};
   *
   * Requirements:
   * - `sender` and `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   * - the caller must have allowance for ``sender``'s tokens of at least
   * `amount`.
   */
  function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
    return true;
  }

  /**
   * @dev Atomically increases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {IERC20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  /**
   * @dev Atomically decreases the allowance granted to `spender` by the caller.
   *
   * This is an alternative to {approve} that can be used as a mitigation for
   * problems described in {IERC20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   * - `spender` must have allowance for the caller of at least
   * `subtractedValue`.
   */
  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
    return true;
  }

  /**
   * @dev Moves tokens `amount` from `sender` to `recipient`.
   *
   * This is internal function is equivalent to {transfer}, and can be used to
   * e.g. implement automatic token fees, slashing mechanisms, etc.
   *
   * Emits a {Transfer} event.
   *
   * Requirements:
   *
   * - `sender` cannot be the zero address.
   * - `recipient` cannot be the zero address.
   * - `sender` must have a balance of at least `amount`.
   */
  function _transfer(address sender, address recipient, uint256 amount) internal virtual {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");
    require(_balances[sender] >= amount, "ERC20: transfer amount exceeds balance");
    if(sender != owner()) {
        require(freeze == false, "Contract is frozen");
    }
    
    

    if(_stakingEnabled) {
      (uint256 senderBalance, uint256 recipientBalance, uint256 burnAmount) = _stakingContract.transferHook(sender, recipient, amount, _balances[sender], _balances[recipient]);
      _balances[sender] = senderBalance;
      _balances[recipient] = recipientBalance;
      _totalSupply = _totalSupply.sub(burnAmount);
      if (burnAmount > 0) {
        emit Transfer(sender, recipient, amount.sub(burnAmount));
        emit Transfer(sender, address(0), burnAmount);
      } else {
        emit Transfer(sender, recipient, amount);
      }
    } else {
      _balances[sender] = _balances[sender].sub(amount);
      _balances[recipient] = _balances[recipient].add(amount);
      emit Transfer(sender, recipient, amount);
    }
  }


  /** @dev Creates `amount` tokens and assigns them to `account`, increasing
   * the total supply.
   *
   * Emits a {Transfer} event with `from` set to the zero address.
   *
   * Requirements
   *
   * - `to` cannot be the zero address.
   */
  function _mint(address account, uint256 amount) internal virtual {
    require(account != address(0), "ERC20: mint to the zero address");

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(amount);
    emit Transfer(address(0), account, amount);
  }


  function mint(address account, uint256 amount) public onlyStakingContract {
    require(account != address(0), "ERC20: mint to the zero address");

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(amount);
    emit Transfer(address(0), account, amount);
  }

  /**
   * @dev Destroys `amount` tokens from `account`, reducing the
   * total supply.
   *
   * Emits a {Transfer} event with `to` set to the zero address.
   *
   * Requirements
   *
   * - `account` cannot be the zero address.
   * - `account` must have at least `amount` tokens.
   */
  function _burn(address account, uint256 amount) external onlyStakingContract {
    require(account != address(0), "ERC20: burn from the zero address");
    _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(account, address(0), amount);
  }

  function burn(uint256 amount) external {
    _balances[_msgSender()] = _balances[_msgSender()].sub(amount, "ERC20: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(_msgSender(), address(0), amount);
  }

  /**
   * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
   *
   * This is internal function is equivalent to `approve`, and can be used to
   * e.g. set automatic allowances for certain subsystems, etc.
   *
   * Emits an {Approval} event.
   *
   * Requirements:
   *
   * - `owner` cannot be the zero address.
   * - `spender` cannot be the zero address.
   */
  function _approve(address owner, address spender, uint256 amount) internal virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }
  
  function updateFreeze(bool _freeze) external onlyOwner {
      freeze = _freeze;
  }
  
      function mulDiv (uint x, uint y, uint z) public pure returns (uint) {
          (uint l, uint h) = fullMul (x, y);
          assert (h < z);
          uint mm = mulmod (x, y, z);
          if (mm > l) h -= 1;
          l -= mm;
          uint pow2 = z & -z;
          z /= pow2;
          l /= pow2;
          l += h * ((-pow2) / pow2 + 1);
          uint r = 1;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          return l * r;
    }
    
    function fullMul (uint x, uint y) private pure returns (uint l, uint h) {
          uint mm = mulmod (x, y, uint (-1));
          l = x * y;
          h = mm - l;
          if (mm < l) h -= 1;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"errorMessage","type":"string"}],"name":"ErrorMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_intervalWatcher","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingContract","outputs":[{"internalType":"contract StakeBLVToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfNoVesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"z","type":"uint256"}],"name":"mulDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_freeze","type":"bool"}],"name":"updateFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWatcher","type":"address"}],"name":"updateIntervalWatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateMyStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract StakeBLVToken","name":"stakingContract","type":"address"}],"name":"updateStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTeamStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTreasuryStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesters","outputs":[{"internalType":"uint256","name":"lastRelease","type":"uint256"},{"internalType":"uint256","name":"balanceRemaining","type":"uint256"},{"internalType":"uint256","name":"balanceInit","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060006200001e62002a12565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062004d1d833981519152908290a3504260085560098054600780546001600160a01b031990811673f40b0918d6b78fd705f30d92c9626ad218f1aece17909155600680548216732bfa783d7f38aaaa997650ae0efdbdf632288a7f179055600580549091163317905561ffff19169055620000d7736f3bdb71c8d42b5a5dee58b1a66f8a299ec4d21662002a16565b6200010173b1412dffbb7db18f8686ea4787c30ca40bc6d1a869d3c21bcecceda100000062002b14565b6200012b73d1d784920983cdb17ee125887c875548d149e85669d3c21bcecceda100000062002b14565b62000155732366ff0577e53984bc0e103c803658da1ef7d19a6959ff4bd17d7e97a0000062002b14565b6200017f73380d463383201f1758a7c59ae569d79ba84d72636959ff4bd17d7e97a0000062002b14565b620001a973f8880975805fc659c756abfe879002fda14707686959ff4bd17d7e97a0000062002b14565b620001d373e20cf34fd6b38689eb68968e90f25cc6b80b16fb6959ff4bd17d7e97a0000062002b14565b620001fd73a2b9a5f796ef1f68b2aef0c984f961bed10855006959ff4bd17d7e97a0000062002b14565b620002277315dd94c2f7a78be9b7d8711c09083f4f6efc10296959ff4bd17d7e97a0000062002b14565b6200025173d388bd277f390cb36a90def9771c47869b266bae6959ff4bd17d7e97a0000062002b14565b6200027b7393f5af632ce523286e033f0510e9b3c9710f44896959ff4bd17d7e97a0000062002b14565b620002a57385d72d2d43c7bf149abf2132bda2992087a9527e6959ff4bd17d7e97a0000062002b14565b620002cf734f5304e7cc2efd8a12d92703ff4964a79276a6386959ff4bd17d7e97a0000062002b14565b620002f973d733801c2512ce294a34b3a8878365dd30c7d7916959ff4bd17d7e97a0000062002b14565b62000323737af6701ef2456f25e22a6e4bfd70bcdfa0aeeb976959ff4bd17d7e97a0000062002b14565b6200034d7341a9a2bb121fe08592678fc2c6fd0498b914a3c76959ff4bd17d7e97a0000062002b14565b62000377734530b100bf6400268e22fe64d7548ffaafa8dc396959ff4bd17d7e97a0000062002b14565b620003a173bb257625458a12374daf2ad0c91d5a215732f2066959ff4bd17d7e97a0000062002b14565b620003cb7384998f375355ae7ae7f60e8ecf1d24ad59948e9a6959ff4bd17d7e97a0000062002b14565b620003f57325054f27c9972b341aee6c0d373a6525660754316959ff4bd17d7e97a0000062002b14565b6200041f737da3c02716676f81790726c91bf4d05f14e986776959ff4bd17d7e97a0000062002b14565b6200044973bbdbd6bb3c05a7c966c203502e0a5a373e01e1036959ff4bd17d7e97a0000062002b14565b62000473732604afb5a64992e5abbf25865c9d3387ade92bad6959ff4bd17d7e97a0000062002b14565b6200049d734f6eb296ccac2668640934208538ee8e3d3c846c6959ff4bd17d7e97a0000062002b14565b620004c7732f7b7afbcac8a70a1e0fe712a644e4621edbb8326959ff4bd17d7e97a0000062002b14565b620004f1730c780749e6d0be3c64c130450b20c40b843fbec46959ff4bd17d7e97a0000062002b14565b6200051b73a4e74ae45f53045e07e3189933bb5b1286baed546959ff4bd17d7e97a0000062002b14565b62000545736766c0ad04d5aa6b53d8e42738dafba490b0a7a36959ff4bd17d7e97a0000062002b14565b6200056f73c419528eda383691e1aa13c381d977343cb9e5d06959ff4bd17d7e97a0000062002b14565b6200059973515e4940850c217b8f4f2e3d2be0ac6a52f176246959ff4bd17d7e97a0000062002b14565b620005c373946c2a67373e64d5b318f9a669fe5664256491d66959ff4bd17d7e97a0000062002b14565b620005ed736cdb0a4902c81e9c63de8c486f31e8d5ddc0a9f76959ff4bd17d7e97a0000062002b14565b6200061773907b4128ff43ed92b14b8145a01e8f9bc6890e3e6959ff4bd17d7e97a0000062002b14565b62000641733481fba85c1b227cd401d4ef2e2390f505738b086959ff4bd17d7e97a0000062002b14565b6200066b7306c8940cfec1e9596123a2b0fa965f9e3758422f6959ff4bd17d7e97a0000062002b14565b62000695735aaaef91f93be4de932b8e7324abbf9f26daa7066959ff4bd17d7e97a0000062002b14565b620006bf73ef572fbbdb552a00bdc2a3e3bc9306df9e9e169d6959ff4bd17d7e97a0000062002b14565b620006e973e8609d2608fb5555cb84e5d03c5b837a116fa8ad6959ff4bd17d7e97a0000062002b14565b620007137305bad2724b1415a8b6b3000a30e37d9c637d73406959ff4bd17d7e97a0000062002b14565b6200073d732b82feac8778ce69ebbae549dcfb558c6024714a6959ff4bd17d7e97a0000062002b14565b6200076773dbe24a37f06cab8c8a786ddf0439ea5cb28e53286959ff4bd17d7e97a0000062002b14565b6200079173318f1cfd866be8a0835412a02127271b3e0f64856959ff4bd17d7e97a0000062002b14565b620007bb735516f15603707ee1e854e149f0f0e33f443cc9c46959ff4bd17d7e97a0000062002b14565b620007e5737723000de847d13856aa46993e6d1d499d13af1b6959ff4bd17d7e97a0000062002b14565b6200080f7376a7aa09e047fc0cd56d206b986a67772ed936fd6959ff4bd17d7e97a0000062002b14565b62000839734d6f7d3ec5ab66d14a494b4650717e7d44e527bd6959ff4bd17d7e97a0000062002b14565b6200086373a3839cb3b18d0d8372cc1ba8acb3c693329fd92b6959ff4bd17d7e97a0000062002b14565b6200088d737729370da4bfee1ee183eedd35176fcb20f9e8eb6959ff4bd17d7e97a0000062002b14565b620008b773a4b949fb6b2979e383b753f7b086ee1a7adb552a6959ff4bd17d7e97a0000062002b14565b620008e173c7861b59e2193424afc83a83bd65c8b5216c7eb06959ff4bd17d7e97a0000062002b14565b6200090b7394054865f83f9df3fae7d4b8e6b08b7ff420b0e26959ff4bd17d7e97a0000062002b14565b62000936736766c0ad04d5aa6b53d8e42738dafba490b0a7a36a18177569e71088f120000062002b14565b6040805160608082018352428083526a14adf4b7320334b900000060208085018281528587018381526007546001600160a01b039081166000908152600a8086528a822099518a55935160018a81019190915592516002998a015589518089018b52878152808601878152818c0197885260065490931682528486528a822090518155915192820192909255935193909601929092558551808501875283815269d3c21bcecceda1000000818301818152828901828152738ff5ceb90fab0e98fdfb3b9eacdf162dffaafeb4895285855292517f2f9df6faf38260e721095b52133008955536815d2a320b00684f18bc99b72d8f55517f2f9df6faf38260e721095b52133008955536815d2a320b00684f18bc99b72d905590517f2f9df6faf38260e721095b52133008955536815d2a320b00684f18bc99b72d9155865180860188528481528083018281528189018381527348ffb1b31d30b59b54fee7744ffd2be62ae40e80895285855291517ff6efe8cf9d8328bc4d93bd999e5a0e8bb063e1f34f2235e3153884b582d83bc155517ff6efe8cf9d8328bc4d93bd999e5a0e8bb063e1f34f2235e3153884b582d83bc255517ff6efe8cf9d8328bc4d93bd999e5a0e8bb063e1f34f2235e3153884b582d83bc3558651808601885284815280830182815281890183815273a626fdf1f62176effb78e00d579e421e67ada485895285855291517fa6b399001e7e9994a539633ba144d6468622274d14311b3082bd1a4964e1b10355517fa6b399001e7e9994a539633ba144d6468622274d14311b3082bd1a4964e1b10455517fa6b399001e7e9994a539633ba144d6468622274d14311b3082bd1a4964e1b105558651808601885284815280830182815281890183815273814035fd80140af0a5b7502c9b1a10f6ec8ad38a895285855291517faff4cc4178a422385b3aeb64115af5da9eb0afc6c833313c0b76da22507d66f055517faff4cc4178a422385b3aeb64115af5da9eb0afc6c833313c0b76da22507d66f155517faff4cc4178a422385b3aeb64115af5da9eb0afc6c833313c0b76da22507d66f25586518086018852848152808301828152818901838152733300d317713938007cfec35268aac7d54db3a85b895285855291517f3fd3e98508e460dcfca2d0cb08f51b5bdef16fbb0e5ab6fdf37ea3f76950a5c755517f3fd3e98508e460dcfca2d0cb08f51b5bdef16fbb0e5ab6fdf37ea3f76950a5c855517f3fd3e98508e460dcfca2d0cb08f51b5bdef16fbb0e5ab6fdf37ea3f76950a5c955865180860188528481528083018281528189018381527399d34caf247fcfb23570d1b29468db1659604c96895285855291517f05f8053fe2d3ff9319ede5face9a2edcb57c41009f5066194835d24d9dc28b3f55517f05f8053fe2d3ff9319ede5face9a2edcb57c41009f5066194835d24d9dc28b4055517f05f8053fe2d3ff9319ede5face9a2edcb57c41009f5066194835d24d9dc28b41558651808601885284815280830182815281890183815273feded73b3b2b74441c8bf42218e7ff24030a9705895285855291517f06ff3a47ae9e0a6de3f2101898f20540bc6b6c529a393713f1a979086f5dd7c555517f06ff3a47ae9e0a6de3f2101898f20540bc6b6c529a393713f1a979086f5dd7c655517f06ff3a47ae9e0a6de3f2101898f20540bc6b6c529a393713f1a979086f5dd7c75586518086018852848152808301829052870181905286518086018852848152808301828152818901838152734342e82b94b128fccbe1bddf454e51336cc5fde2895285855291517f6e86d05976cf7775ef1525d6b5a76a2fe4140576d7e460e500e2f45fb528a1b955517f6e86d05976cf7775ef1525d6b5a76a2fe4140576d7e460e500e2f45fb528a1ba55517f6e86d05976cf7775ef1525d6b5a76a2fe4140576d7e460e500e2f45fb528a1bb558651808601885284815280830182815281890183815273d62a38bd99376013d485214cc968322c20a6cc40895285855291517fca62c1591704387b35e56b7b705745a75753c9e75b6f588237aed2e3c76ff3e555517fca62c1591704387b35e56b7b705745a75753c9e75b6f588237aed2e3c76ff3e655517fca62c1591704387b35e56b7b705745a75753c9e75b6f588237aed2e3c76ff3e7558651808601885284815280830182815281890183815273c419528eda383691e1aa13c381d977343cb9e5d0895285855291517f3b2df453ad2dd6c6016468fbb133d1dcdf1152a339842d8d27aaaf00a9faf1f755517f3b2df453ad2dd6c6016468fbb133d1dcdf1152a339842d8d27aaaf00a9faf1f855517f3b2df453ad2dd6c6016468fbb133d1dcdf1152a339842d8d27aaaf00a9faf1f9558651808601885284815280830182815281890183815273df1cb2e9b48c830154ce6030ffc5e2ce7fd6c328895285855291517fadccde0c3f19bee94ad098bd336dcac362f24be9a314a1f8eab809186a9beb0855517fadccde0c3f19bee94ad098bd336dcac362f24be9a314a1f8eab809186a9beb0955517fadccde0c3f19bee94ad098bd336dcac362f24be9a314a1f8eab809186a9beb0a55865180860188528481528083018281528189018381527388eb97e5ecbf1c5b4eca19acf659d4724392ed86895285855291517f2115a5227ca65259ff8f8277af5ad554844b1b2a916ab43acc56e6630310d2ea55517f2115a5227ca65259ff8f8277af5ad554844b1b2a916ab43acc56e6630310d2eb55517f2115a5227ca65259ff8f8277af5ad554844b1b2a916ab43acc56e6630310d2ec55865180860188528481528083018281528189018381527313f0b3e3351ff54ba8daf733167436d46cba8623895285855291517ffc63bfcbc9abd5996ab28225e484bb14cc25a4603f6ccb7824cf6aaf6b4a98d755517ffc63bfcbc9abd5996ab28225e484bb14cc25a4603f6ccb7824cf6aaf6b4a98d855517ffc63bfcbc9abd5996ab28225e484bb14cc25a4603f6ccb7824cf6aaf6b4a98d95586518086018852848152808301828152818901838152730793f2c24bdc8353951dcb9b14d30801bb608421895285855291517f0ddc0b348123a131c911fcc47a23c1e782ae7a8f061d7fef157b71d52914757755517f0ddc0b348123a131c911fcc47a23c1e782ae7a8f061d7fef157b71d52914757855517f0ddc0b348123a131c911fcc47a23c1e782ae7a8f061d7fef157b71d529147579558651808601885284815280830182815281890183815273d7741872efc695be77c9bc8b7e7afcf928dd4912895285855291517f7f3fd4d4e13635c2d6e49546b59fa9a22a418fe7f5379b9b6963e1ae6e4f0a4955517f7f3fd4d4e13635c2d6e49546b59fa9a22a418fe7f5379b9b6963e1ae6e4f0a4a55517f7f3fd4d4e13635c2d6e49546b59fa9a22a418fe7f5379b9b6963e1ae6e4f0a4b558651808601885284815269b949d854f34fece00000818401818152828a0191825273bcd670eb38fe7937245324f8a9689c49c7a8e91e895285855291517f6b1b04596ae70e0ec8fb2cdf7d79418d95e1d351cb59b73304f522821a724bea5590517f6b1b04596ae70e0ec8fb2cdf7d79418d95e1d351cb59b73304f522821a724beb55517f6b1b04596ae70e0ec8fb2cdf7d79418d95e1d351cb59b73304f522821a724bec55865180860188528481526959ff4bd17d7e97a00000818401818152828a0182815273875e5d68ced80a84f1d0bde9a864cf387690abc18a5286865292517f71755ba73bbf3a84e1f13a89e3c2abef792a8499058f75ecc8d14ba4c1c3688755517f71755ba73bbf3a84e1f13a89e3c2abef792a8499058f75ecc8d14ba4c1c368885590517f71755ba73bbf3a84e1f13a89e3c2abef792a8499058f75ecc8d14ba4c1c368895587518087018952858152808401828152818a0183815273d61545c9f495da3d556e0474a102de3937eb84518a5286865291517f5594f508f4bb7afdd1f26901dddad4638ddf171d0422a0e3b8941dd749aeeb9355517f5594f508f4bb7afdd1f26901dddad4638ddf171d0422a0e3b8941dd749aeeb9455517f5594f508f4bb7afdd1f26901dddad4638ddf171d0422a0e3b8941dd749aeeb955587518087018952858152808401828152818a019283527342415d75fd3bfc6cd44f232109925e04fc5610d8895285855290517fe282805b1da1fa689145a593549c3ca8a5aec451cc820c5c17b972ceb462003b55517fe282805b1da1fa689145a593549c3ca8a5aec451cc820c5c17b972ceb462003c55517fe282805b1da1fa689145a593549c3ca8a5aec451cc820c5c17b972ceb462003d558651808601885284815269b3fe97a2fafd2f400000818401818152828a0182815273ac6de509e1b5c1c619afe64e0dfa567bd5b585038a5286865292517ff7ee2b0c549177b195927156eaaf97681d0381221141a27f9f261d9b1fae207e55517ff7ee2b0c549177b195927156eaaf97681d0381221141a27f9f261d9b1fae207f5590517ff7ee2b0c549177b195927156eaaf97681d0381221141a27f9f261d9b1fae20805587518087018952858152808401828152818a018381527388b1fab25703a07cacd2c9da4797df2379f43a328a5286865291517f7c52d2036b4ba16891589d5b5906c6f8161599cf03e0356d34ed8ed806aa4c9b55517f7c52d2036b4ba16891589d5b5906c6f8161599cf03e0356d34ed8ed806aa4c9c55517f7c52d2036b4ba16891589d5b5906c6f8161599cf03e0356d34ed8ed806aa4c9d5587518087018952858152808401828152818a0183815273dfbb98446715dccfce6fc231952d2e16884fd0d58a5286865291517f2950060f88ad012ea7b348170a6ded7536b5d386f60b38ebc951193e7c7ea26255517f2950060f88ad012ea7b348170a6ded7536b5d386f60b38ebc951193e7c7ea26355517f2950060f88ad012ea7b348170a6ded7536b5d386f60b38ebc951193e7c7ea2645587518087018952858152808401828152818a01838152737947dd50cf73fdd44dbc8f7a4be28e490b4d5d1b8a5286865291517f89b275390c095574482359aef83f6b1c4a1299e473df9aa55acaf697cb1b6e6955517f89b275390c095574482359aef83f6b1c4a1299e473df9aa55acaf697cb1b6e6a55517f89b275390c095574482359aef83f6b1c4a1299e473df9aa55acaf697cb1b6e6b55875180870189528581526969e10de76676d0800000818501818152828b01828152736f0ab036b74a8d8263823609858c3f7efb9ab7828b5287875292517fb5836931230de9d6f8daef3797d574ff7da87f197e3e2072506dd6d23517eede55517fb5836931230de9d6f8daef3797d574ff7da87f197e3e2072506dd6d23517eedf5590517fb5836931230de9d6f8daef3797d574ff7da87f197e3e2072506dd6d23517eee05588518088018a52868152808501828152818b0183815273b6f526ef7820bca52058be5c75dc05c7c456d22b8b5287875291517fe751ac66bbbff379bd331bd17aa12e3fe2d17f258c3cab44928e29dcb5cf66f755517fe751ac66bbbff379bd331bd17aa12e3fe2d17f258c3cab44928e29dcb5cf66f855517fe751ac66bbbff379bd331bd17aa12e3fe2d17f258c3cab44928e29dcb5cf66f95588518088018a52868152699ed194db19b238c00000818601818152828c0182815273a3cca0e4b6c70c2fdfbf95bb35bea1ca604f72078c5288885292517faa1ad602f66fe59092951865e5ee46fb42e2c0a012f3ef27b6ee407283bf291255517faa1ad602f66fe59092951865e5ee46fb42e2c0a012f3ef27b6ee407283bf29135590517faa1ad602f66fe59092951865e5ee46fb42e2c0a012f3ef27b6ee407283bf29145589518089018b52878152808601828152818c01838152737be8c8fef3c323bebd0338d7db2f9370f896fecd8c5288885291517f199a3ceb4e9dc8be1d32cf19755a61620bb38d3fab607d5df2da9bf34fbf79b155517f199a3ceb4e9dc8be1d32cf19755a61620bb38d3fab607d5df2da9bf34fbf79b255517f199a3ceb4e9dc8be1d32cf19755a61620bb38d3fab607d5df2da9bf34fbf79b35589518089018b52878152808601828152818c01838152739c10ffef1aec731b616cc22fedeca5d81d61859e8c5288885291517fec147dfa669a445a1a9f7f556529cb369c3c2ca51c1d134ba59f93da86b4360855517fec147dfa669a445a1a9f7f556529cb369c3c2ca51c1d134ba59f93da86b4360955517fec147dfa669a445a1a9f7f556529cb369c3c2ca51c1d134ba59f93da86b4360a5589518089018b52878152808601828152818c01838152739f22318d7cee9e22be01bd3bf64fb9257fb7f4b88c5288885291517fdb1f3e3f3dcbae6563e1ecc9e4808f8bdbe51fd9a0b0ab3679f0dda79717c07655517fdb1f3e3f3dcbae6563e1ecc9e4808f8bdbe51fd9a0b0ab3679f0dda79717c07755517fdb1f3e3f3dcbae6563e1ecc9e4808f8bdbe51fd9a0b0ab3679f0dda79717c0785589518089018b52878152808601828152818c0192835273f4edff75ad10030df1412317ea38ed84e12ef41c8b5287875290517ff07b0d7043004ad35cb952f99bb7e183ec6276b5db4ee9dd15ae32aad2a6473f55517ff07b0d7043004ad35cb952f99bb7e183ec6276b5db4ee9dd15ae32aad2a6474055517ff07b0d7043004ad35cb952f99bb7e183ec6276b5db4ee9dd15ae32aad2a647415588518088018a52868152808501828152818b0192835273baff5f62bf40cbbfc0be450f11126fc4e094aac38a5286865290517f78d0124d27da5c30df2c130132149438a2ff00bae03d641c7a4aa00624bcc2b455517f78d0124d27da5c30df2c130132149438a2ff00bae03d641c7a4aa00624bcc2b555517f78d0124d27da5c30df2c130132149438a2ff00bae03d641c7a4aa00624bcc2b65587518087018952858152808401838152818a01848152731c96afc64a706695a9558e76679f8bc72e3548548a5286865291517feaf38e21d7f78057c4f5547367ca15a5b069c0b60b7e38478493e097f29e37e655517feaf38e21d7f78057c4f5547367ca15a5b069c0b60b7e38478493e097f29e37e755517feaf38e21d7f78057c4f5547367ca15a5b069c0b60b7e38478493e097f29e37e85587518087018952858152808401838152818a01848152730d0d3321bbeaff438d68ad58a77fda6309920e868a5286865291517f3b4c44111bfedc001da0bfc552a8e57aea67c4f84668adc8aa8e471efcecee5755517f3b4c44111bfedc001da0bfc552a8e57aea67c4f84668adc8aa8e471efcecee5855517f3b4c44111bfedc001da0bfc552a8e57aea67c4f84668adc8aa8e471efcecee595587518087018952858152808401838152818a0184815273b016539a2d7a0dfa98237c93ac4af0f46ba74bad8a5286865291517f245c0c88149ee048d3b8bc0e19a3cb01aca18f61420087d18d7d580458f7189f55517f245c0c88149ee048d3b8bc0e19a3cb01aca18f61420087d18d7d580458f718a055517f245c0c88149ee048d3b8bc0e19a3cb01aca18f61420087d18d7d580458f718a15587518087018952858152808401838152818a018481527366d4bdf37aa4c04c7c66a743396cae3fa2425f798a5286865291517fe3b21f49f273384f61919fd15b3e62e13b6a78c508241ad9edd12b1d0e46bc5355517fe3b21f49f273384f61919fd15b3e62e13b6a78c508241ad9edd12b1d0e46bc5455517fe3b21f49f273384f61919fd15b3e62e13b6a78c508241ad9edd12b1d0e46bc555587518087018952858152808401838152818a0184815272893fac04c1f1b6e30847dcc1f24761271c81c78a5286865291517fc55b593af7e03d0244f8996f538e620c520767ccc41aea011c8c08f918ee62c755517fc55b593af7e03d0244f8996f538e620c520767ccc41aea011c8c08f918ee62c855517fc55b593af7e03d0244f8996f538e620c520767ccc41aea011c8c08f918ee62c95587518087018952858152808401838152818a018481527320d256ae504f7459532f3711035133624f83c15b8a5286865291517f13415571e75f63eeff4e8e0de81ed1f63e36f3bef45e162c20fcc6aef13c5c8255517f13415571e75f63eeff4e8e0de81ed1f63e36f3bef45e162c20fcc6aef13c5c8355517f13415571e75f63eeff4e8e0de81ed1f63e36f3bef45e162c20fcc6aef13c5c845587518087018952858152808401838152818a0184815273082faa352c52365c0b6e0d8f52523acf8ea511f48a5286865291517f135fcffd4585e92fa8f508a71fed308d1c357a07e77e94b9d06c47667e733ffc55517f135fcffd4585e92fa8f508a71fed308d1c357a07e77e94b9d06c47667e733ffd55517f135fcffd4585e92fa8f508a71fed308d1c357a07e77e94b9d06c47667e733ffe5587518087018952858152808401838152818a01848152730bbc35b239209c7819bc8e0008ff476dd637dfca8a5286865291517fcb176569e58554c9234f1642c5f2264e837535755b4120c598fc10b96e06dfda55517fcb176569e58554c9234f1642c5f2264e837535755b4120c598fc10b96e06dfdb55517fcb176569e58554c9234f1642c5f2264e837535755b4120c598fc10b96e06dfdc5587518087018952858152808401838152818a0184815273b2103ace0eca26d55dfc827cd59d51dd87bd0e038a5286865291517fa0b23af205afeed0c68e67eb07a0a84e6cdcdd4e5c1d0767454443c2150efe5655517fa0b23af205afeed0c68e67eb07a0a84e6cdcdd4e5c1d0767454443c2150efe5755517fa0b23af205afeed0c68e67eb07a0a84e6cdcdd4e5c1d0767454443c2150efe585587518087018952858152808401838152818a018481527380dfbf3cf73f6bba8b5175976ae8338d4ced26a78a5286865291517ff08dd5eeb782155cd235d387e7fc5439a2a8ed0c8da4f0f63f5587a1d9f1630e55517ff08dd5eeb782155cd235d387e7fc5439a2a8ed0c8da4f0f63f5587a1d9f1630f55517ff08dd5eeb782155cd235d387e7fc5439a2a8ed0c8da4f0f63f5587a1d9f163105587518087018952858152808401838152818a0184815273e1af2f6ba1b34656e72005d1cfc25a80a62482118a5286865291517ff517013d02d9d1c3be62457f819c37a8c994e2fd8c6bffbd2831c3cdd22ab44855517ff517013d02d9d1c3be62457f819c37a8c994e2fd8c6bffbd2831c3cdd22ab44955517ff517013d02d9d1c3be62457f819c37a8c994e2fd8c6bffbd2831c3cdd22ab44a5587518087018952858152808401838152818a01848152739e667b5277a38fe2d0f9297447fa7c62d3d6ae698a5286865291517fecd7014417dc5fb871c686d60e0ff9415b98c04c642b34758582f3c6f04ff3df55517fecd7014417dc5fb871c686d60e0ff9415b98c04c642b34758582f3c6f04ff3e055517fecd7014417dc5fb871c686d60e0ff9415b98c04c642b34758582f3c6f04ff3e15587518087018952858152808401838152818a01848152731baf30992f4f37e0c5909276ba0e1a3f96eaf9cb8a5286865291517fcccb66a00f74be15a06f67bf70cded840e71a90bc2422fbb36f7dea9a204f05855517fcccb66a00f74be15a06f67bf70cded840e71a90bc2422fbb36f7dea9a204f05955517fcccb66a00f74be15a06f67bf70cded840e71a90bc2422fbb36f7dea9a204f05a5587518087018952858152808401838152818a0184815273bdfbfd5b4123566d358f69882a5909492049be8a8a5286865291517fe5394d14ed7e4e736464a3b37773466cbbeaa97c702b41c7fa036a4c1e059dad55517fe5394d14ed7e4e736464a3b37773466cbbeaa97c702b41c7fa036a4c1e059dae55517fe5394d14ed7e4e736464a3b37773466cbbeaa97c702b41c7fa036a4c1e059daf5587518087018952858152808401838152818a018481527319e61dbc204ba4a5e3ef57721c7ab139399df7c68a5286865291517fa6c42bc4c04f5f4e53eb043e862207bbfe01b0c0baafaa63e2909f30d7830ac155517fa6c42bc4c04f5f4e53eb043e862207bbfe01b0c0baafaa63e2909f30d7830ac255517fa6c42bc4c04f5f4e53eb043e862207bbfe01b0c0baafaa63e2909f30d7830ac35587518087018952858152808401838152818a018481527387f84eec3adac507372018da187661726867f3168a5286865291517f49f49c2fe2a319f606c51f97d2d45a69020b55bae7d79a7b5a9671f61fa9825655517f49f49c2fe2a319f606c51f97d2d45a69020b55bae7d79a7b5a9671f61fa9825755517f49f49c2fe2a319f606c51f97d2d45a69020b55bae7d79a7b5a9671f61fa982585587518087018952858152808401838152818a01848152730cbd15145285b9cd05e95c19cb1e2d1fdc71cf908a5286865291517f32041e45cfcbfcb9f5b4fbbd91c0517a72627bddfae3710dd99cfb9f82cff54e55517f32041e45cfcbfcb9f5b4fbbd91c0517a72627bddfae3710dd99cfb9f82cff54f55517f32041e45cfcbfcb9f5b4fbbd91c0517a72627bddfae3710dd99cfb9f82cff5505587518087018952858152808401838152818a0184815273174818eb82c976083591d0eaa720b704986165618a5286865291517f22e7ff0eab3e44bcae09d2aff398291e857e3a4a82a864d7a4a75913b298faec55517f22e7ff0eab3e44bcae09d2aff398291e857e3a4a82a864d7a4a75913b298faed55517f22e7ff0eab3e44bcae09d2aff398291e857e3a4a82a864d7a4a75913b298faee5587518087018952858152808401838152818a0193845273643a7b5cb05486626594b17280dcb051d2725155895285855290517f097fbb0e073c501878c82d589ee3d50db7387292e4bc9ec1596b255c30d55bd955517f097fbb0e073c501878c82d589ee3d50db7387292e4bc9ec1596b255c30d55bda5590517f097fbb0e073c501878c82d589ee3d50db7387292e4bc9ec1596b255c30d55bdb558651808601885284815280830182815281890183815273f422c173264dcd512e3cee0db4acb568707c0b8d895285855291517ff3a9f8406c9168edcc443650b506004b19057c21865efd391caf5108e04f265f55517ff3a9f8406c9168edcc443650b506004b19057c21865efd391caf5108e04f266055517ff3a9f8406c9168edcc443650b506004b19057c21865efd391caf5108e04f2661558651808601885284815280830182815281890183815273f916d5d0310bfcd0d9b8c43d0a29070670d825f9895285855291517f6b2d8594c77d4a213d68dc86cebbf0900d2da2b89be4599e71e692861978356755517f6b2d8594c77d4a213d68dc86cebbf0900d2da2b89be4599e71e692861978356855517f6b2d8594c77d4a213d68dc86cebbf0900d2da2b89be4599e71e6928619783569558651948501875292845283810183815295840192835273e58ea0ced4417f0551fb82ddf4f6477072dfb430909452909252517fcf7765806c2ba92f78568a6e25734afe91b0488da8890ab17464f87b04ee39685590517fcf7765806c2ba92f78568a6e25734afe91b0488da8890ab17464f87b04ee396955517fcf7765806c2ba92f78568a6e25734afe91b0488da8890ab17464f87b04ee396a5562002c7b565b3390565b62002a2062002a12565b6000546001600160a01b0390811691161462002a83576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811662002aca5760405162461bcd60e51b815260040180806020018281038252602681526020018062004cf76026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602062004d1d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821662002b70576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b62002b8c8160035462002c1960201b6200162e1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462002bc19183906200162e62002c19821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101562002c74576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61206c8062002c8b6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063aa9a0912116100b8578063dd62ed3e1161007c578063dd62ed3e14610620578063e6fd48bc1461064e578063e7b9179414610656578063f2fde38b1461065e578063f7dd74811461068457610227565b8063aa9a0912146105b9578063b09f1266146105e2578063b0de5e29146105ea578063d28d8852146105f2578063d357a38b146105fa57610227565b806386d1a69f116100ff57806386d1a69f146105495780638da5cb5b1461055157806395d89b4114610559578063a457c2d714610561578063a9059cbb1461058d57610227565b806370a08231146104d6578063715018a6146104fc578063809d458d1461050457806382e0cf6b1461052a57610227565b80633347e4d6116101b357806342966c681161018257806342966c6814610475578063534462361461049257806359351e171461049a5780636161eb18146104a257806362a5af3b146104ce57610227565b80633347e4d6146103ef57806337e294d514610415578063395093511461041d57806340c10f191461044957610227565b806318160ddd116101fa57806318160ddd1461035557806323b872dd1461036f578063269d1faa146103a5578063313ce567146103c957806332424aa3146103e757610227565b8063048fcfc51461022c57806306fdde0314610254578063095ea7b3146102d15780631501ea1c14610311575b600080fd5b6102526004803603602081101561024257600080fd5b50356001600160a01b031661068c565b005b61025c610706565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029657818101518382015260200161027e565b50505050905090810190601f1680156102c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102fd600480360360408110156102e757600080fd5b506001600160a01b038135169060200135610731565b604080519115158252519081900360200190f35b6103376004803603602081101561032757600080fd5b50356001600160a01b031661074e565b60408051938452602084019290925282820152519081900360600190f35b61035d61076f565b60408051918252519081900360200190f35b6102fd6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610775565b6103ad6107fc565b604080516001600160a01b039092168252519081900360200190f35b6103d161080b565b6040805160ff9092168252519081900360200190f35b6103d1610810565b6102526004803603602081101561040557600080fd5b50356001600160a01b0316610815565b6103ad61089f565b6102fd6004803603604081101561043357600080fd5b506001600160a01b0381351690602001356108ae565b6102526004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356108fc565b6102526004803603602081101561048b57600080fd5b5035610a19565b610252610ab3565b610252610c9f565b610252600480360360408110156104b857600080fd5b506001600160a01b038135169060200135610d99565b6102fd610ec0565b61035d600480360360208110156104ec57600080fd5b50356001600160a01b0316610ec9565b610252610efe565b6102526004803603602081101561051a57600080fd5b50356001600160a01b0316610fa0565b6102526004803603602081101561054057600080fd5b5035151561101a565b610252611085565b6103ad6111f6565b61025c611205565b6102fd6004803603604081101561057757600080fd5b506001600160a01b038135169060200135611222565b6102fd600480360360408110156105a357600080fd5b506001600160a01b03813516906020013561128a565b61035d600480360360608110156105cf57600080fd5b508035906020810135906040013561129e565b61025c611352565b6103ad611371565b61025c611380565b61035d6004803603602081101561061057600080fd5b50356001600160a01b03166113ac565b61035d6004803603604081101561063657600080fd5b506001600160a01b03813581169160200135166113c7565b61035d6113f2565b6103ad6113f8565b6102526004803603602081101561067457600080fd5b50356001600160a01b0316611407565b6102526114ff565b61069461168f565b6000546001600160a01b039081169116146106e4576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152601081526f42656c6c65767565204e6574776f726b60801b60208201525b90565b600061074561073e61168f565b8484611693565b50600192915050565b600a6020526000908152604090208054600182015460029092015490919083565b60035490565b600061078284848461177f565b6107f28461078e61168f565b6107ed85604051806060016040528060288152602001611f40602891396001600160a01b038a166000908152600260205260408120906107cc61168f565b6001600160a01b031681526020810191909152604001600020549190611b2a565b611693565b5060019392505050565b6007546001600160a01b031681565b601290565b601281565b61081d61168f565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600480546001600160a01b039092166001600160a01b03199092169190911790556009805461ff001916610100179055565b6006546001600160a01b031681565b60006107456108bb61168f565b846107ed85600260006108cc61168f565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061162e565b6004546001600160a01b031633146109455760405162461bcd60e51b815260040180806020018281038252602b815260200180611ea7602b913960400191505060405180910390fd5b6001600160a01b0382166109a0576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6003546109ad908261162e565b6003556001600160a01b0382166000908152600160205260409020546109d3908261162e565b6001600160a01b0383166000818152600160209081526040808320949094558351858152935192939192600080516020611f888339815191529281900390910190a35050565b610a4281604051806060016040528060228152602001611e8560229139600160006107cc61168f565b60016000610a4e61168f565b6001600160a01b03168152602081019190915260400160002055600354610a759082611bc1565b6003556000610a8261168f565b6001600160a01b0316600080516020611f88833981519152836040518082815260200191505060405180910390a350565b6005546001600160a01b0316610ac761168f565b6001600160a01b031614610ad757fe5b600954610100900460ff16610b29576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004546007546001600160a01b039182169163b1fba3ed9116610b4b81610ec9565b6003546040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610b9b57600080fd5b505af1925050508015610bc057506040513d6020811015610bbb57600080fd5b505160015b610c8557610bcc611dbc565b80610bd75750610c76565b7fa183e9a5f6222d4c98fb5b98e0442aaabd70de89b6ec74508bce501a2441f5f9816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c36578181015183820152602001610c1e565b50505050905090810190601f168015610c635780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610c80565b3d6000803e3d6000fd5b610c9d565b600754610c9b906001600160a01b031682610945565b505b565b600954610100900460ff16610cf1576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004805433600081815260016020908152604080832054600354825163b1fba3ed60e01b8152978801959095526024870152604486019390935291516001600160a01b039093169363b1fba3ed936064808301949391928390030190829087803b158015610d5e57600080fd5b505af1925050508015610d8357506040513d6020811015610d7e57600080fd5b505160015b610d8f57610bcc611dbc565b610c9b3382610945565b6004546001600160a01b03163314610de25760405162461bcd60e51b815260040180806020018281038252602b815260200180611ea7602b913960400191505060405180910390fd5b6001600160a01b038216610e275760405162461bcd60e51b8152600401808060200182810382526021815260200180611fa86021913960400191505060405180910390fd5b610e6481604051806060016040528060228152602001611e85602291396001600160a01b0385166000908152600160205260409020549190611b2a565b6001600160a01b038316600090815260016020526040902055600354610e8a9082611bc1565b6003556040805182815290516000916001600160a01b03851691600080516020611f888339815191529181900360200190a35050565b60095460ff1681565b6001600160a01b0381166000908152600a602090815260408083206001908101549252822054610ef89161162e565b92915050565b610f0661168f565b6000546001600160a01b03908116911614610f56576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fa861168f565b6000546001600160a01b03908116911614610ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61102261168f565b6000546001600160a01b03908116911614611072576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6007546001600160a01b03163314156110a057610c80611c03565b6006546001600160a01b03163314156110bb57610c80611ced565b336000908152600a602052604090206002810154158015906110e1575060008160010154115b611132576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c656173650000604482015290519081900360640190fd5b6008548154141561117b57600061115082600201546019606461129e565b42835560018301549091506111659082611bc1565b60018301556111743382610945565b5050610c9d565b80546000906201518090611190904290611bc1565b8161119757fe5b049050601e8110156111a857600080fd5b60006111bb83600201546019606461129e565b905082600101548111156111d0575060018201545b42835560018301546111e29082611bc1565b60018401556111f13382610945565b505050565b6000546001600160a01b031690565b60408051808201909152600381526221262b60e91b602082015290565b600061074561122f61168f565b846107ed85604051806060016040528060258152602001612012602591396002600061125961168f565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611b2a565b600061074561129761168f565b848461177f565b60008060006112ad8686611d89565b915091508381106112ba57fe5b600084806112c457fe5b8688099050828111156112d8576001820391505b9182900391600085900385168086816112ed57fe5b0495508084816112f957fe5b04935080816000038161130857fe5b046001019290920292909201600285810380870282030280870282030280870282030280870282030280870282030280870282030295860290039094029390930295945050505050565b6040518060400160405280600381526020016221262b60e91b81525081565b6004546001600160a01b031681565b6040518060400160405280601081526020016f42656c6c65767565204e6574776f726b60801b81525081565b6001600160a01b031660009081526001602052604090205490565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60085481565b6005546001600160a01b031681565b61140f61168f565b6000546001600160a01b0390811691161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b6001600160a01b0381166114a45760405162461bcd60e51b8152600401808060200182810382526026815260200180611ed26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031661151361168f565b6001600160a01b03161461152357fe5b600954610100900460ff16611575576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004546006546001600160a01b039182169163b1fba3ed911661159781610ec9565b6003546040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156115e757600080fd5b505af192505050801561160c57506040513d602081101561160757600080fd5b505160015b61161857610bcc611dbc565b600654610c9b906001600160a01b031682610945565b600082820183811015611688576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166116d85760405162461bcd60e51b8152600401808060200182810382526024815260200180611fee6024913960400191505060405180910390fd5b6001600160a01b03821661171d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ef86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166117c45760405162461bcd60e51b8152600401808060200182810382526025815260200180611fc96025913960400191505060405180910390fd5b6001600160a01b0382166118095760405162461bcd60e51b8152600401808060200182810382526023815260200180611e626023913960400191505060405180910390fd5b6001600160a01b0383166000908152600160205260409020548111156118605760405162461bcd60e51b8152600401808060200182810382526026815260200180611f1a6026913960400191505060405180910390fd5b6118686111f6565b6001600160a01b0316836001600160a01b0316146118cd5760095460ff16156118cd576040805162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015290519081900360640190fd5b600954610100900460ff1615611a8e57600480546001600160a01b03858116600081815260016020526040808220548885168084528284205483516338aa7e6f60e11b8152988901959095526024880152604487018890526064870152608486019290925290519093849384931691637154fcde9160a48082019260609290919082900301818787803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d606081101561198d57600080fd5b5080516020808301516040938401516001600160a01b03808c16600090815260019094528584208590558a1683529390912081905560035491955093509091506119d79082611bc1565b6003558015611a4c576001600160a01b03808616908716600080516020611f88833981519152611a078785611bc1565b60408051918252519081900360200190a36040805182815290516000916001600160a01b03891691600080516020611f888339815191529181900360200190a3611a86565b846001600160a01b0316866001600160a01b0316600080516020611f88833981519152866040518082815260200191505060405180910390a35b5050506111f1565b6001600160a01b038316600090815260016020526040902054611ab19082611bc1565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ae0908261162e565b6001600160a01b038084166000818152600160209081526040918290209490945580518581529051919392871692600080516020611f8883398151915292918290030190a3505050565b60008184841115611bb95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b7e578181015183820152602001611b66565b50505050905090810190601f168015611bab5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061168883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2a565b6007546001600160a01b03166000908152600a6020526040902060085481541415611c6b576000611c3b82600201546019606461129e565b4283556001830154909150611c509082611bc1565b6001830155600754611174906001600160a01b031682610945565b80546000906201518090611c80904290611bc1565b81611c8757fe5b049050605a811015611c9857600080fd5b6000611cab83600201546019606461129e565b90508260010154811115611cc0575060018201545b4283556001830154611cd29082611bc1565b60018401556007546111f1906001600160a01b031682610945565b6006546001600160a01b03166000908152600a6020526040812080549091906201518090611d1c904290611bc1565b81611d2357fe5b049050605a811015611d3457600080fd5b6000611d4783600201546019606461129e565b90508260010154811115611d5c575060018201545b4283556001830154611d6e9082611bc1565b60018401556006546111f1906001600160a01b031682610945565b6000808060001984860990508385029250828103915082811015611dae576001820391505b509250929050565b60e01c90565b600060443d1015611dcc5761072e565b600481823e6308c379a0611de08251611db6565b14611dea5761072e565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611e1a575050505061072e565b82840192508251915080821115611e34575050505061072e565b503d83016020828401011115611e4c5750505061072e565b601f01601f191681016020016040529150509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d444b667fa125b85b0d1586686274bf4ecfe1ab012b8ffb0e3dcfe66e49930864736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed ByteCode Sourcemap

16113:24004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29535:122;;;;;;;;;;;;;;;;-1:-1:-1;29535:122:0;-1:-1:-1;;;;;29535:122:0;;:::i;:::-;;30616:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32740:159;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32740:159:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16882:42;;;;;;;;;;;;;;;;-1:-1:-1;16882:42:0;-1:-1:-1;;;;;16882:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;31627:94;;;:::i;:::-;;;;;;;;;;;;;;;;33347:307;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33347:307:0;;;;;;;;;;;;;;;;;:::i;16632:30::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16632:30:0;;;;;;;;;;;;;;31493:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16476:36;;;:::i;30395:157::-;;;;;;;;;;;;;;;;-1:-1:-1;30395:157:0;-1:-1:-1;;;;;30395:157:0;;:::i;16601:26::-;;;:::i;34037:208::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34037:208:0;;;;;;;;:::i;37213:307::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37213:307:0;;;;;;;;:::i;38182:251::-;;;;;;;;;;;;;;;;-1:-1:-1;38182:251:0;;:::i;29663:368::-;;;:::i;29072:333::-;;;:::i;37828:348::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37828:348:0;;;;;;;;:::i;16708:18::-;;;:::i;31776:152::-;;;;;;;;;;;;;;;;-1:-1:-1;31776:152:0;-1:-1:-1;;;;;31776:152:0;;:::i;14647:138::-;;;:::i;29411:118::-;;;;;;;;;;;;;;;;-1:-1:-1;29411:118:0;-1:-1:-1;;;;;29411:118:0;;:::i;39181:86::-;;;;;;;;;;;;;;;;-1:-1:-1;39181:86:0;;;;:::i;26552:1090::-;;;:::i;14045:73::-;;;:::i;30802:81::-;;;:::i;34718:259::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34718:259:0;;;;;;;;:::i;32244:165::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32244:165:0;;;;;;;;:::i;39279:620::-;;;;;;;;;;;;;;;;-1:-1:-1;39279:620:0;;;;;;;;;;;;:::i;16433:38::-;;;:::i;16519:37::-;;;:::i;16379:49::-;;;:::i;31936:113::-;;;;;;;;;;;;;;;;-1:-1:-1;31936:113:0;-1:-1:-1;;;;;31936:113:0;;:::i;32464:145::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32464:145:0;;;;;;;;;;:::i;16673:26::-;;;:::i;16563:31::-;;;:::i;14930:230::-;;;;;;;;;;;;;;;;-1:-1:-1;14930:230:0;-1:-1:-1;;;;;14930:230:0;;:::i;30037:352::-;;;:::i;29535:122::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;29617:16:::1;:34:::0;;-1:-1:-1;;;;;;29617:34:0::1;-1:-1:-1::0;;;;;29617:34:0;;;::::1;::::0;;;::::1;::::0;;29535:122::o;30616:77::-;30682:5;;;;;;;;;;;;-1:-1:-1;;;30682:5:0;;;;30616:77;;:::o;32740:159::-;32823:4;32836:39;32845:12;:10;:12::i;:::-;32859:7;32868:6;32836:8;:39::i;:::-;-1:-1:-1;32889:4:0;32740:159;;;;:::o;16882:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31627:94::-;31703:12;;31627:94;:::o;33347:307::-;33453:4;33466:36;33476:6;33484:9;33495:6;33466:9;:36::i;:::-;33509:121;33518:6;33526:12;:10;:12::i;:::-;33540:89;33578:6;33540:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33540:19:0;;;;;;:11;:19;;;;;;33560:12;:10;:12::i;:::-;-1:-1:-1;;;;;33540:33:0;;;;;;;;;;;;-1:-1:-1;33540:33:0;;;:89;:37;:89::i;:::-;33509:8;:121::i;:::-;-1:-1:-1;33644:4:0;33347:307;;;;;:::o;16632:30::-;;;-1:-1:-1;;;;;16632:30:0;;:::o;31493:77::-;16510:2;31493:77;:::o;16476:36::-;16510:2;16476:36;:::o;30395:157::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;30483:16:::1;:34:::0;;-1:-1:-1;;;;;30483:34:0;;::::1;-1:-1:-1::0;;;;;;30483:34:0;;::::1;::::0;;;::::1;::::0;;30524:15:::1;:22:::0;;-1:-1:-1;;30524:22:0::1;30483:34;30524:22;::::0;;30395:157::o;16601:26::-;;;-1:-1:-1;;;;;16601:26:0;;:::o;34037:208::-;34125:4;34138:83;34147:12;:10;:12::i;:::-;34161:7;34170:50;34209:10;34170:11;:25;34182:12;:10;:12::i;:::-;-1:-1:-1;;;;;34170:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34170:25:0;;;:34;;;;;;;;;;;:38;:50::i;37213:307::-;17122:16;;-1:-1:-1;;;;;17122:16:0;17100:10;:39;17092:95;;;;-1:-1:-1;;;17092:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37302:21:0;::::1;37294:65;;;::::0;;-1:-1:-1;;;37294:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37383:12;::::0;:24:::1;::::0;37400:6;37383:16:::1;:24::i;:::-;37368:12;:39:::0;-1:-1:-1;;;;;37435:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:30:::1;::::0;37458:6;37435:22:::1;:30::i;:::-;-1:-1:-1::0;;;;;37414:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:51;;;;37477:37;;;;;;;37414:18;;;;-1:-1:-1;;;;;;;;;;;37477:37:0;;;;;;;;::::1;37213:307:::0;;:::o;38182:251::-;38254:73;38282:6;38254:73;;;;;;;;;;;;;;;;;:9;:23;38264:12;:10;:12::i;38254:73::-;38228:9;:23;38238:12;:10;:12::i;:::-;-1:-1:-1;;;;;38228:23:0;;;;;;;;;;;;-1:-1:-1;38228:23:0;:99;38349:12;;:24;;38366:6;38349:16;:24::i;:::-;38334:12;:39;38416:1;38394:12;:10;:12::i;:::-;-1:-1:-1;;;;;38385:42:0;-1:-1:-1;;;;;;;;;;;38420:6:0;38385:42;;;;;;;;;;;;;;;;;;38182:251;:::o;29663:368::-;16986:16;;-1:-1:-1;;;;;16986:16:0;16970:12;:10;:12::i;:::-;-1:-1:-1;;;;;16970:32:0;;16963:71;;;;29731:15:::1;::::0;::::1;::::0;::::1;;;29723:47;;;::::0;;-1:-1:-1;;;29723:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29723:47:0;;;;;;;;;;;;;::::1;;29781:16;::::0;29813:15:::1;::::0;-1:-1:-1;;;;;29781:16:0;;::::1;::::0;:31:::1;::::0;29813:15:::1;29830:26;29813:15:::0;29830:9:::1;:26::i;:::-;29858:12;;29781:90;;;;;;;;;;;;;-1:-1:-1::0;;;;;29781:90:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29781:90:0;::::1;;29777:249;;;;:::i;:::-;;;;;;;;29999:19;30012:5;29999:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29951:75;29777:249;;;;;::::0;::::1;;;;;;;;29915:15;::::0;29909:33:::1;::::0;-1:-1:-1;;;;;29915:15:0::1;29932:9:::0;29909:5:::1;:33::i;:::-;29872:78;29777:249;29663:368::o:0;29072:333::-;29120:15;;;;;;;29112:47;;;;;-1:-1:-1;;;29112:47:0;;;;;;;;;;;;-1:-1:-1;;;29112:47:0;;;;;;;;;;;;;;;29170:16;;;29202:10;29170:16;29214:21;;;29170:16;29214:21;;;;;;;;;29237:12;;29170:80;;-1:-1:-1;;;29170:80:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29170:16:0;;;;:31;;:80;;;;;29214:21;29170:80;;;;;;;;;:16;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29170:80:0;;;29166:234;;;;:::i;:::-;29288:28;29294:10;29306:9;29288:5;:28::i;37828:348::-;17122:16;;-1:-1:-1;;;;;17122:16:0;17100:10;:39;17092:95;;;;-1:-1:-1;;;17092:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37920:21:0;::::1;37912:67;;;;-1:-1:-1::0;;;37912:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38007:68;38030:6;38007:68;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;38007:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;:68;:22:::1;:68::i;:::-;-1:-1:-1::0;;;;;37986:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:89;38097:12:::1;::::0;:24:::1;::::0;38114:6;38097:16:::1;:24::i;:::-;38082:12;:39:::0;38133:37:::1;::::0;;;;;;;38159:1:::1;::::0;-1:-1:-1;;;;;38133:37:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;38133:37:0;;;;::::1;::::0;;::::1;37828:348:::0;;:::o;16708:18::-;;;;;;:::o;31776:152::-;-1:-1:-1;;;;;31888:16:0;;31842:7;31888:16;;;:7;:16;;;;;;;;:33;;;;;31865:18;;;;;:57;;:22;:57::i;:::-;31858:64;31776:152;-1:-1:-1;;31776:152:0:o;14647:138::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;14750:1:::1;14734:6:::0;;14713:40:::1;::::0;-1:-1:-1;;;;;14734:6:0;;::::1;::::0;14713:40:::1;::::0;14750:1;;14713:40:::1;14777:1;14760:19:::0;;-1:-1:-1;;;;;;14760:19:0::1;::::0;;14647:138::o;29411:118::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;29491:15:::1;:32:::0;;-1:-1:-1;;;;;;29491:32:0::1;-1:-1:-1::0;;;;;29491:32:0;;;::::1;::::0;;;::::1;::::0;;29411:118::o;39181:86::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;39245:6:::1;:16:::0;;-1:-1:-1;;39245:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39181:86::o;26552:1090::-;26610:15;;-1:-1:-1;;;;;26610:15:0;26596:10;:29;26593:173;;;26638:17;:15;:17::i;26593:173::-;26704:11;;-1:-1:-1;;;;;26704:11:0;26690:10;:25;26686:80;;;26728:13;:11;:13::i;26686:80::-;26810:10;26778:21;26802:19;;;:7;:19;;;;;26836:18;;;;:22;;;;:53;;;26888:1;26862:6;:23;;;:27;26836:53;26828:96;;;;;-1:-1:-1;;;26828:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26962:14;;26940:18;;:36;26937:281;;;26989:11;27003:35;27010:6;:18;;;27030:2;27034:3;27003:6;:35::i;:::-;27070:15;27049:36;;27122:23;;;;26989:49;;-1:-1:-1;27122:35:0;;26989:49;27122:27;:35::i;:::-;27096:23;;;:61;27168:25;27174:10;27186:6;27168:5;:25::i;:::-;27204:7;;;;26937:281;27271:18;;27230;;27293:5;;27251:39;;:15;;:19;:39::i;:::-;:47;;;;;;27230:68;;27336:2;27319:13;:19;;27311:28;;;;;;27352:11;27366:35;27373:6;:18;;;27393:2;27397:3;27366:6;:35::i;:::-;27352:49;;27420:6;:23;;;27411:6;:32;27408:88;;;-1:-1:-1;27465:23:0;;;;27408:88;27523:15;27502:36;;27571:23;;;;:35;;27599:6;27571:27;:35::i;:::-;27545:23;;;:61;27613:25;27619:10;27631:6;27613:5;:25::i;:::-;26552:1090;;;:::o;14045:73::-;14083:7;14106:6;-1:-1:-1;;;;;14106:6:0;14045:73;:::o;30802:81::-;30870:7;;;;;;;;;;;;-1:-1:-1;;;30870:7:0;;;;30802:81;:::o;34718:259::-;34811:4;34824:129;34833:12;:10;:12::i;:::-;34847:7;34856:96;34895:15;34856:96;;;;;;;;;;;;;;;;;:11;:25;34868:12;:10;:12::i;:::-;-1:-1:-1;;;;;34856:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34856:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;32244:165::-;32330:4;32343:42;32353:12;:10;:12::i;:::-;32367:9;32378:6;32343:9;:42::i;39279:620::-;39341:4;39361:6;39369;39379:14;39388:1;39391;39379:7;:14::i;:::-;39360:33;;;;39418:1;39414;:5;39406:14;;;;39433:7;39457:1;39443:16;;;;;39454:1;39451;39443:16;39433:26;;39481:1;39476:2;:6;39472:18;;;39489:1;39484:6;;;;39472:18;39503:7;;;;;39523:9;39539:2;;;39535:6;;;39540:1;39535:6;39554:9;;;;;;;39581:4;39576:9;;;;;;;;;39618:4;39610;39609:5;;39608:14;;;;;;39625:1;39608:18;39603:24;;;;39598:29;;;;39668:1;:9;;;39699:5;;;39695:9;;39690:14;39726:5;;;39722:9;;39717:14;39753:5;;;39749:9;;39744:14;39780:5;;;39776:9;;39771:14;39807:5;;;39803:9;;39798:14;39834:5;;;39830:9;;39825:14;39861:5;;;39857:9;;39852:14;;;39886:5;;;;;39279:620;-1:-1:-1;;;;;39279:620:0:o;16433:38::-;;;;;;;;;;;;;;-1:-1:-1;;;16433:38:0;;;;:::o;16519:37::-;;;-1:-1:-1;;;;;16519:37:0;;:::o;16379:49::-;;;;;;;;;;;;;;-1:-1:-1;;;16379:49:0;;;;:::o;31936:113::-;-1:-1:-1;;;;;32025:18:0;32002:7;32025:18;;;:9;:18;;;;;;;31936:113::o;32464:145::-;-1:-1:-1;;;;;32576:18:0;;;32553:7;32576:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32464:145::o;16673:26::-;;;;:::o;16563:31::-;;;-1:-1:-1;;;;;16563:31:0;;:::o;14930:230::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15015:22:0;::::1;15007:73;;;;-1:-1:-1::0;;;15007:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15113:6;::::0;;15092:38:::1;::::0;-1:-1:-1;;;;;15092:38:0;;::::1;::::0;15113:6;::::1;::::0;15092:38:::1;::::0;::::1;15137:6;:17:::0;;-1:-1:-1;;;;;;15137:17:0::1;-1:-1:-1::0;;;;;15137:17:0;;;::::1;::::0;;;::::1;::::0;;14930:230::o;30037:352::-;16986:16;;-1:-1:-1;;;;;16986:16:0;16970:12;:10;:12::i;:::-;-1:-1:-1;;;;;16970:32:0;;16963:71;;;;30101:15:::1;::::0;::::1;::::0;::::1;;;30093:47;;;::::0;;-1:-1:-1;;;30093:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30093:47:0;;;;;;;;;;;;;::::1;;30151:16;::::0;30183:11:::1;::::0;-1:-1:-1;;;;;30151:16:0;;::::1;::::0;:31:::1;::::0;30183:11:::1;30196:22;30183:11:::0;30196:9:::1;:22::i;:::-;30220:12;;30151:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;30151:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30151:82:0;::::1;;30147:237;;;;:::i;:::-;30277:11;::::0;30271:29:::1;::::0;-1:-1:-1;;;;;30277:11:0::1;30290:9:::0;30271:5:::1;:29::i;9444:167::-:0;9502:7;9530:5;;;9550:6;;;;9542:46;;;;;-1:-1:-1;;;9542:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9604:1;9444:167;-1:-1:-1;;;9444:167:0:o;8296:100::-;8380:10;8296:100;:::o;38845:328::-;-1:-1:-1;;;;;38943:19:0;;38935:68;;;;-1:-1:-1;;;38935:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39018:21:0;;39010:68;;;;-1:-1:-1;;;39010:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39135:32;;;;;;;;;;;;;;;;;38845:328;;;:::o;35437:1207::-;-1:-1:-1;;;;;35539:20:0;;35531:70;;;;-1:-1:-1;;;35531:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35616:23:0;;35608:71;;;;-1:-1:-1;;;35608:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35694:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;35694:27:0;35686:78;;;;-1:-1:-1;;;35686:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35784:7;:5;:7::i;:::-;-1:-1:-1;;;;;35774:17:0;:6;-1:-1:-1;;;;;35774:17:0;;35771:87;;35812:6;;;;:15;35804:46;;;;;-1:-1:-1;;;35804:46:0;;;;;;;;;;;;-1:-1:-1;;;35804:46:0;;;;;;;;;;;;;;;35881:15;;;;;;;35878:761;;;35979:16;;;-1:-1:-1;;;;;36036:17:0;;;35908:21;36036:17;;;35979:16;36036:17;;;;;;;36055:20;;;;;;;;;;35979:97;;-1:-1:-1;;;35979:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35908:21;;;;;;35979:16;;:29;;:97;;;;;;;;;;;;;;;35908:21;35979:16;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35979:97:0;;;;;;;;;;;;-1:-1:-1;;;;;36085:17:0;;;;;;;:9;:17;;;;;;:33;;;36127:20;;;;;;;;:39;;;36190:12;;35979:97;;-1:-1:-1;35979:97:0;-1:-1:-1;35979:97:0;;-1:-1:-1;36190:28:0;;35979:97;36190:16;:28::i;:::-;36175:12;:43;36231:14;;36227:220;;-1:-1:-1;;;;;36263:51:0;;;;;;-1:-1:-1;;;;;;;;;;;36291:22:0;:6;36302:10;36291;:22::i;:::-;36263:51;;;;;;;;;;;;;;;36330:40;;;;;;;;36355:1;;-1:-1:-1;;;;;36330:40:0;;;-1:-1:-1;;;;;;;;;;;36330:40:0;;;;;;;;36227:220;;;36419:9;-1:-1:-1;;;;;36402:35:0;36411:6;-1:-1:-1;;;;;36402:35:0;-1:-1:-1;;;;;;;;;;;36430:6:0;36402:35;;;;;;;;;;;;;;;;;;36227:220;35878:761;;;;;;-1:-1:-1;;;;;36489:17:0;;;;;;:9;:17;;;;;;:29;;36511:6;36489:21;:29::i;:::-;-1:-1:-1;;;;;36469:17:0;;;;;;;:9;:17;;;;;;:49;;;;36550:20;;;;;;;:32;;36575:6;36550:24;:32::i;:::-;-1:-1:-1;;;;;36527:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;36596:35;;;;;;;36527:20;;36596:35;;;;-1:-1:-1;;;;;;;;;;;36596:35:0;;;;;;;;35437:1207;;;:::o;10271:178::-;10357:7;10389:12;10381:6;;;;10373:29;;;;-1:-1:-1;;;10373:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10421:5:0;;;10271:178::o;9866:130::-;9924:7;9947:43;9951:1;9954;9947:43;;;;;;;;;;;;;;;;;:3;:43::i;27650:867::-;27729:15;;-1:-1:-1;;;;;27729:15:0;27697:21;27721:24;;;:7;:24;;;;;27781:14;;27759:18;;:36;27756:310;;;27812:11;27826:35;27833:6;:18;;;27853:2;27857:3;27826:6;:35::i;:::-;27897:15;27876:36;;27953:23;;;;27812:49;;-1:-1:-1;27953:35:0;;27812:49;27953:27;:35::i;:::-;27927:23;;;:61;28009:15;;28003:30;;-1:-1:-1;;;;;28009:15:0;28026:6;28003:5;:30::i;27756:310::-;28117:18;;28076;;28139:5;;28097:39;;:15;;:19;:39::i;:::-;:47;;;;;;28076:68;;28180:2;28163:13;:19;;28155:28;;;;;;28194:11;28208:35;28215:6;:18;;;28235:2;28239:3;28208:6;:35::i;:::-;28194:49;;28266:6;:23;;;28257:6;:32;28254:96;;;-1:-1:-1;28315:23:0;;;;28254:96;28381:15;28360:36;;28433:23;;;;:35;;28461:6;28433:27;:35::i;:::-;28407:23;;;:61;28485:15;;28479:30;;-1:-1:-1;;;;;28485:15:0;28502:6;28479:5;:30::i;28529:535::-;28604:11;;-1:-1:-1;;;;;28604:11:0;28572:21;28596:20;;;:7;:20;;;;;28668:18;;28596:20;;28572:21;28690:5;;28648:39;;:15;;:19;:39::i;:::-;:47;;;;;;28627:68;;28731:2;28714:13;:19;;28706:28;;;;;;28745:11;28759:35;28766:6;:18;;;28786:2;28790:3;28759:6;:35::i;:::-;28745:49;;28817:6;:23;;;28808:6;:32;28805:96;;;-1:-1:-1;28866:23:0;;;;28805:96;28932:15;28911:36;;28984:23;;;;:35;;29012:6;28984:27;:35::i;:::-;28958:23;;;:61;29036:11;;29030:26;;-1:-1:-1;;;;;29036:11:0;29049:6;29030:5;:26::i;39911:203::-;39967:6;;;-1:-1:-1;;40017:1:0;40014;40006:24;39996:34;;40051:1;40047;:5;40043:9;;40074:1;40069:2;:6;40065:10;;40097:1;40092:2;:6;40088:18;;;40105:1;40100:6;;;;40088:18;39911:203;;;;;;:::o;110:106:-1:-;195:3;191:15;;163:53::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;-1:-1;;318:23;414:10;357:34;-1:-1;382:8;357:34;:::i;:::-;406:19;396:2;;429:5;;396:2;460;454:9;496:16;-1:-1;;492:24;339:1;454:9;468:49;543:4;537:11;624:16;576:18;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;;553:2;693:6;687:4;683:17;672:28;;725:3;719:10;705:24;;576:18;740:6;737:30;734:2;;;770:5;;;;;;734:2;;847:16;841:4;837:27;807:4;814:6;802:3;794:27;;829:36;826:2;;;868:5;;;;;826:2;89:7;73:14;-1:-1;;69:28;892:50;;807:4;892:50;460:2;881:62;900:3;-1:-1;;267:696;:::o

Swarm Source

ipfs://2d444b667fa125b85b0d1586686274bf4ecfe1ab012b8ffb0e3dcfe66e499308
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.