ETH Price: $3,412.25 (-0.27%)

Contract

0xDA9FDAb21bC4A5811134A6E0Ba6CA06624e67c07
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

QUIDD (QUIDD) (@$0.0072)
Transaction Hash
Method
Block
From
To
Transfer212707882024-11-26 8:40:1119 hrs ago1732610411IN
Quidd: QUIDD Token
0 ETH0.0006969413.46963795
Transfer212632042024-11-25 7:12:5945 hrs ago1732518779IN
Quidd: QUIDD Token
0 ETH0.000186037.00125974
Approve212109052024-11-18 0:06:119 days ago1731888371IN
Quidd: QUIDD Token
0 ETH0.0002486810.16644609
Approve211856832024-11-14 11:37:4712 days ago1731584267IN
Quidd: QUIDD Token
0 ETH0.0006963928.4
Approve211769672024-11-13 6:25:5913 days ago1731479159IN
Quidd: QUIDD Token
0 ETH0.0008745118.8
Approve210471922024-10-26 3:44:4732 days ago1729914287IN
Quidd: QUIDD Token
0 ETH0.000106924.36036796
Approve209698662024-10-15 8:46:5942 days ago1728982019IN
Quidd: QUIDD Token
0 ETH0.0003447114.05794132
Approve208963762024-10-05 2:34:4753 days ago1728095687IN
Quidd: QUIDD Token
0 ETH0.000158413.40547488
Approve208766792024-10-02 8:40:3555 days ago1727858435IN
Quidd: QUIDD Token
0 ETH0.000183197.47079869
Approve208766792024-10-02 8:40:3555 days ago1727858435IN
Quidd: QUIDD Token
0 ETH0.000183197.47079869
Approve208766752024-10-02 8:39:4755 days ago1727858387IN
Quidd: QUIDD Token
0 ETH0.000186137.59089872
Approve208461552024-09-28 2:29:5960 days ago1727490599IN
Quidd: QUIDD Token
0 ETH0.000451549.65968381
Approve207723882024-09-17 19:23:1170 days ago1726600991IN
Quidd: QUIDD Token
0 ETH0.0011962325.7228245
Transfer207103552024-09-09 3:25:5979 days ago1725852359IN
Quidd: QUIDD Token
0 ETH0.000074041.5762644
Transfer207021142024-09-07 23:48:2380 days ago1725752903IN
Quidd: QUIDD Token
0 ETH0.000072971.55418435
Approve206259852024-08-28 8:47:1190 days ago1724834831IN
Quidd: QUIDD Token
0 ETH0.000049172.00548914
Transfer205946142024-08-23 23:34:2395 days ago1724456063IN
Quidd: QUIDD Token
0 ETH0.000071621.52510016
Transfer205277342024-08-14 15:21:59104 days ago1723648919IN
Quidd: QUIDD Token
0 ETH0.000143544.80834967
Transfer205271862024-08-14 13:31:59104 days ago1723642319IN
Quidd: QUIDD Token
0 ETH0.000364647.0474435
Approve205216892024-08-13 19:07:11105 days ago1723576031IN
Quidd: QUIDD Token
0 ETH0.000063882.60529899
Transfer205106712024-08-12 6:13:47106 days ago1723443227IN
Quidd: QUIDD Token
0 ETH0.000049081.04483556
Approve204768532024-08-07 13:00:11111 days ago1723035611IN
Quidd: QUIDD Token
0 ETH0.000137112.92950327
Approve204400422024-08-02 9:43:35116 days ago1722591815IN
Quidd: QUIDD Token
0 ETH0.00014423.10010088
Transfer204390202024-08-02 6:17:47116 days ago1722579467IN
Quidd: QUIDD Token
0 ETH0.000105613.04678924
Approve204300082024-08-01 0:07:11118 days ago1722470831IN
Quidd: QUIDD Token
0 ETH0.000214464.58213068
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QUIDD

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-29
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File @animoca/ethereum-contracts-core-1.1.2/contracts/metatx/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.6 <0.8.0;

/*
 * Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner.
 */
abstract contract ManagedIdentity {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        return msg.data;
    }
}


// File @animoca/ethereum-contracts-core-1.1.2/contracts/access/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC-173 Contract Ownership Standard
 * Note: the ERC-165 identifier for this interface is 0x7f5828d0
 */
interface IERC173 {
    /**
     * Event emited when ownership of a contract changes.
     * @param previousOwner the previous owner.
     * @param newOwner the new owner.
     */
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * Get the address of the owner
     * @return The address of the owner.
     */
    function owner() external view returns (address);

    /**
     * Set the address of the new owner of the contract
     * Set newOwner to address(0) to renounce any ownership.
     * @dev Emits an {OwnershipTransferred} event.
     * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership.
     */
    function transferOwnership(address newOwner) external;
}


// File @animoca/ethereum-contracts-core-1.1.2/contracts/access/[email protected]

pragma solidity >=0.7.6 <0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is ManagedIdentity, IERC173 {
    address internal _owner;

    /**
     * Initializes the contract, setting the deployer as the initial owner.
     * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event.
     */
    constructor(address owner_) {
        _owner = owner_;
        emit OwnershipTransferred(address(0), owner_);
    }

    /**
     * Gets the address of the current contract owner.
     */
    function owner() public view virtual override returns (address) {
        return _owner;
    }

    /**
     * See {IERC173-transferOwnership(address)}
     * @dev Reverts if the sender is not the current contract owner.
     * @param newOwner the address of the new owner. Use the zero address to renounce the ownership.
     */
    function transferOwnership(address newOwner) public virtual override {
        _requireOwnership(_msgSender());
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }

    /**
     * @dev Reverts if `account` is not the contract owner.
     * @param account the account to test.
     */
    function _requireOwnership(address account) internal virtual {
        require(account == this.owner(), "Ownable: not the owner");
    }
}


// File @animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/[email protected]

// Partially derived from OpenZeppelin:
// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol

pragma solidity >=0.7.6 <0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}


// File @animoca/ethereum-contracts-core-1.1.2/contracts/utils/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20Wrapper
 * Wraps ERC20 functions to support non-standard implementations which do not return a bool value.
 * Calls to the wrapped functions revert only if they throw or if they return false.
 */
