Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,102,289.25439854100007 BLOCX
Holders
260
Market
Price
$0.04 @ 0.000012 ETH (-8.64%)
Onchain Market Cap
$49,104.23
Circulating Supply Market Cap
$4,386,851.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.894 BLOCXValue
$0.04 ( ~1.11851546308021E-05 Eth) [0.0001%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BLOCX
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-06 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; interface IERC20 { /** * @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 ); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance( address sender, uint256 balance, uint256 needed ); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance( address spender, uint256 allowance, uint256 needed ); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 value ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom( address from, address to, uint256 value ) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve( address owner, address spender, uint256 value, bool emitEvent ) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 value ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance( spender, currentAllowance, value ); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract ReentrancyGuard { uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; error ReentrancyGuardReentrantCall(); function setStatus() internal { _status = NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } _status = ENTERED; } function _nonReentrantAfter() private { _status = NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } contract Sign { function verify( bytes32 _ethSignedMessageHash, bytes memory _signature ) public pure returns (address) { bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(_signature, 0x20)) s := mload(add(_signature, 0x40)) v := byte(0, mload(add(_signature, 0x60))) } if (v < 27) { v += 27; } if (v != 27 && v != 28) { return (address(0)); } return ecrecover(_ethSignedMessageHash, v, r, s); } function getEthSignedHash( bytes32 _messageHash ) public pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", _messageHash ) ); } function getHash( address caller, string memory _withdrawl_address, uint _amount, uint _uniqueId, uint _deadline ) public pure returns (bytes32) { return keccak256( abi.encodePacked( caller, _withdrawl_address, _amount, _uniqueId, _deadline ) ); } function matchAddress( address signer, bytes32 hashOf, bytes memory _adminSignature ) internal pure { require( signer == verify(getEthSignedHash(hashOf), _adminSignature), "Signer does not match" ); } } contract BLOCX is ERC20, Ownable, Sign, ReentrancyGuard { struct DRequest { address _to; uint256 _amount; uint256 _feeAmount; uint256 _approvalTime; string _utxo; } struct WRequest { address _invoker; uint256 _amount; uint256 _feeAmount; uint256 _reqTime; string _withdrawal_address; } uint256 _dreqNumber; uint256 _wreqNumber; bool isInitialized; address signer; mapping(uint256 => WRequest) _wreqs; mapping(uint256 => DRequest) _dreqs; mapping(uint256 => bool) isUidUsed; event FeeBurnt(uint256 _amount); event SignerChanged(address _from, address _to); event AmountDeposited(uint256 seq, DRequest dreq); event WithdrawalRequestInitiated(uint256 seq, WRequest wreq); constructor() ERC20("BLOCX. (Bridge)", "BLOCX") Ownable(0x00C9eb9381Ba20E90d6dFB67586eE9dCcFF7c8eD) { setStatus(); signer = 0x2C682a7409c5afeAe97Cb32532c2365F4DF66e0e; } function releaseToken( address _to, address _feeAddress, uint256 _amount, uint256 _fee, uint256 _uid, string memory _utxo ) external nonReentrant onlyOwner { require(!isUidUsed[_uid], "UID is used"); isUidUsed[_uid] = true; if (_fee > 0) { _update(address(0), _feeAddress, _fee); if (_feeAddress == address(0)) { emit FeeBurnt(_fee); } } _dreqs[_dreqNumber] = DRequest({ _to: _to, _amount: _amount, _feeAmount: _fee, _approvalTime: block.timestamp, _utxo: _utxo }); _update(address(0), _to, _amount); emit AmountDeposited(_dreqNumber, _dreqs[_dreqNumber]); _dreqNumber += 1; } function releaseCoin( string memory _withdrawl_address, uint256 _fee, uint256 _amount, uint256 _uniqueId, uint256 _deadline, uint256 _extraTime, bytes memory _adminSignature ) external nonReentrant { require(!isUidUsed[_uniqueId], "UID is used"); isUidUsed[_uniqueId] = true; require(block.timestamp <= _deadline + _extraTime, "dead"); bytes32 hash = getHash( msg.sender, _withdrawl_address, _amount, _uniqueId, _deadline ); matchAddress(signer, hash, _adminSignature); _transfer(msg.sender, address(this), _amount); _wreqs[_wreqNumber] = WRequest({ _invoker: msg.sender, _amount: _amount, _feeAmount: _fee, _reqTime: block.timestamp, _withdrawal_address: _withdrawl_address }); emit WithdrawalRequestInitiated(_wreqNumber, _wreqs[_wreqNumber]); _wreqNumber += 1; _update(address(this), address(0), _amount); } function changeSigner(address _signer) external onlyOwner { require(_signer != address(0), "Invalid"); address _temp = signer; signer = _signer; emit SignerChanged(_temp, _signer); } function getSigner() external view returns (address) { return signer; } function getWithdrawalRequestInfo( uint256 _reqId ) external view returns (WRequest memory) { return _wreqs[_reqId]; } function getDepositRequestInfo( uint256 _reqId ) external view returns (DRequest memory) { return _dreqs[_reqId]; } function getLatestDepositSeq() external view returns (uint256) { return _dreqNumber; } function getLatestWithdrawalSeq() external view returns (uint256) { return _wreqNumber; } function getIsUniqueIdUsed(uint256 _uid) external view returns (bool) { return isUidUsed[_uid]; } function withdrawToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).transfer(owner(), _amount); } receive() external payable { payable(owner()).transfer(msg.value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"seq","type":"uint256"},{"components":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_approvalTime","type":"uint256"},{"internalType":"string","name":"_utxo","type":"string"}],"indexed":false,"internalType":"struct BLOCX.DRequest","name":"dreq","type":"tuple"}],"name":"AmountDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"FeeBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"SignerChanged","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"seq","type":"uint256"},{"components":[{"internalType":"address","name":"_invoker","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_reqTime","type":"uint256"},{"internalType":"string","name":"_withdrawal_address","type":"string"}],"indexed":false,"internalType":"struct BLOCX.WRequest","name":"wreq","type":"tuple"}],"name":"WithdrawalRequestInitiated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"_signer","type":"address"}],"name":"changeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"getDepositRequestInfo","outputs":[{"components":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_approvalTime","type":"uint256"},{"internalType":"string","name":"_utxo","type":"string"}],"internalType":"struct BLOCX.DRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"}],"name":"getEthSignedHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"string","name":"_withdrawl_address","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_uniqueId","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_uid","type":"uint256"}],"name":"getIsUniqueIdUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestDepositSeq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestWithdrawalSeq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"getWithdrawalRequestInfo","outputs":[{"components":[{"internalType":"address","name":"_invoker","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_reqTime","type":"uint256"},{"internalType":"string","name":"_withdrawal_address","type":"string"}],"internalType":"struct BLOCX.WRequest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_withdrawl_address","type":"string"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_uniqueId","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint256","name":"_extraTime","type":"uint256"},{"internalType":"bytes","name":"_adminSignature","type":"bytes"}],"name":"releaseCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_uid","type":"uint256"},{"internalType":"string","name":"_utxo","type":"string"}],"name":"releaseToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"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":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_ethSignedMessageHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801562000010575f80fd5b5072c9eb9381ba20e90d6dfb67586ee9dccff7c8ed6040518060400160405280600f81526020016e424c4f43582e20284272696467652960881b81525060405180604001604052806005815260200164084989e86b60db1b81525081600390816200007c9190620001f2565b5060046200008b8282620001f2565b5050506001600160a01b038116620000bc57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c78162000101565b50620000d36001600655565b60098054610100600160a81b031916742c682a7409c5afeae97cb32532c2365f4df66e0e00179055620002ba565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200017b57607f821691505b6020821081036200019a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001ed575f81815260208120601f850160051c81016020861015620001c85750805b601f850160051c820191505b81811015620001e957828155600101620001d4565b5050505b505050565b81516001600160401b038111156200020e576200020e62000152565b62000226816200021f845462000166565b84620001a0565b602080601f8311600181146200025c575f8415620002445750858301515b5f19600386901b1c1916600185901b178555620001e9565b5f85815260208120601f198616915b828110156200028c578886015182559484019460019091019084016200026b565b5085821015620002aa57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6118fa80620002c85f395ff3fe608060405260043610610164575f3560e01c80638da5cb5b116100cd578063b51816c211610087578063dce259b411610062578063dce259b414610455578063dd62ed3e14610474578063e154ebc2146104b8578063f2fde38b146104e6575f80fd5b8063b51816c214610403578063d123685c14610422578063db32733014610436575f80fd5b80638da5cb5b1461034957806395d89b411461036657806399a904b51461037a5780639e281a98146103a6578063a9059cbb146103c5578063aad2b723146103e4575f80fd5b8063313ce5671161011e578063313ce567146102915780635e0d566b146102ac578063668f8867146102c057806370a08231146102df578063715018a6146103135780637ac3c02f14610327575f80fd5b806306fdde03146101a5578063095ea7b3146101cf57806318160ddd146101fe57806323b872dd1461021c578063258ae5821461023b5780632f4ea5ea14610272575f80fd5b366101a1576005546040516001600160a01b03909116903480156108fc02915f818181858888f1935050505015801561019f573d5f803e3d5ffd5b005b5f80fd5b3480156101b0575f80fd5b506101b9610505565b6040516101c69190611274565b60405180910390f35b3480156101da575f80fd5b506101ee6101e93660046112a8565b610595565b60405190151581526020016101c6565b348015610209575f80fd5b506002545b6040519081526020016101c6565b348015610227575f80fd5b506101ee6102363660046112d0565b6105ae565b348015610246575f80fd5b5061025a6102553660046113a6565b6105d1565b6040516001600160a01b0390911681526020016101c6565b34801561027d575f80fd5b5061020e61028c3660046113ea565b61068a565b34801561029c575f80fd5b50604051601281526020016101c6565b3480156102b7575f80fd5b5060075461020e565b3480156102cb575f80fd5b5061019f6102da366004611401565b6106dc565b3480156102ea575f80fd5b5061020e6102f936600461148e565b6001600160a01b03165f9081526020819052604090205490565b34801561031e575f80fd5b5061019f6108c8565b348015610332575f80fd5b5060095461010090046001600160a01b031661025a565b348015610354575f80fd5b506005546001600160a01b031661025a565b348015610371575f80fd5b506101b96108db565b348015610385575f80fd5b506103996103943660046113ea565b6108ea565b6040516101c691906114f3565b3480156103b1575f80fd5b5061019f6103c03660046112a8565b610a08565b3480156103d0575f80fd5b506101ee6103df3660046112a8565b610aa4565b3480156103ef575f80fd5b5061019f6103fe36600461148e565b610ab1565b34801561040e575f80fd5b5061019f61041d366004611505565b610b64565b34801561042d575f80fd5b5060085461020e565b348015610441575f80fd5b5061020e61045036600461157a565b610d29565b348015610460575f80fd5b5061039961046f3660046113ea565b610d64565b34801561047f575f80fd5b5061020e61048e3660046115de565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156104c3575f80fd5b506101ee6104d23660046113ea565b5f908152600c602052604090205460ff1690565b3480156104f1575f80fd5b5061019f61050036600461148e565b610dfb565b6060600380546105149061160f565b80601f01602080910402602001604051908101604052809291908181526020018280546105409061160f565b801561058b5780601f106105625761010080835404028352916020019161058b565b820191905f5260205f20905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b5f336105a2818585610e38565b60019150505b92915050565b5f336105bb858285610e45565b6105c6858585610ec0565b506001949350505050565b6020810151604082015160608301515f929190831a601b8110156105fd576105fa601b8261165b565b90505b8060ff16601b1415801561061557508060ff16601c14155b15610625575f93505050506105a8565b604080515f81526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610675573d5f803e3d5ffd5b5050604051601f190151979650505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b6106e4610f1d565b5f848152600c602052604090205460ff16156107355760405162461bcd60e51b815260206004820152600b60248201526a155251081a5cc81d5cd95960aa1b60448201526064015b60405180910390fd5b5f848152600c60205260409020805460ff191660011790556107578284611674565b42111561078f5760405162461bcd60e51b815260040161072c906020808252600490820152631919585960e21b604082015260600190565b5f61079d3389888888610d29565b6009549091506107bc9061010090046001600160a01b03168284610f47565b6107c7333088610ec0565b6040805160a08101825233815260208082018981528284018b81524260608501908152608085018e81526008545f908152600a90955295909320845181546001600160a01b0319166001600160a01b0390911617815591516001830155516002820155905160038201559151909190600482019061084590826116cc565b50506008545f818152600a60205260409081902090517f29d41863210e5467680f07bb56e7cd8ec4974dc005f37c595b2c7ac23541e5d99350610889929190611842565b60405180910390a1600160085f8282546108a39190611674565b909155506108b49050305f88610fb1565b506108bf6001600655565b50505050505050565b6108d06110d7565b6108d95f611104565b565b6060600480546105149061160f565b6109216040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f8152602001606081525090565b5f828152600a6020908152604091829020825160a08101845281546001600160a01b03168152600182015492810192909252600281015492820192909252600382015460608201526004820180549192916080840191906109819061160f565b80601f01602080910402602001604051908101604052809291908181526020018280546109ad9061160f565b80156109f85780601f106109cf576101008083540402835291602001916109f8565b820191905f5260205f20905b8154815290600101906020018083116109db57829003601f168201915b5050505050815250509050919050565b610a106110d7565b816001600160a01b031663a9059cbb610a316005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610a7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9f919061185a565b505050565b5f336105a2818585610ec0565b610ab96110d7565b6001600160a01b038116610af95760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b604482015260640161072c565b600980546001600160a01b03838116610100818102610100600160a81b031985161790945560408051949093049091168084526020840191909152917feeb293e1f8f3a9db91ade748726387ed1352ca78f5430c5f06fe3d1e1ad50579910160405180910390a15050565b610b6c610f1d565b610b746110d7565b5f828152600c602052604090205460ff1615610bc05760405162461bcd60e51b815260206004820152600b60248201526a155251081a5cc81d5cd95960aa1b604482015260640161072c565b5f828152600c60205260409020805460ff191660011790558215610c2b57610be95f8685610fb1565b6001600160a01b038516610c2b576040518381527fb2576ae8febf5b95593ad494cc3c6e4a7b170f1a46d72f84bc1db63b6ba909e49060200160405180910390a15b6040805160a0810182526001600160a01b03888116825260208083018881528385018881524260608601908152608086018881526007545f908152600b90955296909320855181546001600160a01b03191695169490941784559051600184015551600283015551600382015591519091906004820190610cac90826116cc565b50905050610cbb5f8786610fb1565b6007545f818152600b60205260409081902090517f49c5c74b0423706585666fa98b423707612cea0cda653f8054cb66700cd1d62592610cfc929091611842565b60405180910390a1600160075f828254610d169190611674565b909155505060016006555b505050505050565b5f8585858585604051602001610d43959493929190611879565b60405160208183030381529060405280519060200120905095945050505050565b610d9b6040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f8152602001606081525090565b5f828152600b6020908152604091829020825160a08101845281546001600160a01b03168152600182015492810192909252600281015492820192909252600382015460608201526004820180549192916080840191906109819061160f565b610e036110d7565b6001600160a01b038116610e2c57604051631e4fbdf760e01b81525f600482015260240161072c565b610e3581611104565b50565b610a9f8383836001611155565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610eba5781811015610eac57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161072c565b610eba84848484035f611155565b50505050565b6001600160a01b038316610ee957604051634b637e8f60e11b81525f600482015260240161072c565b6001600160a01b038216610f125760405163ec442f0560e01b81525f600482015260240161072c565b610a9f838383610fb1565b600260065403610f4057604051633ee5aeb560e01b815260040160405180910390fd5b6002600655565b610f59610f538361068a565b826105d1565b6001600160a01b0316836001600160a01b031614610a9f5760405162461bcd60e51b81526020600482015260156024820152740a6d2cedccae440c8decae640dcdee840dac2e8c6d605b1b604482015260640161072c565b6001600160a01b038316610fdb578060025f828254610fd09190611674565b9091555061104b9050565b6001600160a01b0383165f908152602081905260409020548181101561102d5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161072c565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661106757600280548290039055611085565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110ca91815260200190565b60405180910390a3505050565b6005546001600160a01b031633146108d95760405163118cdaa760e01b815233600482015260240161072c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03841661117e5760405163e602df0560e01b81525f600482015260240161072c565b6001600160a01b0383166111a757604051634a1406b160e11b81525f600482015260240161072c565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610eba57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161121991815260200190565b60405180910390a350505050565b5f5b83811015611241578181015183820152602001611229565b50505f910152565b5f8151808452611260816020860160208601611227565b601f01601f19169290920160200192915050565b602081525f6112866020830184611249565b9392505050565b80356001600160a01b03811681146112a3575f80fd5b919050565b5f80604083850312156112b9575f80fd5b6112c28361128d565b946020939093013593505050565b5f805f606084860312156112e2575f80fd5b6112eb8461128d565b92506112f96020850161128d565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261132c575f80fd5b813567ffffffffffffffff8082111561134757611347611309565b604051601f8301601f19908116603f0116810190828211818310171561136f5761136f611309565b81604052838152866020858801011115611387575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f80604083850312156113b7575f80fd5b82359150602083013567ffffffffffffffff8111156113d4575f80fd5b6113e08582860161131d565b9150509250929050565b5f602082840312156113fa575f80fd5b5035919050565b5f805f805f805f60e0888a031215611417575f80fd5b873567ffffffffffffffff8082111561142e575f80fd5b61143a8b838c0161131d565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135915080821115611472575f80fd5b5061147f8a828b0161131d565b91505092959891949750929550565b5f6020828403121561149e575f80fd5b6112868261128d565b60018060a01b0381511682526020810151602083015260408101516040830152606081015160608301525f608082015160a060808501526114eb60a0850182611249565b949350505050565b602081525f61128660208301846114a7565b5f805f805f8060c0878903121561151a575f80fd5b6115238761128d565b95506115316020880161128d565b945060408701359350606087013592506080870135915060a087013567ffffffffffffffff811115611561575f80fd5b61156d89828a0161131d565b9150509295509295509295565b5f805f805f60a0868803121561158e575f80fd5b6115978661128d565b9450602086013567ffffffffffffffff8111156115b2575f80fd5b6115be8882890161131d565b959895975050505060408401359360608101359360809091013592509050565b5f80604083850312156115ef575f80fd5b6115f88361128d565b91506116066020840161128d565b90509250929050565b600181811c9082168061162357607f821691505b60208210810361164157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105a8576105a8611647565b808201808211156105a8576105a8611647565b601f821115610a9f575f81815260208120601f850160051c810160208610156116ad5750805b601f850160051c820191505b81811015610d21578281556001016116b9565b815167ffffffffffffffff8111156116e6576116e6611309565b6116fa816116f4845461160f565b84611687565b602080601f83116001811461172d575f84156117165750858301515b5f19600386901b1c1916600185901b178555610d21565b5f85815260208120601f198616915b8281101561175b5788860151825594840194600190910190840161173c565b508582101561177857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60018060a01b0381541682525f60018083015460208181870152600285015460408701526003850154606087015260048501915060a060808701525f82546117cf8161160f565b8060a08a015260c08683165f81146117ee576001811461180857611833565b60ff1984168b83015282151560051b8b0182019450611833565b865f52855f205f5b8481101561182b5781548d8201850152908901908701611810565b8c0183019550505b50929998505050505050505050565b828152604060208201525f6114eb6040830184611788565b5f6020828403121561186a575f80fd5b81518015158114611286575f80fd5b6bffffffffffffffffffffffff198660601b1681525f85516118a2816014850160208a01611227565b601492019182019490945260348101929092526054820152607401939250505056fea264697066735822122074103026343f7e5e5bf705f351e34755a3f93172f65c6210b434f130b0cfd26664736f6c63430008140033
Deployed Bytecode
0x608060405260043610610164575f3560e01c80638da5cb5b116100cd578063b51816c211610087578063dce259b411610062578063dce259b414610455578063dd62ed3e14610474578063e154ebc2146104b8578063f2fde38b146104e6575f80fd5b8063b51816c214610403578063d123685c14610422578063db32733014610436575f80fd5b80638da5cb5b1461034957806395d89b411461036657806399a904b51461037a5780639e281a98146103a6578063a9059cbb146103c5578063aad2b723146103e4575f80fd5b8063313ce5671161011e578063313ce567146102915780635e0d566b146102ac578063668f8867146102c057806370a08231146102df578063715018a6146103135780637ac3c02f14610327575f80fd5b806306fdde03146101a5578063095ea7b3146101cf57806318160ddd146101fe57806323b872dd1461021c578063258ae5821461023b5780632f4ea5ea14610272575f80fd5b366101a1576005546040516001600160a01b03909116903480156108fc02915f818181858888f1935050505015801561019f573d5f803e3d5ffd5b005b5f80fd5b3480156101b0575f80fd5b506101b9610505565b6040516101c69190611274565b60405180910390f35b3480156101da575f80fd5b506101ee6101e93660046112a8565b610595565b60405190151581526020016101c6565b348015610209575f80fd5b506002545b6040519081526020016101c6565b348015610227575f80fd5b506101ee6102363660046112d0565b6105ae565b348015610246575f80fd5b5061025a6102553660046113a6565b6105d1565b6040516001600160a01b0390911681526020016101c6565b34801561027d575f80fd5b5061020e61028c3660046113ea565b61068a565b34801561029c575f80fd5b50604051601281526020016101c6565b3480156102b7575f80fd5b5060075461020e565b3480156102cb575f80fd5b5061019f6102da366004611401565b6106dc565b3480156102ea575f80fd5b5061020e6102f936600461148e565b6001600160a01b03165f9081526020819052604090205490565b34801561031e575f80fd5b5061019f6108c8565b348015610332575f80fd5b5060095461010090046001600160a01b031661025a565b348015610354575f80fd5b506005546001600160a01b031661025a565b348015610371575f80fd5b506101b96108db565b348015610385575f80fd5b506103996103943660046113ea565b6108ea565b6040516101c691906114f3565b3480156103b1575f80fd5b5061019f6103c03660046112a8565b610a08565b3480156103d0575f80fd5b506101ee6103df3660046112a8565b610aa4565b3480156103ef575f80fd5b5061019f6103fe36600461148e565b610ab1565b34801561040e575f80fd5b5061019f61041d366004611505565b610b64565b34801561042d575f80fd5b5060085461020e565b348015610441575f80fd5b5061020e61045036600461157a565b610d29565b348015610460575f80fd5b5061039961046f3660046113ea565b610d64565b34801561047f575f80fd5b5061020e61048e3660046115de565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156104c3575f80fd5b506101ee6104d23660046113ea565b5f908152600c602052604090205460ff1690565b3480156104f1575f80fd5b5061019f61050036600461148e565b610dfb565b6060600380546105149061160f565b80601f01602080910402602001604051908101604052809291908181526020018280546105409061160f565b801561058b5780601f106105625761010080835404028352916020019161058b565b820191905f5260205f20905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b5f336105a2818585610e38565b60019150505b92915050565b5f336105bb858285610e45565b6105c6858585610ec0565b506001949350505050565b6020810151604082015160608301515f929190831a601b8110156105fd576105fa601b8261165b565b90505b8060ff16601b1415801561061557508060ff16601c14155b15610625575f93505050506105a8565b604080515f81526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610675573d5f803e3d5ffd5b5050604051601f190151979650505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b6106e4610f1d565b5f848152600c602052604090205460ff16156107355760405162461bcd60e51b815260206004820152600b60248201526a155251081a5cc81d5cd95960aa1b60448201526064015b60405180910390fd5b5f848152600c60205260409020805460ff191660011790556107578284611674565b42111561078f5760405162461bcd60e51b815260040161072c906020808252600490820152631919585960e21b604082015260600190565b5f61079d3389888888610d29565b6009549091506107bc9061010090046001600160a01b03168284610f47565b6107c7333088610ec0565b6040805160a08101825233815260208082018981528284018b81524260608501908152608085018e81526008545f908152600a90955295909320845181546001600160a01b0319166001600160a01b0390911617815591516001830155516002820155905160038201559151909190600482019061084590826116cc565b50506008545f818152600a60205260409081902090517f29d41863210e5467680f07bb56e7cd8ec4974dc005f37c595b2c7ac23541e5d99350610889929190611842565b60405180910390a1600160085f8282546108a39190611674565b909155506108b49050305f88610fb1565b506108bf6001600655565b50505050505050565b6108d06110d7565b6108d95f611104565b565b6060600480546105149061160f565b6109216040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f8152602001606081525090565b5f828152600a6020908152604091829020825160a08101845281546001600160a01b03168152600182015492810192909252600281015492820192909252600382015460608201526004820180549192916080840191906109819061160f565b80601f01602080910402602001604051908101604052809291908181526020018280546109ad9061160f565b80156109f85780601f106109cf576101008083540402835291602001916109f8565b820191905f5260205f20905b8154815290600101906020018083116109db57829003601f168201915b5050505050815250509050919050565b610a106110d7565b816001600160a01b031663a9059cbb610a316005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610a7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9f919061185a565b505050565b5f336105a2818585610ec0565b610ab96110d7565b6001600160a01b038116610af95760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b604482015260640161072c565b600980546001600160a01b03838116610100818102610100600160a81b031985161790945560408051949093049091168084526020840191909152917feeb293e1f8f3a9db91ade748726387ed1352ca78f5430c5f06fe3d1e1ad50579910160405180910390a15050565b610b6c610f1d565b610b746110d7565b5f828152600c602052604090205460ff1615610bc05760405162461bcd60e51b815260206004820152600b60248201526a155251081a5cc81d5cd95960aa1b604482015260640161072c565b5f828152600c60205260409020805460ff191660011790558215610c2b57610be95f8685610fb1565b6001600160a01b038516610c2b576040518381527fb2576ae8febf5b95593ad494cc3c6e4a7b170f1a46d72f84bc1db63b6ba909e49060200160405180910390a15b6040805160a0810182526001600160a01b03888116825260208083018881528385018881524260608601908152608086018881526007545f908152600b90955296909320855181546001600160a01b03191695169490941784559051600184015551600283015551600382015591519091906004820190610cac90826116cc565b50905050610cbb5f8786610fb1565b6007545f818152600b60205260409081902090517f49c5c74b0423706585666fa98b423707612cea0cda653f8054cb66700cd1d62592610cfc929091611842565b60405180910390a1600160075f828254610d169190611674565b909155505060016006555b505050505050565b5f8585858585604051602001610d43959493929190611879565b60405160208183030381529060405280519060200120905095945050505050565b610d9b6040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f8152602001606081525090565b5f828152600b6020908152604091829020825160a08101845281546001600160a01b03168152600182015492810192909252600281015492820192909252600382015460608201526004820180549192916080840191906109819061160f565b610e036110d7565b6001600160a01b038116610e2c57604051631e4fbdf760e01b81525f600482015260240161072c565b610e3581611104565b50565b610a9f8383836001611155565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610eba5781811015610eac57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161072c565b610eba84848484035f611155565b50505050565b6001600160a01b038316610ee957604051634b637e8f60e11b81525f600482015260240161072c565b6001600160a01b038216610f125760405163ec442f0560e01b81525f600482015260240161072c565b610a9f838383610fb1565b600260065403610f4057604051633ee5aeb560e01b815260040160405180910390fd5b6002600655565b610f59610f538361068a565b826105d1565b6001600160a01b0316836001600160a01b031614610a9f5760405162461bcd60e51b81526020600482015260156024820152740a6d2cedccae440c8decae640dcdee840dac2e8c6d605b1b604482015260640161072c565b6001600160a01b038316610fdb578060025f828254610fd09190611674565b9091555061104b9050565b6001600160a01b0383165f908152602081905260409020548181101561102d5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161072c565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661106757600280548290039055611085565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110ca91815260200190565b60405180910390a3505050565b6005546001600160a01b031633146108d95760405163118cdaa760e01b815233600482015260240161072c565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03841661117e5760405163e602df0560e01b81525f600482015260240161072c565b6001600160a01b0383166111a757604051634a1406b160e11b81525f600482015260240161072c565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610eba57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161121991815260200190565b60405180910390a350505050565b5f5b83811015611241578181015183820152602001611229565b50505f910152565b5f8151808452611260816020860160208601611227565b601f01601f19169290920160200192915050565b602081525f6112866020830184611249565b9392505050565b80356001600160a01b03811681146112a3575f80fd5b919050565b5f80604083850312156112b9575f80fd5b6112c28361128d565b946020939093013593505050565b5f805f606084860312156112e2575f80fd5b6112eb8461128d565b92506112f96020850161128d565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261132c575f80fd5b813567ffffffffffffffff8082111561134757611347611309565b604051601f8301601f19908116603f0116810190828211818310171561136f5761136f611309565b81604052838152866020858801011115611387575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f80604083850312156113b7575f80fd5b82359150602083013567ffffffffffffffff8111156113d4575f80fd5b6113e08582860161131d565b9150509250929050565b5f602082840312156113fa575f80fd5b5035919050565b5f805f805f805f60e0888a031215611417575f80fd5b873567ffffffffffffffff8082111561142e575f80fd5b61143a8b838c0161131d565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135915080821115611472575f80fd5b5061147f8a828b0161131d565b91505092959891949750929550565b5f6020828403121561149e575f80fd5b6112868261128d565b60018060a01b0381511682526020810151602083015260408101516040830152606081015160608301525f608082015160a060808501526114eb60a0850182611249565b949350505050565b602081525f61128660208301846114a7565b5f805f805f8060c0878903121561151a575f80fd5b6115238761128d565b95506115316020880161128d565b945060408701359350606087013592506080870135915060a087013567ffffffffffffffff811115611561575f80fd5b61156d89828a0161131d565b9150509295509295509295565b5f805f805f60a0868803121561158e575f80fd5b6115978661128d565b9450602086013567ffffffffffffffff8111156115b2575f80fd5b6115be8882890161131d565b959895975050505060408401359360608101359360809091013592509050565b5f80604083850312156115ef575f80fd5b6115f88361128d565b91506116066020840161128d565b90509250929050565b600181811c9082168061162357607f821691505b60208210810361164157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156105a8576105a8611647565b808201808211156105a8576105a8611647565b601f821115610a9f575f81815260208120601f850160051c810160208610156116ad5750805b601f850160051c820191505b81811015610d21578281556001016116b9565b815167ffffffffffffffff8111156116e6576116e6611309565b6116fa816116f4845461160f565b84611687565b602080601f83116001811461172d575f84156117165750858301515b5f19600386901b1c1916600185901b178555610d21565b5f85815260208120601f198616915b8281101561175b5788860151825594840194600190910190840161173c565b508582101561177857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b60018060a01b0381541682525f60018083015460208181870152600285015460408701526003850154606087015260048501915060a060808701525f82546117cf8161160f565b8060a08a015260c08683165f81146117ee576001811461180857611833565b60ff1984168b83015282151560051b8b0182019450611833565b865f52855f205f5b8481101561182b5781548d8201850152908901908701611810565b8c0183019550505b50929998505050505050505050565b828152604060208201525f6114eb6040830184611788565b5f6020828403121561186a575f80fd5b81518015158114611286575f80fd5b6bffffffffffffffffffffffff198660601b1681525f85516118a2816014850160208a01611227565b601492019182019490945260348101929092526054820152607401939250505056fea264697066735822122074103026343f7e5e5bf705f351e34755a3f93172f65c6210b434f130b0cfd26664736f6c63430008140033
Deployed Bytecode Sourcemap
19647:4262:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15739:6;;23862:36;;-1:-1:-1;;;;;15739:6:0;;;;23888:9;23862:36;;;;;;;;;23888:9;15739:6;23862:36;;;;;;;;;;;;;;;;;;;;;19647:4262;;;;6162:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8480:215;;;;;;;;;;-1:-1:-1;8480:215:0;;;;;:::i;:::-;;:::i;:::-;;;1372:14:1;;1365:22;1347:41;;1335:2;1320:18;8480:215:0;1207:187:1;7264:99:0;;;;;;;;;;-1:-1:-1;7343:12:0;;7264:99;;;1545:25:1;;;1533:2;1518:18;7264:99:0;1399:177:1;9273:283:0;;;;;;;;;;-1:-1:-1;9273:283:0;;;;;:::i;:::-;;:::i;17985:571::-;;;;;;;;;;-1:-1:-1;17985:571:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3326:32:1;;;3308:51;;3296:2;3281:18;17985:571:0;3162:203:1;18564:303:0;;;;;;;;;;-1:-1:-1;18564:303:0;;;;;:::i;:::-;;:::i;7115:84::-;;;;;;;;;;-1:-1:-1;7115:84:0;;7189:2;3879:36:1;;3867:2;3852:18;7115:84:0;3737:184:1;23343:100:0;;;;;;;;;;-1:-1:-1;23424:11:0;;23343:100;;21577:1129;;;;;;;;;;-1:-1:-1;21577:1129:0;;;;;:::i;:::-;;:::i;7426:118::-;;;;;;;;;;-1:-1:-1;7426:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;7518:18:0;7491:7;7518:18;;;;;;;;;;;;7426:118;16341:103;;;;;;;;;;;;;:::i;22945:85::-;;;;;;;;;;-1:-1:-1;23016:6:0;;;;;-1:-1:-1;;;;;23016:6:0;22945:85;;15666:87;;;;;;;;;;-1:-1:-1;15739:6:0;;-1:-1:-1;;;;;15739:6:0;15666:87;;6372:95;;;;;;;;;;;;;:::i;23038:146::-;;;;;;;;;;-1:-1:-1;23038:146:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23681:135::-;;;;;;;;;;-1:-1:-1;23681:135:0;;;;;:::i;:::-;;:::i;7749:182::-;;;;;;;;;;-1:-1:-1;7749:182:0;;;;;:::i;:::-;;:::i;22714:223::-;;;;;;;;;;-1:-1:-1;22714:223:0;;;;;:::i;:::-;;:::i;20721:848::-;;;;;;;;;;-1:-1:-1;20721:848:0;;;;;:::i;:::-;;:::i;23451:103::-;;;;;;;;;;-1:-1:-1;23535:11:0;;23451:103;;18875:476;;;;;;;;;;-1:-1:-1;18875:476:0;;;;;:::i;:::-;;:::i;23192:143::-;;;;;;;;;;-1:-1:-1;23192:143:0;;;;;:::i;:::-;;:::i;7994:167::-;;;;;;;;;;-1:-1:-1;7994:167:0;;;;;:::i;:::-;-1:-1:-1;;;;;8126:18:0;;;8099:7;8126:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7994:167;23562:111;;;;;;;;;;-1:-1:-1;23562:111:0;;;;;:::i;:::-;23626:4;23650:15;;;:9;:15;;;;;;;;;23562:111;16599:220;;;;;;;;;;-1:-1:-1;16599:220:0;;;;;:::i;:::-;;:::i;6162:91::-;6207:13;6240:5;6233:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6162:91;:::o;8480:215::-;8578:4;3339:10;8634:31;3339:10;8650:7;8659:5;8634:8;:31::i;:::-;8683:4;8676:11;;;8480:215;;;;;:::o;9273:283::-;9394:4;3339:10;9452:37;9468:4;3339:10;9483:5;9452:15;:37::i;:::-;9500:26;9510:4;9516:2;9520:5;9500:9;:26::i;:::-;-1:-1:-1;9544:4:0;;9273:283;-1:-1:-1;;;;9273:283:0:o;17985:571::-;18232:4;18216:21;;18210:28;18279:4;18263:21;;18257:28;18334:4;18318:21;;18312:28;18103:7;;18210:28;18257;18304:37;;18370:2;18366:6;;18362:46;;;18389:7;18394:2;18389:7;;:::i;:::-;;;18362:46;18424:1;:7;;18429:2;18424:7;;:18;;;;;18435:1;:7;;18440:2;18435:7;;18424:18;18420:70;;;18475:1;18459:19;;;;;;;18420:70;18507:41;;;;;;;;;;;;8619:25:1;;;8692:4;8680:17;;8660:18;;;8653:45;;;;8714:18;;;8707:34;;;8757:18;;;8750:34;;;18507:41:0;;8591:19:1;;18507:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18507:41:0;;-1:-1:-1;;18507:41:0;;;17985:571;-1:-1:-1;;;;;;;17985:571:0:o;18564:303::-;18717:127;;9037:66:1;18717:127:0;;;9025:79:1;9120:12;;;9113:28;;;18649:7:0;;9157:12:1;;18717:127:0;;;;;;;;;;;;18689:170;;;;;;18669:190;;18564:303;;;:::o;21577:1129::-;17500:21;:19;:21::i;:::-;21863:20:::1;::::0;;;:9:::1;:20;::::0;;;;;::::1;;21862:21;21854:45;;;::::0;-1:-1:-1;;;21854:45:0;;9382:2:1;21854:45:0::1;::::0;::::1;9364:21:1::0;9421:2;9401:18;;;9394:30;-1:-1:-1;;;9440:18:1;;;9433:41;9491:18;;21854:45:0::1;;;;;;;;;21910:20;::::0;;;:9:::1;:20;::::0;;;;:27;;-1:-1:-1;;21910:27:0::1;21933:4;21910:27;::::0;;21977:22:::1;21989:10:::0;21977:9;:22:::1;:::i;:::-;21958:15;:41;;21950:58;;;;-1:-1:-1::0;;;21950:58:0::1;;;;;;9852:2:1::0;9834:21;;;9891:1;9871:18;;;9864:29;-1:-1:-1;;;9924:2:1;9909:18;;9902:34;9968:2;9953:18;;9650:327;21950:58:0::1;22021:12;22036:146;22058:10;22083:18;22116:7;22138:9;22162;22036:7;:146::i;:::-;22208:6;::::0;22021:161;;-1:-1:-1;22195:43:0::1;::::0;22208:6:::1;::::0;::::1;-1:-1:-1::0;;;;;22208:6:0::1;22021:161:::0;22222:15;22195:12:::1;:43::i;:::-;22251:45;22261:10;22281:4;22288:7;22251:9;:45::i;:::-;22329:212;::::0;;::::1;::::0;::::1;::::0;;22363:10:::1;22329:212:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;22460:15:::1;22329:212:::0;;;;;;;;;;;;22314:11:::1;::::0;-1:-1:-1;22307:19:0;;;:6:::1;:19:::0;;;;;;;:234;;;;-1:-1:-1;;;;;;22307:234:0::1;-1:-1:-1::0;;;;;22307:234:0;;::::1;;::::0;;;;-1:-1:-1;22307:234:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;22329:212;;22307:19;:234:::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;22584:11:0::1;::::0;22597:19:::1;::::0;;;:6:::1;:19;::::0;;;;;;22557:60;;::::1;::::0;-1:-1:-1;22557:60:0::1;::::0;22584:11;22597:19;22557:60:::1;:::i;:::-;;;;;;;;22643:1;22628:11;;:16;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;22655:43:0::1;::::0;-1:-1:-1;22671:4:0::1;22686:1;22690:7:::0;22655::::1;:43::i;:::-;21843:863;17544:20:::0;17257:1;17812:7;:21;17763:78;17544:20;21577:1129;;;;;;;:::o;16341:103::-;15552:13;:11;:13::i;:::-;16406:30:::1;16433:1;16406:18;:30::i;:::-;16341:103::o:0;6372:95::-;6419:13;6452:7;6445:14;;;;;:::i;23038:146::-;23127:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23127:15:0;23162:14;;;;:6;:14;;;;;;;;;23155:21;;;;;;;;;-1:-1:-1;;;;;23155:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23162:14;23155:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23038:146;;;:::o;23681:135::-;15552:13;:11;:13::i;:::-;23774:6:::1;-1:-1:-1::0;;;;;23767:23:0::1;;23791:7;15739:6:::0;;-1:-1:-1;;;;;15739:6:0;;15666:87;23791:7:::1;23767:41;::::0;-1:-1:-1;;;;;;23767:41:0::1;::::0;;;;;;-1:-1:-1;;;;;13921:32:1;;;23767:41:0::1;::::0;::::1;13903:51:1::0;13970:18;;;13963:34;;;13876:18;;23767:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23681:135:::0;;:::o;7749:182::-;7818:4;3339:10;7874:27;3339:10;7891:2;7895:5;7874:9;:27::i;22714:223::-;15552:13;:11;:13::i;:::-;-1:-1:-1;;;;;22791:21:0;::::1;22783:41;;;::::0;-1:-1:-1;;;22783:41:0;;14492:2:1;22783:41:0::1;::::0;::::1;14474:21:1::0;14531:1;14511:18;;;14504:29;-1:-1:-1;;;14549:18:1;;;14542:37;14596:18;;22783:41:0::1;14290:330:1::0;22783:41:0::1;22851:6;::::0;;-1:-1:-1;;;;;22868:16:0;;::::1;22851:6;22868:16:::0;;::::1;-1:-1:-1::0;;;;;;22868:16:0;::::1;;::::0;;;22900:29:::1;::::0;;22851:6;;;::::1;::::0;;::::1;14837:34:1::0;;;14902:2;14887:18;;14880:43;;;;22851:6:0;22900:29:::1;::::0;14772:18:1;22900:29:0::1;;;;;;;22772:165;22714:223:::0;:::o;20721:848::-;17500:21;:19;:21::i;:::-;15552:13:::1;:11;:13::i;:::-;20956:15:::2;::::0;;;:9:::2;:15;::::0;;;;;::::2;;20955:16;20947:40;;;::::0;-1:-1:-1;;;20947:40:0;;9382:2:1;20947:40:0::2;::::0;::::2;9364:21:1::0;9421:2;9401:18;;;9394:30;-1:-1:-1;;;9440:18:1;;;9433:41;9491:18;;20947:40:0::2;9180:335:1::0;20947:40:0::2;20998:15;::::0;;;:9:::2;:15;::::0;;;;:22;;-1:-1:-1;;20998:22:0::2;21016:4;20998:22;::::0;;21037:8;;21033:178:::2;;21062:38;21078:1;21082:11;21095:4;21062:7;:38::i;:::-;-1:-1:-1::0;;;;;21119:25:0;::::2;21115:85;;21170:14;::::0;1545:25:1;;;21170:14:0::2;::::0;1533:2:1;1518:18;21170:14:0::2;;;;;;;21115:85;21243:178;::::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;21243:178:0;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;21367:15:::2;21243:178:::0;;;;;;;;;;;;21228:11:::2;::::0;-1:-1:-1;21221:19:0;;;:6:::2;:19:::0;;;;;;;:200;;;;-1:-1:-1;;;;;;21221:200:0::2;::::0;::::2;::::0;;;::::2;::::0;;;;-1:-1:-1;21221:200:0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;;21243:178;;21221:19;:200:::2;::::0;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;;;;;21434:33;21450:1;21454:3;21459:7;21434;:33::i;:::-;21501:11;::::0;21514:19:::2;::::0;;;:6:::2;:19;::::0;;;;;;21485:49;;::::2;::::0;::::2;::::0;21501:11;;21485:49:::2;:::i;:::-;;;;;;;;21560:1;21545:11;;:16;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;17257:1:0;17812:7;:21;17544:20;20721:848;;;;;;:::o;18875:476::-;19061:7;19168:6;19197:18;19238:7;19268:9;19300;19129:199;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19101:242;;;;;;19081:262;;18875:476;;;;;;;:::o;23192:143::-;23278:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23278:15:0;23313:14;;;;:6;:14;;;;;;;;;23306:21;;;;;;;;;-1:-1:-1;;;;;23306:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23313:14;23306:21;;;;;;;;:::i;16599:220::-;15552:13;:11;:13::i;:::-;-1:-1:-1;;;;;16684:22:0;::::1;16680:93;;16730:31;::::0;-1:-1:-1;;;16730:31:0;;16758:1:::1;16730:31;::::0;::::1;3308:51:1::0;3281:18;;16730:31:0::1;3162:203:1::0;16680:93:0::1;16783:28;16802:8;16783:18;:28::i;:::-;16599:220:::0;:::o;12261:130::-;12346:37;12355:5;12362:7;12371:5;12378:4;12346:8;:37::i;14020:603::-;-1:-1:-1;;;;;8126:18:0;;;14154:24;8126:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;14221:37:0;;14217:399;;14298:5;14279:16;:24;14275:214;;;14331:142;;-1:-1:-1;;;14331:142:0;;-1:-1:-1;;;;;16123:32:1;;14331:142:0;;;16105:51:1;16172:18;;;16165:34;;;16215:18;;;16208:34;;;16078:18;;14331:142:0;15903:345:1;14275:214:0;14532:57;14541:5;14548:7;14576:5;14557:16;:24;14583:5;14532:8;:57::i;:::-;14143:480;14020:603;;;:::o;9941:308::-;-1:-1:-1;;;;;10025:18:0;;10021:88;;10067:30;;-1:-1:-1;;;10067:30:0;;10094:1;10067:30;;;3308:51:1;3281:18;;10067:30:0;3162:203:1;10021:88:0;-1:-1:-1;;;;;10123:16:0;;10119:88;;10163:32;;-1:-1:-1;;;10163:32:0;;10192:1;10163:32;;;3308:51:1;3281:18;;10163:32:0;3162:203:1;10119:88:0;10217:24;10225:4;10231:2;10235:5;10217:7;:24::i;17580:175::-;17300:1;17634:7;;:18;17630:88;;17676:30;;-1:-1:-1;;;17676:30:0;;;;;;;;;;;17630:88;17300:1;17730:7;:17;17580:175::o;19359:281::-;19534:49;19541:24;19558:6;19541:16;:24::i;:::-;19567:15;19534:6;:49::i;:::-;-1:-1:-1;;;;;19524:59:0;:6;-1:-1:-1;;;;;19524:59:0;;19502:130;;;;-1:-1:-1;;;19502:130:0;;16455:2:1;19502:130:0;;;16437:21:1;16494:2;16474:18;;;16467:30;-1:-1:-1;;;16513:18:1;;;16506:51;16574:18;;19502:130:0;16253:345:1;10573:1135:0;-1:-1:-1;;;;;10663:18:0;;10659:552;;10817:5;10801:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;10659:552:0;;-1:-1:-1;10659:552:0;;-1:-1:-1;;;;;10877:15:0;;10855:19;10877:15;;;;;;;;;;;10911:19;;;10907:117;;;10958:50;;-1:-1:-1;;;10958:50:0;;-1:-1:-1;;;;;16123:32:1;;10958:50:0;;;16105:51:1;16172:18;;;16165:34;;;16215:18;;;16208:34;;;16078:18;;10958:50:0;15903:345:1;10907:117:0;-1:-1:-1;;;;;11147:15:0;;:9;:15;;;;;;;;;;11165:19;;;;11147:37;;10659:552;-1:-1:-1;;;;;11227:16:0;;11223:435;;11393:12;:21;;;;;;;11223:435;;;-1:-1:-1;;;;;11609:13:0;;:9;:13;;;;;;;;;;:22;;;;;;11223:435;11690:2;-1:-1:-1;;;;;11675:25:0;11684:4;-1:-1:-1;;;;;11675:25:0;;11694:5;11675:25;;;;1545::1;;1533:2;1518:18;;1399:177;11675:25:0;;;;;;;;10573:1135;;;:::o;15831:166::-;15739:6;;-1:-1:-1;;;;;15739:6:0;3339:10;15891:23;15887:103;;15938:40;;-1:-1:-1;;;15938:40:0;;3339:10;15938:40;;;3308:51:1;3281:18;;15938:40:0;3162:203:1;16979:191:0;17072:6;;;-1:-1:-1;;;;;17089:17:0;;;-1:-1:-1;;;;;;17089:17:0;;;;;;;17122:40;;17072:6;;;17089:17;17072:6;;17122:40;;17053:16;;17122:40;17042:128;16979:191;:::o;13242:486::-;-1:-1:-1;;;;;13398:19:0;;13394:91;;13441:32;;-1:-1:-1;;;13441:32:0;;13470:1;13441:32;;;3308:51:1;3281:18;;13441:32:0;3162:203:1;13394:91:0;-1:-1:-1;;;;;13499:21:0;;13495:92;;13544:31;;-1:-1:-1;;;13544:31:0;;13572:1;13544:31;;;3308:51:1;3281:18;;13544:31:0;3162:203:1;13495:92:0;-1:-1:-1;;;;;13597:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;13643:78;;;;13694:7;-1:-1:-1;;;;;13678:31:0;13687:5;-1:-1:-1;;;;;13678:31:0;;13703:5;13678:31;;;;1545:25:1;;1533:2;1518:18;;1399:177;13678:31:0;;;;;;;;13242:486;;;;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:1;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:1:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;:::-;706:53;545:220;-1:-1:-1;;;545:220:1:o;770:173::-;838:20;;-1:-1:-1;;;;;887:31:1;;877:42;;867:70;;933:1;930;923:12;867:70;770:173;;;:::o;948:254::-;1016:6;1024;1077:2;1065:9;1056:7;1052:23;1048:32;1045:52;;;1093:1;1090;1083:12;1045:52;1116:29;1135:9;1116:29;:::i;:::-;1106:39;1192:2;1177:18;;;;1164:32;;-1:-1:-1;;;948:254:1:o;1581:328::-;1658:6;1666;1674;1727:2;1715:9;1706:7;1702:23;1698:32;1695:52;;;1743:1;1740;1733:12;1695:52;1766:29;1785:9;1766:29;:::i;:::-;1756:39;;1814:38;1848:2;1837:9;1833:18;1814:38;:::i;:::-;1804:48;;1899:2;1888:9;1884:18;1871:32;1861:42;;1581:328;;;;;:::o;1914:127::-;1975:10;1970:3;1966:20;1963:1;1956:31;2006:4;2003:1;1996:15;2030:4;2027:1;2020:15;2046:718;2088:5;2141:3;2134:4;2126:6;2122:17;2118:27;2108:55;;2159:1;2156;2149:12;2108:55;2195:6;2182:20;2221:18;2258:2;2254;2251:10;2248:36;;;2264:18;;:::i;:::-;2339:2;2333:9;2307:2;2393:13;;-1:-1:-1;;2389:22:1;;;2413:2;2385:31;2381:40;2369:53;;;2437:18;;;2457:22;;;2434:46;2431:72;;;2483:18;;:::i;:::-;2523:10;2519:2;2512:22;2558:2;2550:6;2543:18;2604:3;2597:4;2592:2;2584:6;2580:15;2576:26;2573:35;2570:55;;;2621:1;2618;2611:12;2570:55;2685:2;2678:4;2670:6;2666:17;2659:4;2651:6;2647:17;2634:54;2732:1;2725:4;2720:2;2712:6;2708:15;2704:26;2697:37;2752:6;2743:15;;;;;;2046:718;;;;:::o;2769:388::-;2846:6;2854;2907:2;2895:9;2886:7;2882:23;2878:32;2875:52;;;2923:1;2920;2913:12;2875:52;2959:9;2946:23;2936:33;;3020:2;3009:9;3005:18;2992:32;3047:18;3039:6;3036:30;3033:50;;;3079:1;3076;3069:12;3033:50;3102:49;3143:7;3134:6;3123:9;3119:22;3102:49;:::i;:::-;3092:59;;;2769:388;;;;;:::o;3370:180::-;3429:6;3482:2;3470:9;3461:7;3457:23;3453:32;3450:52;;;3498:1;3495;3488:12;3450:52;-1:-1:-1;3521:23:1;;3370:180;-1:-1:-1;3370:180:1:o;3926:884::-;4058:6;4066;4074;4082;4090;4098;4106;4159:3;4147:9;4138:7;4134:23;4130:33;4127:53;;;4176:1;4173;4166:12;4127:53;4216:9;4203:23;4245:18;4286:2;4278:6;4275:14;4272:34;;;4302:1;4299;4292:12;4272:34;4325:49;4366:7;4357:6;4346:9;4342:22;4325:49;:::i;:::-;4315:59;;4421:2;4410:9;4406:18;4393:32;4383:42;;4472:2;4461:9;4457:18;4444:32;4434:42;;4523:2;4512:9;4508:18;4495:32;4485:42;;4574:3;4563:9;4559:19;4546:33;4536:43;;4626:3;4615:9;4611:19;4598:33;4588:43;;4684:3;4673:9;4669:19;4656:33;4640:49;;4714:2;4704:8;4701:16;4698:36;;;4730:1;4727;4720:12;4698:36;;4753:51;4796:7;4785:8;4774:9;4770:24;4753:51;:::i;:::-;4743:61;;;3926:884;;;;;;;;;;:::o;4815:186::-;4874:6;4927:2;4915:9;4906:7;4902:23;4898:32;4895:52;;;4943:1;4940;4933:12;4895:52;4966:29;4985:9;4966:29;:::i;5191:446::-;5307:1;5303;5298:3;5294:11;5290:19;5282:5;5276:12;5272:38;5267:3;5260:51;5360:4;5353:5;5349:16;5343:23;5336:4;5331:3;5327:14;5320:47;5416:4;5409:5;5405:16;5399:23;5392:4;5387:3;5383:14;5376:47;5472:4;5465:5;5461:16;5455:23;5448:4;5443:3;5439:14;5432:47;5242:3;5525:4;5518:5;5514:16;5508:23;5563:4;5556;5551:3;5547:14;5540:28;5584:47;5625:4;5620:3;5616:14;5602:12;5584:47;:::i;:::-;5577:54;5191:446;-1:-1:-1;;;;5191:446:1:o;5642:259::-;5821:2;5810:9;5803:21;5784:4;5841:54;5891:2;5880:9;5876:18;5868:6;5841:54;:::i;5906:676::-;6020:6;6028;6036;6044;6052;6060;6113:3;6101:9;6092:7;6088:23;6084:33;6081:53;;;6130:1;6127;6120:12;6081:53;6153:29;6172:9;6153:29;:::i;:::-;6143:39;;6201:38;6235:2;6224:9;6220:18;6201:38;:::i;:::-;6191:48;;6286:2;6275:9;6271:18;6258:32;6248:42;;6337:2;6326:9;6322:18;6309:32;6299:42;;6388:3;6377:9;6373:19;6360:33;6350:43;;6444:3;6433:9;6429:19;6416:33;6472:18;6464:6;6461:30;6458:50;;;6504:1;6501;6494:12;6458:50;6527:49;6568:7;6559:6;6548:9;6544:22;6527:49;:::i;:::-;6517:59;;;5906:676;;;;;;;;:::o;6587:601::-;6692:6;6700;6708;6716;6724;6777:3;6765:9;6756:7;6752:23;6748:33;6745:53;;;6794:1;6791;6784:12;6745:53;6817:29;6836:9;6817:29;:::i;:::-;6807:39;;6897:2;6886:9;6882:18;6869:32;6924:18;6916:6;6913:30;6910:50;;;6956:1;6953;6946:12;6910:50;6979:49;7020:7;7011:6;7000:9;6996:22;6979:49;:::i;:::-;6587:601;;6969:59;;-1:-1:-1;;;;7075:2:1;7060:18;;7047:32;;7126:2;7111:18;;7098:32;;7177:3;7162:19;;;7149:33;;-1:-1:-1;6587:601:1;-1:-1:-1;6587:601:1:o;7457:260::-;7525:6;7533;7586:2;7574:9;7565:7;7561:23;7557:32;7554:52;;;7602:1;7599;7592:12;7554:52;7625:29;7644:9;7625:29;:::i;:::-;7615:39;;7673:38;7707:2;7696:9;7692:18;7673:38;:::i;:::-;7663:48;;7457:260;;;;;:::o;7722:380::-;7801:1;7797:12;;;;7844;;;7865:61;;7919:4;7911:6;7907:17;7897:27;;7865:61;7972:2;7964:6;7961:14;7941:18;7938:38;7935:161;;8018:10;8013:3;8009:20;8006:1;7999:31;8053:4;8050:1;8043:15;8081:4;8078:1;8071:15;7935:161;;7722:380;;;:::o;8107:127::-;8168:10;8163:3;8159:20;8156:1;8149:31;8199:4;8196:1;8189:15;8223:4;8220:1;8213:15;8239:148;8327:4;8306:12;;;8320;;;8302:31;;8345:13;;8342:39;;;8361:18;;:::i;9520:125::-;9585:9;;;9606:10;;;9603:36;;;9619:18;;:::i;10108:545::-;10210:2;10205:3;10202:11;10199:448;;;10246:1;10271:5;10267:2;10260:17;10316:4;10312:2;10302:19;10386:2;10374:10;10370:19;10367:1;10363:27;10357:4;10353:38;10422:4;10410:10;10407:20;10404:47;;;-1:-1:-1;10445:4:1;10404:47;10500:2;10495:3;10491:12;10488:1;10484:20;10478:4;10474:31;10464:41;;10555:82;10573:2;10566:5;10563:13;10555:82;;;10618:17;;;10599:1;10588:13;10555:82;;10829:1352;10955:3;10949:10;10982:18;10974:6;10971:30;10968:56;;;11004:18;;:::i;:::-;11033:97;11123:6;11083:38;11115:4;11109:11;11083:38;:::i;:::-;11077:4;11033:97;:::i;:::-;11185:4;;11249:2;11238:14;;11266:1;11261:663;;;;11968:1;11985:6;11982:89;;;-1:-1:-1;12037:19:1;;;12031:26;11982:89;-1:-1:-1;;10786:1:1;10782:11;;;10778:24;10774:29;10764:40;10810:1;10806:11;;;10761:57;12084:81;;11231:944;;11261:663;10055:1;10048:14;;;10092:4;10079:18;;-1:-1:-1;;11297:20:1;;;11415:236;11429:7;11426:1;11423:14;11415:236;;;11518:19;;;11512:26;11497:42;;11610:27;;;;11578:1;11566:14;;;;11445:19;;11415:236;;;11419:3;11679:6;11670:7;11667:19;11664:201;;;11740:19;;;11734:26;-1:-1:-1;;11823:1:1;11819:14;;;11835:3;11815:24;11811:37;11807:42;11792:58;11777:74;;11664:201;-1:-1:-1;;;;;11911:1:1;11895:14;;;11891:22;11878:36;;-1:-1:-1;10829:1352:1:o;12186:1198::-;12310:1;12306;12301:3;12297:11;12293:19;12285:5;12279:12;12275:38;12270:3;12263:51;12245:3;12333:4;12373:2;12366:5;12362:14;12356:21;12396:4;12430:2;12425;12420:3;12416:12;12409:24;12482:4;12475:5;12471:16;12465:23;12458:4;12453:3;12449:14;12442:47;12538:4;12531:5;12527:16;12521:23;12514:4;12509:3;12505:14;12498:47;12585:4;12578:5;12574:16;12554:36;;12622:4;12615;12610:3;12606:14;12599:28;12647:1;12680:12;12674:19;12716:36;12742:9;12716:36;:::i;:::-;12784:6;12777:4;12772:3;12768:14;12761:30;12810:3;12844:2;12833:9;12829:18;12861:1;12856:146;;;;13016:1;13011:348;;;;12822:537;;12856:146;-1:-1:-1;;12898:24:1;;12884:12;;;12877:46;12970:14;;12963:22;12960:1;12956:30;12947:40;;12943:49;;;-1:-1:-1;12856:146:1;;13011:348;13042:12;13039:1;13032:23;13096:2;13093:1;13083:16;13121:1;13135:174;13149:6;13146:1;13143:13;13135:174;;;13236:14;;13218:11;;;13214:20;;13207:44;13279:16;;;;13164:10;;13135:174;;;13333:11;;13329:20;;;-1:-1:-1;;12822:537:1;-1:-1:-1;13375:3:1;;12186:1198;-1:-1:-1;;;;;;;;;12186:1198:1:o;13389:335::-;13593:6;13582:9;13575:25;13636:2;13631;13620:9;13616:18;13609:30;13556:4;13656:62;13714:2;13703:9;13699:18;13691:6;13656:62;:::i;14008:277::-;14075:6;14128:2;14116:9;14107:7;14103:23;14099:32;14096:52;;;14144:1;14141;14134:12;14096:52;14176:9;14170:16;14229:5;14222:13;14215:21;14208:5;14205:32;14195:60;;14251:1;14248;14241:12;15274:624;15572:26;15568:31;15559:6;15555:2;15551:15;15547:53;15542:3;15535:66;15517:3;15630:6;15624:13;15646:75;15714:6;15709:2;15704:3;15700:12;15693:4;15685:6;15681:17;15646:75;:::i;:::-;15780:2;15740:16;;15772:11;;;15765:27;;;;15816:2;15808:11;;15801:27;;;;15852:2;15844:11;;15837:27;15888:3;15880:12;;15274:624;-1:-1:-1;;;15274:624:1:o
Swarm Source
ipfs://74103026343f7e5e5bf705f351e34755a3f93172f65c6210b434f130b0cfd266
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.