ETH Price: $2,938.95 (-0.67%)

Token

UNIP (UNIP)

Overview

Max Total Supply

120,000,000 UNIP

Holders

20,799 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
134.217728 UNIP

Value
$0.00
0x03ca8d57285836857dddf42cbb896448015246e7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Uniperp is a decentralized spot and perpetual exchange that supports low swap fees and zero price impact trades. Trading is supported by a unique multi-asset pool that earns liquidity providers fees from market making, swap fees and leverage trading.

Contract Source Code Verified (Exact Match)

Contract Name:
UNIP

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../tokens/MintableBaseToken.sol";

contract UNIP is MintableBaseToken {
    constructor() MintableBaseToken("UNIP", "UNIP", 0) {
    }

    function id() external pure returns (string memory _name) {
        return "UNIP";
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./BaseToken.sol";
import "./interfaces/IMintable.sol";

contract MintableBaseToken is BaseToken, IMintable {

    mapping (address => bool) public override isMinter;

    constructor(string memory _name, string memory _symbol, uint256 _initialSupply) BaseToken(_name, _symbol, _initialSupply) {
    }

    modifier onlyMinter() {
        require(isMinter[msg.sender], "MintableBaseToken: forbidden");
        _;
    }

    function setMinter(address _minter, bool _isActive) external override onlyGov {
        isMinter[_minter] = _isActive;
    }

    function mint(address _account, uint256 _amount) external override onlyMinter {
        _mint(_account, _amount);
    }

    function burn(address _account, uint256 _amount) external override onlyMinter {
        _burn(_account, _amount);
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../libraries/math/SafeMath.sol";
import "../libraries/token/IERC20.sol";
import "../libraries/token/SafeERC20.sol";

import "./interfaces/IYieldTracker.sol";
import "./interfaces/IBaseToken.sol";

contract BaseToken is IERC20, IBaseToken {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string public name;
    string public symbol;
    uint8 public constant decimals = 18;

    uint256 public override totalSupply;
    uint256 public nonStakingSupply;

    address public gov;

    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowances;

    address[] public yieldTrackers;
    mapping (address => bool) public nonStakingAccounts;
    mapping (address => bool) public admins;

    bool public inPrivateTransferMode;
    mapping (address => bool) public isHandler;

    modifier onlyGov() {
        require(msg.sender == gov, "BaseToken: forbidden");
        _;
    }

    modifier onlyAdmin() {
        require(admins[msg.sender], "BaseToken: forbidden");
        _;
    }

    constructor(string memory _name, string memory _symbol, uint256 _initialSupply) {
        name = _name;
        symbol = _symbol;
        gov = msg.sender;
        _mint(msg.sender, _initialSupply);
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
    }

    function setInfo(string memory _name, string memory _symbol) external onlyGov {
        name = _name;
        symbol = _symbol;
    }

    function setYieldTrackers(address[] memory _yieldTrackers) external onlyGov {
        yieldTrackers = _yieldTrackers;
    }

    function addAdmin(address _account) external onlyGov {
        admins[_account] = true;
    }

    function removeAdmin(address _account) external override onlyGov {
        admins[_account] = false;
    }

    // to help users who accidentally send their tokens to this contract
    function withdrawToken(address _token, address _account, uint256 _amount) external override onlyGov {
        IERC20(_token).safeTransfer(_account, _amount);
    }

    function setInPrivateTransferMode(bool _inPrivateTransferMode) external override onlyGov {
        inPrivateTransferMode = _inPrivateTransferMode;
    }

    function setHandler(address _handler, bool _isActive) external onlyGov {
        isHandler[_handler] = _isActive;
    }

    function addNonStakingAccount(address _account) external onlyAdmin {
        require(!nonStakingAccounts[_account], "BaseToken: _account already marked");
        _updateRewards(_account);
        nonStakingAccounts[_account] = true;
        nonStakingSupply = nonStakingSupply.add(balances[_account]);
    }

    function removeNonStakingAccount(address _account) external onlyAdmin {
        require(nonStakingAccounts[_account], "BaseToken: _account not marked");
        _updateRewards(_account);
        nonStakingAccounts[_account] = false;
        nonStakingSupply = nonStakingSupply.sub(balances[_account]);
    }

    function recoverClaim(address _account, address _receiver) external onlyAdmin {
        for (uint256 i = 0; i < yieldTrackers.length; i++) {
            address yieldTracker = yieldTrackers[i];
            IYieldTracker(yieldTracker).claim(_account, _receiver);
        }
    }

    function claim(address _receiver) external {
        for (uint256 i = 0; i < yieldTrackers.length; i++) {
            address yieldTracker = yieldTrackers[i];
            IYieldTracker(yieldTracker).claim(msg.sender, _receiver);
        }
    }

    function totalStaked() external view override returns (uint256) {
        return totalSupply.sub(nonStakingSupply);
    }

    function balanceOf(address _account) external view override returns (uint256) {
        return balances[_account];
    }

    function stakedBalance(address _account) external view override returns (uint256) {
        if (nonStakingAccounts[_account]) {
            return 0;
        }
        return balances[_account];
    }

    function transfer(address _recipient, uint256 _amount) external override returns (bool) {
        _transfer(msg.sender, _recipient, _amount);
        return true;
    }

    function allowance(address _owner, address _spender) external view override returns (uint256) {
        return allowances[_owner][_spender];
    }

    function approve(address _spender, uint256 _amount) external override returns (bool) {
        _approve(msg.sender, _spender, _amount);
        return true;
    }

    function transferFrom(address _sender, address _recipient, uint256 _amount) external override returns (bool) {
        if (isHandler[msg.sender]) {
            _transfer(_sender, _recipient, _amount);
            return true;
        }
        uint256 nextAllowance = allowances[_sender][msg.sender].sub(_amount, "BaseToken: transfer amount exceeds allowance");
        _approve(_sender, msg.sender, nextAllowance);
        _transfer(_sender, _recipient, _amount);
        return true;
    }

    function _mint(address _account, uint256 _amount) internal {
        require(_account != address(0), "BaseToken: mint to the zero address");

        _updateRewards(_account);

        totalSupply = totalSupply.add(_amount);
        balances[_account] = balances[_account].add(_amount);

        if (nonStakingAccounts[_account]) {
            nonStakingSupply = nonStakingSupply.add(_amount);
        }

        emit Transfer(address(0), _account, _amount);
    }

    function _burn(address _account, uint256 _amount) internal {
        require(_account != address(0), "BaseToken: burn from the zero address");

        _updateRewards(_account);

        balances[_account] = balances[_account].sub(_amount, "BaseToken: burn amount exceeds balance");
        totalSupply = totalSupply.sub(_amount);

        if (nonStakingAccounts[_account]) {
            nonStakingSupply = nonStakingSupply.sub(_amount);
        }

        emit Transfer(_account, address(0), _amount);
    }

    function _transfer(address _sender, address _recipient, uint256 _amount) private {
        require(_sender != address(0), "BaseToken: transfer from the zero address");
        require(_recipient != address(0), "BaseToken: transfer to the zero address");

        if (inPrivateTransferMode) {
            require(isHandler[msg.sender], "BaseToken: msg.sender not whitelisted");
        }

        _updateRewards(_sender);
        _updateRewards(_recipient);

        balances[_sender] = balances[_sender].sub(_amount, "BaseToken: transfer amount exceeds balance");
        balances[_recipient] = balances[_recipient].add(_amount);

        if (nonStakingAccounts[_sender]) {
            nonStakingSupply = nonStakingSupply.sub(_amount);
        }
        if (nonStakingAccounts[_recipient]) {
            nonStakingSupply = nonStakingSupply.add(_amount);
        }

        emit Transfer(_sender, _recipient,_amount);
    }

    function _approve(address _owner, address _spender, uint256 _amount) private {
        require(_owner != address(0), "BaseToken: approve from the zero address");
        require(_spender != address(0), "BaseToken: approve to the zero address");

        allowances[_owner][_spender] = _amount;

        emit Approval(_owner, _spender, _amount);
    }

    function _updateRewards(address _account) private {
        for (uint256 i = 0; i < yieldTrackers.length; i++) {
            address yieldTracker = yieldTrackers[i];
            IYieldTracker(yieldTracker).updateRewards(_account);
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IMintable {
    function isMinter(address _account) external returns (bool);
    function setMinter(address _minter, bool _isActive) external;
    function mint(address _account, uint256 _amount) external;
    function burn(address _account, uint256 _amount) external;
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "../math/SafeMath.sol";
import "../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IBaseToken {
    function totalStaked() external view returns (uint256);
    function stakedBalance(address _account) external view returns (uint256);
    function removeAdmin(address _account) external;
    function setInPrivateTransferMode(bool _inPrivateTransferMode) external;
    function withdrawToken(address _token, address _account, uint256 _amount) external;
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IYieldTracker {
    function claim(address _account, address _receiver) external returns (uint256);
    function updateRewards(address _account) external;
    function getTokensPerInterval() external view returns (uint256);
    function claimable(address _account) external view returns (uint256);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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 on 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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

Settings
{
  "viaIR": true,
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "constantOptimizer": true
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"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":"_account","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addNonStakingAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","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":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"inPrivateTransferMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonStakingAccounts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonStakingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"recoverClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeNonStakingAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_handler","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_inPrivateTransferMode","type":"bool"}],"name":"setInPrivateTransferMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_yieldTrackers","type":"address[]"}],"name":"setYieldTrackers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"stakedBalance","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":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"yieldTrackers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

604060808152346200042957620000156200042e565b90620000206200042e565b82519092906001600160401b0390818111620004135760009182546001928382811c921695861562000408575b6020968784101462000312578190601f93848111620003b5575b5087908483116001146200035157879262000345575b5050600019600383901b1c191690841b1784555b865190828211620003315783548481811c9116801562000326575b878210146200031257818111620002ca575b5085908211600114620002645784959697829394959262000258575b5050600019600383901b1c191690831b1782555b600480546001600160a01b03191633908117825590919015620002095783835b62000159575b50503380845260088552855184815290947fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93509150a3516121149081620004608239f35b60078054821015620002025785528585208101546001600160a01b0316803b15620001fe57858089518093635fd6196560e01b825233888301528160249485925af18015620001f457620001d0575b50506000198114620001bd578301836200010e565b634e487b7160e01b855260118352602485fd5b838211620001e3575087523880620001a8565b634e487b7160e01b87526041855286fd5b89513d89823e3d90fd5b8580fd5b5062000114565b855162461bcd60e51b8152808301869052602360248201527f42617365546f6b656e3a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b015190503880620000da565b83855285852090601f198316865b818110620002b457509883869798999a969596106200029a575b505050811b018255620000ee565b015160001960f88460031b161c191690553880806200028c565b8a83015184559286019291880191880162000272565b8486528686208280850160051c82019289861062000308575b0160051c019085905b828110620002fc575050620000be565b878155018590620002ec565b92508192620002e3565b634e487b7160e01b86526022600452602486fd5b90607f1690620000ac565b634e487b7160e01b85526041600452602485fd5b0151905038806200007d565b8780528888208794509190601f198416895b8b8282106200039e575050841162000384575b505050811b01845562000091565b015160001960f88460031b161c1916905538808062000376565b8385015186558a9790950194938401930162000363565b9091508680528787208480850160051c8201928a8610620003fe575b918891869594930160051c01915b828110620003ef57505062000067565b898155859450889101620003df565b92508192620003d1565b91607f16916200004d565b634e487b7160e01b600052604160045260246000fd5b600080fd5b60408051919082016001600160401b03811183821017620004135760405260048252630554e49560e41b602083015256fe60806040526004361015610013575b600080fd5b60003560e01c806301e33667146102e557806306fdde03146102dc578063095ea7b3146102d357806312d43a51146102ca5780631785f53c146102c157806318160ddd146102b85780631e83409a146102af57806323b872dd146102a6578063276eab4e1461029d57806327e235e314610243578063313ce5671461029457806340c10f191461028b578063429b62e51461028257806346ea87af1461027957806352cd38d91461027057806355b6ed5c146101c55780635a47a1a714610267578063602172671461025e5780636228907714610255578063704802751461024c57806370a0823114610243578063817b1cd21461023a5780639554381a1461023157806395d89b4114610228578063996f11ee1461021f5780639cb7de4b146102165780639dc29fac1461020d578063a9059cbb14610204578063a923fc40146101fb578063aa271e1a146101f2578063af640d0f146101e9578063c93be636146101e0578063cf456ae7146101d7578063cfad57a2146101ce578063dd62ed3e146101c5578063dfbaefb1146101bc5763fb30d916146101b457600080fd5b61000e6114cf565b5061000e6114ab565b5061000e610bab565b5061000e611463565b5061000e611400565b5061000e6113e1565b5061000e6113a3565b5061000e611363565b5061000e611201565b5061000e611168565b5061000e61101f565b5061000e610fbc565b5061000e610edd565b5061000e610e37565b5061000e610df7565b5061000e610dd4565b5061000e6108d6565b5061000e610d84565b5061000e610c84565b5061000e610c58565b5061000e610c0e565b5061000e610b61565b5061000e610ae6565b5061000e610aa6565b5061000e61092e565b5061000e610911565b5061000e61081e565b5061000e6107fa565b5061000e610712565b5061000e6106f3565b5061000e6106a6565b5061000e61067c565b5061000e61064a565b5061000e610566565b5061000e610363565b600435906001600160a01b038216820361000e57565b602435906001600160a01b038216820361000e57565b35906001600160a01b038216820361000e57565b606090600319011261000e576001600160a01b0390600435828116810361000e5791602435908116810361000e579060443590565b503461000e5761041a6000806103783661032e565b6004546001600160a01b039593919291869161039790831633146115ad565b169160405195602087019263a9059cbb60e01b84521660248701526044860152604485526103c48561049a565b82604051956103d2876104c3565b602087527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020880152610408843b151561190e565b51925af161041461195a565b9061198a565b805180610424575b005b81602080610439936104229501019101611897565b6118af565b600091031261000e57565b90600182811c92168015610479575b602083101461046357565b634e487b7160e01b600052602260045260246000fd5b91607f1691610458565b50634e487b7160e01b600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176104b657604052565b6104be610483565b604052565b6040810190811067ffffffffffffffff8211176104b657604052565b6060810190811067ffffffffffffffff8211176104b657604052565b90601f8019910116810190811067ffffffffffffffff8211176104b657604052565b6020808252825181830181905290939260005b82811061055257505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610530565b503461000e57600080600319360112610647576040519080805461058981610449565b8085529160019180831690811561061d57506001146105c3575b6105bf856105b3818703826104fb565b6040519182918261051d565b0390f35b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106106055750505081016020016105b3826105bf6105a3565b805460208587018101919091529093019281016105ea565b8695506105bf969350602092506105b394915060ff191682840152151560051b82010192936105a3565b80fd5b503461000e57604036600319011261000e576106716106676102ee565b6024359033611e43565b602060405160018152f35b503461000e57600036600319011261000e576004546040516001600160a01b039091168152602090f35b503461000e57602036600319011261000e576106c06102ee565b6004546001600160a01b0391906106da90831633146115ad565b166000908152600960205260409020805460ff19169055005b503461000e57600036600319011261000e576020600254604051908152f35b503461000e5760208060031936011261000e5761072d6102ee565b600091825b6007548110156107f457806107736107676107676107526107b595610b26565b905460039190911b1c6001600160a01b031690565b6001600160a01b031690565b6040516310e059a160e11b81523360048201526001600160a01b0386166024820152908490829060449082908a905af180156107e7575b6107ba575b50611a86565b610732565b6107d990843d86116107e0575b6107d181836104fb565b810190611aa2565b50386107af565b503d6107c7565b6107ef611ab1565b6107aa565b83604051f35b503461000e57602061081461080e3661032e565b91611af0565b6040519015158152f35b503461000e5760208060031936011261000e5767ffffffffffffffff60043581811161000e573660238201121561000e5780600401359182116108af575b8160051b60405192610870858301856104fb565b83526024848401918301019136831161000e57602401905b82821061089857610422846117b5565b8480916108a48461031a565b815201910190610888565b6108b7610483565b61085c565b6001600160a01b0316600090815260086020526040902090565b503461000e57602036600319011261000e576001600160a01b036108f86102ee565b1660005260056020526020604060002054604051908152f35b503461000e57600036600319011261000e57602060405160128152f35b503461000e57604036600319011261000e576109486102ee565b6024359033600052600c60205261096660ff6040600020541661202a565b6001600160a01b038116918215610a5557610a377fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610a22610a1b856109ae600097611f77565b6109c26109bd856002546119c6565b600255565b6001600160a01b03811660009081526005602052604090206109e79085905b546119c6565b6001600160a01b03821660009081526005602052604090205b556001600160a01b0316600090815260086020526040902090565b5460ff1690565b610a3c575b6040519081529081906020820190565b0390a3005b610a50610a4b826003546119c6565b600355565b610a27565b60405162461bcd60e51b815260206004820152602360248201527f42617365546f6b656e3a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b503461000e57602036600319011261000e576001600160a01b03610ac86102ee565b166000526009602052602060ff604060002054166040519015158152f35b503461000e57602036600319011261000e576001600160a01b03610b086102ee565b16600052600b602052602060ff604060002054166040519015158152f35b600754811015610b4b5760076000526000805160206120bf8339815191520190600090565b634e487b7160e01b600052603260045260246000fd5b503461000e57602036600319011261000e5760043560075481101561000e5760076000526000805160206120bf83398151915201546040516001600160a01b039091168152602090f35b503461000e57604036600319011261000e576020610bfb610bca6102ee565b610bd2610304565b6001600160a01b0391821660009081526006855260408082209290931681526020919091522090565b54604051908152f35b8015150361000e57565b503461000e57602036600319011261000e57600435610c2c81610c04565b610c4160018060a01b036004541633146115ad565b60ff8019600a54169115151617600a556000604051f35b503461000e57602036600319011261000e576020610c7c610c776102ee565b611abe565b604051908152f35b503461000e57602036600319011261000e57610c9e6102ee565b336000526009602052610cb860ff604060002054166115ad565b6001600160a01b03811660009081526008602052604090205460ff16610d3457610a4b81610ce861042293611f77565b6001600160a01b0381166000908152600860205260409020610d1190805460ff19166001179055565b6003546001600160a01b03909116600090815260056020526040902054906119c6565b60405162461bcd60e51b815260206004820152602260248201527f42617365546f6b656e3a205f6163636f756e7420616c7265616479206d61726b604482015261195960f21b6064820152608490fd5b503461000e57602036600319011261000e57610d9e6102ee565b6004546001600160a01b039190610db890831633146115ad565b166000908152600960205260409020805460ff19166001179055005b503461000e57600036600319011261000e576020610c7c60025460035490611a2d565b503461000e57602036600319011261000e576001600160a01b03610e196102ee565b166000526008602052602060ff604060002054166040519015158152f35b503461000e576000806003193601126106475760405190806001805491610e5d83610449565b8086529282811690811561061d5750600114610e83576105bf856105b3818703826104fb565b92508083527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b828410610ec55750505081016020016105b3826105bf6105a3565b80546020858701810191909152909301928101610eaa565b503461000e5760408060031936011261000e57610ef86102ee565b610f00610304565b9160009233845260209160098352610f1d60ff82872054166115ad565b845b600754811015610fb75780610f7a8585610f44610767610767610752610f8f98610b26565b86516310e059a160e11b81526001600160a01b03808c1660048301529092166024830152909283919082908c9082906044820190565b03925af18015610faa575b610f945750611a86565b610f1f565b6107d990863d88116107e0576107d181836104fb565b610fb2611ab1565b610f85565b858251f35b503461000e57604036600319011261000e57610422610fd96102ee565b60243590610fe682610c04565b6004546001600160a01b03919061100090831633146115ad565b16600052600b60205260406000209060ff801983541691151516179055565b503461000e57604036600319011261000e576110396102ee565b60243533600052600c60205261105660ff6040600020541661202a565b6001600160a01b03821690811561111557610a377fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916110f2610a1b8661109e600098611f77565b6001600160a01b03811660009081526005602052604090206110ca9054856110c4612076565b91611a69565b6001600160a01b0382166000908152600560205260409020556108bc6109bd85600254611a2d565b611106576040519081529081906020820190565b610a50610a4b82600354611a2d565b60405162461bcd60e51b815260206004820152602560248201527f42617365546f6b656e3a206275726e2066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b503461000e57604036600319011261000e576106716111856102ee565b6024359033611d05565b60209067ffffffffffffffff81116111ad575b601f01601f19160190565b6111b5610483565b6111a2565b81601f8201121561000e578035906111d18261118f565b926111df60405194856104fb565b8284526020838301011161000e57816000926020809301838601378301015290565b503461000e57604036600319011261000e5767ffffffffffffffff60043581811161000e576112349036906004016111ba565b60243582811161000e5761124c9036906004016111ba565b61126160018060a01b036004541633146115ad565b8151928311611356575b6000926112818161127c8654610449565b611607565b602080601f83116001146112c6575081906112b69486926112bb575b50508160011b916000199060031b1c19161783556116bf565b604051f35b01519050388061129d565b919293601f1984166112f9600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390565b9387905b82821061133e5750509160019391856112b697969410611325575b505050811b0183556116bf565b015160001960f88460031b161c19169055388080611318565b806001869782949787015181550196019401906112fd565b61135e610483565b61126b565b503461000e57602036600319011261000e576001600160a01b036113856102ee565b16600052600c602052602060ff604060002054166040519015158152f35b503461000e57600036600319011261000e576105bf6040516113c4816104c3565b60048152630554e49560e41b60208201526040519182918261051d565b503461000e57600036600319011261000e576020600354604051908152f35b503461000e57604036600319011261000e5761042261141d6102ee565b6024359061142a82610c04565b6004546001600160a01b03919061144490831633146115ad565b16600052600c60205260406000209060ff801983541691151516179055565b503461000e57602036600319011261000e5761147d6102ee565b600454906001600160a01b039061149733838516146115ad565b6001600160a01b0319909216911617600455005b503461000e57600036600319011261000e57602060ff600a54166040519015158152f35b503461000e57602036600319011261000e576114e96102ee565b33600052600960205261150360ff604060002054166115ad565b6001600160a01b03811660009081526008602052604090205460ff161561156857610a4b8161153461042293611f77565b6001600160a01b03166000908152600860209081526040808320805460ff1916905560035460059092529091205490611a2d565b60405162461bcd60e51b815260206004820152601e60248201527f42617365546f6b656e3a205f6163636f756e74206e6f74206d61726b656400006044820152606490fd5b156115b457565b60405162461bcd60e51b81526020600482015260146024820152732130b9b2aa37b5b2b71d103337b93134b23232b760611b6044820152606490fd5b8181106115fb575050565b600081556001016115f0565b90601f8211611614575050565b61165d91600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563906020601f840160051c8301931061165f575b601f0160051c01906115f0565b565b9091508190611650565b90601f8211611676575050565b61165d9160016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6906020601f840160051c8301931061165f57601f0160051c01906115f0565b90815167ffffffffffffffff81116117a8575b6001906116e8816116e38454610449565b611669565b602080601f8311600114611723575081929394600092611718575b5050600019600383901b1c191690821b179055565b015190503880611703565b90601f1983169561175660016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690565b926000905b8882106117915750508385969710611778575b505050811b019055565b015160001960f88460031b161c1916905538808061176e565b80878596829496860151815501950193019061175b565b6117b0610483565b6116d2565b6117ca60018060a01b036004541633146115ad565b80519067ffffffffffffffff8211611873575b680100000000000000008211611866575b60075482600755808310611842575b50602080910190600760005260005b8381106118195750505050565b82516001600160a01b03166000805160206120bf8339815191528201559181019160010161180c565b61186090836000805160206120bf83398151915291820191016115f0565b386117fd565b61186e610483565b6117ee565b61187b610483565b6117dd565b50634e487b7160e01b600052601160045260246000fd5b9081602091031261000e57516118ac81610c04565b90565b156118b657565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b1561191557565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b3d15611985573d9061196b8261118f565b9161197960405193846104fb565b82523d6000602084013e565b606090565b90919015611996575090565b8151156119a65750805190602001fd5b60405162461bcd60e51b81529081906119c2906004830161051d565b0390fd5b90810190818111611a20575b81106119db5790565b60405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606490fd5b611a28611880565b6119d2565b6118ac9160405191611a3e836104c3565b601e83527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060208401525b918282116119a657508103908111611a7e5790565b6118ac611880565b6001906000198114611a96570190565b611a9e611880565b0190565b9081602091031261000e575190565b506040513d6000823e3d90fd5b6001600160a01b031660009081526008602052604090205460ff16611aeb57600560205260406000205490565b600090565b919033600052600b60205260ff60406000205416611b9c576001600160a01b03831660009081526006602090815260408083203384529091529020611b979390611b9290611b8b90548560405191611b47836104df565b602c83527f42617365546f6b656e3a207472616e7366657220616d6f756e7420657863656560208401526b647320616c6c6f77616e636560a01b6040840152611a69565b3383611e43565b611d05565b600190565b611b9792611d05565b15611bac57565b60405162461bcd60e51b815260206004820152602960248201527f42617365546f6b656e3a207472616e736665722066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608490fd5b15611c0a57565b60405162461bcd60e51b815260206004820152602760248201527f42617365546f6b656e3a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b6064820152608490fd5b15611c6657565b60405162461bcd60e51b815260206004820152602560248201527f42617365546f6b656e3a206d73672e73656e646572206e6f742077686974656c6044820152641a5cdd195960da1b6064820152608490fd5b60405190611cc6826104df565b602a82526964732062616c616e636560b01b6040837f42617365546f6b656e3a207472616e7366657220616d6f756e7420657863656560208201520152565b91611e097fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610a22610a1b60018060a01b0395611deb610a1b888a1698611d4e8a1515611ba5565b831699611d5c8b1515611c03565b600a5460ff16611e1d575b611d7081611f77565b611d7984611f77565b6001600160a01b0381166000908152600560205260409020611d9f9054886110c4611cb9565b6001600160a01b0382811660009081526005602052604080822093909355908616815220611dce9088906109e1565b6001600160a01b0385166000908152600560205260409020610a00565b611e0e576001600160a01b0316600090815260086020526040902090565b0390a3565b6108bc610a4b85600354611a2d565b336000908152600b60205260409020611e3e90611e3990610a1b565b611c5f565b611d67565b6001600160a01b038082169291908315611f21578216938415611ecd5780611ebc7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594611ea5611e099560018060a01b03166000526006602052604060002090565b9060018060a01b0316600052602052604060002090565b556040519081529081906020820190565b60405162461bcd60e51b815260206004820152602660248201527f42617365546f6b656e3a20617070726f766520746f20746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f42617365546f6b656e3a20617070726f76652066726f6d20746865207a65726f604482015267206164647265737360c01b6064820152608490fd5b9060005b60075481101561202557611f8e81610b26565b90546001600160a01b0360039290921b1c81169190823b1561000e57600080611fe394602460409485519485938492635fd6196560e01b84528c1660048401525af18015612018575b611fe8575b5050611a86565b611f7b565b806120049267ffffffffffffffff821161200b575b528061043e565b3880611fdc565b612013610483565b611ffd565b612020611ab1565b611fd7565b509050565b1561203157565b60405162461bcd60e51b815260206004820152601c60248201527f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e000000006044820152606490fd5b60405190612083826104df565b6026825265616c616e636560d01b6040837f42617365546f6b656e3a206275726e20616d6f756e74206578636565647320626020820152015256fea66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688a2646970667358221220bb08b63c0cf2ae3882ed120b418ad299f445d06884a4d2c78c744e660f8eab3e64736f6c63430008100033

Deployed Bytecode

0x60806040526004361015610013575b600080fd5b60003560e01c806301e33667146102e557806306fdde03146102dc578063095ea7b3146102d357806312d43a51146102ca5780631785f53c146102c157806318160ddd146102b85780631e83409a146102af57806323b872dd146102a6578063276eab4e1461029d57806327e235e314610243578063313ce5671461029457806340c10f191461028b578063429b62e51461028257806346ea87af1461027957806352cd38d91461027057806355b6ed5c146101c55780635a47a1a714610267578063602172671461025e5780636228907714610255578063704802751461024c57806370a0823114610243578063817b1cd21461023a5780639554381a1461023157806395d89b4114610228578063996f11ee1461021f5780639cb7de4b146102165780639dc29fac1461020d578063a9059cbb14610204578063a923fc40146101fb578063aa271e1a146101f2578063af640d0f146101e9578063c93be636146101e0578063cf456ae7146101d7578063cfad57a2146101ce578063dd62ed3e146101c5578063dfbaefb1146101bc5763fb30d916146101b457600080fd5b61000e6114cf565b5061000e6114ab565b5061000e610bab565b5061000e611463565b5061000e611400565b5061000e6113e1565b5061000e6113a3565b5061000e611363565b5061000e611201565b5061000e611168565b5061000e61101f565b5061000e610fbc565b5061000e610edd565b5061000e610e37565b5061000e610df7565b5061000e610dd4565b5061000e6108d6565b5061000e610d84565b5061000e610c84565b5061000e610c58565b5061000e610c0e565b5061000e610b61565b5061000e610ae6565b5061000e610aa6565b5061000e61092e565b5061000e610911565b5061000e61081e565b5061000e6107fa565b5061000e610712565b5061000e6106f3565b5061000e6106a6565b5061000e61067c565b5061000e61064a565b5061000e610566565b5061000e610363565b600435906001600160a01b038216820361000e57565b602435906001600160a01b038216820361000e57565b35906001600160a01b038216820361000e57565b606090600319011261000e576001600160a01b0390600435828116810361000e5791602435908116810361000e579060443590565b503461000e5761041a6000806103783661032e565b6004546001600160a01b039593919291869161039790831633146115ad565b169160405195602087019263a9059cbb60e01b84521660248701526044860152604485526103c48561049a565b82604051956103d2876104c3565b602087527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020880152610408843b151561190e565b51925af161041461195a565b9061198a565b805180610424575b005b81602080610439936104229501019101611897565b6118af565b600091031261000e57565b90600182811c92168015610479575b602083101461046357565b634e487b7160e01b600052602260045260246000fd5b91607f1691610458565b50634e487b7160e01b600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176104b657604052565b6104be610483565b604052565b6040810190811067ffffffffffffffff8211176104b657604052565b6060810190811067ffffffffffffffff8211176104b657604052565b90601f8019910116810190811067ffffffffffffffff8211176104b657604052565b6020808252825181830181905290939260005b82811061055257505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610530565b503461000e57600080600319360112610647576040519080805461058981610449565b8085529160019180831690811561061d57506001146105c3575b6105bf856105b3818703826104fb565b6040519182918261051d565b0390f35b80809450527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106106055750505081016020016105b3826105bf6105a3565b805460208587018101919091529093019281016105ea565b8695506105bf969350602092506105b394915060ff191682840152151560051b82010192936105a3565b80fd5b503461000e57604036600319011261000e576106716106676102ee565b6024359033611e43565b602060405160018152f35b503461000e57600036600319011261000e576004546040516001600160a01b039091168152602090f35b503461000e57602036600319011261000e576106c06102ee565b6004546001600160a01b0391906106da90831633146115ad565b166000908152600960205260409020805460ff19169055005b503461000e57600036600319011261000e576020600254604051908152f35b503461000e5760208060031936011261000e5761072d6102ee565b600091825b6007548110156107f457806107736107676107676107526107b595610b26565b905460039190911b1c6001600160a01b031690565b6001600160a01b031690565b6040516310e059a160e11b81523360048201526001600160a01b0386166024820152908490829060449082908a905af180156107e7575b6107ba575b50611a86565b610732565b6107d990843d86116107e0575b6107d181836104fb565b810190611aa2565b50386107af565b503d6107c7565b6107ef611ab1565b6107aa565b83604051f35b503461000e57602061081461080e3661032e565b91611af0565b6040519015158152f35b503461000e5760208060031936011261000e5767ffffffffffffffff60043581811161000e573660238201121561000e5780600401359182116108af575b8160051b60405192610870858301856104fb565b83526024848401918301019136831161000e57602401905b82821061089857610422846117b5565b8480916108a48461031a565b815201910190610888565b6108b7610483565b61085c565b6001600160a01b0316600090815260086020526040902090565b503461000e57602036600319011261000e576001600160a01b036108f86102ee565b1660005260056020526020604060002054604051908152f35b503461000e57600036600319011261000e57602060405160128152f35b503461000e57604036600319011261000e576109486102ee565b6024359033600052600c60205261096660ff6040600020541661202a565b6001600160a01b038116918215610a5557610a377fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610a22610a1b856109ae600097611f77565b6109c26109bd856002546119c6565b600255565b6001600160a01b03811660009081526005602052604090206109e79085905b546119c6565b6001600160a01b03821660009081526005602052604090205b556001600160a01b0316600090815260086020526040902090565b5460ff1690565b610a3c575b6040519081529081906020820190565b0390a3005b610a50610a4b826003546119c6565b600355565b610a27565b60405162461bcd60e51b815260206004820152602360248201527f42617365546f6b656e3a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b503461000e57602036600319011261000e576001600160a01b03610ac86102ee565b166000526009602052602060ff604060002054166040519015158152f35b503461000e57602036600319011261000e576001600160a01b03610b086102ee565b16600052600b602052602060ff604060002054166040519015158152f35b600754811015610b4b5760076000526000805160206120bf8339815191520190600090565b634e487b7160e01b600052603260045260246000fd5b503461000e57602036600319011261000e5760043560075481101561000e5760076000526000805160206120bf83398151915201546040516001600160a01b039091168152602090f35b503461000e57604036600319011261000e576020610bfb610bca6102ee565b610bd2610304565b6001600160a01b0391821660009081526006855260408082209290931681526020919091522090565b54604051908152f35b8015150361000e57565b503461000e57602036600319011261000e57600435610c2c81610c04565b610c4160018060a01b036004541633146115ad565b60ff8019600a54169115151617600a556000604051f35b503461000e57602036600319011261000e576020610c7c610c776102ee565b611abe565b604051908152f35b503461000e57602036600319011261000e57610c9e6102ee565b336000526009602052610cb860ff604060002054166115ad565b6001600160a01b03811660009081526008602052604090205460ff16610d3457610a4b81610ce861042293611f77565b6001600160a01b0381166000908152600860205260409020610d1190805460ff19166001179055565b6003546001600160a01b03909116600090815260056020526040902054906119c6565b60405162461bcd60e51b815260206004820152602260248201527f42617365546f6b656e3a205f6163636f756e7420616c7265616479206d61726b604482015261195960f21b6064820152608490fd5b503461000e57602036600319011261000e57610d9e6102ee565b6004546001600160a01b039190610db890831633146115ad565b166000908152600960205260409020805460ff19166001179055005b503461000e57600036600319011261000e576020610c7c60025460035490611a2d565b503461000e57602036600319011261000e576001600160a01b03610e196102ee565b166000526008602052602060ff604060002054166040519015158152f35b503461000e576000806003193601126106475760405190806001805491610e5d83610449565b8086529282811690811561061d5750600114610e83576105bf856105b3818703826104fb565b92508083527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b828410610ec55750505081016020016105b3826105bf6105a3565b80546020858701810191909152909301928101610eaa565b503461000e5760408060031936011261000e57610ef86102ee565b610f00610304565b9160009233845260209160098352610f1d60ff82872054166115ad565b845b600754811015610fb75780610f7a8585610f44610767610767610752610f8f98610b26565b86516310e059a160e11b81526001600160a01b03808c1660048301529092166024830152909283919082908c9082906044820190565b03925af18015610faa575b610f945750611a86565b610f1f565b6107d990863d88116107e0576107d181836104fb565b610fb2611ab1565b610f85565b858251f35b503461000e57604036600319011261000e57610422610fd96102ee565b60243590610fe682610c04565b6004546001600160a01b03919061100090831633146115ad565b16600052600b60205260406000209060ff801983541691151516179055565b503461000e57604036600319011261000e576110396102ee565b60243533600052600c60205261105660ff6040600020541661202a565b6001600160a01b03821690811561111557610a377fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916110f2610a1b8661109e600098611f77565b6001600160a01b03811660009081526005602052604090206110ca9054856110c4612076565b91611a69565b6001600160a01b0382166000908152600560205260409020556108bc6109bd85600254611a2d565b611106576040519081529081906020820190565b610a50610a4b82600354611a2d565b60405162461bcd60e51b815260206004820152602560248201527f42617365546f6b656e3a206275726e2066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b503461000e57604036600319011261000e576106716111856102ee565b6024359033611d05565b60209067ffffffffffffffff81116111ad575b601f01601f19160190565b6111b5610483565b6111a2565b81601f8201121561000e578035906111d18261118f565b926111df60405194856104fb565b8284526020838301011161000e57816000926020809301838601378301015290565b503461000e57604036600319011261000e5767ffffffffffffffff60043581811161000e576112349036906004016111ba565b60243582811161000e5761124c9036906004016111ba565b61126160018060a01b036004541633146115ad565b8151928311611356575b6000926112818161127c8654610449565b611607565b602080601f83116001146112c6575081906112b69486926112bb575b50508160011b916000199060031b1c19161783556116bf565b604051f35b01519050388061129d565b919293601f1984166112f9600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390565b9387905b82821061133e5750509160019391856112b697969410611325575b505050811b0183556116bf565b015160001960f88460031b161c19169055388080611318565b806001869782949787015181550196019401906112fd565b61135e610483565b61126b565b503461000e57602036600319011261000e576001600160a01b036113856102ee565b16600052600c602052602060ff604060002054166040519015158152f35b503461000e57600036600319011261000e576105bf6040516113c4816104c3565b60048152630554e49560e41b60208201526040519182918261051d565b503461000e57600036600319011261000e576020600354604051908152f35b503461000e57604036600319011261000e5761042261141d6102ee565b6024359061142a82610c04565b6004546001600160a01b03919061144490831633146115ad565b16600052600c60205260406000209060ff801983541691151516179055565b503461000e57602036600319011261000e5761147d6102ee565b600454906001600160a01b039061149733838516146115ad565b6001600160a01b0319909216911617600455005b503461000e57600036600319011261000e57602060ff600a54166040519015158152f35b503461000e57602036600319011261000e576114e96102ee565b33600052600960205261150360ff604060002054166115ad565b6001600160a01b03811660009081526008602052604090205460ff161561156857610a4b8161153461042293611f77565b6001600160a01b03166000908152600860209081526040808320805460ff1916905560035460059092529091205490611a2d565b60405162461bcd60e51b815260206004820152601e60248201527f42617365546f6b656e3a205f6163636f756e74206e6f74206d61726b656400006044820152606490fd5b156115b457565b60405162461bcd60e51b81526020600482015260146024820152732130b9b2aa37b5b2b71d103337b93134b23232b760611b6044820152606490fd5b8181106115fb575050565b600081556001016115f0565b90601f8211611614575050565b61165d91600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563906020601f840160051c8301931061165f575b601f0160051c01906115f0565b565b9091508190611650565b90601f8211611676575050565b61165d9160016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6906020601f840160051c8301931061165f57601f0160051c01906115f0565b90815167ffffffffffffffff81116117a8575b6001906116e8816116e38454610449565b611669565b602080601f8311600114611723575081929394600092611718575b5050600019600383901b1c191690821b179055565b015190503880611703565b90601f1983169561175660016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690565b926000905b8882106117915750508385969710611778575b505050811b019055565b015160001960f88460031b161c1916905538808061176e565b80878596829496860151815501950193019061175b565b6117b0610483565b6116d2565b6117ca60018060a01b036004541633146115ad565b80519067ffffffffffffffff8211611873575b680100000000000000008211611866575b60075482600755808310611842575b50602080910190600760005260005b8381106118195750505050565b82516001600160a01b03166000805160206120bf8339815191528201559181019160010161180c565b61186090836000805160206120bf83398151915291820191016115f0565b386117fd565b61186e610483565b6117ee565b61187b610483565b6117dd565b50634e487b7160e01b600052601160045260246000fd5b9081602091031261000e57516118ac81610c04565b90565b156118b657565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b1561191557565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b3d15611985573d9061196b8261118f565b9161197960405193846104fb565b82523d6000602084013e565b606090565b90919015611996575090565b8151156119a65750805190602001fd5b60405162461bcd60e51b81529081906119c2906004830161051d565b0390fd5b90810190818111611a20575b81106119db5790565b60405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606490fd5b611a28611880565b6119d2565b6118ac9160405191611a3e836104c3565b601e83527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060208401525b918282116119a657508103908111611a7e5790565b6118ac611880565b6001906000198114611a96570190565b611a9e611880565b0190565b9081602091031261000e575190565b506040513d6000823e3d90fd5b6001600160a01b031660009081526008602052604090205460ff16611aeb57600560205260406000205490565b600090565b919033600052600b60205260ff60406000205416611b9c576001600160a01b03831660009081526006602090815260408083203384529091529020611b979390611b9290611b8b90548560405191611b47836104df565b602c83527f42617365546f6b656e3a207472616e7366657220616d6f756e7420657863656560208401526b647320616c6c6f77616e636560a01b6040840152611a69565b3383611e43565b611d05565b600190565b611b9792611d05565b15611bac57565b60405162461bcd60e51b815260206004820152602960248201527f42617365546f6b656e3a207472616e736665722066726f6d20746865207a65726044820152686f206164647265737360b81b6064820152608490fd5b15611c0a57565b60405162461bcd60e51b815260206004820152602760248201527f42617365546f6b656e3a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b6064820152608490fd5b15611c6657565b60405162461bcd60e51b815260206004820152602560248201527f42617365546f6b656e3a206d73672e73656e646572206e6f742077686974656c6044820152641a5cdd195960da1b6064820152608490fd5b60405190611cc6826104df565b602a82526964732062616c616e636560b01b6040837f42617365546f6b656e3a207472616e7366657220616d6f756e7420657863656560208201520152565b91611e097fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91610a22610a1b60018060a01b0395611deb610a1b888a1698611d4e8a1515611ba5565b831699611d5c8b1515611c03565b600a5460ff16611e1d575b611d7081611f77565b611d7984611f77565b6001600160a01b0381166000908152600560205260409020611d9f9054886110c4611cb9565b6001600160a01b0382811660009081526005602052604080822093909355908616815220611dce9088906109e1565b6001600160a01b0385166000908152600560205260409020610a00565b611e0e576001600160a01b0316600090815260086020526040902090565b0390a3565b6108bc610a4b85600354611a2d565b336000908152600b60205260409020611e3e90611e3990610a1b565b611c5f565b611d67565b6001600160a01b038082169291908315611f21578216938415611ecd5780611ebc7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594611ea5611e099560018060a01b03166000526006602052604060002090565b9060018060a01b0316600052602052604060002090565b556040519081529081906020820190565b60405162461bcd60e51b815260206004820152602660248201527f42617365546f6b656e3a20617070726f766520746f20746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602860248201527f42617365546f6b656e3a20617070726f76652066726f6d20746865207a65726f604482015267206164647265737360c01b6064820152608490fd5b9060005b60075481101561202557611f8e81610b26565b90546001600160a01b0360039290921b1c81169190823b1561000e57600080611fe394602460409485519485938492635fd6196560e01b84528c1660048401525af18015612018575b611fe8575b5050611a86565b611f7b565b806120049267ffffffffffffffff821161200b575b528061043e565b3880611fdc565b612013610483565b611ffd565b612020611ab1565b611fd7565b509050565b1561203157565b60405162461bcd60e51b815260206004820152601c60248201527f4d696e7461626c6542617365546f6b656e3a20666f7262696464656e000000006044820152606490fd5b60405190612083826104df565b6026825265616c616e636560d01b6040837f42617365546f6b656e3a206275726e20616d6f756e74206578636565647320626020820152015256fea66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688a2646970667358221220bb08b63c0cf2ae3882ed120b418ad299f445d06884a4d2c78c744e660f8eab3e64736f6c63430008100033

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.