library ERC20Wrapper {
    using AddressIsContract for address;

    function wrappedTransfer(
        IWrappedERC20 token,
        address to,
        uint256 value
    ) internal {
        _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function wrappedTransferFrom(
        IWrappedERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function wrappedApprove(
        IWrappedERC20 token,
        address spender,
        uint256 value
    ) internal {
        _callWithOptionalReturnData(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function _callWithOptionalReturnData(IWrappedERC20 token, bytes memory callData) internal {
        address target = address(token);
        require(target.isContract(), "ERC20Wrapper: non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory data) = target.call(callData);
        if (success) {
            if (data.length != 0) {
                require(abi.decode(data, (bool)), "ERC20Wrapper: operation failed");
            }
        } else {
            // revert using a standard revert message
            if (data.length == 0) {
                revert("ERC20Wrapper: operation failed");
            }

            // revert using the revert message coming from the call
            assembly {
                let size := mload(data)
                revert(add(32, data), size)
            }
        }
    }
}

interface IWrappedERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);
}


// File @animoca/ethereum-contracts-core-1.1.2/contracts/utils/[email protected]

pragma solidity >=0.7.6 <0.8.0;



abstract contract Recoverable is ManagedIdentity, Ownable {
    using ERC20Wrapper for IWrappedERC20;

    /**
     * Extract ERC20 tokens which were accidentally sent to the contract to a list of accounts.
     * Warning: this function should be overriden for contracts which are supposed to hold ERC20 tokens
     * so that the extraction is limited to only amounts sent accidentally.
     * @dev Reverts if the sender is not the contract owner.
     * @dev Reverts if `accounts`, `tokens` and `amounts` do not have the same length.
     * @dev Reverts if one of `tokens` is does not implement the ERC20 transfer function.
     * @dev Reverts if one of the ERC20 transfers fail for any reason.
     * @param accounts the list of accounts to transfer the tokens to.
     * @param tokens the list of ERC20 token addresses.
     * @param amounts the list of token amounts to transfer.
     */
    function recoverERC20s(
        address[] calldata accounts,
        address[] calldata tokens,
        uint256[] calldata amounts
    ) external virtual {
        _requireOwnership(_msgSender());
        uint256 length = accounts.length;
        require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays");
        for (uint256 i = 0; i != length; ++i) {
            IWrappedERC20(tokens[i]).wrappedTransfer(accounts[i], amounts[i]);
        }
    }

    /**
     * Extract ERC721 tokens which were accidentally sent to the contract to a list of accounts.
     * Warning: this function should be overriden for contracts which are supposed to hold ERC721 tokens
     * so that the extraction is limited to only tokens sent accidentally.
     * @dev Reverts if the sender is not the contract owner.
     * @dev Reverts if `accounts`, `contracts` and `amounts` do not have the same length.
     * @dev Reverts if one of `contracts` is does not implement the ERC721 transferFrom function.
     * @dev Reverts if one of the ERC721 transfers fail for any reason.
     * @param accounts the list of accounts to transfer the tokens to.
     * @param contracts the list of ERC721 contract addresses.
     * @param tokenIds the list of token ids to transfer.
     */
    function recoverERC721s(
        address[] calldata accounts,
        address[] calldata contracts,
        uint256[] calldata tokenIds
    ) external virtual {
        _requireOwnership(_msgSender());
        uint256 length = accounts.length;
        require(length == contracts.length && length == tokenIds.length, "Recov: inconsistent arrays");
        for (uint256 i = 0; i != length; ++i) {
            IRecoverableERC721(contracts[i]).transferFrom(address(this), accounts[i], tokenIds[i]);
        }
    }
}

interface IRecoverableERC721 {
    /// See {IERC721-transferFrom(address,address,uint256)}
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
}


// File @animoca/ethereum-contracts-core-1.1.2/contracts/introspection/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, basic interface
 * @dev See https://eips.ethereum.org/EIPS/eip-20
 * Note: The ERC-165 identifier for this interface is 0x36372b07.
 */
interface IERC20 {
    /**
     * @dev Emitted when tokens are transferred, including zero value transfers.
     * @param _from The account where the transferred tokens are withdrawn from.
     * @param _to The account where the transferred tokens are deposited to.
     * @param _value The amount of tokens being transferred.
     */
    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    /**
     * @dev Emitted when a successful call to {IERC20-approve(address,uint256)} is made.
     * @param _owner The account granting an allowance to `_spender`.
     * @param _spender The account being granted an allowance from `_owner`.
     * @param _value The allowance amount being granted.
     */
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    /**
     * @notice Returns the total token supply.
     * @return The total token supply.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @notice Returns the account balance of another account with address `owner`.
     * @param owner The account whose balance will be returned.
     * @return The account balance of another account with address `owner`.
     */
    function balanceOf(address owner) external view returns (uint256);

    /**
     * Transfers `value` amount of tokens to address `to`.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if the sender does not have enough balance.
     * @dev Emits an {IERC20-Transfer} event.
     * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event.
     * @param to The receiver account.
     * @param value The amount of tokens to transfer.
     * @return True if the transfer succeeds, false otherwise.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @notice Transfers `value` amount of tokens from address `from` to address `to` via the approval mechanism.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if the sender is not `from` and has not been approved by `from` for at least `value`.
     * @dev Reverts if `from` does not have at least `value` of balance.
     * @dev Emits an {IERC20-Transfer} event.
     * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event.
     * @param from The emitter account.
     * @param to The receiver account.
     * @param value The amount of tokens to transfer.
     * @return True if the transfer succeeds, false otherwise.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    /**
     * Sets `value` as the allowance from the caller to `spender`.
     *  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
     * @dev Reverts if `spender` is the zero address.
     * @dev Emits the {IERC20-Approval} event.
     * @param spender The account being granted the allowance by the message caller.
     * @param value The allowance amount to grant.
     * @return True if the approval succeeds, false otherwise.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * Returns the amount which `spender` is allowed to spend on behalf of `owner`.
     * @param owner The account that has granted an allowance to `spender`.
     * @param spender The account that was granted an allowance by `owner`.
     * @return The amount which `spender` is allowed to spend on behalf of `owner`.
     */
    function allowance(address owner, address spender) external view returns (uint256);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Detailed
 * See https://eips.ethereum.org/EIPS/eip-20
 * Note: the ERC-165 identifier for this interface is 0xa219a025.
 */
interface IERC20Detailed {
    /**
     * Returns the name of the token. E.g. "My Token".
     * @return The name of the token.
     */
    function name() external view returns (string memory);

    /**
     * Returns the symbol of the token. E.g. "HIX".
     * @return The symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * Returns the number of decimals used to display the balances.
     * 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.
     *
     * NOTE: This information is only used for _display_ purposes: it does  not impact the arithmetic of the contract.
     * @return The number of decimals used to display the balances.
     */
    function decimals() external view returns (uint8);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Allowance
 * See https://eips.ethereum.org/EIPS/eip-20
 * Note: the ERC-165 identifier for this interface is 0xd5b86388.
 */
interface IERC20Allowance {
    /**
     * Increases the allowance granted by the sender to `spender` by `value`.
     *  This is an alternative to {approve} that can be used as a mitigation for
     *  problems described in {IERC20-approve}.
     * @dev Reverts if `spender` is the zero address.
     * @dev Reverts if `spender`'s allowance overflows.
     * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`.
     * @param spender The account whose allowance is being increased by the message caller.
     * @param value The allowance amount increase.
     * @return True if the allowance increase succeeds, false otherwise.
     */
    function increaseAllowance(address spender, uint256 value) external returns (bool);

    /**
     * Decreases the allowance granted by the sender to `spender` by `value`.
     *  This is an alternative to {approve} that can be used as a mitigation for
     *  problems described in {IERC20-approve}.
     * @dev Reverts if `spender` is the zero address.
     * @dev Reverts if `spender` has an allowance with the message caller for less than `value`.
     * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`.
     * @param spender The account whose allowance is being decreased by the message caller.
     * @param value The allowance amount decrease.
     * @return True if the allowance decrease succeeds, false otherwise.
     */
    function decreaseAllowance(address spender, uint256 value) external returns (bool);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Safe Transfers
 * Note: the ERC-165 identifier for this interface is 0x53f41a97.
 */
interface IERC20SafeTransfers {
    /**
     * Transfers tokens from the caller to `to`. If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if `value` is greater than the sender's balance.
     * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`.
     * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value.
     * @dev Emits an {IERC20-Transfer} event.
     * @param to The address for the tokens to be transferred to.
     * @param amount The amount of tokens to be transferred.
     * @param data Optional additional data with no specified format, to be passed to the receiver contract.
     * @return true.
     */
    function safeTransfer(
        address to,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);

    /**
     * Transfers tokens from `from` to another address, using the allowance mechanism.
     *  If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it.
     * @dev Reverts if `to` is the zero address.
     * @dev Reverts if `value` is greater than `from`'s balance.
     * @dev Reverts if the sender does not have at least `value` allowance by `from`.
     * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`.
     * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value.
     * @dev Emits an {IERC20-Transfer} event.
     * @param from The address which owns the tokens to be transferred.
     * @param to The address for the tokens to be transferred to.
     * @param amount The amount of tokens to be transferred.
     * @param data Optional additional data with no specified format, to be passed to the receiver contract.
     * @return true.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, optional extension: Multi Transfers
 * Note: the ERC-165 identifier for this interface is 0xd5b86388.
 */
interface IERC20BatchTransfers {
    /**
     * Moves multiple `amounts` tokens from the caller's account to each of `recipients`.
     * @dev Reverts if `recipients` and `amounts` have different lengths.
     * @dev Reverts if one of `recipients` is the zero address.
     * @dev Reverts if the caller has an insufficient balance.
     * @dev Emits an {IERC20-Transfer} event for each individual transfer.
     * @param recipients the list of recipients to transfer the tokens to.
     * @param amounts the amounts of tokens to transfer to each of `recipients`.
     * @return a boolean value indicating whether the operation succeeded.
     */
    function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external returns (bool);

    /**
     * Moves multiple `amounts` tokens from an account to each of `recipients`, using the approval mechanism.
     * @dev Reverts if `recipients` and `amounts` have different lengths.
     * @dev Reverts if one of `recipients` is the zero address.
     * @dev Reverts if `from` has an insufficient balance.
     * @dev Reverts if the sender does not have at least the sum of all `amounts` as allowance by `from`.
     * @dev Emits an {IERC20-Transfer} event for each individual transfer.
     * @dev Emits an {IERC20-Approval} event.
     * @param from The address which owns the tokens to be transferred.
     * @param recipients the list of recipients to transfer the tokens to.
     * @param amounts the amounts of tokens to transfer to each of `recipients`.
     * @return a boolean value indicating whether the operation succeeded.
     */
    function batchTransferFrom(
        address from,
        address[] calldata recipients,
        uint256[] calldata amounts
    ) external returns (bool);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, ERC1046 optional extension: Metadata
 * See https://eips.ethereum.org/EIPS/eip-1046
 * Note: the ERC-165 identifier for this interface is 0x3c130d90.
 */
interface IERC20Metadata {
    /**
     * Returns a distinct Uniform Resource Identifier (URI) for the token metadata.
     * @return a distinct Uniform Resource Identifier (URI) for the token metadata.
     */
    function tokenURI() external view returns (string memory);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, ERC2612 optional extension: permit – 712-signed approvals
 * @dev Interface for allowing ERC20 approvals to be made via ECDSA `secp256k1` signatures.
 * See https://eips.ethereum.org/EIPS/eip-2612
 * Note: the ERC-165 identifier for this interface is 0x9d8ff7da.
 */
interface IERC20Permit {
    /**
     * Sets `value` as the allowance of `spender` over the tokens of `owner`, given `owner` account's signed permit.
     * @dev WARNING: The standard ERC-20 race condition for approvals applies to `permit()` as well: https://swcregistry.io/docs/SWC-114
     * @dev Reverts if `owner` is the zero address.
     * @dev Reverts if the current blocktime is > `deadline`.
     * @dev Reverts if `r`, `s`, and `v` is not a valid `secp256k1` signature from `owner`.
     * @dev Emits an {IERC20-Approval} event.
     * @param owner The token owner granting the allowance to `spender`.
     * @param spender The token spender being granted the allowance by `owner`.
     * @param value The token amount of the allowance.
     * @param deadline The deadline from which the permit signature is no longer valid.
     * @param v Permit signature v parameter
     * @param r Permit signature r parameter.
     * @param s Permis signature s parameter.
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * Returns the current permit nonce of `owner`.
     * @param owner the address to check the nonce of.
     * @return the current permit nonce of `owner`.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * Returns the EIP-712 encoded hash struct of the domain-specific information for permits.
     *
     * @dev A common ERC-20 permit implementation choice for the `DOMAIN_SEPARATOR` is:
     *
     *  keccak256(
     *      abi.encode(
     *          keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
     *          keccak256(bytes(name)),
     *          keccak256(bytes(version)),
     *          chainId,
     *          address(this)))
     *
     *  where
     *   - `name` (string) is the ERC-20 token name.
     *   - `version` (string) refers to the ERC-20 token contract version.
     *   - `chainId` (uint256) is the chain ID to which the ERC-20 token contract is deployed to.
     *   - `verifyingContract` (address) is the ERC-20 token contract address.
     *
     * @return the EIP-712 encoded hash struct of the domain-specific information for permits.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;

/**
 * @title ERC20 Token Standard, Receiver
 * See https://eips.ethereum.org/EIPS/eip-20
 * Note: the ERC-165 identifier for this interface is 0x4fc35859.
 */
interface IERC20Receiver {
    /**
     * Handles the receipt of ERC20 tokens.
     * @param sender The initiator of the transfer.
     * @param from The address which transferred the tokens.
     * @param value The amount of tokens transferred.
     * @param data Optional additional data with no specified format.
     * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))`
     */
    function onERC20Received(
        address sender,
        address from,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);
}


// File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected]

pragma solidity >=0.7.6 <0.8.0;











/**
 * @title ERC20 Fungible Token Contract.
 */
abstract contract ERC20 is
    ManagedIdentity,
    IERC165,
    IERC20,
    IERC20Detailed,
    IERC20Metadata,
    IERC20Allowance,
    IERC20BatchTransfers,
    IERC20SafeTransfers,
    IERC20Permit
{
    using AddressIsContract for address;

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")
    bytes32 internal constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    uint256 public immutable deploymentChainId;

    // solhint-disable-next-line var-name-mixedcase
    bytes32 internal immutable _DOMAIN_SEPARATOR;

    mapping(address => uint256) public override nonces;

    string internal _name;
    string internal _symbol;
    uint8 internal immutable _decimals;
    string internal _tokenURI;

    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;
    uint256 internal _totalSupply;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        string memory tokenURI_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
        _tokenURI = tokenURI_;

        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        deploymentChainId = chainId;
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId, bytes(name_));
    }

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() public view override returns (bytes32) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        // recompute the domain separator in case of fork and chainid update
        return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId, bytes(_name));
    }

    function _calculateDomainSeparator(uint256 chainId, bytes memory name_) private view returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(name_),
                    keccak256("1"),
                    chainId,
                    address(this)
                )
            );
    }

    /////////////////////////////////////////// ERC165 ///////////////////////////////////////

    /// @dev See {IERC165-supportsInterface}.
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return
            interfaceId == type(IERC165).interfaceId ||
            interfaceId == type(IERC20).interfaceId ||
            interfaceId == type(IERC20Detailed).interfaceId ||
            interfaceId == type(IERC20Metadata).interfaceId ||
            interfaceId == type(IERC20Allowance).interfaceId ||
            interfaceId == type(IERC20BatchTransfers).interfaceId ||
            interfaceId == type(IERC20SafeTransfers).interfaceId ||
            interfaceId == type(IERC20Permit).interfaceId;
    }

    /////////////////////////////////////////// ERC20Detailed ///////////////////////////////////////

    /// @dev See {IERC20Detailed-name}.
    function name() external view override returns (string memory) {
        return _name;
    }

    /// @dev See {IERC20Detailed-symbol}.
    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    /// @dev See {IERC20Detailed-decimals}.
    function decimals() external view override returns (uint8) {
        return _decimals;
    }

    /////////////////////////////////////////// ERC20Metadata ///////////////////////////////////////

    /// @dev See {IERC20Metadata-tokenURI}.
    function tokenURI() external view override returns (string memory) {
        return _tokenURI;
    }

    /////////////////////////////////////////// ERC20 ///////////////////////////////////////

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

    /// @dev See {IERC20-balanceOf}.
    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

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

    /// @dev See {IERC20-approve}.
    function approve(address spender, uint256 value) external virtual override returns (bool) {
        _approve(_msgSender(), spender, value);
        return true;
    }

    /////////////////////////////////////////// ERC20 Allowance ///////////////////////////////////////

    /// @dev See {IERC20Allowance-increaseAllowance}.
    function increaseAllowance(address spender, uint256 addedValue) external virtual override returns (bool) {
        require(spender != address(0), "ERC20: zero address spender");
        address owner = _msgSender();
        uint256 allowance_ = _allowances[owner][spender];
        if (addedValue != 0) {
            uint256 newAllowance = allowance_ + addedValue;
            require(newAllowance > allowance_, "ERC20: allowance overflow");
            _allowances[owner][spender] = newAllowance;
            allowance_ = newAllowance;
        }
        emit Approval(owner, spender, allowance_);

        return true;
    }

    /// @dev See {IERC20Allowance-decreaseAllowance}.
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual override returns (bool) {
        require(spender != address(0), "ERC20: zero address spender");
        _decreaseAllowance(_msgSender(), spender, subtractedValue);
        return true;
    }

    /// @dev See {IERC20-transfer}.
    function transfer(address to, uint256 value) external virtual override returns (bool) {
        _transfer(_msgSender(), to, value);
        return true;
    }

    /// @dev See {IERC20-transferFrom}.
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external virtual override returns (bool) {
        _transferFrom(_msgSender(), from, to, value);
        return true;
    }

    /////////////////////////////////////////// ERC20MultiTransfer ///////////////////////////////////////

    /// @dev See {IERC20MultiTransfer-multiTransfer(address[],uint256[])}.
    function batchTransfer(address[] calldata recipients, uint256[] calldata values) external virtual override returns (bool) {
        uint256 length = recipients.length;
        require(length == values.length, "ERC20: inconsistent arrays");
        address sender = _msgSender();
        uint256 balance = _balances[sender];

        uint256 totalValue;
        uint256 selfTransferTotalValue;
        for (uint256 i; i != length; ++i) {
            address to = recipients[i];
            require(to != address(0), "ERC20: to zero address");

            uint256 value = values[i];
            if (value != 0) {
                uint256 newTotalValue = totalValue + value;
                require(newTotalValue > totalValue, "ERC20: values overflow");
                totalValue = newTotalValue;
                if (sender != to) {
                    _balances[to] += value;
                } else {
                    require(value <= balance, "ERC20: insufficient balance");
                    selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true
                }
            }
            emit Transfer(sender, to, value);
        }

        if (totalValue != 0 && totalValue != selfTransferTotalValue) {
            uint256 newBalance = balance - totalValue;
            require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers
            _balances[sender] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance
        }
        return true;
    }

    /// @dev See {IERC20MultiTransfer-multiTransferFrom(address,address[],uint256[])}.
    function batchTransferFrom(
        address from,
        address[] calldata recipients,
        uint256[] calldata values
    ) external virtual override returns (bool) {
        uint256 length = recipients.length;
        require(length == values.length, "ERC20: inconsistent arrays");

        uint256 balance = _balances[from];

        uint256 totalValue;
        uint256 selfTransferTotalValue;
        for (uint256 i; i != length; ++i) {
            address to = recipients[i];
            require(to != address(0), "ERC20: to zero address");

            uint256 value = values[i];

            if (value != 0) {
                uint256 newTotalValue = totalValue + value;
                require(newTotalValue > totalValue, "ERC20: values overflow");
                totalValue = newTotalValue;
                if (from != to) {
                    _balances[to] += value;
                } else {
                    require(value <= balance, "ERC20: insufficient balance");
                    selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true
                }
            }

            emit Transfer(from, to, value);
        }

        if (totalValue != 0 && totalValue != selfTransferTotalValue) {
            uint256 newBalance = balance - totalValue;
            require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers
            _balances[from] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance
        }

        address sender = _msgSender();
        if (from != sender) {
            _decreaseAllowance(from, sender, totalValue);
        }

        return true;
    }

    /////////////////////////////////////////// ERC20SafeTransfers ///////////////////////////////////////

    /// @dev See {IERC20Safe-safeTransfer(address,uint256,bytes)}.
    function safeTransfer(
        address to,
        uint256 amount,
        bytes calldata data
    ) external virtual override returns (bool) {
        address sender = _msgSender();
        _transfer(sender, to, amount);
        if (to.isContract()) {
            require(IERC20Receiver(to).onERC20Received(sender, sender, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused");
        }
        return true;
    }

    /// @dev See {IERC20Safe-safeTransferFrom(address,address,uint256,bytes)}.
    function safeTransferFrom(
        address from,
        address to,
        uint256 amount,
        bytes calldata data
    ) external virtual override returns (bool) {
        address sender = _msgSender();
        _transferFrom(sender, from, to, amount);
        if (to.isContract()) {
            require(IERC20Receiver(to).onERC20Received(sender, from, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused");
        }
        return true;
    }

    /////////////////////////////////////////// ERC20Permit ///////////////////////////////////////

    /// @dev See {IERC2612-permit(address,address,uint256,uint256,uint8,bytes32,bytes32)}.
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override {
        require(owner != address(0), "ERC20: zero address owner");
        require(block.timestamp <= deadline, "ERC20: expired permit");
        bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline));
        bytes32 hash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), hashStruct));
        address signer = ecrecover(hash, v, r, s);
        require(signer == owner, "ERC20: invalid permit");
        _approve(owner, spender, value);
    }

    /////////////////////////////////////////// Internal Functions ///////////////////////////////////////

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        require(spender != address(0), "ERC20: zero address spender");
        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _decreaseAllowance(
        address owner,
        address spender,
        uint256 subtractedValue
    ) internal {
        uint256 allowance_ = _allowances[owner][spender];

        if (allowance_ != type(uint256).max && subtractedValue != 0) {
            // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717)
            uint256 newAllowance = allowance_ - subtractedValue;
            require(newAllowance < allowance_, "ERC20: insufficient allowance");
            _allowances[owner][spender] = newAllowance;
            allowance_ = newAllowance;
        }
        emit Approval(owner, spender, allowance_);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        require(to != address(0), "ERC20: to zero address");

        if (value != 0) {
            uint256 balance = _balances[from];
            uint256 newBalance = balance - value;
            require(newBalance < balance, "ERC20: insufficient balance");
            if (from != to) {
                _balances[from] = newBalance;
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _transferFrom(
        address sender,
        address from,
        address to,
        uint256 value
    ) internal {
        _transfer(from, to, value);
        if (from != sender) {
            _decreaseAllowance(from, sender, value);
        }
    }

    function _mint(address to, uint256 value) internal virtual {
        require(to != address(0), "ERC20: zero address");
        uint256 supply = _totalSupply;
        if (value != 0) {
            uint256 newSupply = supply + value;
            require(newSupply > supply, "ERC20: supply overflow");
            _totalSupply = newSupply;
            _balances[to] += value; // balance cannot overflow if supply does not
        }
        emit Transfer(address(0), to, value);
    }

    function _batchMint(address[] memory recipients, uint256[] memory values) internal virtual {
        uint256 length = recipients.length;
        require(length == values.length, "ERC20: inconsistent arrays");

        uint256 totalValue;
        for (uint256 i; i != length; ++i) {
            address to = recipients[i];
            require(to != address(0), "ERC20: zero address");

            uint256 value = values[i];
            if (value != 0) {
                uint256 newTotalValue = totalValue + value;
                require(newTotalValue > totalValue, "ERC20: values overflow");
                totalValue = newTotalValue;
                _balances[to] += value; // balance cannot overflow if supply does not
            }
            emit Transfer(address(0), to, value);
        }

        if (totalValue != 0) {
            uint256 supply = _totalSupply;
            uint256 newSupply = supply + totalValue;
            require(newSupply > supply, "ERC20: supply overflow");
            _totalSupply = newSupply;
        }
    }

    function _burn(address from, uint256 value) internal virtual {
        if (value != 0) {
            uint256 balance = _balances[from];
            uint256 newBalance = balance - value;
            require(newBalance < balance, "ERC20: insufficient balance");
            _balances[from] = newBalance;
            _totalSupply -= value; // will not underflow if balance does not
        }
        emit Transfer(from, address(0), value);
    }

    function _burnFrom(address from, uint256 value) internal virtual {
        _burn(from, value);
        address sender = _msgSender();
        if (from != sender) {
            _decreaseAllowance(from, sender, value);
        }
    }

    function _batchBurnFrom(address[] memory owners, uint256[] memory values) internal virtual {
        uint256 length = owners.length;
        require(length == values.length, "ERC20: inconsistent arrays");

        address sender = _msgSender();

        uint256 totalValue;
        for (uint256 i; i != length; ++i) {
            address from = owners[i];
            uint256 value = values[i];
            if (value != 0) {
                uint256 balance = _balances[from];
                uint256 newBalance = balance - value;
                require(newBalance < balance, "ERC20: insufficient balance");
                _balances[from] = newBalance;
                totalValue += value; // totalValue cannot overflow if the individual balances do not underflow
            }
            emit Transfer(from, address(0), value);

            if (from != sender) {
                _decreaseAllowance(from, sender, value);
            }
        }

        if (totalValue != 0) {
            _totalSupply -= totalValue; // _totalSupply cannot underfow as balances do not underflow
        }
    }
}


// File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected]
pragma solidity ^0.7.0;

abstract contract UsingAppendedCallData {
    function _lastAppendedDataAsSender() internal pure virtual returns (address payable sender) {
        // Copied from openzeppelin : https://github.com/OpenZeppelin/openzeppelin-contracts/blob/9d5f77db9da0604ce0b25148898a94ae2c20d70f/contracts/metatx/ERC2771Context.sol1
        // The assembly code is more direct than the Solidity version using `abi.decode`.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            sender := shr(96, calldataload(sub(calldatasize(), 20)))
        }
    }

    function _msgDataAssuming20BytesAppendedData() internal pure virtual returns (bytes calldata) {
        return msg.data[:msg.data.length - 20];
    }
}


// File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected]
pragma solidity ^0.7.0;

interface IERC2771 {
    function isTrustedForwarder(address forwarder) external view returns (bool);
}


// File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected]
pragma solidity ^0.7.0;

interface IForwarderRegistry {
    function isForwarderFor(address, address) external view returns (bool);
}


// File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected]
pragma solidity ^0.7.0;



abstract contract UsingUniversalForwarding is UsingAppendedCallData, IERC2771 {
    IForwarderRegistry internal immutable _forwarderRegistry;
    address internal immutable _universalForwarder;

    constructor(IForwarderRegistry forwarderRegistry, address universalForwarder) {
        _universalForwarder = universalForwarder;
        _forwarderRegistry = forwarderRegistry;
    }

    function isTrustedForwarder(address forwarder) external view virtual override returns (bool) {
        return forwarder == _universalForwarder || forwarder == address(_forwarderRegistry);
    }

    function _msgSender() internal view virtual returns (address payable) {
        address payable msgSender = msg.sender;
        address payable sender = _lastAppendedDataAsSender();
        if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) {
            // if forwarder use appended data
            return sender;
        }

        // if msg.sender is neither the registry nor the universal forwarder,
        // we have to check the last 20bytes of the call data intepreted as an address
        // and check if the msg.sender was registered as forewarder for that address
        // we check tx.origin to save gas in case where msg.sender == tx.origin
        // solhint-disable-next-line avoid-tx-origin
        if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(sender, msgSender)) {
            return sender;
        }

        return msgSender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        address payable msgSender = msg.sender;
        if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) {
            // if forwarder use appended data
            return _msgDataAssuming20BytesAppendedData();
        }

        // we check tx.origin to save gas in case where msg.sender == tx.origin
        // solhint-disable-next-line avoid-tx-origin
        if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(_lastAppendedDataAsSender(), msgSender)) {
            return _msgDataAssuming20BytesAppendedData();
        }
        return msg.data;
    }
}


