ETH Price: $3,432.03 (-1.49%)

Token

Habitat Token (HBT)
 

Overview

Max Total Supply

100,000,000 HBT

Holders

1,541

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 10 Decimals)

Filtered by Token Holder
jpeng2022.eth
Balance
20.6922910328 HBT

Value
$0.00
0x18842d30863c114e4c6986db4e42fd910d68e034
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Scaling online communities with people owned rollup infrastructure.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HabitatToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 256 runs

Other Settings:
istanbul EvmVersion, MPL-2.0 license
File 1 of 2 : HabitatToken.sol
// SPDX-License-Identifier: MPL-2.0
pragma solidity >=0.6.2;

import './Utilities.sol';

/// @notice ERC-20 contract with support for EIP-2612 and other niceties.
contract HabitatToken is Utilities {
  mapping (address => uint256) _balances;
  mapping (address => mapping (address => uint256)) _allowances;
  mapping (address => uint256) _nonces;

  event Approval(address indexed owner, address indexed spender, uint256 value);
  event Transfer(address indexed from, address indexed to, uint256 value);

  constructor () {
    _balances[msg.sender] = totalSupply();
  }

  /// @notice Returns the name of token.
  function name () public virtual view returns (string memory) {
    return 'Habitat Token';
  }

  /// @notice Returns the symbol of the token.
  function symbol () public virtual view returns (string memory) {
    return 'HBT';
  }

  /// @notice Returns the number of decimals the token uses.
  function decimals () public virtual view returns (uint8) {
    return 10;
  }

  /// @notice Returns the DOMAIN_SEPARATOR. See EIP-2612.
  function DOMAIN_SEPARATOR () public virtual view returns (bytes32 ret) {
    assembly {
      // load free memory ptr
      let ptr := mload(64)
      // keep a copy to calculate the length later
      let start := ptr

      // keccak256('EIP712Domain(string name,uint256 chainId,address verifyingContract)')
      mstore(ptr, 0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866)
      ptr := add(ptr, 32)

      // keccak256(bytes('Habitat Token'))
      mstore(ptr, 0x825a5bd2b322b183692110889ab8fda39cd7c633901fc90cea3ce579a5694e95)
      ptr := add(ptr, 32)

      // store chainid
      mstore(ptr, chainid())
      ptr := add(ptr, 32)

      // store address(this)
      mstore(ptr, address())
      ptr := add(ptr, 32)

      // hash
      ret := keccak256(start, sub(ptr, start))
    }
  }

  /// @notice Returns the total supply of this token.
  function totalSupply () public virtual view returns (uint256) {
    return 1000000000000000000;
  }

  /// @notice Returns the balance of `account`.
  function balanceOf (address account) public virtual view returns (uint256) {
    return _balances[account];
  }

  /// @notice Returns the allowance for `spender` of `account`.
  function allowance (address account, address spender) public virtual view returns (uint256) {
    return _allowances[account][spender];
  }

  /// @notice Returns the nonce of `account`. Used in `permit`. See EIP-2612.
  function nonces (address account) public virtual view returns (uint256) {
    return _nonces[account];
  }

  /// @notice Approves `amount` from sender to be spend by `spender`.
  /// @param spender Address of the party that can draw from msg.sender's account.
  /// @param amount The maximum collective amount that `spender` can draw.
  /// @return (bool) Returns True if approved.
  function approve (address spender, uint256 amount) public virtual returns (bool) {
    _approve(msg.sender, spender, amount);
    return true;
  }

  /// @dev The concrete implementation of `approve`.
  function _approve (address owner, address spender, uint256 value) internal virtual {
    _allowances[owner][spender] = value;
    emit Approval(owner, spender, value);
  }

  /// @dev The concrete implementation of `transfer` and `transferFrom`.
  function _transferFrom (address from, address to, uint256 value) internal virtual returns (bool) {
    uint256 balance = _balances[from];
    require(balance >= value, 'BALANCE');

    if (from != to) {
      _balances[from] = balance - value;
      balance = _balances[to];
      uint256 newBalance = balance + value;
      // overflow check, also reverts if `value` is zero
      require(newBalance > balance, 'OVERFLOW');
      _balances[to] = newBalance;
    }

    emit Transfer(from, to, value);

    return true;
  }

  /// @notice Transfers `amount` tokens from `msg.sender` to `to`.
  /// @param to The address to move the tokens.
  /// @param amount of the tokens to move.
  /// @return (bool) Returns True if succeeded.
  function transfer (address to, uint256 amount) public virtual returns (bool) {
    return _transferFrom(msg.sender, to, amount);
  }

  /// @notice Transfers `amount` tokens from `from` to `to`. Caller may need approval if `from` is not `msg.sender`.
  /// @param from Address to draw tokens from.
  /// @param to The address to move the tokens.
  /// @param amount The token amount to move.
  /// @return (bool) Returns True if succeeded.
  function transferFrom (address from, address to, uint256 amount) public virtual returns (bool) {
    uint256 _allowance = _allowances[from][msg.sender];
    require(_allowance >= amount, 'ALLOWANCE');

    if (_allowance != uint256(-1)) {
      _allowances[from][msg.sender] = _allowance - amount;
    }

    return _transferFrom(from, to, amount);
  }

  /// @notice Approves `value` from `owner` to be spend by `spender`.
  /// @param owner Address of the owner.
  /// @param spender The address of the spender that gets approved to draw from `owner`.
  /// @param value The maximum collective amount that `spender` can draw.
  /// @param deadline This permit must be redeemed before this deadline (UTC timestamp in seconds).
  function permit (
    address owner,
    address spender,
    uint256 value,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external {
    require(owner != address(0), 'OWNER');
    require(block.timestamp < deadline, 'EXPIRED');

    uint256 nonce = _nonces[owner]++;
    bytes32 domainSeparator = DOMAIN_SEPARATOR();
    bytes32 digest;
    assembly {
      // ptr to free memory
      let ptr := mload(64)
      // keep a copy to calculate the length later
      let start := ptr

      // keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');
      mstore(ptr, 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9)
      ptr := add(ptr, 32)

      // copy (owner, spender, value) from calldata in one go
      calldatacopy(ptr, 4, 96)
      ptr := add(ptr, 96)

      // store nonce
      mstore(ptr, nonce)
      ptr := add(ptr, 32)
      // store deadline
      mstore(ptr, deadline)
      ptr := add(ptr, 32)

      // Permit struct hash
      let permitStructHash := keccak256(start, sub(ptr, start))
      // reset ptr
      ptr := start
      // add 30 bytes to align correctly (0x1901)
      start := add(ptr, 30)

      // preamble
      mstore(ptr, 0x1901)
      ptr := add(ptr, 32)

      // DOMAIN_SEPARATOR
      mstore(ptr, domainSeparator)
      ptr := add(ptr, 32)

      // from above
      mstore(ptr, permitStructHash)
      ptr := add(ptr, 32)

      // hash it
      digest := keccak256(start, sub(ptr, start))
    }

    require(ecrecover(digest, v, r, s) == owner, 'SIG');
    _approve(owner, spender, value);
  }

  /// @dev Helper function for wrapping calls. Reverts on a call to 'self'.
  function _callWrapper (address to, bytes calldata data) internal returns (bytes memory) {
    require(to != address(this));
    (bool success, bytes memory ret) = to.call(data);
    require(success);
    return ret;
  }

  /// @notice Transfers `amount` from `msg.sender` to `to` and calls `to` with `data` as input.
  /// Reverts if not succesful. Otherwise returns any data from the call.
  function transferAndCall (address to, uint256 amount, bytes calldata data) external returns (bytes memory) {
    _transferFrom(msg.sender, to, amount);
    return _callWrapper(to, data);
  }

  /// @notice Approves `amount` from `msg.sender` to be spend by `to` and calls `to` with `data` as input.
  /// Reverts if not succesful. Otherwise returns any data from the call.
  function approveAndCall (address to, uint256 amount, bytes calldata data) external returns (bytes memory) {
    _approve(msg.sender, to, amount);
    return _callWrapper(to, data);
  }

  /// @notice Redeems a permit for this contract (`permitData`) and calls `to` with `data` as input.
  /// Reverts if not succesful. Otherwise returns any data from the call.
  function redeemPermitAndCall (address to, bytes calldata permitData, bytes calldata data) external returns (bytes memory) {
    Utilities._maybeRedeemPermit(address(this), permitData);
    return _callWrapper(to, data);
  }

  /// @notice Allows to recover `token`.
  /// Transfers `token` to `msg.sender`.
  /// @param token The address of the ERC-20 token to recover.
  function recoverLostTokens (address token) external {
    Utilities._safeTransfer(token, msg.sender, Utilities._safeBalance(token, address(this)));
  }
}

File 2 of 2 : Utilities.sol
// SPDX-License-Identifier: MIT

interface IWETH {
  function deposit() external payable;
  function transfer(address to, uint value) external returns (bool);
  function withdraw(uint) external;
}

interface IUniswapV2Pair {
  function factory() external view returns (address);
  function token0() external view returns (address);
  function token1() external view returns (address);
  function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
  function price0CumulativeLast() external view returns (uint);
  function price1CumulativeLast() external view returns (uint);
  function kLast() external view returns (uint);

  function mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function skim(address to) external;
  function sync() external;
}

interface IDroplet {
  function drip () external;
}

library SafeMath {
  function add(uint x, uint y) internal pure returns (uint z) {
    require((z = x + y) >= x, 'ADD_OVERFLOW');
  }

  function sub(uint x, uint y) internal pure returns (uint z) {
    require((z = x - y) <= x, 'SUB_OVERFLOW');
  }

  function mul(uint x, uint y) internal pure returns (uint z) {
    require(y == 0 || (z = x * y) / y == x, 'MUL_OVERFLOW');
  }
}

library UniswapV2Library {
  using SafeMath for uint;

  // fetches and sorts the reserves for a pair
  function getReserves (uint256 pair) internal view returns (uint reserveA, uint reserveB) {
    address addr = address(pair >> 1);
    uint direction = pair & 1;
    (uint reserve0, uint reserve1,) = IUniswapV2Pair(addr).getReserves();
    (reserveA, reserveB) = direction == 0 ? (reserve0, reserve1) : (reserve1, reserve0);
  }

  // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
  function getAmountOut (uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
    require(amountIn > 0, 'INSUFFICIENT_INPUT_AMOUNT');
    require(reserveIn > 0 && reserveOut > 0, 'INSUFFICIENT_LIQUIDITY');
    uint amountInWithFee = amountIn.mul(997);
    uint numerator = amountInWithFee.mul(reserveOut);
    uint denominator = reserveIn.mul(1000).add(amountInWithFee);
    amountOut = numerator / denominator;
  }

  // performs chained getAmountOut calculations on any number of pairs
  function getAmountsOut (uint amountIn, uint256[] memory pairs) internal view returns (uint[] memory amounts) {
    amounts = new uint[](pairs.length);
    amounts[0] = amountIn;
    for (uint i = 1; i < pairs.length; i++) {
      (uint reserveIn, uint reserveOut) = getReserves(pairs[i]);
      amounts[i] = getAmountOut(amounts[i - 1], reserveIn, reserveOut);
    }
  }
}

contract Utilities {
  bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)
  bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256)
  bytes4 private constant SIG_APPROVE = 0x095ea7b3; // approve(address,uint256)
  bytes4 private constant SIG_BALANCE = 0x70a08231; // balanceOf(address)

  /// @dev Provides a safe ERC-20.transfer version for different ERC-20 implementations.
  /// Reverts on a failed transfer.
  /// @param token The address of the ERC-20 token.
  /// @param to Transfer tokens to.
  /// @param amount The token amount.
  function _safeTransfer (address token, address to, uint256 amount) internal {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER');
  }

  /// @dev Provides a safe ERC-20.transferFrom version for different ERC-20 implementations.
  /// Reverts on a failed transfer.
  /// @param token The address of the ERC-20 token.
  /// @param from Transfer tokens from.
  /// @param to Transfer tokens to.
  /// @param amount The token amount.
  function _safeTransferFrom (address token, address from, address to, uint256 amount) internal {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FROM');
  }

  /// @dev Provides a ETH transfer wrapper.
  /// Reverts on a failed transfer.
  /// @param to Transfer ETH to.
  /// @param amount The ETH amount.
  function _safeTransferETH (address to, uint256 amount) internal {
    (bool success,) = to.call{value:amount}("");
    require(success, 'TRANSFER_ETH');
  }

  /// @dev Provides a safe ERC-20.approve version for different ERC-20 implementations.
  /// Reverts if failed.
  /// @param token The address of the ERC-20 token.
  /// @param spender of tokens.
  /// @param amount Allowance amount.
  function _safeApprove (address token, address spender, uint256 amount) internal {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_APPROVE, spender, amount));
    require(success && (data.length == 0 || abi.decode(data, (bool))), 'APPROVE');
  }

  /// @dev Provides a wrapper for ERC-20.balanceOf.
  /// Reverts if failed.
  /// @param token The address of the ERC-20 token.
  /// @param account Address of the account to query.
  function _safeBalance (address token, address account) internal returns (uint256) {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_BALANCE, account));
    require(success, 'BALANCE');
    return abi.decode(data, (uint256));
  }

  /// @dev Wrapper for `_safeTransfer` or `_safeTransferFrom` depending on `from`.
  function _safeTransferWrapper (address token, address from, address to, uint256 amount) internal {
    if (from == address(this)) {
      _safeTransfer(token, to, amount);
    } else {
      _safeTransferFrom(token, from, to, amount);
    }
  }

  /// @dev Helper function for redeeming EIP-2612 and DAI-style permits.
  function _maybeRedeemPermit (address token, bytes memory permitData) internal {
    if (permitData.length > 0) {
      bool success;
      assembly {
        let dataPtr := add(permitData, 32)
        let functionSig := shr(224, mload(dataPtr))

        {
          // check if permit.owner is address(this). Yes, paranoia.
          // offset is <functionSig 4 bytes> + 12 bytes left-side part of permit.owner.
          // shift it to the right by 12 bytes so that we can *safely* compare
          let _owner := shr(96, mload(add(dataPtr, 16)))
          if eq(_owner, address()) {
            // even if a correct signature for this contract is just possible in theory,
            // attempting this deserves no error message
            revert(0, 0)
          }
        }

        // EIP-2612 = 0xd505accf || dai-like (old) permit = 0x8fcbaf0c
        if or( eq(functionSig, 0xd505accf), eq(functionSig, 0x8fcbaf0c) ) {
          let size := mload(permitData)
          success := call(gas(), token, 0, dataPtr, size, 0, 0)
        }
      }
      require(success, 'PERMIT');
    }
  }

  /// @dev Requires the initial amount to have already been sent to the first pair.
  function _swap (uint[] memory amounts, uint256[] memory path, address _to) internal {
    for (uint i = 1; i < path.length; i++) {
      uint amountOut = amounts[i];

      address pair = address(path[i] >> 1);
      uint direction = path[i] & 1;
      (uint amount0Out, uint amount1Out) = direction == 0 ? (uint(0), amountOut) : (amountOut, uint(0));
      address to = i < path.length - 1 ? pair : _to;

      IUniswapV2Pair(pair).swap(
        amount0Out, amount1Out, to, ""
      );
    }
  }

  function _swapExactTokensForTokens (
    uint256[] memory path,
    uint amountIn,
    address from,
    address to
  ) internal returns (uint[] memory amounts)
  {
    amounts = UniswapV2Library.getAmountsOut(amountIn, path);

    _safeTransferWrapper(address(path[0]), from, address(path[1] >> 1), amounts[0]);
    _swap(amounts, path, to);
  }

  function _swapExactETHForTokens (
    uint256[] memory path,
    uint amountIn,
    address to
  ) internal returns (uint[] memory amounts)
  {
    amounts = UniswapV2Library.getAmountsOut(amountIn, path);

    IWETH(path[0]).deposit{value: amounts[0]}();
    _safeTransferWrapper(address(path[0]), address(this), address(path[1] >> 1), amounts[0]);

    _swap(amounts, path, to);
  }

  function _swapExactTokensForETH (
    uint256[] memory path,
    uint amountIn,
    address from,
    address to,
    address weth
  ) internal returns (uint[] memory amounts)
  {
    amounts = UniswapV2Library.getAmountsOut(amountIn, path);

    _safeTransferWrapper(address(path[0]), from, address(path[1] >> 1), amounts[0]);
    _swap(amounts, path, address(this));

    uint256 finalOutputAmount = amounts[amounts.length - 1];
    IWETH(weth).withdraw(finalOutputAmount);
    _safeTransferETH(to, finalOutputAmount);
  }
}

