ETH Price: $3,269.26 (+0.28%)
Gas: 2 Gwei

Token

nuclear.finance (NCLR)
 

Overview

Max Total Supply

81,573.073265628 NCLR

Holders

156

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
48.943834389 NCLR

Value
$0.00
0xf03a962b5c7d7963b6bb6fe95af17c1d2bc6b32a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
nuclear

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2020-08-13
*/

// File: contracts\math\ABDKMath.sol

/*
 * ABDK Math 64.64 Smart Contract Library.  Copyright © 2019 by ABDK Consulting.
 * Author: Mikhail Vladimirov <[email protected]>
 */
pragma solidity ^0.6.0;

/**
 * Smart contract library of mathematical functions operating with signed
 * 64.64-bit fixed point numbers.  Signed 64.64-bit fixed point number is
 * basically a simple fraction whose numerator is signed 128-bit integer and
 * denominator is 2^64.  As long as denominator is always the same, there is no
 * need to store it, thus in Solidity signed 64.64-bit fixed point numbers are
 * represented by int128 type holding only the numerator.
 */
library ABDKMath64x64 {
  /**
   * Minimum value signed 64.64-bit fixed point number may have.
   */
  int128 private constant MIN_64x64 = -0x80000000000000000000000000000000;

  /**
   * Maximum value signed 64.64-bit fixed point number may have.
   */
  int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

  /**
   * Calculate x + y.  Revert on overflow.
   *
   * @param x signed 64.64-bit fixed point number
   * @param y signed 64.64-bit fixed point number
   * @return signed 64.64-bit fixed point number
   */
  function add (int128 x, int128 y) internal pure returns (int128) {
    int256 result = int256(x) + y;
    require (result >= MIN_64x64 && result <= MAX_64x64);
    return int128 (result);
  }

  /**
   * Calculate x * y rounding down, where x is signed 64.64 fixed point number
   * and y is unsigned 256-bit integer number.  Revert on overflow.
   *
   * @param x signed 64.64 fixed point number
   * @param y unsigned 256-bit integer number
   * @return unsigned 256-bit integer number
   */
  function mulu (int128 x, uint256 y) internal pure returns (uint256) {
    if (y == 0) return 0;

    require (x >= 0);

    uint256 lo = (uint256 (x) * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) >> 64;
    uint256 hi = uint256 (x) * (y >> 128);

    require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    hi <<= 64;

    require (hi <=
      0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - lo);
    return hi + lo;
  }

  /**
   * Calculate x^y assuming 0^0 is 1, where x is signed 64.64 fixed point number
   * and y is unsigned 256-bit integer number.  Revert on overflow.
   *
   * @param x signed 64.64-bit fixed point number
   * @param y uint256 value
   * @return signed 64.64-bit fixed point number
   */
  function pow (int128 x, uint256 y) internal pure returns (int128) {
    uint256 absoluteResult;
    bool negativeResult = false;
    if (x >= 0) {
      absoluteResult = powu (uint256 (x) << 63, y);
    } else {
      // We rely on overflow behavior here
      absoluteResult = powu (uint256 (uint128 (-x)) << 63, y);
      negativeResult = y & 1 > 0;
    }

    absoluteResult >>= 63;

    if (negativeResult) {
      require (absoluteResult <= 0x80000000000000000000000000000000);
      return -int128 (absoluteResult); // We rely on overflow behavior here
    } else {
      require (absoluteResult <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
      return int128 (absoluteResult); // We rely on overflow behavior here
    }
  }

  /**
   * Calculate x^y assuming 0^0 is 1, where x is unsigned 129.127 fixed point
   * number and y is unsigned 256-bit integer number.  Revert on overflow.
   *
   * @param x unsigned 129.127-bit fixed point number
   * @param y uint256 value
   * @return unsigned 129.127-bit fixed point number
   */
  function powu (uint256 x, uint256 y) private pure returns (uint256) {
    if (y == 0) return 0x80000000000000000000000000000000;
    else if (x == 0) return 0;
    else {
      int256 msb = 0;
      uint256 xc = x;
      if (xc >= 0x100000000000000000000000000000000) { xc >>= 128; msb += 128; }
      if (xc >= 0x10000000000000000) { xc >>= 64; msb += 64; }
      if (xc >= 0x100000000) { xc >>= 32; msb += 32; }
      if (xc >= 0x10000) { xc >>= 16; msb += 16; }
      if (xc >= 0x100) { xc >>= 8; msb += 8; }
      if (xc >= 0x10) { xc >>= 4; msb += 4; }
      if (xc >= 0x4) { xc >>= 2; msb += 2; }
      if (xc >= 0x2) msb += 1;  // No need to shift xc anymore

      int256 xe = msb - 127;
      if (xe > 0) x >>= xe;
      else x <<= -xe;

      uint256 result = 0x80000000000000000000000000000000;
      int256 re = 0;

      while (y > 0) {
        if (y & 1 > 0) {
          result = result * x;
          y -= 1;
          re += xe;
          if (result >=
            0x8000000000000000000000000000000000000000000000000000000000000000) {
            result >>= 128;
            re += 1;
          } else result >>= 127;
          if (re < -127) return 0; // Underflow
          require (re < 128); // Overflow
        } else {
          x = x * x;
          y >>= 1;
          xe <<= 1;
          if (x >=
            0x8000000000000000000000000000000000000000000000000000000000000000) {
            x >>= 128;
            xe += 1;
          } else x >>= 127;
          if (xe < -127) return 0; // Underflow
          require (xe < 128); // Overflow
        }
      }

      if (re > 0) result <<= re;
      else if (re < 0) result >>= -re;

      return result;
    }
  }
}

// File: node_modules\openzeppelin-solidity\contracts\GSN\Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC20\IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @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);
}