// File contracts/token/ERC20/QUIDD.sol

pragma solidity >=0.7.6 <0.8.0;



/**
 * @title QUIDD.
 * QUIDD is an ERC20 token with a constant pre-minted supply.
 */
contract QUIDD is ERC20, UsingUniversalForwarding, Recoverable {
    /**
     * Constructor.
     * @dev Reverts if `values` and `recipients` have different lengths.
     * @dev Reverts if one of `recipients` is the zero address.
     * @dev Emits an {IERC20-Transfer} event for each transfer with `from` set to the zero address.
     * @param recipients the accounts to deliver the tokens to.
     * @param values the amounts of tokens to mint to each of `recipients`.
     * @param forwarderRegistry Registry of approved meta-transaction forwarders.
     * @param universalForwarder Universal meta-transaction forwarder.
     */
    constructor(
        address[] memory recipients,
        uint256[] memory values,
        IForwarderRegistry forwarderRegistry,
        address universalForwarder
    ) ERC20("QUIDD", "QUIDD", 18, "") UsingUniversalForwarding(forwarderRegistry, universalForwarder) Ownable(msg.sender) {
        _batchMint(recipients, values);
    }

    /**
     * Updates the URI of the token.
     * @dev Reverts if the sender is not the contract owner.
     * @param tokenURI_ the updated URI.
     */
    function setTokenURI(string calldata tokenURI_) external {
        _requireOwnership(_msgSender());
        _tokenURI = tokenURI_;
    }

    function _msgSender() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (address payable) {
        return UsingUniversalForwarding._msgSender();
    }

    function _msgData() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (bytes memory ret) {
        return UsingUniversalForwarding._msgData();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"contract IForwarderRegistry","name":"forwarderRegistry","type":"address"},{"internalType":"address","name":"universalForwarder","type":"address"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"accounts","type":"address[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"recoverERC20s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"recoverERC721s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransfer","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":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenURI_","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURI","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"}]

6101206040523480156200001257600080fd5b506040516200308738038062003087833981810160405260808110156200003857600080fd5b81019080805160405193929190846401000000008211156200005957600080fd5b9083019060208201858111156200006f57600080fd5b82518660208202830111640100000000821117156200008d57600080fd5b82525081516020918201928201910280838360005b83811015620000bc578181015183820152602001620000a2565b5050505090500160405260200180516040519392919084640100000000821115620000e657600080fd5b908301906020820185811115620000fc57600080fd5b82518660208202830111640100000000821117156200011a57600080fd5b82525081516020918201928201910280838360005b83811015620001495781810151838201526020016200012f565b50505050919091016040818152602084810151948201518284018352600580855264145552511160da1b83860181815285518087018752928352828501919091528451938401909452600083528451969850909650339588955087949391926012929091620001bb916001916200056d565b508251620001d19060029060208601906200056d565b507fff0000000000000000000000000000000000000000000000000000000000000060f883901b1660c0528051620002119060039060208401906200056d565b50466080819052620002248186620002a8565b60a0525050505050606090811b6001600160601b03199081166101005291901b1660e052600780546001600160a01b0319166001600160a01b0383169081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200029e848462000332565b5050505062000619565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b8151815181146200038a576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6000805b828114620004ff576000858281518110620003a557fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141562000418576040805162461bcd60e51b815260206004820152601360248201527f45524332303a207a65726f206164647265737300000000000000000000000000604482015290519081900360640190fd5b60008583815181106200042757fe5b6020026020010151905080600014620004b35783810184811162000492576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902080548301905593505b6040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350506001016200038e565b508015620005675760065481810181811162000562576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20737570706c79206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b600655505b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005a55760008555620005f0565b82601f10620005c057805160ff1916838001178555620005f0565b82800160010185558215620005f0579182015b82811115620005f0578251825591602001919060010190620005d3565b50620005fe92915062000602565b5090565b5b80821115620005fe576000815560010162000603565b60805160a05160c05160f81c60e05160601c6101005160601c612a1162000676600039806112c452806125d55250806112ff528061259a528061262d525080610cad525080610d97525080610cd45280611b425250612a116000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80637ecebe00116100f9578063c3666c3611610097578063dd62ed3e11610071578063dd62ed3e146108e9578063e0df5b6f14610917578063eb79554914610987578063f2fde38b14610a0c576101b9565b8063c3666c361461077c578063cd0d009614610890578063d505accf14610898576101b9565b806395d89b41116100d357806395d89b411461068c578063a457c2d714610694578063a9059cbb146106c0578063b88d4fde146106ec576101b9565b80637ecebe001461058057806388d695b2146105a65780638da5cb5b14610668576101b9565b80633644e515116101665780634885b254116101405780634885b2541461034c578063572b6c051461041e57806370a082311461044457806373c8a9581461046a576101b9565b80633644e5151461031057806339509351146103185780633c130d9014610344576101b9565b806318160ddd1161019757806318160ddd146102a257806323b872dd146102bc578063313ce567146102f2576101b9565b806301ffc9a7146101be57806306fdde03146101f9578063095ea7b314610276575b600080fd5b6101e5600480360360208110156101d457600080fd5b50356001600160e01b031916610a32565b604080519115158252519081900360200190f35b610201610bd3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e56004803603604081101561028c57600080fd5b506001600160a01b038135169060200135610c69565b6102aa610c86565b60408051918252519081900360200190f35b6101e5600480360360608110156102d257600080fd5b506001600160a01b03813581169160208101359091169060400135610c8c565b6102fa610cab565b6040805160ff9092168252519081900360200190f35b6102aa610ccf565b6101e56004803603604081101561032e57600080fd5b506001600160a01b038135169060200135610dbd565b610201610f2b565b6101e56004803603606081101561036257600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038d57600080fd5b82018360208201111561039f57600080fd5b803590602001918460208302840111640100000000831117156103c157600080fd5b9193909290916020810190356401000000008111156103df57600080fd5b8201836020820111156103f157600080fd5b8035906020019184602083028401116401000000008311171561041357600080fd5b509092509050610f8c565b6101e56004803603602081101561043457600080fd5b50356001600160a01b03166112c0565b6102aa6004803603602081101561045a57600080fd5b50356001600160a01b0316611339565b61057e6004803603606081101561048057600080fd5b81019060208101813564010000000081111561049b57600080fd5b8201836020820111156104ad57600080fd5b803590602001918460208302840111640100000000831117156104cf57600080fd5b9193909290916020810190356401000000008111156104ed57600080fd5b8201836020820111156104ff57600080fd5b8035906020019184602083028401116401000000008311171561052157600080fd5b91939092909160208101903564010000000081111561053f57600080fd5b82018360208201111561055157600080fd5b8035906020019184602083028401116401000000008311171561057357600080fd5b509092509050611354565b005b6102aa6004803603602081101561059657600080fd5b50356001600160a01b0316611446565b6101e5600480360360408110156105bc57600080fd5b8101906020810181356401000000008111156105d757600080fd5b8201836020820111156105e957600080fd5b8035906020019184602083028401116401000000008311171561060b57600080fd5b91939092909160208101903564010000000081111561062957600080fd5b82018360208201111561063b57600080fd5b8035906020019184602083028401116401000000008311171561065d57600080fd5b509092509050611458565b610670611767565b604080516001600160a01b039092168252519081900360200190f35b610201611776565b6101e5600480360360408110156106aa57600080fd5b506001600160a01b0381351690602001356117d4565b6101e5600480360360408110156106d657600080fd5b506001600160a01b038135169060200135611843565b6101e56004803603608081101561070257600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073d57600080fd5b82018360208201111561074f57600080fd5b8035906020019184600183028401116401000000008311171561077157600080fd5b509092509050611857565b61057e6004803603606081101561079257600080fd5b8101906020810181356401000000008111156107ad57600080fd5b8201836020820111156107bf57600080fd5b803590602001918460208302840111640100000000831117156107e157600080fd5b9193909290916020810190356401000000008111156107ff57600080fd5b82018360208201111561081157600080fd5b8035906020019184602083028401116401000000008311171561083357600080fd5b91939092909160208101903564010000000081111561085157600080fd5b82018360208201111561086357600080fd5b8035906020019184602083028401116401000000008311171561088557600080fd5b5090925090506119f8565b6102aa611b40565b61057e600480360360e08110156108ae57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b64565b6102aa600480360360408110156108ff57600080fd5b506001600160a01b0381358116916020013516611de3565b61057e6004803603602081101561092d57600080fd5b81019060208101813564010000000081111561094857600080fd5b82018360208201111561095a57600080fd5b8035906020019184600183028401116401000000008311171561097c57600080fd5b509092509050611e0e565b6101e56004803603606081101561099d57600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b509092509050611e2a565b61057e60048036036020811015610a2257600080fd5b50356001600160a01b0316611fc9565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610a9557506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b80610ac957506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b80610afd57506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b80610b3157506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b80610b6557506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b80610b9957506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610bcd57506001600160e01b031982167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b92915050565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505090505b90565b6000610c7d610c7661203c565b848461204b565b50600192915050565b60065490565b6000610ca1610c9961203c565b858585612108565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610d955760018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152610d9093859391929091830182828015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b505050505061213d565b610db7565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60006001600160a01b038316610e1a576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e2461203c565b6001600160a01b038082166000908152600560209081526040808320938916835292905220549091508315610ed557808401818111610eaa576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600560209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b600083828114610fe3576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600460205260408120549080805b8481146111f55760008a8a8381811061101557fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b0316141561108f576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600089898481811061109d57fe5b905060200201359050806000146111a057848101858111611105576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b031614611144576001600160a01b038316600090815260046020526040902080548301905561119e565b86821115611199576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101611000565b5081158015906112055750808214155b1561127f57818303838110611261576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260046020526040902090820190555b600061128961203c565b9050806001600160a01b03168b6001600160a01b0316146112af576112af8b82856121c7565b5060019a9950505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610bcd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526004602052604090205490565b61136461135f61203c565b6122d6565b84838114801561137357508082145b6113c4576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c576114348888838181106113dd57fe5b905060200201356001600160a01b03168585848181106113f957fe5b9050602002013588888581811061140c57fe5b905060200201356001600160a01b03166001600160a01b031661239d9092919063ffffffff16565b6001016113c7565b5050505050505050565b60006020819052908152604090205481565b6000838281146114af576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006114b961203c565b6001600160a01b03811660009081526004602052604081205491925080805b8581146116cd5760008b8b838181106114ed57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611567576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061157557fe5b90506020020135905080600014611678578481018581116115dd576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461161c576001600160a01b0383166000908152600460205260409020805483019055611676565b86821115611671576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016114d8565b5081158015906116dd5750808214155b1561175757818303838110611739576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260046020526040902090820190555b5060019998505050505050505050565b6007546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b60006001600160a01b038316611831576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610c7d61183c61203c565b84846121c7565b6000610c7d61185061203c565b848461241d565b60008061186261203c565b905061187081888888612108565b611882866001600160a01b0316612584565b156119eb577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d602081101561198d57600080fd5b50516001600160e01b031916146119eb576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611a0361135f61203c565b848381148015611a1257508082145b611a63576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c57858582818110611a7957fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611aa457fe5b905060200201356001600160a01b0316878786818110611ac057fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050806001019050611a66565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038716611bbf576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611c14576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526020818152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611ca6610ccf565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d5a573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611dcc576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611dd78a8a8a61204b565b50505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611e1961135f61203c565b611e256003838361291c565b505050565b600080611e3561203c565b9050611e4281878761241d565b611e54866001600160a01b0316612584565b15611fbd577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b505050506040513d6020811015611f5f57600080fd5b50516001600160e01b03191614611fbd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b611fd461135f61203c565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821792839055604051919216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600061204661258a565b905090565b6001600160a01b0382166120a6576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61211383838361241d565b836001600160a01b0316836001600160a01b031614612137576121378385836121c7565b50505050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b0380841660009081526005602090815260408083209386168352929052205460001981148015906121fe57508115155b156122855781810381811061225a576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b50516001600160a01b0382811691161461239a576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611e259084906126ea565b6001600160a01b038216612478576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612534576001600160a01b0383166000908152600460205260409020548181038181106124ee576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612531576001600160a01b038086166000908152600460205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b600033816125966128f2565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061260957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612617579150610c669050565b6001600160a01b03821632148015906126d657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156126a957600080fd5b505afa1580156126bd573d6000803e3d6000fd5b505050506040513d60208110156126d357600080fd5b50515b156126e4579150610c669050565b50905090565b816126fd6001600160a01b038216612584565b61274e576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106127a957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161276c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461280b576040519150601f19603f3d011682016040523d82523d6000602084013e612810565b606091505b5091509150811561288f5780511561288a5780806020019051602081101561283757600080fd5b505161288a576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b6128eb565b80516128e2576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261295257600085556129b6565b82601f10612989578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556129b6565b828001600101855582156129b6579182015b828111156129b657823582559160200191906001019061299b565b506129c29291506129c6565b5090565b5b808211156129c257600081556001016129c756fea264697066735822122071616ec3d73a3ccbc6f4a7a4376ded718b8e5c015ddc491dfc1942a01f8f1e4b64736f6c63430007060033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000d731ce8d55b2440e307a978caf32e1201f5761a000000000000000000000000043113cb02641b607acde6a55e760eb4fe58bde0d000000000000000000000000be0293faa9bee3f833b135f92a25aaad527cc09900000000000000000000000072571d815dd31fbde52be0b9d7ffc8344aede616000000000000000000000000bc4145e3156bdfe2aecdb2628ed1464092808c03000000000000000000000000c816fd366f5a4ba2f44c89e6b7ef277f1589a4bd0000000000000000000000000c9a0e58e78c3b56753026e3d655ab5cdbc2da4e0000000000000000000000000aec6b4e902e49255d1dbd9e34c057c052b992e200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000295be96e640669720000000000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000007c13bc4b2c133c560000000000000000000000000000000000000000000000007c13bc4b2c133c56000000000000000000000000000000000000000000000000cecb8f27f4200f3a00000000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000000000000000000000295be96e64066972000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101b95760003560e01c80637ecebe00116100f9578063c3666c3611610097578063dd62ed3e11610071578063dd62ed3e146108e9578063e0df5b6f14610917578063eb79554914610987578063f2fde38b14610a0c576101b9565b8063c3666c361461077c578063cd0d009614610890578063d505accf14610898576101b9565b806395d89b41116100d357806395d89b411461068c578063a457c2d714610694578063a9059cbb146106c0578063b88d4fde146106ec576101b9565b80637ecebe001461058057806388d695b2146105a65780638da5cb5b14610668576101b9565b80633644e515116101665780634885b254116101405780634885b2541461034c578063572b6c051461041e57806370a082311461044457806373c8a9581461046a576101b9565b80633644e5151461031057806339509351146103185780633c130d9014610344576101b9565b806318160ddd1161019757806318160ddd146102a257806323b872dd146102bc578063313ce567146102f2576101b9565b806301ffc9a7146101be57806306fdde03146101f9578063095ea7b314610276575b600080fd5b6101e5600480360360208110156101d457600080fd5b50356001600160e01b031916610a32565b604080519115158252519081900360200190f35b610201610bd3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e56004803603604081101561028c57600080fd5b506001600160a01b038135169060200135610c69565b6102aa610c86565b60408051918252519081900360200190f35b6101e5600480360360608110156102d257600080fd5b506001600160a01b03813581169160208101359091169060400135610c8c565b6102fa610cab565b6040805160ff9092168252519081900360200190f35b6102aa610ccf565b6101e56004803603604081101561032e57600080fd5b506001600160a01b038135169060200135610dbd565b610201610f2b565b6101e56004803603606081101561036257600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038d57600080fd5b82018360208201111561039f57600080fd5b803590602001918460208302840111640100000000831117156103c157600080fd5b9193909290916020810190356401000000008111156103df57600080fd5b8201836020820111156103f157600080fd5b8035906020019184602083028401116401000000008311171561041357600080fd5b509092509050610f8c565b6101e56004803603602081101561043457600080fd5b50356001600160a01b03166112c0565b6102aa6004803603602081101561045a57600080fd5b50356001600160a01b0316611339565b61057e6004803603606081101561048057600080fd5b81019060208101813564010000000081111561049b57600080fd5b8201836020820111156104ad57600080fd5b803590602001918460208302840111640100000000831117156104cf57600080fd5b9193909290916020810190356401000000008111156104ed57600080fd5b8201836020820111156104ff57600080fd5b8035906020019184602083028401116401000000008311171561052157600080fd5b91939092909160208101903564010000000081111561053f57600080fd5b82018360208201111561055157600080fd5b8035906020019184602083028401116401000000008311171561057357600080fd5b509092509050611354565b005b6102aa6004803603602081101561059657600080fd5b50356001600160a01b0316611446565b6101e5600480360360408110156105bc57600080fd5b8101906020810181356401000000008111156105d757600080fd5b8201836020820111156105e957600080fd5b8035906020019184602083028401116401000000008311171561060b57600080fd5b91939092909160208101903564010000000081111561062957600080fd5b82018360208201111561063b57600080fd5b8035906020019184602083028401116401000000008311171561065d57600080fd5b509092509050611458565b610670611767565b604080516001600160a01b039092168252519081900360200190f35b610201611776565b6101e5600480360360408110156106aa57600080fd5b506001600160a01b0381351690602001356117d4565b6101e5600480360360408110156106d657600080fd5b506001600160a01b038135169060200135611843565b6101e56004803603608081101561070257600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073d57600080fd5b82018360208201111561074f57600080fd5b8035906020019184600183028401116401000000008311171561077157600080fd5b509092509050611857565b61057e6004803603606081101561079257600080fd5b8101906020810181356401000000008111156107ad57600080fd5b8201836020820111156107bf57600080fd5b803590602001918460208302840111640100000000831117156107e157600080fd5b9193909290916020810190356401000000008111156107ff57600080fd5b82018360208201111561081157600080fd5b8035906020019184602083028401116401000000008311171561083357600080fd5b91939092909160208101903564010000000081111561085157600080fd5b82018360208201111561086357600080fd5b8035906020019184602083028401116401000000008311171561088557600080fd5b5090925090506119f8565b6102aa611b40565b61057e600480360360e08110156108ae57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b64565b6102aa600480360360408110156108ff57600080fd5b506001600160a01b0381358116916020013516611de3565b61057e6004803603602081101561092d57600080fd5b81019060208101813564010000000081111561094857600080fd5b82018360208201111561095a57600080fd5b8035906020019184600183028401116401000000008311171561097c57600080fd5b509092509050611e0e565b6101e56004803603606081101561099d57600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b509092509050611e2a565b61057e60048036036020811015610a2257600080fd5b50356001600160a01b0316611fc9565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610a9557506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b80610ac957506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b80610afd57506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b80610b3157506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b80610b6557506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b80610b9957506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610bcd57506001600160e01b031982167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b92915050565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505090505b90565b6000610c7d610c7661203c565b848461204b565b50600192915050565b60065490565b6000610ca1610c9961203c565b858585612108565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000001290565b6000467f00000000000000000000000000000000000000000000000000000000000000018114610d955760018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152610d9093859391929091830182828015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b505050505061213d565b610db7565b7f196327f7579b20f8a605cf45d11eab30adcefdd8db343c2bbf2ee10581b123c15b91505090565b60006001600160a01b038316610e1a576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e2461203c565b6001600160a01b038082166000908152600560209081526040808320938916835292905220549091508315610ed557808401818111610eaa576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600560209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b600083828114610fe3576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600460205260408120549080805b8481146111f55760008a8a8381811061101557fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b0316141561108f576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600089898481811061109d57fe5b905060200201359050806000146111a057848101858111611105576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b031614611144576001600160a01b038316600090815260046020526040902080548301905561119e565b86821115611199576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101611000565b5081158015906112055750808214155b1561127f57818303838110611261576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260046020526040902090820190555b600061128961203c565b9050806001600160a01b03168b6001600160a01b0316146112af576112af8b82856121c7565b5060019a9950505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610bcd57507f000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f6001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526004602052604090205490565b61136461135f61203c565b6122d6565b84838114801561137357508082145b6113c4576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c576114348888838181106113dd57fe5b905060200201356001600160a01b03168585848181106113f957fe5b9050602002013588888581811061140c57fe5b905060200201356001600160a01b03166001600160a01b031661239d9092919063ffffffff16565b6001016113c7565b5050505050505050565b60006020819052908152604090205481565b6000838281146114af576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006114b961203c565b6001600160a01b03811660009081526004602052604081205491925080805b8581146116cd5760008b8b838181106114ed57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611567576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061157557fe5b90506020020135905080600014611678578481018581116115dd576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461161c576001600160a01b0383166000908152600460205260409020805483019055611676565b86821115611671576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016114d8565b5081158015906116dd5750808214155b1561175757818303838110611739576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260046020526040902090820190555b5060019998505050505050505050565b6007546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b60006001600160a01b038316611831576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610c7d61183c61203c565b84846121c7565b6000610c7d61185061203c565b848461241d565b60008061186261203c565b905061187081888888612108565b611882866001600160a01b0316612584565b156119eb577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d602081101561198d57600080fd5b50516001600160e01b031916146119eb576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611a0361135f61203c565b848381148015611a1257508082145b611a63576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c57858582818110611a7957fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611aa457fe5b905060200201356001600160a01b0316878786818110611ac057fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050806001019050611a66565b7f000000000000000000000000000000000000000000000000000000000000000181565b6001600160a01b038716611bbf576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611c14576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526020818152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611ca6610ccf565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d5a573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611dcc576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611dd78a8a8a61204b565b50505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611e1961135f61203c565b611e256003838361291c565b505050565b600080611e3561203c565b9050611e4281878761241d565b611e54866001600160a01b0316612584565b15611fbd577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b505050506040513d6020811015611f5f57600080fd5b50516001600160e01b03191614611fbd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b611fd461135f61203c565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821792839055604051919216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600061204661258a565b905090565b6001600160a01b0382166120a6576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61211383838361241d565b836001600160a01b0316836001600160a01b031614612137576121378385836121c7565b50505050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b0380841660009081526005602090815260408083209386168352929052205460001981148015906121fe57508115155b156122855781810381811061225a576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b50516001600160a01b0382811691161461239a576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611e259084906126ea565b6001600160a01b038216612478576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612534576001600160a01b0383166000908152600460205260409020548181038181106124ee576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612531576001600160a01b038086166000908152600460205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b600033816125966128f2565b90507f000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f6001600160a01b0316826001600160a01b0316148061260957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612617579150610c669050565b6001600160a01b03821632148015906126d657507f000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f6001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156126a957600080fd5b505afa1580156126bd573d6000803e3d6000fd5b505050506040513d60208110156126d357600080fd5b50515b156126e4579150610c669050565b50905090565b816126fd6001600160a01b038216612584565b61274e576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106127a957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161276c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461280b576040519150601f19603f3d011682016040523d82523d6000602084013e612810565b606091505b5091509150811561288f5780511561288a5780806020019051602081101561283757600080fd5b505161288a576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b6128eb565b80516128e2576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261295257600085556129b6565b82601f10612989578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556129b6565b828001600101855582156129b6579182015b828111156129b657823582559160200191906001019061299b565b506129c29291506129c6565b5090565b5b808211156129c257600081556001016129c756fea264697066735822122071616ec3d73a3ccbc6f4a7a4376ded718b8e5c015ddc491dfc1942a01f8f1e4b64736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000d731ce8d55b2440e307a978caf32e1201f5761a000000000000000000000000043113cb02641b607acde6a55e760eb4fe58bde0d000000000000000000000000be0293faa9bee3f833b135f92a25aaad527cc09900000000000000000000000072571d815dd31fbde52be0b9d7ffc8344aede616000000000000000000000000bc4145e3156bdfe2aecdb2628ed1464092808c03000000000000000000000000c816fd366f5a4ba2f44c89e6b7ef277f1589a4bd0000000000000000000000000c9a0e58e78c3b56753026e3d655ab5cdbc2da4e0000000000000000000000000aec6b4e902e49255d1dbd9e34c057c052b992e200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000295be96e640669720000000000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000007c13bc4b2c133c560000000000000000000000000000000000000000000000007c13bc4b2c133c56000000000000000000000000000000000000000000000000cecb8f27f4200f3a00000000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000000000000000000000295be96e64066972000000

-----Decoded View---------------
Arg [0] : recipients (address[]): 0xd731ce8D55b2440E307a978caF32E1201f5761A0,0x43113cb02641B607AcDE6a55e760Eb4fE58BDe0d,0xbE0293FaA9bEE3f833b135f92A25aAaD527cc099,0x72571d815dd31FBDE52BE0B9D7ffc8344AeDe616,0xbc4145e3156BDFe2aECdB2628eD1464092808c03,0xc816fD366F5A4ba2F44c89E6b7ef277f1589a4Bd,0x0C9A0E58E78c3B56753026E3d655aB5CdBC2Da4E,0x0aec6B4E902e49255D1DbD9e34c057c052b992E2
Arg [1] : values (uint256[]): 125000000000000000000000000,50000000000000000000000000,125000000000000000000000000,150000000000000000000000000,150000000000000000000000000,250000000000000000000000000,100000000000000000000000000,50000000000000000000000000
Arg [2] : forwarderRegistry (address): 0xB87EbEB1f4aA317bd3eEc04704D3fFD6e3BC4b8f
Arg [3] : universalForwarder (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
22 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 000000000000000000000000d731ce8d55b2440e307a978caf32e1201f5761a0
Arg [6] : 00000000000000000000000043113cb02641b607acde6a55e760eb4fe58bde0d
Arg [7] : 000000000000000000000000be0293faa9bee3f833b135f92a25aaad527cc099
Arg [8] : 00000000000000000000000072571d815dd31fbde52be0b9d7ffc8344aede616
Arg [9] : 000000000000000000000000bc4145e3156bdfe2aecdb2628ed1464092808c03
Arg [10] : 000000000000000000000000c816fd366f5a4ba2f44c89e6b7ef277f1589a4bd
Arg [11] : 0000000000000000000000000c9a0e58e78c3b56753026e3d655ab5cdbc2da4e
Arg [12] : 0000000000000000000000000aec6b4e902e49255d1dbd9e34c057c052b992e2
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [14] : 0000000000000000000000000000000000000000006765c793fa10079d000000
Arg [15] : 000000000000000000000000000000000000000000295be96e64066972000000
Arg [16] : 0000000000000000000000000000000000000000006765c793fa10079d000000
Arg [17] : 0000000000000000000000000000000000000000007c13bc4b2c133c56000000
Arg [18] : 0000000000000000000000000000000000000000007c13bc4b2c133c56000000
Arg [19] : 000000000000000000000000000000000000000000cecb8f27f4200f3a000000
Arg [20] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [21] : 000000000000000000000000000000000000000000295be96e64066972000000


Deployed Bytecode Sourcemap

49655:1679:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30686:620;;;;;;;;;;;;;;;;-1:-1:-1;30686:620:0;-1:-1:-1;;;;;;30686:620:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31460:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32765:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32765:169:0;;;;;;;;:::i;32255:102::-;;;:::i;:::-;;;;;;;;;;;;;;;;34341:223;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34341:223:0;;;;;;;;;;;;;;;;;:::i;31756:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29690:361;;;:::i;33104:638::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33104:638:0;;;;;;;;:::i;32008:102::-;;;:::i;36500:1801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36500:1801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36500:1801:0;;-1:-1:-1;36500:1801:0;-1:-1:-1;36500:1801:0;:::i;47657:195::-;;;;;;;;;;;;;;;;-1:-1:-1;47657:195:0;-1:-1:-1;;;;;47657:195:0;;:::i;32403:121::-;;;;;;;;;;;;;;;;-1:-1:-1;32403:121:0;-1:-1:-1;;;;;32403:121:0;;:::i;8549:492::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8549:492:0;;-1:-1:-1;8549:492:0;-1:-1:-1;8549:492:0;:::i;:::-;;28795:50;;;;;;;;;;;;;;;;-1:-1:-1;28795:50:0;-1:-1:-1;;;;;28795:50:0;;:::i;34758:1646::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34758:1646:0;;-1:-1:-1;34758:1646:0;-1:-1:-1;34758:1646:0;:::i;2894:96::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2894:96:0;;;;;;;;;;;;;;31605:98;;;:::i;33805:281::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33805:281:0;;;;;;;;:::i;34131:161::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34131:161:0;;;;;;;;:::i;39025:485::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39025:485:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39025:485:0;;-1:-1:-1;39025:485:0;-1:-1:-1;39025:485:0;:::i;9867:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9867:522:0;;-1:-1:-1;9867:522:0;-1:-1:-1;9867:522:0;:::i;28638:42::-;;;:::i;39713:727::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39713:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32570:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32570:151:0;;;;;;;;;;:::i;50809:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50809:139:0;;-1:-1:-1;50809:139:0;-1:-1:-1;50809:139:0;:::i;38487:450::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38487:450:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38487:450:0;;-1:-1:-1;38487:450:0;-1:-1:-1;38487:450:0;:::i;3237:201::-;;;;;;;;;;;;;;;;-1:-1:-1;3237:201:0;-1:-1:-1;;;;;3237:201:0;;:::i;30686:620::-;30771:4;-1:-1:-1;;;;;;30808:40:0;;30823:25;30808:40;;:96;;-1:-1:-1;;;;;;;30865:39:0;;30880:24;30865:39;30808:96;:160;;;-1:-1:-1;;;;;;;30921:47:0;;30936:32;30921:47;30808:160;:224;;;-1:-1:-1;;;;;;;30985:47:0;;31000:32;30985:47;30808:224;:289;;;-1:-1:-1;;;;;;;31049:48:0;;31064:33;31049:48;30808:289;:359;;;-1:-1:-1;;;;;;;31114:53:0;;31129:38;31114:53;30808:359;:428;;;-1:-1:-1;;;;;;;31184:52:0;;31199:37;31184:52;30808:428;:490;;;-1:-1:-1;;;;;;;31253:45:0;;31268:30;31253:45;30808:490;30788:510;30686:620;-1:-1:-1;;30686:620:0:o;31460:94::-;31541:5;31534:12;;;;;;;;-1:-1:-1;;31534:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31508:13;;31534:12;;31541:5;;31534:12;;31541:5;31534:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:94;;:::o;32765:169::-;32849:4;32866:38;32875:12;:10;:12::i;:::-;32889:7;32898:5;32866:8;:38::i;:::-;-1:-1:-1;32922:4:0;32765:169;;;;:::o;32255:102::-;32337:12;;32255:102;:::o;34341:223::-;34473:4;34490:44;34504:12;:10;:12::i;:::-;34518:4;34524:2;34528:5;34490:13;:44::i;:::-;-1:-1:-1;34552:4:0;34341:223;;;;;:::o;31756:94::-;31833:9;31756:94;:::o;29690:361::-;29748:7;29829:9;29955:17;29944:28;;:99;;30036:5;29995:48;;;;;;;;;;;;;-1:-1:-1;;29995:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30021:7;;29995:48;;30036:5;;29995:48;;30036:5;29995:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;:48::i;:::-;29944:99;;;29975:17;29944:99;29937:106;;;29690:361;:::o;33104:638::-;33203:4;-1:-1:-1;;;;;33228:21:0;;33220:61;;;;;-1:-1:-1;;;33220:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33292:13;33308:12;:10;:12::i;:::-;-1:-1:-1;;;;;33352:18:0;;;33331;33352;;;:11;:18;;;;;;;;:27;;;;;;;;;;33292:28;;-1:-1:-1;33394:15:0;;33390:269;;33449:23;;;33495:25;;;33487:63;;;;;-1:-1:-1;;;33487:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33565:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;33595:12;-1:-1:-1;33390:269:0;33690:7;-1:-1:-1;;;;;33674:36:0;33683:5;-1:-1:-1;;;;;33674:36:0;;33699:10;33674:36;;;;;;;;;;;;;;;;;;-1:-1:-1;33730:4:0;;33104:638;-1:-1:-1;;;;33104:638:0:o;32008:102::-;32093:9;32086:16;;;;;;;;-1:-1:-1;;32086:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32060:13;;32086:16;;32093:9;;32086:16;;32093:9;32086:16;;;;;;;;;;;;;;;;;;;;;;;;36500:1801;36668:4;36702:10;36738:23;;;36730:62;;;;;-1:-1:-1;;;36730:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36823:15:0;;36805;36823;;;:9;:15;;;;;;;36805;;36921:810;36942:6;36937:1;:11;36921:810;;36970:10;36983;;36994:1;36983:13;;;;;;;;;;;;;-1:-1:-1;;;;;36983:13:0;36970:26;;37033:1;-1:-1:-1;;;;;37019:16:0;:2;-1:-1:-1;;;;;37019:16:0;;;37011:51;;;;;-1:-1:-1;;;37011:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37079:13;37095:6;;37102:1;37095:9;;;;;;;;;;;;;37079:25;;37125:5;37134:1;37125:10;37121:552;;37180:18;;;37225:26;;;37217:61;;;;;-1:-1:-1;;;37217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37310:13;37297:26;;37354:2;-1:-1:-1;;;;;37346:10:0;:4;-1:-1:-1;;;;;37346:10:0;;37342:316;;-1:-1:-1;;;;;37381:13:0;;;;;;:9;:13;;;;;:22;;;;;;37342:316;;;37469:7;37460:5;:16;;37452:56;;;;;-1:-1:-1;;;37452:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37531:31;;;;37342:316;37121:552;;37709:2;-1:-1:-1;;;;;37694:25:0;37703:4;-1:-1:-1;;;;;37694:25:0;;37713:5;37694:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;36950:3:0;;36921:810;;;-1:-1:-1;37747:15:0;;;;;:55;;;37780:22;37766:10;:36;;37747:55;37743:384;;;37840:20;;;37883;;;37875:60;;;;;-1:-1:-1;;;37875:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38006:15:0;;;;;;:9;:15;;;;;38024:35;;;38006:53;;37743:384;38139:14;38156:12;:10;:12::i;:::-;38139:29;;38191:6;-1:-1:-1;;;;;38183:14:0;:4;-1:-1:-1;;;;;38183:14:0;;38179:91;;38214:44;38233:4;38239:6;38247:10;38214:18;:44::i;:::-;-1:-1:-1;38289:4:0;;36500:1801;-1:-1:-1;;;;;;;;;;36500:1801:0:o;47657:195::-;47744:4;47781:19;-1:-1:-1;;;;;47768:32:0;:9;-1:-1:-1;;;;;47768:32:0;;:76;;;;47825:18;-1:-1:-1;;;;;47804:40:0;:9;-1:-1:-1;;;;;47804:40:0;;47761:83;;47657:195;;;:::o;32403:121::-;-1:-1:-1;;;;;32498:18:0;32471:7;32498:18;;;:9;:18;;;;;;;32403:121::o;8549:492::-;8718:31;8736:12;:10;:12::i;:::-;8718:17;:31::i;:::-;8777:8;8811:23;;;:51;;;;-1:-1:-1;8838:24:0;;;8811:51;8803:90;;;;;-1:-1:-1;;;8803:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8909:9;8904:130;8929:6;8924:1;:11;8904:130;;8957:65;8998:8;;9007:1;8998:11;;;;;;;;;;;;;-1:-1:-1;;;;;8998:11:0;9011:7;;9019:1;9011:10;;;;;;;;;;;;;8971:6;;8978:1;8971:9;;;;;;;;;;;;;-1:-1:-1;;;;;8971:9:0;-1:-1:-1;;;;;8957:40:0;;;:65;;;;;:::i;:::-;8937:3;;8904:130;;;;8549:492;;;;;;;:::o;28795:50::-;;;;;;;;;;;;;;:::o;34758:1646::-;34874:4;34908:10;34944:23;;;34936:62;;;;;-1:-1:-1;;;34936:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35009:14;35026:12;:10;:12::i;:::-;-1:-1:-1;;;;;35067:17:0;;35049:15;35067:17;;;:9;:17;;;;;;35009:29;;-1:-1:-1;35049:15:0;;35167:810;35188:6;35183:1;:11;35167:810;;35216:10;35229;;35240:1;35229:13;;;;;;;;;;;;;-1:-1:-1;;;;;35229:13:0;35216:26;;35279:1;-1:-1:-1;;;;;35265:16:0;:2;-1:-1:-1;;;;;35265:16:0;;;35257:51;;;;;-1:-1:-1;;;35257:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35325:13;35341:6;;35348:1;35341:9;;;;;;;;;;;;;35325:25;;35369:5;35378:1;35369:10;35365:554;;35424:18;;;35469:26;;;35461:61;;;;;-1:-1:-1;;;35461:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35554:13;35541:26;;35600:2;-1:-1:-1;;;;;35590:12:0;:6;-1:-1:-1;;;;;35590:12:0;;35586:318;;-1:-1:-1;;;;;35627:13:0;;;;;;:9;:13;;;;;:22;;;;;;35586:318;;;35715:7;35706:5;:16;;35698:56;;;;;-1:-1:-1;;;35698:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35777:31;;;;35586:318;35365:554;;35955:2;-1:-1:-1;;;;;35938:27:0;35947:6;-1:-1:-1;;;;;35938:27:0;;35959:5;35938:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;35196:3:0;;35167:810;;;-1:-1:-1;35993:15:0;;;;;:55;;;36026:22;36012:10;:36;;35993:55;35989:386;;;36086:20;;;36129;;;36121:60;;;;;-1:-1:-1;;;36121:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36252:17:0;;;;;;:9;:17;;;;;36272:35;;;36252:55;;35989:386;-1:-1:-1;36392:4:0;;34758:1646;-1:-1:-1;;;;;;;;;34758:1646:0:o;2894:96::-;2976:6;;-1:-1:-1;;;;;2976:6:0;2894:96;:::o;31605:98::-;31688:7;31681:14;;;;;;;-1:-1:-1;;31681:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31655:13;;31681:14;;31688:7;;31681:14;;31688:7;31681:14;;;;;;;;;;;;;;;;;;;;;;;;33805:281;33909:4;-1:-1:-1;;;;;33934:21:0;;33926:61;;;;;-1:-1:-1;;;33926:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33998:58;34017:12;:10;:12::i;:::-;34031:7;34040:15;33998:18;:58::i;34131:161::-;34211:4;34228:34;34238:12;:10;:12::i;:::-;34252:2;34256:5;34228:9;:34::i;39025:485::-;39192:4;39209:14;39226:12;:10;:12::i;:::-;39209:29;;39249:39;39263:6;39271:4;39277:2;39281:6;39249:13;:39::i;:::-;39303:15;:2;-1:-1:-1;;;;;39303:13:0;;:15::i;:::-;39299:182;;;39409:32;39343:98;;;39358:2;-1:-1:-1;;;;;39343:34:0;;39378:6;39386:4;39392:6;39400:4;;39343:62;;;;;;;;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39343:62:0;-1:-1:-1;;;;;;39343:98:0;;39335:134;;;;;-1:-1:-1;;;39335:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39498:4:0;;39025:485;-1:-1:-1;;;;;;39025:485:0:o;9867:522::-;10041:31;10059:12;:10;:12::i;10041:31::-;10100:8;10134:26;;;:55;;;;-1:-1:-1;10164:25:0;;;10134:55;10126:94;;;;;-1:-1:-1;;;10126:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10236:9;10231:151;10256:6;10251:1;:11;10231:151;;10303:9;;10313:1;10303:12;;;;;;;;;;;;;-1:-1:-1;;;;;10303:12:0;-1:-1:-1;;;;;10284:45:0;;10338:4;10345:8;;10354:1;10345:11;;;;;;;;;;;;;-1:-1:-1;;;;;10345:11:0;10358:8;;10367:1;10358:11;;;;;;;;;;;;;10284:86;;;;;;;;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10264:3;;;;;10231:151;;28638:42;;;:::o;39713:727::-;-1:-1:-1;;;;;39940:19:0;;39932:57;;;;;-1:-1:-1;;;39932:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40027:8;40008:15;:27;;40000:61;;;;;-1:-1:-1;;;40000:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40154:13:0;;;40072:18;40154:13;;;;;;;;;;;:15;;;;;;;;40103:77;;28563:66;40103:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40093:88;;;;;;;;40246:18;:16;:18::i;:::-;40266:10;40217:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40207:71;;;;;;40192:86;;40289:14;40306:24;40316:4;40322:1;40325;40328;40306:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40289:41;;40359:5;-1:-1:-1;;;;;40349:15:0;:6;-1:-1:-1;;;;;40349:15:0;;40341:49;;;;;-1:-1:-1;;;40341:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40401:31;40410:5;40417:7;40426:5;40401:8;:31::i;:::-;39713:727;;;;;;;;;;:::o;32570:151::-;-1:-1:-1;;;;;32686:18:0;;;32659:7;32686:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32570:151::o;50809:139::-;50877:31;50895:12;:10;:12::i;50877:31::-;50919:21;:9;50931;;50919:21;:::i;:::-;;50809:139;;:::o;38487:450::-;38627:4;38644:14;38661:12;:10;:12::i;:::-;38644:29;;38684;38694:6;38702:2;38706:6;38684:9;:29::i;:::-;38728:15;:2;-1:-1:-1;;;;;38728:13:0;;:15::i;:::-;38724:184;;;38836:32;38768:100;;;38783:2;-1:-1:-1;;;;;38768:34:0;;38803:6;38811;38819;38827:4;;38768:64;;;;;;;;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38768:64:0;-1:-1:-1;;;;;;38768:100:0;;38760:136;;;;;-1:-1:-1;;;38760:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38925:4:0;;38487:450;-1:-1:-1;;;;;38487:450:0:o;3237:201::-;3317:31;3335:12;:10;:12::i;3317:31::-;3359:6;:17;;;;-1:-1:-1;;;;;3359:17:0;;;;;;;;;;3392:38;;3359:17;;3413:6;;3392:38;;-1:-1:-1;;3392:38:0;3237:201;:::o;50956:185::-;51061:15;51096:37;:35;:37::i;:::-;51089:44;;50956:185;:::o;40558:281::-;-1:-1:-1;;;;;40685:21:0;;40677:61;;;;;-1:-1:-1;;;40677:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40749:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;40800:31;;;;;;;;;;;;;;;;;40558:281;;;:::o;42132:273::-;42275:26;42285:4;42291:2;42295:5;42275:9;:26::i;:::-;42324:6;-1:-1:-1;;;;;42316:14:0;:4;-1:-1:-1;;;;;42316:14:0;;42312:86;;42347:39;42366:4;42372:6;42380:5;42347:18;:39::i;:::-;42132:273;;;;:::o;30059:474::-;30372:16;;;;;;;30221:289;;;30254:95;30221:289;;;;;;;;;;;30411:14;30221:289;;;;;;;;;;;30486:4;30221:289;;;;;;;;;;;;;;;;;;;;;;;;;30193:332;;;;;;30059:474::o;40847:697::-;-1:-1:-1;;;;;41007:18:0;;;40986;41007;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;41051:31:0;;;;;:55;;-1:-1:-1;41086:20:0;;;41051:55;41047:438;;;41266:28;;;41317:25;;;41309:67;;;;;-1:-1:-1;;;41309:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41391:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;41421:12;-1:-1:-1;41047:438:0;41516:7;-1:-1:-1;;;;;41500:36:0;41509:5;-1:-1:-1;;;;;41500:36:0;;41525:10;41500:36;;;;;;;;;;;;;;;;;;40847:697;;;;:::o;3569:138::-;3660:4;-1:-1:-1;;;;;3660:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3660:12:0;-1:-1:-1;;;;;3649:23:0;;;;;;3641:58;;;;;-1:-1:-1;;;3641:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3569:138;:::o;5536:229::-;5698:58;;;-1:-1:-1;;;;;5698:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5721:23;5698:58;;;5663:94;;5691:5;;5663:27;:94::i;41552:572::-;-1:-1:-1;;;;;41682:16:0;;41674:51;;;;;-1:-1:-1;;;41674:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41742:10;;41738:336;;-1:-1:-1;;;;;41787:15:0;;41769;41787;;;:9;:15;;;;;;41838;;;41876:20;;;41868:60;;;;;-1:-1:-1;;;41868:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41955:2;-1:-1:-1;;;;;41947:10:0;:4;-1:-1:-1;;;;;41947:10:0;;41943:120;;-1:-1:-1;;;;;41978:15:0;;;;;;;:9;:15;;;;;;:28;;;42025:13;;;;;;:22;;;;;;41943:120;41738:336;;;42106:2;-1:-1:-1;;;;;42091:25:0;42100:4;-1:-1:-1;;;;;42091:25:0;;42110:5;42091:25;;;;;;;;;;;;;;;;;;41552:572;;;:::o;4723:387::-;5046:20;5094:8;;;4723:387::o;47860:922::-;47913:15;47969:10;47913:15;48015:27;:25;:27::i;:::-;47990:52;;48078:18;-1:-1:-1;;;;;48057:40:0;:9;-1:-1:-1;;;;;48057:40:0;;:76;;;;48114:19;-1:-1:-1;;;;;48101:32:0;:9;-1:-1:-1;;;;;48101:32:0;;48057:76;48053:169;;;48204:6;-1:-1:-1;48197:13:0;;-1:-1:-1;48197:13:0;48053:169;-1:-1:-1;;;;;48626:22:0;;48639:9;48626:22;;;;:78;;;48652:18;-1:-1:-1;;;;;48652:33:0;;48686:6;48694:9;48652:52;;;;;;;;;;;;;-1:-1:-1;;;;;48652:52:0;;;;;;-1:-1:-1;;;;;48652:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48652:52:0;48626:78;48622:124;;;48728:6;-1:-1:-1;48721:13:0;;-1:-1:-1;48721:13:0;48622:124;-1:-1:-1;48765:9:0;-1:-1:-1;47860:922:0;:::o;6292:892::-;6418:5;6443:19;-1:-1:-1;;;;;6443:17:0;;;:19::i;:::-;6435:58;;;;;-1:-1:-1;;;6435:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6567:12;6581:17;6602:6;-1:-1:-1;;;;;6602:11:0;6614:8;6602:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6566:57;;;;6638:7;6634:543;;;6666:11;;:16;6662:124;;6722:4;6711:24;;;;;;;;;;;;;;;-1:-1:-1;6711:24:0;6703:67;;;;;-1:-1:-1;;;6703:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6634:543;;;6877:11;;6873:97;;6914:40;;;-1:-1:-1;;;6914:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6873:97;7101:4;7095:11;7146:4;7139;7135:2;7131:13;7124:27;7064:102;6292:892;;;;;:::o;45991:526::-;46474:23;46478:14;46474:23;46461:37;46457:2;46453:46;;46428:82::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://71616ec3d73a3ccbc6f4a7a4376ded718b8e5c015ddc491dfc1942a01f8f1e4b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

QUIDD is the cornerstone of a new, cooperative economic system that aligns the interests of collectors, creators, and developers.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.