Settings
{
  "evmVersion": "istanbul",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "optimizer": {
    "enabled": true,
    "runs": 256,
    "details": {
      "peephole": true,
      "orderLiterals": false,
      "deduplicate": true,
      "cse": true,
      "constantOptimizer": true,
      "yul": false
    }
  },
  "metadata": {
    "bytecodeHash": "none"
  }
}

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":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"ret","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"recoverLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"permitData","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"redeemPermitAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061001961002e565b3360009081526020819052604090205561003a565b670de0b6b3a764000090565b610f04806100496000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b9e8ce2c11610066578063b9e8ce2c14610409578063cae9ca5114610431578063d505accf146104b4578063dd62ed3e1461050557610100565b806370a08231146103895780637ecebe00146103af57806395d89b41146103d5578063a9059cbb146103dd57610100565b8063313ce567116100d3578063313ce567146102125780633644e515146102305780633833045d146102385780634000aea01461030657610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101c257806323b872dd146101dc575b600080fd5b61010d610533565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b03813516906020013561055a565b604080519115158252519081900360200190f35b6101ca610570565b60408051918252519081900360200190f35b6101ae600480360360608110156101f257600080fd5b506001600160a01b0381358116916020810135909116906040013561057c565b61021a610627565b6040805160ff9092168252519081900360200190f35b6101ca61062c565b61010d6004803603606081101561024e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460018302840111600160201b831117156102ab57600080fd5b919390929091602081019035600160201b8111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460018302840111600160201b831117156102fb57600080fd5b50909250905061068e565b61010d6004803603606081101561031c57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561034b57600080fd5b82018360208201111561035d57600080fd5b803590602001918460018302840111600160201b8311171561037e57600080fd5b5090925090506106e5565b6101ca6004803603602081101561039f57600080fd5b50356001600160a01b03166106fe565b6101ca600480360360208110156103c557600080fd5b50356001600160a01b0316610719565b61010d610734565b6101ae600480360360408110156103f357600080fd5b506001600160a01b038135169060200135610751565b61042f6004803603602081101561041f57600080fd5b50356001600160a01b0316610765565b005b61010d6004803603606081101561044757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561047657600080fd5b82018360208201111561048857600080fd5b803590602001918460018302840111600160201b831117156104a957600080fd5b50909250905061077c565b61042f600480360360e08110156104ca57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610794565b6101ca6004803603604081101561051b57600080fd5b506001600160a01b038135811691602001351661096f565b60408051808201909152600d81526c2430b134ba30ba102a37b5b2b760991b602082015290565b600061056733848461099a565b50600192915050565b670de0b6b3a764000090565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156105e1576040805162461bcd60e51b8152602060048201526009602482015268414c4c4f57414e434560b81b604482015290519081900360640190fd5b6000198114610613576001600160a01b0385166000908152600160209081526040808320338452909152902083820390555b61061e8585856109fc565b95945050505050565b600a90565b604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681527f825a5bd2b322b183692110889ab8fda39cd7c633901fc90cea3ce579a5694e95602082015246918101919091523060608201526080902090565b60606106d03086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b4792505050565b6106db868484610bd6565b9695505050505050565b60606106f23386866109fc565b5061061e858484610bd6565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b031660009081526002602052604090205490565b60408051808201909152600381526212109560ea1b602082015290565b600061075e3384846109fc565b9392505050565b61077981336107748430610c61565b610da3565b50565b606061078933868661099a565b61061e858484610bd6565b6001600160a01b0387166107d7576040805162461bcd60e51b815260206004820152600560248201526427aba722a960d91b604482015290519081900360640190fd5b834210610815576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03871660009081526002602052604081208054600181019091559061083f61062c565b90506000604051807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98252602082019150606060048337606082810186905260808084018b90529282900360a09081018320611901845260208481018890526040808601929092526042601e9095019490942081516000815280860180845282905260ff8d16818401529384018b9052948301899052519394506001600160a01b038e1693600193838301939092601f19830192918290030190855afa15801561090d573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610958576040805162461bcd60e51b815260206004820152600360248201526253494760e81b604482015290519081900360640190fd5b6109638a8a8a61099a565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831660009081526020819052604081205482811015610a54576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614610af1576001600160a01b038086166000908152602081905260408082209386900390935590851681522054808301818111610ad7576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b6001600160a01b0385166000908152602081905260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b805115610bd257600060208201805160e01c601082015160601c30811415610b6e57600080fd5b50638fcbaf0c811463d505accf82141715610b93578351600080828560008a5af19350505b505080610bd0576040805162461bcd60e51b815260206004820152600660248201526514115493525560d21b604482015290519081900360640190fd5b505b5050565b60606001600160a01b038416301415610bee57600080fd5b600080856001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d8060008114610c4d576040519150601f19603f3d011682016040523d82523d6000602084013e610c52565b606091505b50915091508161061e57600080fd5b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b17815292518251600094859485948916939092909182918083835b60208310610cdb5780518252601f199092019160209182019101610cbc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d3d576040519150601f19603f3d011682016040523d82523d6000602084013e610d42565b606091505b509150915081610d83576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b808060200190516020811015610d9857600080fd5b505195945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610e1f5780518252601f199092019160209182019101610e00565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e81576040519150601f19603f3d011682016040523d82523d6000602084013e610e86565b606091505b5091509150818015610eb4575080511580610eb45750808060200190516020811015610eb157600080fd5b50515b610ef0576040805162461bcd60e51b81526020600482015260086024820152672a2920a729a322a960c11b604482015290519081900360640190fd5b505050505056fea164736f6c6343000706000a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b9e8ce2c11610066578063b9e8ce2c14610409578063cae9ca5114610431578063d505accf146104b4578063dd62ed3e1461050557610100565b806370a08231146103895780637ecebe00146103af57806395d89b41146103d5578063a9059cbb146103dd57610100565b8063313ce567116100d3578063313ce567146102125780633644e515146102305780633833045d146102385780634000aea01461030657610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101c257806323b872dd146101dc575b600080fd5b61010d610533565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b03813516906020013561055a565b604080519115158252519081900360200190f35b6101ca610570565b60408051918252519081900360200190f35b6101ae600480360360608110156101f257600080fd5b506001600160a01b0381358116916020810135909116906040013561057c565b61021a610627565b6040805160ff9092168252519081900360200190f35b6101ca61062c565b61010d6004803603606081101561024e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460018302840111600160201b831117156102ab57600080fd5b919390929091602081019035600160201b8111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460018302840111600160201b831117156102fb57600080fd5b50909250905061068e565b61010d6004803603606081101561031c57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561034b57600080fd5b82018360208201111561035d57600080fd5b803590602001918460018302840111600160201b8311171561037e57600080fd5b5090925090506106e5565b6101ca6004803603602081101561039f57600080fd5b50356001600160a01b03166106fe565b6101ca600480360360208110156103c557600080fd5b50356001600160a01b0316610719565b61010d610734565b6101ae600480360360408110156103f357600080fd5b506001600160a01b038135169060200135610751565b61042f6004803603602081101561041f57600080fd5b50356001600160a01b0316610765565b005b61010d6004803603606081101561044757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561047657600080fd5b82018360208201111561048857600080fd5b803590602001918460018302840111600160201b831117156104a957600080fd5b50909250905061077c565b61042f600480360360e08110156104ca57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610794565b6101ca6004803603604081101561051b57600080fd5b506001600160a01b038135811691602001351661096f565b60408051808201909152600d81526c2430b134ba30ba102a37b5b2b760991b602082015290565b600061056733848461099a565b50600192915050565b670de0b6b3a764000090565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156105e1576040805162461bcd60e51b8152602060048201526009602482015268414c4c4f57414e434560b81b604482015290519081900360640190fd5b6000198114610613576001600160a01b0385166000908152600160209081526040808320338452909152902083820390555b61061e8585856109fc565b95945050505050565b600a90565b604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681527f825a5bd2b322b183692110889ab8fda39cd7c633901fc90cea3ce579a5694e95602082015246918101919091523060608201526080902090565b60606106d03086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b4792505050565b6106db868484610bd6565b9695505050505050565b60606106f23386866109fc565b5061061e858484610bd6565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b031660009081526002602052604090205490565b60408051808201909152600381526212109560ea1b602082015290565b600061075e3384846109fc565b9392505050565b61077981336107748430610c61565b610da3565b50565b606061078933868661099a565b61061e858484610bd6565b6001600160a01b0387166107d7576040805162461bcd60e51b815260206004820152600560248201526427aba722a960d91b604482015290519081900360640190fd5b834210610815576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03871660009081526002602052604081208054600181019091559061083f61062c565b90506000604051807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98252602082019150606060048337606082810186905260808084018b90529282900360a09081018320611901845260208481018890526040808601929092526042601e9095019490942081516000815280860180845282905260ff8d16818401529384018b9052948301899052519394506001600160a01b038e1693600193838301939092601f19830192918290030190855afa15801561090d573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610958576040805162461bcd60e51b815260206004820152600360248201526253494760e81b604482015290519081900360640190fd5b6109638a8a8a61099a565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831660009081526020819052604081205482811015610a54576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614610af1576001600160a01b038086166000908152602081905260408082209386900390935590851681522054808301818111610ad7576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b6001600160a01b0385166000908152602081905260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b805115610bd257600060208201805160e01c601082015160601c30811415610b6e57600080fd5b50638fcbaf0c811463d505accf82141715610b93578351600080828560008a5af19350505b505080610bd0576040805162461bcd60e51b815260206004820152600660248201526514115493525560d21b604482015290519081900360640190fd5b505b5050565b60606001600160a01b038416301415610bee57600080fd5b600080856001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d8060008114610c4d576040519150601f19603f3d011682016040523d82523d6000602084013e610c52565b606091505b50915091508161061e57600080fd5b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b17815292518251600094859485948916939092909182918083835b60208310610cdb5780518252601f199092019160209182019101610cbc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d3d576040519150601f19603f3d011682016040523d82523d6000602084013e610d42565b606091505b509150915081610d83576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b808060200190516020811015610d9857600080fd5b505195945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610e1f5780518252601f199092019160209182019101610e00565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e81576040519150601f19603f3d011682016040523d82523d6000602084013e610e86565b606091505b5091509150818015610eb4575080511580610eb45750808060200190516020811015610eb157600080fd5b50515b610ef0576040805162461bcd60e51b81526020600482015260086024820152672a2920a729a322a960c11b604482015290519081900360640190fd5b505050505056fea164736f6c6343000706000a