// File: node_modules\openzeppelin-solidity\contracts\math\SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @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;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\utils\Address.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @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);
            }
        }
    }
}

// File: contracts\nuclear.sol

pragma solidity ^0.6.2;






contract nuclear is Context, IERC20 {
    using SafeMath for uint256;
    using ABDKMath64x64 for int128;
    using Address for address;

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

    uint256 private constant INITIAL_SUPPLY = 50000000000000;
    uint256 private constant MAX_UINT = ~uint256(0);
    uint256 private constant TOTAL_PARTS = MAX_UINT - (MAX_UINT % INITIAL_SUPPLY);

    uint256 private constant CYCLE_SECONDS = 86400;
    uint256 private constant FINAL_CYCLE = 3711;

    struct halfLife {
        uint256 startCycle;
        uint256 endCycle;
        int128 cycleInflation;
        uint256 finalSupply;
    }

    halfLife[11] private _halfLife;
    uint256 private _startTime;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor () public {
        _name = 'nuclear.finance';
        _symbol = 'NCLR';
        _decimals = 9;

        _partsOwned[_msgSender()] = TOTAL_PARTS;
        _initHalfLife();
        _startTime = now;
    }

    function _initHalfLife() private {
        _halfLife[0] = halfLife(1, 7, 3606767600000, 53606767600000);
        _halfLife[1] = halfLife(8, 22, 3876902100000, 57483669700000);
        _halfLife[2] = halfLife(23, 51, 4162651000000, 61646320700000);
        _halfLife[3] = halfLife(52, 108, 4466972500000, 66113293200000);
        _halfLife[4] = halfLife(109, 221, 4792204200000, 70905497400000);
        _halfLife[5] = halfLife(222, 446, 5140397100000, 76045894500000);
        _halfLife[6] = halfLife(447, 895, 5513503500000, 81559398000000);
        _halfLife[7] = halfLife(896, 1792, 5913484400000, 87472882400000);
        _halfLife[8] = halfLife(1793, 3585, 6342371400000, 93815253800000);
        _halfLife[9] = halfLife(3586, 7166, 6802304200000, 100617558000000);
        _halfLife[10] = halfLife(7167, 14333, 7295559000000, 107913117000000);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function startTime() external view returns(uint256) {
        return _startTime;
    }

    function sendAirdrop(address[] calldata recipients, uint256 airdropAmt) external {
        for (uint256 i = 0; i < recipients.length; i++) {
            transfer(recipients[i], airdropAmt);
        }
    }

    function totalSupply() public view override returns (uint256) {
        return _getSupply(INITIAL_SUPPLY, getCurrentCycle());
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _partsOwned[account].div(_getRate(TOTAL_PARTS, totalSupply()));
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    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;
    }

    function getCurrentCycle() public view returns (uint256) {
        return _getCycle(_startTime, now);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 currentRate = _getRate(TOTAL_PARTS, totalSupply());
        uint256 partsToTransfer = amount.mul(currentRate);
        _partsOwned[sender] = _partsOwned[sender].sub(partsToTransfer);
        _partsOwned[recipient] = _partsOwned[recipient].add(partsToTransfer);
        emit Transfer(sender, recipient, amount);
    }

    function _getCycle(uint256 startTime, uint256 currentTime) private pure returns(uint256) {
        uint256 secondsElapsed = _getElapsedSeconds(startTime, currentTime);
        uint256 cycle = (secondsElapsed - (secondsElapsed % CYCLE_SECONDS)) / CYCLE_SECONDS + 1;
        if (cycle >= FINAL_CYCLE) return FINAL_CYCLE;
        return cycle;
    }

    function _getElapsedSeconds(uint256 startTime, uint256 currentTime) private pure returns(uint256) {
        return currentTime.sub(startTime);
    }

    function _getSupply(uint256 initialSupply, uint256 currentCycle) private view returns(uint256) {
        uint256 currentSupply = initialSupply;
        for (uint256 i = 0; i < _halfLife.length; i++) {
            halfLife memory halflife = _halfLife[i];
            if (currentCycle > halflife.endCycle) {
                currentSupply = halflife.finalSupply;
            } else {
                currentSupply = _compound(currentSupply, halflife.cycleInflation, currentCycle.sub(halflife.startCycle));
                break;
            }
        }
        return currentSupply;
    }

    function _compound(uint256 principle, int128 rate, uint256 periods) private pure returns(uint256){
        uint256 result = ABDKMath64x64.mulu(
                            ABDKMath64x64.pow (
                                ABDKMath64x64.add (
                                0x10000000000000000,
                                rate),
                                periods), principle);
        return result;
    }

    function _getRate(uint256 totalParts, uint256 supply) private pure returns(uint256) {
        return totalParts.div(supply);
    }
}

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":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":"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":[],"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":"getCurrentCycle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"airdropAmt","type":"uint256"}],"name":"sendAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","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"}]

60806040523480156200001157600080fd5b506040518060400160405280600f81526020017f6e75636c6561722e66696e616e63650000000000000000000000000000000000815250602f90805190602001906200005f9291906200089b565b506040518060400160405280600481526020017f4e434c520000000000000000000000000000000000000000000000000000000081525060309080519060200190620000ad9291906200089b565b506009603160006101000a81548160ff021916908360ff160217905550652d79883d200060001981620000dc57fe5b0660001903600080620000f46200014f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001426200015760201b60201c565b42602e819055506200094a565b600033905090565b60405180608001604052806001815260200160078152602001650347c41a0180600f0b81526020016530c14c57218081525060026000600b81106200019857fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506060820151816003015590505060405180608001604052806008815260200160168152602001650386a95f5c20600f0b8152602001653447f5b67da081525060026001600b81106200024057fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555060608201518160030155905050604051806080016040528060178152602001603381526020016503c931558cc0600f0b8152602001653811270c0a60815250600280600b8110620002e757fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555060608201518160030155905050604051806080016040528060348152602001606c81526020016504100c4f2020600f0b8152602001653c21335b2a8081525060026003600b81106200038f57fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550606082015181600301559050506040518060800160405280606d815260200160dd815260200165045bc5a10840600f0b815260200165407cf8fc32c081525060026004600b81106200043757fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555060608201518160030155905050604051806080016040528060de81526020016101be81526020016504acd78b0be0600f0b8152602001654529d0873ea081525060026005600b8110620004e057fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506060820151816003015590505060405180608001604052806101bf815260200161037f8152602001650503b66ae6e0600f0b8152602001654a2d86f2258081525060026006600b81106200058a57fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555060608201518160030155905050604051806080016040528061038081526020016107008152602001650560d7231580600f0b8152602001654f8e5e153b0081525060026007600b81106200063457fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506060820151816003015590505060405180608001604052806107018152602001610e0181526020016505c4b2cb5940600f0b815260200165555310e0944081525060026008600b8110620006de57fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550606082015181600301559050506040518060800160405280610e028152602001611bfe815260200165062fc8eced40600f0b8152602001655b82d9cd818081525060026009600b81106200078857fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550606082015181600301559050506040518060800160405280611bff81526020016137fd81526020016506a2a133dfc0600f0b81526020016562257b0161408152506002600a600b81106200083257fe5b60040201600082015181600001556020820151816001015560408201518160020160006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff16021790555060608201518160030155905050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620008de57805160ff19168380011785556200090f565b828001600101855582156200090f579182015b828111156200090e578251825591602001919060010190620008f1565b5b5090506200091e919062000922565b5090565b6200094791905b808211156200094357600081600090555060010162000929565b5090565b90565b611b32806200095a6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806378e979251161008c578063a9059cbb11610066578063a9059cbb14610465578063be26ed7f146104cb578063dd62ed3e146104e9578063eb246b6414610561576100ea565b806378e979251461035e57806395d89b411461037c578063a457c2d7146103ff576100ea565b806323b872dd116100c857806323b872dd146101f6578063313ce5671461027c57806339509351146102a057806370a0823114610306576100ea565b806306fdde03146100ef578063095ea7b31461017257806318160ddd146101d8575b600080fd5b6100f76105e4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101be6004803603604081101561018857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610686565b604051808215151515815260200191505060405180910390f35b6101e06106a4565b6040518082815260200191505060405180910390f35b6102626004803603606081101561020c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106c2565b604051808215151515815260200191505060405180910390f35b61028461079b565b604051808260ff1660ff16815260200191505060405180910390f35b6102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107b2565b604051808215151515815260200191505060405180910390f35b6103486004803603602081101561031c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610865565b6040518082815260200191505060405180910390f35b6103666108e4565b6040518082815260200191505060405180910390f35b6103846108ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c45780820151818401526020810190506103a9565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044b6004803603604081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610990565b604051808215151515815260200191505060405180910390f35b6104b16004803603604081101561047b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a5d565b604051808215151515815260200191505060405180910390f35b6104d3610a7b565b6040518082815260200191505060405180910390f35b61054b600480360360408110156104ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a8e565b6040518082815260200191505060405180910390f35b6105e26004803603604081101561057757600080fd5b810190808035906020019064010000000081111561059457600080fd5b8201836020820111156105a657600080fd5b803590602001918460208302840111640100000000831117156105c857600080fd5b909192939192939080359060200190929190505050610b15565b005b6060602f8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561067c5780601f106106515761010080835404028352916020019161067c565b820191906000526020600020905b81548152906001019060200180831161065f57829003601f168201915b5050505050905090565b600061069a610693610b6c565b8484610b74565b6001905092915050565b60006106bd652d79883d20006106b8610a7b565b610d6b565b905090565b60006106cf848484610e3f565b610790846106db610b6c565b61078b85604051806060016040528060288152602001611a6760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610741610b6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111e9092919063ffffffff16565b610b74565b600190509392505050565b6000603160009054906101000a900460ff16905090565b600061085b6107bf610b6c565b8461085685600160006107d0610b6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111de90919063ffffffff16565b610b74565b6001905092915050565b60006108dd610890652d79883d20006000198161087e57fe5b066000190361088b6106a4565b611266565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461128390919063ffffffff16565b9050919050565b6000602e54905090565b606060308054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109865780601f1061095b57610100808354040283529160200191610986565b820191906000526020600020905b81548152906001019060200180831161096957829003601f168201915b5050505050905090565b6000610a5361099d610b6c565b84610a4e85604051806060016040528060258152602001611ad860259139600160006109c7610b6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111e9092919063ffffffff16565b610b74565b6001905092915050565b6000610a71610a6a610b6c565b8484610e3f565b6001905092915050565b6000610a89602e54426112cd565b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008090505b83839050811015610b6657610b58848483818110610b3557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1683610a5d565b508080600101915050610b1b565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611ab46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611a246022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008083905060008090505b600b811015610e3457610d886119d5565b600282600b8110610d9557fe5b6004020160405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a9004600f0b600f0b600f0b815260200160038201548152505090508060200151851115610df95780606001519250610e26565b610e1e838260400151610e1984600001518961131c90919063ffffffff16565b611366565b925050610e34565b508080600101915050610d77565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611a8f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611a016023913960400191505060405180910390fd5b6000610f73652d79883d200060001981610f6157fe5b0660001903610f6e6106a4565b611266565b90506000610f8a828461139b90919063ffffffff16565b9050610fdd816000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461131c90919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611070816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111de90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60008383111582906111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611190578082015181840152602081019050611175565b50505050905090810190601f1680156111bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101561125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061127b828461128390919063ffffffff16565b905092915050565b60006112c583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611421565b905092915050565b6000806112da84846114e7565b905060006001620151808084816112ed57fe5b068403816112f757fe5b04019050610e7f811061131057610e7f92505050611316565b80925050505b92915050565b600061135e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061111e565b905092915050565b60008061138e6113886113826801000000000000000087611504565b8561156b565b86611625565b9050809150509392505050565b6000808314156113ae576000905061141b565b60008284029050828482816113bf57fe5b0414611416576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a466021913960400191505060405180910390fd5b809150505b92915050565b600080831182906114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611492578082015181840152602081019050611477565b50505050905090810190601f1680156114bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816114d957fe5b049050809150509392505050565b60006114fc838361131c90919063ffffffff16565b905092915050565b60008082600f0b84600f0b0190507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561155857506f7fffffffffffffffffffffffffffffff600f0b8113155b61156157600080fd5b8091505092915050565b6000806000809050600085600f0b126115965761158f603f86600f0b901b856116e0565b91506115c5565b6115b9603f866000036fffffffffffffffffffffffffffffffff16901b856116e0565b91506000600185161190505b603f82901c915080156115fc576f800000000000000000000000000000008211156115ef57600080fd5b816000039250505061161f565b6f7fffffffffffffffffffffffffffffff82111561161957600080fd5b81925050505b92915050565b60008082141561163857600090506116da565b600083600f0b121561164957600080fd5b600060406fffffffffffffffffffffffffffffffff841685600f0b02901c90506000608084901c85600f0b02905077ffffffffffffffffffffffffffffffffffffffffffffffff81111561169c57600080fd5b604081901b9050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038111156116d257600080fd5b818101925050505b92915050565b600080821415611702576f8000000000000000000000000000000090506119cf565b600083141561171457600090506119cf565b60008090506000849050700100000000000000000000000000000000811061174457608081901c90506080820191505b68010000000000000000811061176257604081901c90506040820191505b640100000000811061177c57602081901c90506020820191505b62010000811061179457601081901c90506010820191505b61010081106117ab57600881901c90506008820191505b601081106117c157600481901c90506004820191505b600481106117d757600281901c90506002820191505b600281106117e6576001820191505b6000607f83039050600081131561180d578086600082121561180457fe5b901c9550611822565b8060000386600082121561181d57fe5b901b95505b60006f80000000000000000000000000000000905060008090505b60008711156119885760006001881611156118eb57878202915060018703965082810190507f8000000000000000000000000000000000000000000000000000000000000000821061189b57608082901c91506001810190506118a3565b607f82901c91505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818112156118d9576000955050505050506119cf565b608081126118e657600080fd5b611983565b8788029750600187901c9650600183901b92507f8000000000000000000000000000000000000000000000000000000000000000881061193757608088901c975060018301925061193f565b607f88901c97505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81831215611975576000955050505050506119cf565b6080831261198257600080fd5b5b61183d565b60008113156119a7578082600082121561199e57fe5b901b91506119c6565b60008112156119c557806000038260008212156119c057fe5b901c91505b5b81955050505050505b92915050565b604051806080016040528060008152602001600081526020016000600f0b815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ded52ab70f62227962fb208488a498823c75e7fe8f7777e53a68ddd7e0d29bc364736f6c63430006020033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806378e979251161008c578063a9059cbb11610066578063a9059cbb14610465578063be26ed7f146104cb578063dd62ed3e146104e9578063eb246b6414610561576100ea565b806378e979251461035e57806395d89b411461037c578063a457c2d7146103ff576100ea565b806323b872dd116100c857806323b872dd146101f6578063313ce5671461027c57806339509351146102a057806370a0823114610306576100ea565b806306fdde03146100ef578063095ea7b31461017257806318160ddd146101d8575b600080fd5b6100f76105e4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013757808201518184015260208101905061011c565b50505050905090810190601f1680156101645780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101be6004803603604081101561018857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610686565b604051808215151515815260200191505060405180910390f35b6101e06106a4565b6040518082815260200191505060405180910390f35b6102626004803603606081101561020c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506106c2565b604051808215151515815260200191505060405180910390f35b61028461079b565b604051808260ff1660ff16815260200191505060405180910390f35b6102ec600480360360408110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107b2565b604051808215151515815260200191505060405180910390f35b6103486004803603602081101561031c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610865565b6040518082815260200191505060405180910390f35b6103666108e4565b6040518082815260200191505060405180910390f35b6103846108ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c45780820151818401526020810190506103a9565b50505050905090810190601f1680156103f15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61044b6004803603604081101561041557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610990565b604051808215151515815260200191505060405180910390f35b6104b16004803603604081101561047b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a5d565b604051808215151515815260200191505060405180910390f35b6104d3610a7b565b6040518082815260200191505060405180910390f35b61054b600480360360408110156104ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a8e565b6040518082815260200191505060405180910390f35b6105e26004803603604081101561057757600080fd5b810190808035906020019064010000000081111561059457600080fd5b8201836020820111156105a657600080fd5b803590602001918460208302840111640100000000831117156105c857600080fd5b909192939192939080359060200190929190505050610b15565b005b6060602f8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561067c5780601f106106515761010080835404028352916020019161067c565b820191906000526020600020905b81548152906001019060200180831161065f57829003601f168201915b5050505050905090565b600061069a610693610b6c565b8484610b74565b6001905092915050565b60006106bd652d79883d20006106b8610a7b565b610d6b565b905090565b60006106cf848484610e3f565b610790846106db610b6c565b61078b85604051806060016040528060288152602001611a6760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610741610b6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111e9092919063ffffffff16565b610b74565b600190509392505050565b6000603160009054906101000a900460ff16905090565b600061085b6107bf610b6c565b8461085685600160006107d0610b6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111de90919063ffffffff16565b610b74565b6001905092915050565b60006108dd610890652d79883d20006000198161087e57fe5b066000190361088b6106a4565b611266565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461128390919063ffffffff16565b9050919050565b6000602e54905090565b606060308054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109865780601f1061095b57610100808354040283529160200191610986565b820191906000526020600020905b81548152906001019060200180831161096957829003601f168201915b5050505050905090565b6000610a5361099d610b6c565b84610a4e85604051806060016040528060258152602001611ad860259139600160006109c7610b6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111e9092919063ffffffff16565b610b74565b6001905092915050565b6000610a71610a6a610b6c565b8484610e3f565b6001905092915050565b6000610a89602e54426112cd565b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008090505b83839050811015610b6657610b58848483818110610b3557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1683610a5d565b508080600101915050610b1b565b50505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611ab46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611a246022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008083905060008090505b600b811015610e3457610d886119d5565b600282600b8110610d9557fe5b6004020160405180608001604052908160008201548152602001600182015481526020016002820160009054906101000a9004600f0b600f0b600f0b815260200160038201548152505090508060200151851115610df95780606001519250610e26565b610e1e838260400151610e1984600001518961131c90919063ffffffff16565b611366565b925050610e34565b508080600101915050610d77565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611a8f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611a016023913960400191505060405180910390fd5b6000610f73652d79883d200060001981610f6157fe5b0660001903610f6e6106a4565b611266565b90506000610f8a828461139b90919063ffffffff16565b9050610fdd816000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461131c90919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611070816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111de90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60008383111582906111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611190578082015181840152602081019050611175565b50505050905090810190601f1680156111bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101561125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061127b828461128390919063ffffffff16565b905092915050565b60006112c583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611421565b905092915050565b6000806112da84846114e7565b905060006001620151808084816112ed57fe5b068403816112f757fe5b04019050610e7f811061131057610e7f92505050611316565b80925050505b92915050565b600061135e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061111e565b905092915050565b60008061138e6113886113826801000000000000000087611504565b8561156b565b86611625565b9050809150509392505050565b6000808314156113ae576000905061141b565b60008284029050828482816113bf57fe5b0414611416576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a466021913960400191505060405180910390fd5b809150505b92915050565b600080831182906114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611492578082015181840152602081019050611477565b50505050905090810190601f1680156114bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816114d957fe5b049050809150509392505050565b60006114fc838361131c90919063ffffffff16565b905092915050565b60008082600f0b84600f0b0190507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561155857506f7fffffffffffffffffffffffffffffff600f0b8113155b61156157600080fd5b8091505092915050565b6000806000809050600085600f0b126115965761158f603f86600f0b901b856116e0565b91506115c5565b6115b9603f866000036fffffffffffffffffffffffffffffffff16901b856116e0565b91506000600185161190505b603f82901c915080156115fc576f800000000000000000000000000000008211156115ef57600080fd5b816000039250505061161f565b6f7fffffffffffffffffffffffffffffff82111561161957600080fd5b81925050505b92915050565b60008082141561163857600090506116da565b600083600f0b121561164957600080fd5b600060406fffffffffffffffffffffffffffffffff841685600f0b02901c90506000608084901c85600f0b02905077ffffffffffffffffffffffffffffffffffffffffffffffff81111561169c57600080fd5b604081901b9050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038111156116d257600080fd5b818101925050505b92915050565b600080821415611702576f8000000000000000000000000000000090506119cf565b600083141561171457600090506119cf565b60008090506000849050700100000000000000000000000000000000811061174457608081901c90506080820191505b68010000000000000000811061176257604081901c90506040820191505b640100000000811061177c57602081901c90506020820191505b62010000811061179457601081901c90506010820191505b61010081106117ab57600881901c90506008820191505b601081106117c157600481901c90506004820191505b600481106117d757600281901c90506002820191505b600281106117e6576001820191505b6000607f83039050600081131561180d578086600082121561180457fe5b901c9550611822565b8060000386600082121561181d57fe5b901b95505b60006f80000000000000000000000000000000905060008090505b60008711156119885760006001881611156118eb57878202915060018703965082810190507f8000000000000000000000000000000000000000000000000000000000000000821061189b57608082901c91506001810190506118a3565b607f82901c91505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818112156118d9576000955050505050506119cf565b608081126118e657600080fd5b611983565b8788029750600187901c9650600183901b92507f8000000000000000000000000000000000000000000000000000000000000000881061193757608088901c975060018301925061193f565b607f88901c97505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81831215611975576000955050505050506119cf565b6080831261198257600080fd5b5b61183d565b60008113156119a7578082600082121561199e57fe5b901b91506119c6565b60008112156119c557806000038260008212156119c057fe5b901c91505b5b81955050505050505b92915050565b604051806080016040528060008152602001600081526020016000600f0b815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ded52ab70f62227962fb208488a498823c75e7fe8f7777e53a68ddd7e0d29bc364736f6c63430006020033

Deployed Bytecode Sourcemap

21098:6968:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21098:6968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23101:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;23101:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24329:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24329:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23691:133;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24498:313;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24498:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23287:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24819:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24819:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23832:163;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23832:163:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23378:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23192:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;23192:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25045:269;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25045:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24003:167;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24003:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25322:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24178:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24178:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23474:209;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23474:209:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;23474:209:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23474:209:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23474:209:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23101:83;23138:13;23171:5;23164:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23101:83;:::o;24329:161::-;24404:4;24421:39;24430:12;:10;:12::i;:::-;24444:7;24453:6;24421:8;:39::i;:::-;24478:4;24471:11;;24329:161;;;;:::o;23691:133::-;23744:7;23771:45;21420:14;23798:17;:15;:17::i;:::-;23771:10;:45::i;:::-;23764:52;;23691:133;:::o;24498:313::-;24596:4;24613:36;24623:6;24631:9;24642:6;24613:9;:36::i;:::-;24660:121;24669:6;24677:12;:10;:12::i;:::-;24691:89;24729:6;24691:89;;;;;;;;;;;;;;;;;:11;:19;24703:6;24691:19;;;;;;;;;;;;;;;:33;24711:12;:10;:12::i;:::-;24691:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24660:8;:121::i;:::-;24799:4;24792:11;;24498:313;;;;;:::o;23287:83::-;23328:5;23353:9;;;;;;;;;;;23346:16;;23287:83;:::o;24819:218::-;24907:4;24924:83;24933:12;:10;:12::i;:::-;24947:7;24956:50;24995:10;24956:11;:25;24968:12;:10;:12::i;:::-;24956:25;;;;;;;;;;;;;;;:34;24982:7;24956:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24924:8;:83::i;:::-;25025:4;25018:11;;24819:218;;;;:::o;23832:163::-;23898:7;23925:62;23950:36;21420:14;21486:1;21477:11;21546:25;;;;;;21486:1;21477:11;21534:38;23972:13;:11;:13::i;:::-;23950:8;:36::i;:::-;23925:11;:20;23937:7;23925:20;;;;;;;;;;;;;;;;:24;;:62;;;;:::i;:::-;23918:69;;23832:163;;;:::o;23378:88::-;23421:7;23448:10;;23441:17;;23378:88;:::o;23192:87::-;23231:13;23264:7;23257:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23192:87;:::o;25045:269::-;25138:4;25155:129;25164:12;:10;:12::i;:::-;25178:7;25187:96;25226:15;25187:96;;;;;;;;;;;;;;;;;:11;:25;25199:12;:10;:12::i;:::-;25187:25;;;;;;;;;;;;;;;:34;25213:7;25187:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;25155:8;:129::i;:::-;25302:4;25295:11;;25045:269;;;;:::o;24003:167::-;24081:4;24098:42;24108:12;:10;:12::i;:::-;24122:9;24133:6;24098:9;:42::i;:::-;24158:4;24151:11;;24003:167;;;;:::o;25322:109::-;25370:7;25397:26;25407:10;;25419:3;25397:9;:26::i;:::-;25390:33;;25322:109;:::o;24178:143::-;24259:7;24286:11;:18;24298:5;24286:18;;;;;;;;;;;;;;;:27;24305:7;24286:27;;;;;;;;;;;;;;;;24279:34;;24178:143;;;;:::o;23474:209::-;23571:9;23583:1;23571:13;;23566:110;23590:10;;:17;;23586:1;:21;23566:110;;;23629:35;23638:10;;23649:1;23638:13;;;;;;;;;;;;;;;23653:10;23629:8;:35::i;:::-;;23609:3;;;;;;;23566:110;;;;23474:209;;;:::o;6085:106::-;6138:15;6173:10;6166:17;;6085:106;:::o;25439:337::-;25549:1;25532:19;;:5;:19;;;;25524:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25630:1;25611:21;;:7;:21;;;;25603:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25714:6;25684:11;:18;25696:5;25684:18;;;;;;;;;;;;;;;:27;25703:7;25684:27;;;;;;;;;;;;;;;:36;;;;25752:7;25736:32;;25745:5;25736:32;;;25761:6;25736:32;;;;;;;;;;;;;;;;;;25439:337;;;:::o;26892:597::-;26978:7;26998:21;27022:13;26998:37;;27051:9;27063:1;27051:13;;27046:405;27070:16;27066:1;:20;27046:405;;;27108:24;;:::i;:::-;27135:9;27145:1;27135:12;;;;;;;;;;27108:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27181:8;:17;;;27166:12;:32;27162:278;;;27235:8;:20;;;27219:36;;27162:278;;;27312:88;27322:13;27337:8;:23;;;27362:37;27379:8;:19;;;27362:12;:16;;:37;;;;:::i;:::-;27312:9;:88::i;:::-;27296:104;;27419:5;;;27162:278;27046:405;27088:3;;;;;;;27046:405;;;;27468:13;27461:20;;;26892:597;;;;:::o;25784:583::-;25899:1;25881:20;;:6;:20;;;;25873:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25983:1;25962:23;;:9;:23;;;;25954:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26038:19;26060:36;21420:14;21486:1;21477:11;21546:25;;;;;;21486:1;21477:11;21534:38;26082:13;:11;:13::i;:::-;26060:8;:36::i;:::-;26038:58;;26107:23;26133;26144:11;26133:6;:10;;:23;;;;:::i;:::-;26107:49;;26189:40;26213:15;26189:11;:19;26201:6;26189:19;;;;;;;;;;;;;;;;:23;;:40;;;;:::i;:::-;26167:11;:19;26179:6;26167:19;;;;;;;;;;;;;;;:62;;;;26265:43;26292:15;26265:11;:22;26277:9;26265:22;;;;;;;;;;;;;;;;:26;;:43;;;;:::i;:::-;26240:11;:22;26252:9;26240:22;;;;;;;;;;;;;;;:68;;;;26341:9;26324:35;;26333:6;26324:35;;;26352:6;26324:35;;;;;;;;;;;;;;;;;;25784:583;;;;;:::o;11174:192::-;11260:7;11293:1;11288;:6;;11296:12;11280:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11280:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11320:9;11336:1;11332;:5;11320:17;;11357:1;11350:8;;;11174:192;;;;;:::o;10271:181::-;10329:7;10349:9;10365:1;10361;:5;10349:17;;10390:1;10385;:6;;10377:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10443:1;10436:8;;;10271:181;;;;:::o;27931:132::-;28006:7;28033:22;28048:6;28033:10;:14;;:22;;;;:::i;:::-;28026:29;;27931:132;;;;:::o;12572:::-;12630:7;12657:39;12661:1;12664;12657:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12650:46;;12572:132;;;;:::o;26375:351::-;26455:7;26475:22;26500:42;26519:9;26530:11;26500:18;:42::i;:::-;26475:67;;26553:13;26639:1;21622:5;;26588:14;:30;;;;;;26570:14;:49;26569:67;;;;;;:71;26553:87;;21673:4;26655:5;:20;26651:44;;21673:4;26677:18;;;;;;26651:44;26713:5;26706:12;;;;26375:351;;;;;:::o;10735:136::-;10793:7;10820:43;10824:1;10827;10820:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10813:50;;10735:136;;;;:::o;27497:426::-;27586:7;27605:14;27622:269;27671:208;27724:112;27777:19;27831:4;27724:17;:112::i;:::-;27871:7;27671:17;:208::i;:::-;27881:9;27622:18;:269::i;:::-;27605:286;;27909:6;27902:13;;;27497:426;;;;;:::o;11625:471::-;11683:7;11933:1;11928;:6;11924:47;;;11958:1;11951:8;;;;11924:47;11983:9;11999:1;11995;:5;11983:17;;12028:1;12023;12019;:5;;;;;;:10;12011:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12087:1;12080:8;;;11625:471;;;;;:::o;13200:278::-;13286:7;13318:1;13314;:5;13321:12;13306:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;13306:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13345:9;13361:1;13357;:5;;;;;;13345:17;;13469:1;13462:8;;;13200:278;;;;;:::o;26734:150::-;26823:7;26850:26;26866:9;26850:11;:15;;:26;;;;:::i;:::-;26843:33;;26734:150;;;;:::o;1312:195::-;1369:6;1384:13;1412:1;1400:13;;1407:1;1400:9;;:13;1384:29;;897:35;1429:19;;:6;:19;;:42;;;;;1055:34;1452:19;;:6;:19;;1429:42;1420:52;;;;;;1494:6;1479:22;;;1312:195;;;;:::o;2598:746::-;2656:6;2671:22;2700:19;2722:5;2700:27;;2743:1;2738;:6;;;2734:230;;2772:27;2793:2;2787:1;2778:11;;:17;;2797:1;2772:4;:27::i;:::-;2755:44;;2734:230;;;2883:38;2915:2;2908:1;2907:2;;2889:22;;:28;;2919:1;2883:4;:38::i;:::-;2866:55;;2955:1;2951;2947;:5;:9;2930:26;;2734:230;2991:2;2972:21;;;;;3006:14;3002:337;;;3058:34;3040:14;:52;;3031:62;;;;;;3118:14;3109:24;;3102:31;;;;;;3002:337;3220:34;3202:14;:52;;3193:62;;;;;;3279:14;3264:30;;;;2598:746;;;;;:::o;1822:469::-;1881:7;1906:1;1901;:6;1897:20;;;1916:1;1909:8;;;;1897:20;1940:1;1935;:6;;;;1926:16;;;;;;1951:10;2024:2;1984:34;1980:1;:38;1974:1;1965:11;;:54;1964:62;;1951:75;;2033:10;2066:3;2061:1;:8;;2055:1;2046:11;;:24;2033:37;;2094:50;2088:2;:56;;2079:66;;;;;;2159:2;2152:9;;;;;2261:2;2192:66;:71;2179:2;:84;;2170:94;;;;;;2283:2;2278;:7;2271:14;;;;1822:469;;;;;:::o;3663:1737::-;3722:7;3747:1;3742;:6;3738:1657;;;3757:34;3750:41;;;;3738:1657;3812:1;3807;:6;3803:1592;;;3822:1;3815:8;;;;3803:1592;3844:10;3857:1;3844:14;;3867:10;3880:1;3867:14;;3900:35;3894:2;:41;3890:74;;3946:3;3939:10;;;;;3958:3;3951:10;;;;3890:74;3982:19;3976:2;:25;3972:56;;4012:2;4005:9;;;;;4023:2;4016:9;;;;3972:56;4046:11;4040:2;:17;4036:48;;4068:2;4061:9;;;;;4079:2;4072:9;;;;4036:48;4102:7;4096:2;:13;4092:44;;4120:2;4113:9;;;;;4131:2;4124:9;;;;4092:44;4154:5;4148:2;:11;4144:40;;4170:1;4163:8;;;;;4180:1;4173:8;;;;4144:40;4202:4;4196:2;:10;4192:39;;4217:1;4210:8;;;;;4227:1;4220:8;;;;4192:39;4249:3;4243:2;:9;4239:38;;4263:1;4256:8;;;;;4273:1;4266:8;;;;4239:38;4295:3;4289:2;:9;4285:23;;4307:1;4300:8;;;;4285:23;4351:9;4369:3;4363;:9;4351:21;;4390:1;4385:2;:6;4381:43;;;4399:2;4393:8;;;;;;;;;;;;;4381:43;;;4422:2;4421:3;;4415:9;;;;;;;;;;;;;4381:43;4435:14;4452:34;4435:51;;4495:9;4507:1;4495:13;;4519:769;4530:1;4526;:5;4519:769;;;4556:1;4552;4548;:5;:9;4544:735;;;4590:1;4581:6;:10;4572:19;;4609:1;4604:6;;;;4629:2;4623:8;;;;4671:66;4648:6;:89;4644:180;;4765:3;4754:14;;;;;4789:1;4783:7;;;;4644:180;;;4821:3;4810:14;;;;;4644:180;4846:4;4841:2;:9;4837:23;;;4859:1;4852:8;;;;;;;;;4837:23;4900:3;4895:2;:8;4886:18;;;;;;4544:735;;;4955:1;4951;:5;4947:9;;4975:1;4969:7;;;;;4996:1;4989:8;;;;;5032:66;5014:1;:84;5010:165;;5121:3;5115:9;;;;;5145:1;5139:7;;;;5010:165;;;5172:3;5166:9;;;;;5010:165;5197:4;5192:2;:9;5188:23;;;5210:1;5203:8;;;;;;;;;5188:23;5251:3;5246:2;:8;5237:18;;;;;;4544:735;4519:769;;;5307:1;5302:2;:6;5298:65;;;5321:2;5310:13;;;;;;;;;;;;;5298:65;;;5346:1;5341:2;:6;5337:26;;;5361:2;5360:3;;5349:14;;;;;;;;;;;;;5337:26;5298:65;5381:6;5374:13;;;;;;;3663:1737;;;;;:::o;21098:6968::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://ded52ab70f62227962fb208488a498823c75e7fe8f7777e53a68ddd7e0d29bc3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.