Deployed Bytecode Sourcemap

163:8403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;615:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:146;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2857:146:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1921:99;;;:::i;:::-;;;;;;;;;;;;;;;;4483:352;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4483:352:0;;;;;;;;;;;;;;;;;:::i;911:77::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1050:813;;;:::i;8041:223::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8041:223:0;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;-1:-1:-1;8041:223:0;;-1:-1:-1;8041:223:0;-1:-1:-1;8041:223:0;:::i;7303:190::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7303:190:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7303:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7303:190:0;;;;;;;;;;-1:-1:-1;7303:190:0;;-1:-1:-1;7303:190:0;-1:-1:-1;7303:190:0;:::i;2072:111::-;;;;;;;;;;;;;;;;-1:-1:-1;2072:111:0;-1:-1:-1;;;;;2072:111:0;;:::i;2472:106::-;;;;;;;;;;;;;;;;-1:-1:-1;2472:106:0;-1:-1:-1;;;;;2472:106:0;;:::i;760:86::-;;;:::i;4041:132::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4041:132:0;;;;;;;;:::i;8413:151::-;;;;;;;;;;;;;;;;-1:-1:-1;8413:151:0;-1:-1:-1;;;;;8413:151:0;;:::i;:::-;;7678:184;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7678:184:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7678:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7678:184:0;;;;;;;;;;-1:-1:-1;7678:184:0;;-1:-1:-1;7678:184:0;-1:-1:-1;7678:184:0;:::i;5213:1617::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5213:1617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2251:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2251:139:0;;;;;;;;;;:::i;615:94::-;682:22;;;;;;;;;;;;-1:-1:-1;;;682:22:0;;;;615:94;:::o;2857:146::-;2932:4;2944:37;2953:10;2965:7;2974:6;2944:8;:37::i;:::-;-1:-1:-1;2994:4:0;2857:146;;;;:::o;1921:99::-;1996:19;1921:99;:::o;4483:352::-;-1:-1:-1;;;;;4605:17:0;;4572:4;4605:17;;;:11;:17;;;;;;;;4623:10;4605:29;;;;;;;;4648:20;;;;4640:42;;;;;-1:-1:-1;;;4640:42:0;;;;;;;;;;;;-1:-1:-1;;;4640:42:0;;;;;;;;;;;;;;;-1:-1:-1;;4693:10:0;:25;4689:97;;-1:-1:-1;;;;;4728:17:0;;;;;;:11;:17;;;;;;;;4746:10;4728:29;;;;;;;4760:19;;;4728:51;;4689:97;4799:31;4813:4;4819:2;4823:6;4799:13;:31::i;:::-;4792:38;4483:352;-1:-1:-1;;;;;4483:352:0:o;911:77::-;981:2;911:77;:::o;1050:813::-;1191:2;1185:9;;1378:66;1366:79;;1534:66;1468:2;1459:12;;1522:79;1670:9;1615:12;;;1658:22;;;;1755:9;1694:12;;;1743:22;1779:12;1820:33;;;1136:723::o;8041:223::-;8149:12;8169:55;8206:4;8213:10;;8169:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8169:28:0;;-1:-1:-1;;;8169:55:0:i;:::-;8237:22;8250:2;8254:4;;8237:12;:22::i;:::-;8230:29;8041:223;-1:-1:-1;;;;;;8041:223:0:o;7303:190::-;7396:12;7416:37;7430:10;7442:2;7446:6;7416:13;:37::i;:::-;;7466:22;7479:2;7483:4;;7466:12;:22::i;2072:111::-;-1:-1:-1;;;;;2160:18:0;2138:7;2160:18;;;;;;;;;;;;2072:111::o;2472:106::-;-1:-1:-1;;;;;2557:16:0;2535:7;2557:16;;;:7;:16;;;;;;;2472:106::o;760:86::-;829:12;;;;;;;;;;;;-1:-1:-1;;;829:12:0;;;;760:86;:::o;4041:132::-;4112:4;4131:37;4145:10;4157:2;4161:6;4131:13;:37::i;:::-;4124:44;4041:132;-1:-1:-1;;;4041:132:0:o;8413:151::-;8471:88;8495:5;8502:10;8514:44;8537:5;8552:4;8514:22;:44::i;:::-;8471:23;:88::i;:::-;8413:151;:::o;7678:184::-;7770:12;7790:32;7799:10;7811:2;7815:6;7790:8;:32::i;:::-;7835:22;7848:2;7852:4;;7835:12;:22::i;5213:1617::-;-1:-1:-1;;;;;5381:19:0;;5373:37;;;;;-1:-1:-1;;;5373:37:0;;;;;;;;;;;;-1:-1:-1;;;5373:37:0;;;;;;;;;;;;;;;5442:8;5424:15;:26;5416:46;;;;;-1:-1:-1;;;5416:46:0;;;;;;;;;;;;-1:-1:-1;;;5416:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5485:14:0;;5469:13;5485:14;;;:7;:14;;;;;:16;;;;;;;;;5533:18;:16;:18::i;:::-;5507:44;;5557:14;5639:2;5633:9;5713:3;5842:66;5837:3;5830:79;5932:2;5927:3;5923:12;5916:19;;6026:2;6023:1;6018:3;6005:24;6052:2;6043:12;;;6084:18;;;6116:12;;;;6159:21;;;6283:15;;;;6194:12;6283:15;;;6266:33;;6453:6;6441:19;;6125:2;6474:12;;;6520:28;;;6562:12;;;;6602:29;;;;6709:15;6412:2;6403:12;;;6692:33;;;;6745:26;;-1:-1:-1;6745:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6692:33;;-1:-1:-1;;;;;;6745:35:0;;;:26;;;;;;6125:2;;-1:-1:-1;;6745:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6745:35:0;;6737:51;;;;;-1:-1:-1;;;6737:51:0;;;;;;;;;;;;-1:-1:-1;;;6737:51:0;;;;;;;;;;;;;;;6794:31;6803:5;6810:7;6819:5;6794:8;:31::i;:::-;5213:1617;;;;;;;;;;:::o;2251:139::-;-1:-1:-1;;;;;2356:20:0;;;2334:7;2356:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;2251:139::o;3060:171::-;-1:-1:-1;;;;;3149:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;3195:31;;;;;;;;;;;;;;;;;3060:171;;;:::o;3308:523::-;-1:-1:-1;;;;;3429:15:0;;3399:4;3429:15;;;;;;;;;;;3458:16;;;;3450:36;;;;;-1:-1:-1;;;3450:36:0;;;;;;;;;;;;-1:-1:-1;;;3450:36:0;;;;;;;;;;;;;;;3505:2;-1:-1:-1;;;;;3497:10:0;:4;-1:-1:-1;;;;;3497:10:0;;3493:279;;-1:-1:-1;;;;;3517:15:0;;;:9;:15;;;;;;;;;;;3535;;;;3517:33;;;3568:13;;;;;;;3610:15;;;3698:20;;;3690:41;;;;;-1:-1:-1;;;3690:41:0;;;;;;;;;;;;-1:-1:-1;;;3690:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3739:13:0;;:9;:13;;;;;;;;;;:26;3493:279;3798:2;-1:-1:-1;;;;;3783:25:0;3792:4;-1:-1:-1;;;;;3783:25:0;;3802:5;3783:25;;;;;;;;;;;;;;;;;;-1:-1:-1;3822:4:0;;3308:523;-1:-1:-1;;;;3308:523:0:o;6007:1091:1:-;6095:17;;:21;6091:1003;;6126:12;6196:2;6184:10;6180:19;6242:7;6236:14;6231:3;6227:24;6549:2;6540:7;6536:16;6530:23;6526:2;6522:32;6579:9;6571:6;6568:21;6565:2;;;6760:1;6757;6750:12;6565:2;6261:523;6917:10;6904:11;6901:27;6888:10;6875:11;6872:27;6868:62;6865:2;;;6961:10;6955:17;7034:1;7031;7025:4;7016:7;7013:1;7006:5;6999;6994:42;6983:53;;6931:115;6865:2;6155:899;;7069:7;7061:26;;;;;-1:-1:-1;;;7061:26:1;;;;;;;;;;;;-1:-1:-1;;;7061:26:1;;;;;;;;;;;;;;;6091:1003;;6007:1091;;:::o;6910:219:0:-;6984:12;-1:-1:-1;;;;;7012:19:0;;7026:4;7012:19;;7004:28;;;;;;7039:12;7053:16;7073:2;-1:-1:-1;;;;;7073:7:0;7081:4;;7073:13;;;;;;;;;;;;;;-1:-1:-1;7073:13:0;;-1:-1:-1;7073:13:0;;-1:-1:-1;;7073:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:48;;;;7100:7;7092:16;;;;;5341:258:1;5476:44;;;-1:-1:-1;;;;;5476:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5476:44:1;-1:-1:-1;;;5476:44:1;;;5465:56;;;;5414:7;;;;;;5465:10;;;5476:44;;5465:56;;;;;;5476:44;5465:56;;;;;;;;;;-1:-1:-1;;5465:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5429:92;;;;5535:7;5527:27;;;;;-1:-1:-1;;;5527:27:1;;;;;;;;;;;;-1:-1:-1;;;5527:27:1;;;;;;;;;;;;;;;5578:4;5567:27;;;;;;;;;;;;;;;-1:-1:-1;5567:27:1;;5341:258;-1:-1:-1;;;;;5341:258:1:o;3465:267::-;3594:48;;;-1:-1:-1;;;;;3594:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3594:48:1;-1:-1:-1;;;3594:48:1;;;3583:60;;;;3548:12;;;;3583:10;;;;3594:48;3583:60;;;3594:48;3583:60;;3594:48;3583:60;;;;;;;;;;-1:-1:-1;;3583:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3547:96;;;;3657:7;:57;;;;-1:-1:-1;3669:11:1;;:16;;:44;;;3700:4;3689:24;;;;;;;;;;;;;;;-1:-1:-1;3689:24:1;3669:44;3649:78;;;;;-1:-1:-1;;;3649:78:1;;;;;;;;;;;;-1:-1:-1;;;3649:78:1;;;;;;;;;;;;;;;3465:267;;;;;:::o

Swarm Source

none
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.