ETH Price: $3,264.56 (+0.47%)
Gas: 1 Gwei

Contract

0x437A28214cBeCFb51188b6CA2A3998Df28fb5678
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem Fries160835952022-11-30 15:08:23606 days ago1669820903IN
0x437A2821...f28fb5678
0 ETH0.0014733516.48789588
Redeem Fries158414912022-10-27 19:27:11640 days ago1666898831IN
0x437A2821...f28fb5678
0 ETH0.0025366428.38684244
Redeem Fries154309422022-08-29 0:23:32699 days ago1661732612IN
0x437A2821...f28fb5678
0 ETH0.0010299911.5263186
Redeem Fries154301642022-08-28 21:25:46700 days ago1661721946IN
0x437A2821...f28fb5678
0 ETH0.000594286.65047854
Redeem Fries151546182022-07-16 15:46:37743 days ago1657986397IN
0x437A2821...f28fb5678
0 ETH0.0024558927.48310266
Redeem Fries151007332022-07-08 8:05:41751 days ago1657267541IN
0x437A2821...f28fb5678
0 ETH0.0019999422.38081458
Redeem Fries150075532022-06-22 12:08:47767 days ago1655899727IN
0x437A2821...f28fb5678
0 ETH0.0017851619.97718894
Redeem Fries149481052022-06-12 4:07:27777 days ago1655006847IN
0x437A2821...f28fb5678
0 ETH0.0036569240.92347513
Redeem Fries149480732022-06-12 3:57:42777 days ago1655006262IN
0x437A2821...f28fb5678
0 ETH0.0022125624.76017101
Redeem Fries148822622022-06-01 2:11:14788 days ago1654049474IN
0x437A2821...f28fb5678
0 ETH0.0019395421.70479015
Redeem Fries148766802022-05-31 4:20:49789 days ago1653970849IN
0x437A2821...f28fb5678
0 ETH0.0014465151.7
Redeem Fries148766792022-05-31 4:20:36789 days ago1653970836IN
0x437A2821...f28fb5678
0 ETH0.0012310744
Redeem Fries148540332022-05-27 11:56:38793 days ago1653652598IN
0x437A2821...f28fb5678
0 ETH0.0022014624.63589374
Redeem Fries147891912022-05-16 23:40:26803 days ago1652744426IN
0x437A2821...f28fb5678
0 ETH0.003789142.40269452
Redeem Fries147555482022-05-11 15:10:08809 days ago1652281808IN
0x437A2821...f28fb5678
0 ETH0.02124296237.72340398
Redeem Fries147511812022-05-10 22:27:55810 days ago1652221675IN
0x437A2821...f28fb5678
0 ETH0.0065050572.79602477
Redeem Fries147466802022-05-10 5:02:12810 days ago1652158932IN
0x437A2821...f28fb5678
0 ETH0.0049883755.82332152
Redeem Fries147425052022-05-09 12:44:00811 days ago1652100240IN
0x437A2821...f28fb5678
0 ETH0.0018812221.0522031
Redeem Fries147163372022-05-05 9:01:49815 days ago1651741309IN
0x437A2821...f28fb5678
0 ETH0.0025238328.24340675
Redeem Fries147037322022-05-03 8:57:14817 days ago1651568234IN
0x437A2821...f28fb5678
0 ETH0.0037024341.43276151
Redeem Fries146897532022-05-01 4:11:24819 days ago1651378284IN
0x437A2821...f28fb5678
0 ETH0.03556451397.99140855
Redeem Fries146524712022-04-25 7:35:03825 days ago1650872103IN
0x437A2821...f28fb5678
0 ETH0.0042651247.72969263
Redeem Fries145801062022-04-13 23:33:23836 days ago1649892803IN
0x437A2821...f28fb5678
0 ETH0.0014539251.96480298
Redeem Fries145801052022-04-13 23:33:17836 days ago1649892797IN
0x437A2821...f28fb5678
0 ETH0.0040020855.38447427
Redeem Fries145626802022-04-11 6:07:29839 days ago1649657249IN
0x437A2821...f28fb5678
0 ETH0.002870632.12409718
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:
FriesDAOTokenSale

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-30
*/

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

// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^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 Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File @openzeppelin/contracts/utils/cryptography/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}


// File hardhat/[email protected]

pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}


// File contracts/sale-usdc.sol

// SPDX-License-Identifier: Apache-2.0

/*

  /$$$$$$          /$$                     /$$$$$$$   /$$$$$$   /$$$$$$ 
 /$$__  $$        |__/                    | $$__  $$ /$$__  $$ /$$__  $$
| $$  \__//$$$$$$  /$$  /$$$$$$   /$$$$$$$| $$  \ $$| $$  \ $$| $$  \ $$
| $$$$   /$$__  $$| $$ /$$__  $$ /$$_____/| $$  | $$| $$$$$$$$| $$  | $$
| $$_/  | $$  \__/| $$| $$$$$$$$|  $$$$$$ | $$  | $$| $$__  $$| $$  | $$
| $$    | $$      | $$| $$_____/ \____  $$| $$  | $$| $$  | $$| $$  | $$
| $$    | $$      | $$|  $$$$$$$ /$$$$$$$/| $$$$$$$/| $$  | $$|  $$$$$$/
|__/    |__/      |__/ \_______/|_______/ |_______/ |__/  |__/ \______/ 

*/

pragma solidity ^0.8.7;
// FRIES token interface

interface IFriesDAOToken is IERC20 {
    function mint(uint256 amount) external;
    function burn(uint256 amount) external;
    function burnFrom(address account, uint256 amount) external;
}

contract FriesDAOTokenSale is ReentrancyGuard, Ownable {

    IERC20 public immutable USDC;                // USDC token
    IFriesDAOToken public immutable FRIES;       // FRIES token
    uint256 public constant FRIES_DECIMALS = 18; // FRIES token decimals
    uint256 public constant USDC_DECIMALS = 6;   // USDC token decimals

    bool public whitelistSaleActive = false;
    bool public publicSaleActive = false;
    bool public redeemActive = false;
    bool public refundActive = false;

    uint256 public salePrice;           // Sale price of FRIES per USDC
    uint256 public baseWhitelistAmount; // Base whitelist amount of USDC available to purchase
    uint256 public totalCap;            // Total maximum amount of USDC in sale
    uint256 public totalPurchased = 0;  // Total amount of USDC purchased in sale

    mapping (address => uint256) public purchased; // Mapping of account to total purchased amount in FRIES
    mapping (address => uint256) public redeemed;  // Mapping of account to total amount of redeemed FRIES
    mapping (address => bool) public vesting;      // Mapping of account to vesting of purchased FRIES after redeem
    bytes32 public merkleRoot;                     // Merkle root representing tree of all whitelisted accounts

    address public treasury;       // friesDAO treasury address
    uint256 public vestingPercent; // Percent tokens vested /1000

    // Events

    event WhitelistSaleActiveChanged(bool active);
    event PublicSaleActiveChanged(bool active);
    event RedeemActiveChanged(bool active);
    event RefundActiveChanged(bool active);

    event SalePriceChanged(uint256 price);
    event BaseWhitelistAmountChanged(uint256 baseWhitelistAmount);
    event TotalCapChanged(uint256 totalCap);

    event Purchased(address indexed account, uint256 amount);
    event Redeemed(address indexed account, uint256 amount);
    event Refunded(address indexed account, uint256 amount);

    event TreasuryChanged(address treasury);
    event VestingPercentChanged(uint256 vestingPercent);

    // Initialize sale parameters

    constructor(address usdcAddress, address friesAddress, address treasuryAddress, bytes32 root) {
        USDC = IERC20(usdcAddress);           // USDC token
        FRIES = IFriesDAOToken(friesAddress); // Set FRIES token contract

        salePrice = 43312503100000000000;          // 43.3125031 FRIES per USDC
        totalCap = 9696969 * 10 ** USDC_DECIMALS; // Total 10,696,969 max USDC raised
        merkleRoot = root;                         // Merkle root for whitelisted accounts

        treasury = treasuryAddress; // Set friesDAO treasury address
        vestingPercent = 850;       // 85% vesting for vested allocations
    }

    /*
     * ------------------
     * EXTERNAL FUNCTIONS
     * ------------------
     */

    // Buy FRIES with USDC in whitelisted token sale

    function buyWhitelistFries(uint256 value, uint256 whitelistLimit, bool vestingEnabled, bytes32[] calldata proof) external {
        require(whitelistSaleActive, "FriesDAOTokenSale: whitelist token sale is not active");
        require(value > 0, "FriesDAOTokenSale: amount to purchase must be larger than zero");

        console.log("verifying proof:", _msgSender(), whitelistLimit, vestingEnabled);
        console.logBytes(abi.encodePacked(_msgSender(), whitelistLimit, vestingEnabled));
        bytes32 leaf = keccak256(abi.encodePacked(_msgSender(), whitelistLimit, vestingEnabled));                // Calculate merkle leaf of whitelist parameters
        console.logBytes32(leaf);
        require(MerkleProof.verify(proof, merkleRoot, leaf), "FriesDAOTokenSale: invalid whitelist parameters"); // Verify whitelist parameters with merkle proof

        uint256 amount = value * salePrice / 10 ** USDC_DECIMALS; // Calculate amount of FRIES at sale price with USDC value
        require(purchased[_msgSender()] + amount <= whitelistLimit, "FriesDAOTokenSale: amount over whitelist limit"); // Check purchase amount is within whitelist limit

        vesting[_msgSender()] = vestingEnabled;           // Set vesting enabled for account
        USDC.transferFrom(_msgSender(), treasury, value); // Transfer USDC amount to treasury
        purchased[_msgSender()] += amount;                // Add FRIES amount to purchased amount for account
        totalPurchased += value;                          // Add USDC amount to total USDC purchased

        emit Purchased(_msgSender(), amount);
    }

    // Buy FRIES with USDC in public token sale

    function buyFries(uint256 value) external {
        require(publicSaleActive, "FriesDAOTokenSale: public token sale is not active");
        require(value > 0, "FriesDAOTokenSale: amount to purchase must be larger than zero");
        require(totalPurchased + value < totalCap, "FriesDAOTokenSale: amount over total sale limit");

        USDC.transferFrom(_msgSender(), treasury, value);                            // Transfer USDC amount to treasury
        uint256 amount = value * salePrice / 10 ** USDC_DECIMALS;                    // Calculate amount of FRIES at sale price with USDC value
        purchased[_msgSender()] += amount;                                           // Add FRIES amount to purchased amount for account
        totalPurchased += value;                                                     // Add USDC amount to total USDC purchased

        emit Purchased(_msgSender(), amount);
    }

    // Redeem purchased FRIES for tokens

    function redeemFries() external {
        require(redeemActive, "FriesDAOTokenSale: redeeming for tokens is not active");

        uint256 amount = purchased[_msgSender()] - redeemed[_msgSender()]; // Calculate redeemable FRIES amount
        require(amount > 0, "FriesDAOTokenSale: invalid redeem amount");
        redeemed[_msgSender()] += amount;                                  // Add FRIES redeem amount to redeemed total for account

        if (!vesting[_msgSender()]) {
            FRIES.transfer(_msgSender(), amount);                                  // Send redeemed FRIES to account
        } else {
            FRIES.transfer(_msgSender(), amount * (1000 - vestingPercent) / 1000); // Send available FRIES to account
            FRIES.transfer(treasury, amount * vestingPercent / 1000);              // Send vested FRIES to treasury
        }

        emit Redeemed(_msgSender(), amount);
    }

    // Refund FRIES for USDC at sale price

    function refundFries(uint256 amount) external nonReentrant {
        require(refundActive, "FriesDAOTokenSale: refunding redeemed tokens is not active");
        require(redeemed[_msgSender()] >= amount, "FriesDAOTokenSale: refund amount larger than tokens redeemed");

        FRIES.burnFrom(_msgSender(), amount);                                                                     // Remove FRIES refund amount from account
        purchased[_msgSender()] -= amount;                                                                        // Reduce purchased amount of account by FRIES refund amount
        redeemed[_msgSender()] -= amount;                                                                         // Reduce redeemed amount of account by FRIES refund amount
        USDC.transferFrom(treasury, _msgSender(), amount * 10 ** USDC_DECIMALS / salePrice); // Send refund USDC amount at sale price to account
        
        emit Refunded(_msgSender(), amount);
    }

    /*
     * --------------------
     * RESTRICTED FUNCTIONS
     * --------------------
     */

    // Set merkle root
    function setRoot(bytes32 _root) external onlyOwner {   
        merkleRoot = _root;
    }

    // Set whitelist sale enabled status

    function setWhitelistSaleActive(bool active) external onlyOwner {
        whitelistSaleActive = active;
        emit WhitelistSaleActiveChanged(whitelistSaleActive);
    }

    // Set public sale enabled status

    function setPublicSaleActive(bool active) external onlyOwner {
        publicSaleActive = active;
        emit PublicSaleActiveChanged(publicSaleActive);
    }

    // Set redeem enabled status

    function setRedeemActive(bool active) external onlyOwner {
        redeemActive = active;
        emit RedeemActiveChanged(redeemActive);
    }

    // Set refund enabled status

    function setRefundActive(bool active) external onlyOwner {
        refundActive = active;
        emit RefundActiveChanged(refundActive);
    }

    // Change sale price

    function setSalePrice(uint256 price) external onlyOwner {
        salePrice = price;
        emit SalePriceChanged(salePrice);
    }

    // Change sale total cap

    function setTotalCap(uint256 amount) external onlyOwner {
        totalCap = amount;
        emit TotalCapChanged(totalCap);
    }

    // Change friesDAO treasury address

    function setTreasury(address treasuryAddress) external {
        require(_msgSender() == treasury, "FriesDAOTokenSale: caller is not the treasury");
        treasury = treasuryAddress;
        emit TreasuryChanged(treasury);
    }

    // Change vesting percent

    function setVestingPercent(uint256 percent) external onlyOwner {
        vestingPercent = percent;
        emit VestingPercentChanged(vestingPercent);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"usdcAddress","type":"address"},{"internalType":"address","name":"friesAddress","type":"address"},{"internalType":"address","name":"treasuryAddress","type":"address"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"baseWhitelistAmount","type":"uint256"}],"name":"BaseWhitelistAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"PublicSaleActiveChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Purchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"RedeemActiveChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"RefundActiveChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"SalePriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalCap","type":"uint256"}],"name":"TotalCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasury","type":"address"}],"name":"TreasuryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"vestingPercent","type":"uint256"}],"name":"VestingPercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"WhitelistSaleActiveChanged","type":"event"},{"inputs":[],"name":"FRIES","outputs":[{"internalType":"contract IFriesDAOToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FRIES_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseWhitelistAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"buyFries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"whitelistLimit","type":"uint256"},{"internalType":"bool","name":"vestingEnabled","type":"bool"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"buyWhitelistFries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"purchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemFries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"redeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"refundFries","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setRedeemActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setRefundActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTotalCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryAddress","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setVestingPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setWhitelistSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c06040526001805463ffffffff60a01b1916905560006005553480156200002657600080fd5b50604051620020d3380380620020d3833981016040819052620000499162000140565b60016000556200005933620000d1565b6001600160601b0319606085811b821660805284901b1660a05268025914ec17088158006002556200008e6006600a620001db565b6200009d906293f6c9620002a6565b600455600955600a80546001600160a01b0319166001600160a01b03929092169190911790555050610352600b55620002de565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013b57600080fd5b919050565b600080600080608085870312156200015757600080fd5b620001628562000123565b9350620001726020860162000123565b9250620001826040860162000123565b6060959095015193969295505050565b600181815b80851115620001d3578160001904821115620001b757620001b7620002c8565b80851615620001c557918102915b93841c939080029062000197565b509250929050565b6000620001e98383620001f0565b9392505050565b6000826200020157506001620002a0565b816200021057506000620002a0565b8160018114620002295760028114620002345762000254565b6001915050620002a0565b60ff841115620002485762000248620002c8565b50506001821b620002a0565b5060208310610133831016604e8410600b841016171562000279575081810a620002a0565b62000285838362000192565b80600019048211156200029c576200029c620002c8565b0290505b92915050565b6000816000190483118215151615620002c357620002c3620002c8565b500290565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160601c611d986200033b6000396000818161046901528181610e6c01528181610f2201528181610ffe015261128e015260008181610332015281816107cf01528181610ac301526113850152611d986000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80639f4568ef1161011a578063e2e06fa3116100ad578063f0f442601161007c578063f0f4426014610451578063f2d06ad414610464578063f2fde38b1461048b578063f51f96dd1461049e578063fd18a9c6146104a757600080fd5b8063e2e06fa31461040a578063e388c4231461041d578063e632c2f314610440578063ebcdb7021461044957600080fd5b8063cb0269bc116100e9578063cb0269bc146103bd578063dab5f340146103d1578063de25626b146103e4578063e1884b0f146103f757600080fd5b80639f4568ef14610379578063b77b6d2314610399578063bc8893b4146103a1578063c1419def146103b557600080fd5b80633aeb6c711161019d5780636a78f2271161016c5780636a78f22714610312578063715018a61461032557806389a302711461032d5780638da5cb5b14610354578063988315131461036557600080fd5b80633aeb6c71146102ab5780634a867488146102b4578063522fe98e146102c757806361d027b3146102e757600080fd5b80631919fed7116101d95780631919fed71461025857806327bea43c1461026b5780632eb4a7ab1461027e5780633ad7f56c1461028757600080fd5b80630bcae2761461020b5780630dcbf8c6146102205780631645009214610233578063167220ce1461024f575b600080fd5b61021e6102193660046119ed565b6104ba565b005b61021e61022e36600461199a565b6108ca565b61023c60045481565b6040519081526020015b60405180910390f35b61023c60035481565b61021e6102663660046119d4565b610950565b61021e6102793660046119d4565b6109af565b61023c60095481565b60015461029b90600160a01b900460ff1681565b6040519015158152602001610246565b61023c600b5481565b61021e6102c23660046119d4565b610c14565b61023c6102d536600461196a565b60066020526000908152604090205481565b600a546102fa906001600160a01b031681565b6040516001600160a01b039091168152602001610246565b61021e61032036600461199a565b610c73565b61021e610cf2565b6102fa7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166102fa565b60015461029b90600160b01b900460ff1681565b61023c61038736600461196a565b60076020526000908152604090205481565b61021e610d28565b60015461029b90600160a81b900460ff1681565b61023c600681565b60015461029b90600160b81b900460ff1681565b61021e6103df3660046119d4565b6110f9565b61021e6103f23660046119d4565b611128565b61021e6104053660046119d4565b61149d565b61021e61041836600461199a565b6114fc565b61029b61042b36600461196a565b60086020526000908152604090205460ff1681565b61023c60055481565b61023c601281565b61021e61045f36600461196a565b61157b565b6102fa7f000000000000000000000000000000000000000000000000000000000000000081565b61021e61049936600461196a565b611642565b61023c60025481565b61021e6104b536600461199a565b6116dd565b600154600160a01b900460ff166105365760405162461bcd60e51b815260206004820152603560248201527f467269657344414f546f6b656e53616c653a2077686974656c69737420746f6b604482015274656e2073616c65206973206e6f742061637469766560581b60648201526084015b60405180910390fd5b600085116105565760405162461bcd60e51b815260040161052d90611b20565b6105906040518060400160405280601081526020016f3b32b934b33cb4b73390383937b7b31d60811b8152506105893390565b868661175c565b6105da3360405160609190911b6bffffffffffffffffffffffff191660208201526034810186905284151560f81b60548201526055016040516020818303038152906040526117ab565b60003360405160609190911b6bffffffffffffffffffffffff191660208201526034810186905284151560f81b6054820152605501604051602081830303815290604052805190602001209050610630816117ee565b610671838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611833565b6106d55760405162461bcd60e51b815260206004820152602f60248201527f467269657344414f546f6b656e53616c653a20696e76616c696420776869746560448201526e6c69737420706172616d657465727360881b606482015260840161052d565b60006106e36006600a611c2f565b6002546106f09089611cd7565b6106fa9190611bca565b33600090815260066020526040902054909150869061071a908390611bb2565b111561077f5760405162461bcd60e51b815260206004820152602e60248201527f467269657344414f546f6b656e53616c653a20616d6f756e74206f766572207760448201526d1a1a5d195b1a5cdd081b1a5b5a5d60921b606482015260840161052d565b336000818152600860209081526040808320805460ff19168a1515179055600a5481516323b872dd60e01b815260048101959095526001600160a01b039081166024860152604485018c905290517f0000000000000000000000000000000000000000000000000000000000000000909116936323b872dd9360648083019493928390030190829087803b15801561081657600080fd5b505af115801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e91906119b7565b50336000908152600660205260408120805483929061086e908490611bb2565b9250508190555086600560008282546108879190611bb2565b909155505060405181815233907fa512fb2532ca8587f236380171326ebb69670e86a2ba0c4412a3fcca4c3ada9b9060200160405180910390a250505050505050565b6001546001600160a01b031633146108f45760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60b81b1916600160b81b8315158102919091179182905560405160ff9190920416151581527fe80908c93fb315e50ba970f3360c8b7341dacd379d428d9d4f63b868e111ed90906020015b60405180910390a150565b6001546001600160a01b0316331461097a5760405162461bcd60e51b815260040161052d90611b7d565b60028190556040518181527f421d50d68688bdeb8868bd642bc70a6ead1cfb014d1f6d1780538fd56420655c90602001610945565b600154600160a81b900460ff16610a235760405162461bcd60e51b815260206004820152603260248201527f467269657344414f546f6b656e53616c653a207075626c696320746f6b656e2060448201527173616c65206973206e6f742061637469766560701b606482015260840161052d565b60008111610a435760405162461bcd60e51b815260040161052d90611b20565b60045481600554610a549190611bb2565b10610ab95760405162461bcd60e51b815260206004820152602f60248201527f467269657344414f546f6b656e53616c653a20616d6f756e74206f766572207460448201526e1bdd185b081cd85b19481b1a5b5a5d608a1b606482015260840161052d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166323b872dd33600a5460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529116602482015260448101849052606401602060405180830381600087803b158015610b3b57600080fd5b505af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7391906119b7565b506000610b826006600a611c2f565b600254610b8f9084611cd7565b610b999190611bca565b33600090815260066020526040812080549293508392909190610bbd908490611bb2565b925050819055508160056000828254610bd69190611bb2565b909155505060405181815233907fa512fb2532ca8587f236380171326ebb69670e86a2ba0c4412a3fcca4c3ada9b9060200160405180910390a25050565b6001546001600160a01b03163314610c3e5760405162461bcd60e51b815260040161052d90611b7d565b600b8190556040518181527fda399b7f80d93d18117d473aba0556eaeb146419151776ff8dcf5d1e13375b2d90602001610945565b6001546001600160a01b03163314610c9d5760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527ff4541b809cbc4e55ca5475347fdff9221269923ec410f9997ddfd3138f5dbf4990602001610945565b6001546001600160a01b03163314610d1c5760405162461bcd60e51b815260040161052d90611b7d565b610d266000611849565b565b600154600160b01b900460ff16610d9f5760405162461bcd60e51b815260206004820152603560248201527f467269657344414f546f6b656e53616c653a2072656465656d696e6720666f7260448201527420746f6b656e73206973206e6f742061637469766560581b606482015260840161052d565b336000908152600760209081526040808320546006909252822054610dc49190611cf6565b905060008111610e275760405162461bcd60e51b815260206004820152602860248201527f467269657344414f546f6b656e53616c653a20696e76616c69642072656465656044820152671b48185b5bdd5b9d60c21b606482015260840161052d565b3360009081526007602052604081208054839290610e46908490611bb2565b90915550503360009081526008602052604090205460ff16610f18576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1291906119b7565b506110c1565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb336103e8600b546103e8610f5b9190611cf6565b610f659086611cd7565b610f6f9190611bca565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610fb557600080fd5b505af1158015610fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fed91906119b7565b50600a54600b546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb929116906103e8906110379086611cd7565b6110419190611bca565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561108757600080fd5b505af115801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906119b7565b505b60405181815233907f4896181ff8f4543cc00db9fe9b6fb7e6f032b7eb772c72ab1ec1b4d2e03b93699060200160405180910390a250565b6001546001600160a01b031633146111235760405162461bcd60e51b815260040161052d90611b7d565b600955565b6002600054141561117b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161052d565b6002600055600154600160b81b900460ff166111ff5760405162461bcd60e51b815260206004820152603a60248201527f467269657344414f546f6b656e53616c653a20726566756e64696e672072656460448201527f65656d656420746f6b656e73206973206e6f7420616374697665000000000000606482015260840161052d565b336000908152600760205260409020548111156112845760405162461bcd60e51b815260206004820152603c60248201527f467269657344414f546f6b656e53616c653a20726566756e6420616d6f756e7460448201527f206c6172676572207468616e20746f6b656e732072656465656d656400000000606482015260840161052d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166379cc6790336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b1580156112fc57600080fd5b505af1158015611310573d6000803e3d6000fd5b5050505080600660006113203390565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461134f9190611cf6565b90915550503360009081526007602052604081208054839290611373908490611cf6565b9091555050600a546001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916323b872dd91166113b53390565b6002546113c46006600a611c2f565b6113ce9087611cd7565b6113d89190611bca565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b15801561142757600080fd5b505af115801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f91906119b7565b5060405181815233907fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06519060200160405180910390a2506001600055565b6001546001600160a01b031633146114c75760405162461bcd60e51b815260040161052d90611b7d565b60048190556040518181527fe2336520f8de0a184303e8d54809f11170b1fa53cabdd3d2c850aa631ed5e22b90602001610945565b6001546001600160a01b031633146115265760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f4f6001447c4177b3a74155b757f83799bfc007b8a5cac3732724f421c624205390602001610945565b600a546001600160a01b0316336001600160a01b0316146115f45760405162461bcd60e51b815260206004820152602d60248201527f467269657344414f546f6b656e53616c653a2063616c6c6572206973206e6f7460448201526c2074686520747265617375727960981b606482015260840161052d565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f60890602001610945565b6001546001600160a01b0316331461166c5760405162461bcd60e51b815260040161052d90611b7d565b6001600160a01b0381166116d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052d565b6116da81611849565b50565b6001546001600160a01b031633146117075760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60b01b1916600160b01b8315158102919091179182905560405160ff9190920416151581527fe54a969a3cddae18c208a02a1b332ea54eee2839e6be6cd34f38981945009ab290602001610945565b6117a5848484846040516024016117769493929190611ae6565b60408051601f198184030181529190526020810180516001600160e01b03166316b0704f60e21b17905261189b565b50505050565b6116da816040516024016117bf9190611ad3565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b17905261189b565b6116da8160405160240161180491815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b17905261189b565b60008261184085846118bc565b14949350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600081815b84518110156119605760008582815181106118de576118de611d3e565b6020026020010151905080831161192057604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061194d565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061195881611d0d565b9150506118c1565b5090505b92915050565b60006020828403121561197c57600080fd5b81356001600160a01b038116811461199357600080fd5b9392505050565b6000602082840312156119ac57600080fd5b813561199381611d54565b6000602082840312156119c957600080fd5b815161199381611d54565b6000602082840312156119e657600080fd5b5035919050565b600080600080600060808688031215611a0557600080fd5b85359450602086013593506040860135611a1e81611d54565b9250606086013567ffffffffffffffff80821115611a3b57600080fd5b818801915088601f830112611a4f57600080fd5b813581811115611a5e57600080fd5b8960208260051b8501011115611a7357600080fd5b9699959850939650602001949392505050565b6000815180845260005b81811015611aac57602081850181015186830182015201611a90565b81811115611abe576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006119936020830184611a86565b608081526000611af96080830187611a86565b6001600160a01b039590951660208301525060408101929092521515606090910152919050565b6020808252603e908201527f467269657344414f546f6b656e53616c653a20616d6f756e7420746f2070757260408201527f6368617365206d757374206265206c6172676572207468616e207a65726f0000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611bc557611bc5611d28565b500190565b600082611be757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611c27578160001904821115611c0d57611c0d611d28565b80851615611c1a57918102915b93841c9390800290611bf1565b509250929050565b60006119938383600082611c4557506001611964565b81611c5257506000611964565b8160018114611c685760028114611c7257611c8e565b6001915050611964565b60ff841115611c8357611c83611d28565b50506001821b611964565b5060208310610133831016604e8410600b8410161715611cb1575081810a611964565b611cbb8383611bec565b8060001904821115611ccf57611ccf611d28565b029392505050565b6000816000190483118215151615611cf157611cf1611d28565b500290565b600082821015611d0857611d08611d28565b500390565b6000600019821415611d2157611d21611d28565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b80151581146116da57600080fdfea2646970667358221220054e30481b1fe1420b8a2ea1af45de8be621a0f66ed4a743f41ec02d1a8d18fe64736f6c63430008070033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd0000000000000000000000007163bee2a0a4c75d1236bf053e429f86eb45426e1b0a761f951450e525599936832e4687d34193a64c0ec431b36557e4ee0720dd

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c80639f4568ef1161011a578063e2e06fa3116100ad578063f0f442601161007c578063f0f4426014610451578063f2d06ad414610464578063f2fde38b1461048b578063f51f96dd1461049e578063fd18a9c6146104a757600080fd5b8063e2e06fa31461040a578063e388c4231461041d578063e632c2f314610440578063ebcdb7021461044957600080fd5b8063cb0269bc116100e9578063cb0269bc146103bd578063dab5f340146103d1578063de25626b146103e4578063e1884b0f146103f757600080fd5b80639f4568ef14610379578063b77b6d2314610399578063bc8893b4146103a1578063c1419def146103b557600080fd5b80633aeb6c711161019d5780636a78f2271161016c5780636a78f22714610312578063715018a61461032557806389a302711461032d5780638da5cb5b14610354578063988315131461036557600080fd5b80633aeb6c71146102ab5780634a867488146102b4578063522fe98e146102c757806361d027b3146102e757600080fd5b80631919fed7116101d95780631919fed71461025857806327bea43c1461026b5780632eb4a7ab1461027e5780633ad7f56c1461028757600080fd5b80630bcae2761461020b5780630dcbf8c6146102205780631645009214610233578063167220ce1461024f575b600080fd5b61021e6102193660046119ed565b6104ba565b005b61021e61022e36600461199a565b6108ca565b61023c60045481565b6040519081526020015b60405180910390f35b61023c60035481565b61021e6102663660046119d4565b610950565b61021e6102793660046119d4565b6109af565b61023c60095481565b60015461029b90600160a01b900460ff1681565b6040519015158152602001610246565b61023c600b5481565b61021e6102c23660046119d4565b610c14565b61023c6102d536600461196a565b60066020526000908152604090205481565b600a546102fa906001600160a01b031681565b6040516001600160a01b039091168152602001610246565b61021e61032036600461199a565b610c73565b61021e610cf2565b6102fa7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001546001600160a01b03166102fa565b60015461029b90600160b01b900460ff1681565b61023c61038736600461196a565b60076020526000908152604090205481565b61021e610d28565b60015461029b90600160a81b900460ff1681565b61023c600681565b60015461029b90600160b81b900460ff1681565b61021e6103df3660046119d4565b6110f9565b61021e6103f23660046119d4565b611128565b61021e6104053660046119d4565b61149d565b61021e61041836600461199a565b6114fc565b61029b61042b36600461196a565b60086020526000908152604090205460ff1681565b61023c60055481565b61023c601281565b61021e61045f36600461196a565b61157b565b6102fa7f000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd81565b61021e61049936600461196a565b611642565b61023c60025481565b61021e6104b536600461199a565b6116dd565b600154600160a01b900460ff166105365760405162461bcd60e51b815260206004820152603560248201527f467269657344414f546f6b656e53616c653a2077686974656c69737420746f6b604482015274656e2073616c65206973206e6f742061637469766560581b60648201526084015b60405180910390fd5b600085116105565760405162461bcd60e51b815260040161052d90611b20565b6105906040518060400160405280601081526020016f3b32b934b33cb4b73390383937b7b31d60811b8152506105893390565b868661175c565b6105da3360405160609190911b6bffffffffffffffffffffffff191660208201526034810186905284151560f81b60548201526055016040516020818303038152906040526117ab565b60003360405160609190911b6bffffffffffffffffffffffff191660208201526034810186905284151560f81b6054820152605501604051602081830303815290604052805190602001209050610630816117ee565b610671838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611833565b6106d55760405162461bcd60e51b815260206004820152602f60248201527f467269657344414f546f6b656e53616c653a20696e76616c696420776869746560448201526e6c69737420706172616d657465727360881b606482015260840161052d565b60006106e36006600a611c2f565b6002546106f09089611cd7565b6106fa9190611bca565b33600090815260066020526040902054909150869061071a908390611bb2565b111561077f5760405162461bcd60e51b815260206004820152602e60248201527f467269657344414f546f6b656e53616c653a20616d6f756e74206f766572207760448201526d1a1a5d195b1a5cdd081b1a5b5a5d60921b606482015260840161052d565b336000818152600860209081526040808320805460ff19168a1515179055600a5481516323b872dd60e01b815260048101959095526001600160a01b039081166024860152604485018c905290517f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48909116936323b872dd9360648083019493928390030190829087803b15801561081657600080fd5b505af115801561082a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084e91906119b7565b50336000908152600660205260408120805483929061086e908490611bb2565b9250508190555086600560008282546108879190611bb2565b909155505060405181815233907fa512fb2532ca8587f236380171326ebb69670e86a2ba0c4412a3fcca4c3ada9b9060200160405180910390a250505050505050565b6001546001600160a01b031633146108f45760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60b81b1916600160b81b8315158102919091179182905560405160ff9190920416151581527fe80908c93fb315e50ba970f3360c8b7341dacd379d428d9d4f63b868e111ed90906020015b60405180910390a150565b6001546001600160a01b0316331461097a5760405162461bcd60e51b815260040161052d90611b7d565b60028190556040518181527f421d50d68688bdeb8868bd642bc70a6ead1cfb014d1f6d1780538fd56420655c90602001610945565b600154600160a81b900460ff16610a235760405162461bcd60e51b815260206004820152603260248201527f467269657344414f546f6b656e53616c653a207075626c696320746f6b656e2060448201527173616c65206973206e6f742061637469766560701b606482015260840161052d565b60008111610a435760405162461bcd60e51b815260040161052d90611b20565b60045481600554610a549190611bb2565b10610ab95760405162461bcd60e51b815260206004820152602f60248201527f467269657344414f546f6b656e53616c653a20616d6f756e74206f766572207460448201526e1bdd185b081cd85b19481b1a5b5a5d608a1b606482015260840161052d565b6001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48166323b872dd33600a5460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201529116602482015260448101849052606401602060405180830381600087803b158015610b3b57600080fd5b505af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7391906119b7565b506000610b826006600a611c2f565b600254610b8f9084611cd7565b610b999190611bca565b33600090815260066020526040812080549293508392909190610bbd908490611bb2565b925050819055508160056000828254610bd69190611bb2565b909155505060405181815233907fa512fb2532ca8587f236380171326ebb69670e86a2ba0c4412a3fcca4c3ada9b9060200160405180910390a25050565b6001546001600160a01b03163314610c3e5760405162461bcd60e51b815260040161052d90611b7d565b600b8190556040518181527fda399b7f80d93d18117d473aba0556eaeb146419151776ff8dcf5d1e13375b2d90602001610945565b6001546001600160a01b03163314610c9d5760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60a01b1916600160a01b8315158102919091179182905560405160ff9190920416151581527ff4541b809cbc4e55ca5475347fdff9221269923ec410f9997ddfd3138f5dbf4990602001610945565b6001546001600160a01b03163314610d1c5760405162461bcd60e51b815260040161052d90611b7d565b610d266000611849565b565b600154600160b01b900460ff16610d9f5760405162461bcd60e51b815260206004820152603560248201527f467269657344414f546f6b656e53616c653a2072656465656d696e6720666f7260448201527420746f6b656e73206973206e6f742061637469766560581b606482015260840161052d565b336000908152600760209081526040808320546006909252822054610dc49190611cf6565b905060008111610e275760405162461bcd60e51b815260206004820152602860248201527f467269657344414f546f6b656e53616c653a20696e76616c69642072656465656044820152671b48185b5bdd5b9d60c21b606482015260840161052d565b3360009081526007602052604081208054839290610e46908490611bb2565b90915550503360009081526008602052604090205460ff16610f18576001600160a01b037f000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd1663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1291906119b7565b506110c1565b6001600160a01b037f000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd1663a9059cbb336103e8600b546103e8610f5b9190611cf6565b610f659086611cd7565b610f6f9190611bca565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610fb557600080fd5b505af1158015610fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fed91906119b7565b50600a54600b546001600160a01b037f000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd81169263a9059cbb929116906103e8906110379086611cd7565b6110419190611bca565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561108757600080fd5b505af115801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf91906119b7565b505b60405181815233907f4896181ff8f4543cc00db9fe9b6fb7e6f032b7eb772c72ab1ec1b4d2e03b93699060200160405180910390a250565b6001546001600160a01b031633146111235760405162461bcd60e51b815260040161052d90611b7d565b600955565b6002600054141561117b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161052d565b6002600055600154600160b81b900460ff166111ff5760405162461bcd60e51b815260206004820152603a60248201527f467269657344414f546f6b656e53616c653a20726566756e64696e672072656460448201527f65656d656420746f6b656e73206973206e6f7420616374697665000000000000606482015260840161052d565b336000908152600760205260409020548111156112845760405162461bcd60e51b815260206004820152603c60248201527f467269657344414f546f6b656e53616c653a20726566756e6420616d6f756e7460448201527f206c6172676572207468616e20746f6b656e732072656465656d656400000000606482015260840161052d565b6001600160a01b037f000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd166379cc6790336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b1580156112fc57600080fd5b505af1158015611310573d6000803e3d6000fd5b5050505080600660006113203390565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461134f9190611cf6565b90915550503360009081526007602052604081208054839290611373908490611cf6565b9091555050600a546001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488116916323b872dd91166113b53390565b6002546113c46006600a611c2f565b6113ce9087611cd7565b6113d89190611bca565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b15801561142757600080fd5b505af115801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f91906119b7565b5060405181815233907fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06519060200160405180910390a2506001600055565b6001546001600160a01b031633146114c75760405162461bcd60e51b815260040161052d90611b7d565b60048190556040518181527fe2336520f8de0a184303e8d54809f11170b1fa53cabdd3d2c850aa631ed5e22b90602001610945565b6001546001600160a01b031633146115265760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60a81b1916600160a81b8315158102919091179182905560405160ff9190920416151581527f4f6001447c4177b3a74155b757f83799bfc007b8a5cac3732724f421c624205390602001610945565b600a546001600160a01b0316336001600160a01b0316146115f45760405162461bcd60e51b815260206004820152602d60248201527f467269657344414f546f6b656e53616c653a2063616c6c6572206973206e6f7460448201526c2074686520747265617375727960981b606482015260840161052d565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f60890602001610945565b6001546001600160a01b0316331461166c5760405162461bcd60e51b815260040161052d90611b7d565b6001600160a01b0381166116d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052d565b6116da81611849565b50565b6001546001600160a01b031633146117075760405162461bcd60e51b815260040161052d90611b7d565b6001805460ff60b01b1916600160b01b8315158102919091179182905560405160ff9190920416151581527fe54a969a3cddae18c208a02a1b332ea54eee2839e6be6cd34f38981945009ab290602001610945565b6117a5848484846040516024016117769493929190611ae6565b60408051601f198184030181529190526020810180516001600160e01b03166316b0704f60e21b17905261189b565b50505050565b6116da816040516024016117bf9190611ad3565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b17905261189b565b6116da8160405160240161180491815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166327b7cf8560e01b17905261189b565b60008261184085846118bc565b14949350505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600081815b84518110156119605760008582815181106118de576118de611d3e565b6020026020010151905080831161192057604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061194d565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061195881611d0d565b9150506118c1565b5090505b92915050565b60006020828403121561197c57600080fd5b81356001600160a01b038116811461199357600080fd5b9392505050565b6000602082840312156119ac57600080fd5b813561199381611d54565b6000602082840312156119c957600080fd5b815161199381611d54565b6000602082840312156119e657600080fd5b5035919050565b600080600080600060808688031215611a0557600080fd5b85359450602086013593506040860135611a1e81611d54565b9250606086013567ffffffffffffffff80821115611a3b57600080fd5b818801915088601f830112611a4f57600080fd5b813581811115611a5e57600080fd5b8960208260051b8501011115611a7357600080fd5b9699959850939650602001949392505050565b6000815180845260005b81811015611aac57602081850181015186830182015201611a90565b81811115611abe576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006119936020830184611a86565b608081526000611af96080830187611a86565b6001600160a01b039590951660208301525060408101929092521515606090910152919050565b6020808252603e908201527f467269657344414f546f6b656e53616c653a20616d6f756e7420746f2070757260408201527f6368617365206d757374206265206c6172676572207468616e207a65726f0000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611bc557611bc5611d28565b500190565b600082611be757634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611c27578160001904821115611c0d57611c0d611d28565b80851615611c1a57918102915b93841c9390800290611bf1565b509250929050565b60006119938383600082611c4557506001611964565b81611c5257506000611964565b8160018114611c685760028114611c7257611c8e565b6001915050611964565b60ff841115611c8357611c83611d28565b50506001821b611964565b5060208310610133831016604e8410600b8410161715611cb1575081810a611964565b611cbb8383611bec565b8060001904821115611ccf57611ccf611d28565b029392505050565b6000816000190483118215151615611cf157611cf1611d28565b500290565b600082821015611d0857611d08611d28565b500390565b6000600019821415611d2157611d21611d28565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b80151581146116da57600080fdfea2646970667358221220054e30481b1fe1420b8a2ea1af45de8be621a0f66ed4a743f41ec02d1a8d18fe64736f6c63430008070033

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

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd0000000000000000000000007163bee2a0a4c75d1236bf053e429f86eb45426e1b0a761f951450e525599936832e4687d34193a64c0ec431b36557e4ee0720dd

-----Decoded View---------------
Arg [0] : usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : friesAddress (address): 0xFA57F00D948bb6a28072f5416fCbF7836C3d62dD
Arg [2] : treasuryAddress (address): 0x7163beE2a0a4C75D1236Bf053E429f86eB45426E
Arg [3] : root (bytes32): 0x1b0a761f951450e525599936832e4687d34193a64c0ec431b36557e4ee0720dd

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 000000000000000000000000fa57f00d948bb6a28072f5416fcbf7836c3d62dd
Arg [2] : 0000000000000000000000007163bee2a0a4c75d1236bf053e429f86eb45426e
Arg [3] : 1b0a761f951450e525599936832e4687d34193a64c0ec431b36557e4ee0720dd


Deployed Bytecode Sourcemap

75862:9439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78804:1615;;;;;;:::i;:::-;;:::i;:::-;;84321:146;;;;;;:::i;:::-;;:::i;76542:23::-;;;;;;;;;4374:25:1;;;4362:2;4347:18;76542:23:0;;;;;;;;76446:34;;;;;;84503:135;;;;;;:::i;:::-;;:::i;80478:924::-;;;;;;:::i;:::-;;:::i;77042:25::-;;;;;;76204:39;;;;;-1:-1:-1;;;76204:39:0;;;;;;;;;4201:14:1;;4194:22;4176:41;;4164:2;4149:18;76204:39:0;4036:187:1;77222:29:0;;;;;;85137:159;;;;;;:::i;:::-;;:::i;76708:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;77157:23;;;;;-1:-1:-1;;;;;77157:23:0;;;;;;-1:-1:-1;;;;;3333:32:1;;;3315:51;;3303:2;3288:18;77157:23:0;3169:203:1;83702:174:0;;;;;;:::i;:::-;;:::i;8345:103::-;;;:::i;75926:28::-;;;;;7694:87;7767:6;;-1:-1:-1;;;;;7767:6:0;7694:87;;76293:32;;;;;-1:-1:-1;;;76293:32:0;;;;;;76817:44;;;;;;:::i;:::-;;;;;;;;;;;;;;81454:923;;;:::i;76250:36::-;;;;;-1:-1:-1;;;76250:36:0;;;;;;76129:41;;76169:1;76129:41;;76332:32;;;;;-1:-1:-1;;;76332:32:0;;;;;;83559:91;;;;;;:::i;:::-;;:::i;82431:990::-;;;;;;:::i;:::-;;:::i;84678:133::-;;;;;;:::i;:::-;;:::i;83925:162::-;;;;;;:::i;:::-;;:::i;76925:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;76623:33;;;;;;76055:43;;76096:2;76055:43;;84862:234;;;;;;:::i;:::-;;:::i;75990:37::-;;;;;8603:201;;;;;;:::i;:::-;;:::i;76373:24::-;;;;;;84131:146;;;;;;:::i;:::-;;:::i;78804:1615::-;78945:19;;-1:-1:-1;;;78945:19:0;;;;78937:85;;;;-1:-1:-1;;;78937:85:0;;5761:2:1;78937:85:0;;;5743:21:1;5800:2;5780:18;;;5773:30;5839:34;5819:18;;;5812:62;-1:-1:-1;;;5890:18:1;;;5883:51;5951:19;;78937:85:0;;;;;;;;;79049:1;79041:5;:9;79033:84;;;;-1:-1:-1;;;79033:84:0;;;;;;;:::i;:::-;79130:77;;;;;;;;;;;;;;-1:-1:-1;;;79130:77:0;;;79162:12;6494:10;;6414:98;79162:12;79176:14;79192;79130:11;:77::i;:::-;79218:80;6494:10;79235:62;;2732:2:1;2728:15;;;;-1:-1:-1;;2724:53:1;79235:62:0;;;2712:66:1;2794:12;;;2787:28;;;2861:14;;2854:22;2849:3;2845:32;2831:12;;;2824:54;2894:12;;79235:62:0;;;;;;;;;;;;79218:16;:80::i;:::-;79309:12;6494:10;79334:62;;2732:2:1;2728:15;;;;-1:-1:-1;;2724:53:1;79334:62:0;;;2712:66:1;2794:12;;;2787:28;;;2861:14;;2854:22;2849:3;2845:32;2831:12;;;2824:54;2894:12;;79334:62:0;;;;;;;;;;;;79324:73;;;;;;79309:88;;79472:24;79491:4;79472:18;:24::i;:::-;79515:43;79534:5;;79515:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;79541:10:0;;;-1:-1:-1;79553:4:0;;-1:-1:-1;79515:18:0;:43::i;:::-;79507:103;;;;-1:-1:-1;;;79507:103:0;;8282:2:1;79507:103:0;;;8264:21:1;8321:2;8301:18;;;8294:30;8360:34;8340:18;;;8333:62;-1:-1:-1;;;8411:18:1;;;8404:45;8466:19;;79507:103:0;8080:411:1;79507:103:0;79672:14;79709:19;76169:1;79709:2;:19;:::i;:::-;79697:9;;79689:17;;:5;:17;:::i;:::-;:39;;;;:::i;:::-;6494:10;79806:23;;;;:9;:23;;;;;;79672:56;;-1:-1:-1;79842:14:0;;79806:32;;79672:56;;79806:32;:::i;:::-;:50;;79798:109;;;;-1:-1:-1;;;79798:109:0;;9107:2:1;79798:109:0;;;9089:21:1;9146:2;9126:18;;;9119:30;9185:34;9165:18;;;9158:62;-1:-1:-1;;;9236:18:1;;;9229:44;9290:19;;79798:109:0;8905:410:1;79798:109:0;6494:10;79971:21;;;;:7;:21;;;;;;;;:38;;-1:-1:-1;;79971:38:0;;;;;;;80097:8;;80065:48;;-1:-1:-1;;;80065:48:0;;;;;3617:34:1;;;;-1:-1:-1;;;;;80097:8:0;;;3667:18:1;;;3660:43;3719:18;;;3712:34;;;80065:48:0;;:4;:17;;;;;;3552:18:1;;;;;79971:21:0;80065:48;;;;;;;;:17;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6494:10:0;80160:23;;;;:9;:23;;;;;:33;;80187:6;;80160:23;:33;;80187:6;;80160:33;:::i;:::-;;;;;;;;80289:5;80271:14;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;80380:31:0;;4374:25:1;;;6494:10:0;;80380:31;;4362:2:1;4347:18;80380:31:0;;;;;;;78926:1493;;78804:1615;;;;;:::o;84321:146::-;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;84389:12:::1;:21:::0;;-1:-1:-1;;;;84389:21:0::1;-1:-1:-1::0;;;84389:21:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;84426:33:::1;::::0;84389:21:::1;84446:12:::0;;;::::1;;4201:14:1::0;4194:22;4176:41;;84426:33:0::1;::::0;4164:2:1;4149:18;84426:33:0::1;;;;;;;;84321:146:::0;:::o;84503:135::-;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;84570:9:::1;:17:::0;;;84603:27:::1;::::0;4374:25:1;;;84603:27:0::1;::::0;4362:2:1;4347:18;84603:27:0::1;4228:177:1::0;80478:924:0;80539:16;;-1:-1:-1;;;80539:16:0;;;;80531:79;;;;-1:-1:-1;;;80531:79:0;;10730:2:1;80531:79:0;;;10712:21:1;10769:2;10749:18;;;10742:30;10808:34;10788:18;;;10781:62;-1:-1:-1;;;10859:18:1;;;10852:48;10917:19;;80531:79:0;10528:414:1;80531:79:0;80637:1;80629:5;:9;80621:84;;;;-1:-1:-1;;;80621:84:0;;;;;;;:::i;:::-;80749:8;;80741:5;80724:14;;:22;;;;:::i;:::-;:33;80716:93;;;;-1:-1:-1;;;80716:93:0;;9953:2:1;80716:93:0;;;9935:21:1;9992:2;9972:18;;;9965:30;10031:34;10011:18;;;10004:62;-1:-1:-1;;;10082:18:1;;;10075:45;10137:19;;80716:93:0;9751:411:1;80716:93:0;-1:-1:-1;;;;;80822:4:0;:17;;6494:10;80854:8;;80822:48;;;;;;-1:-1:-1;;;;;;80822:48:0;;;-1:-1:-1;;;;;3635:15:1;;;80822:48:0;;;3617:34:1;80854:8:0;;3667:18:1;;;3660:43;3719:18;;;3712:34;;;3552:18;;80822:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;80944:14:0;80981:19;76169:1;80981:2;:19;:::i;:::-;80969:9;;80961:17;;:5;:17;:::i;:::-;:39;;;;:::i;:::-;6494:10;81089:23;;;;:9;:23;;;;;:33;;80944:56;;-1:-1:-1;80944:56:0;;81089:23;;;:33;;80944:56;;81089:33;:::i;:::-;;;;;;;;81245:5;81227:14;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;81363:31:0;;4374:25:1;;;6494:10:0;;81363:31;;4362:2:1;4347:18;81363:31:0;;;;;;;80520:882;80478:924;:::o;85137:159::-;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;85211:14:::1;:24:::0;;;85251:37:::1;::::0;4374:25:1;;;85251:37:0::1;::::0;4362:2:1;4347:18;85251:37:0::1;4228:177:1::0;83702:174:0;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;83777:19:::1;:28:::0;;-1:-1:-1;;;;83777:28:0::1;-1:-1:-1::0;;;83777:28:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;83821:47:::1;::::0;83777:28:::1;83848:19:::0;;;::::1;;4201:14:1::0;4194:22;4176:41;;83821:47:0::1;::::0;4164:2:1;4149:18;83821:47:0::1;4036:187:1::0;8345:103:0;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;8410:30:::1;8437:1;8410:18;:30::i;:::-;8345:103::o:0;81454:923::-;81505:12;;-1:-1:-1;;;81505:12:0;;;;81497:78;;;;-1:-1:-1;;;81497:78:0;;6183:2:1;81497:78:0;;;6165:21:1;6222:2;6202:18;;;6195:30;6261:34;6241:18;;;6234:62;-1:-1:-1;;;6312:18:1;;;6305:51;6373:19;;81497:78:0;5981:417:1;81497:78:0;6494:10;81588:14;81631:22;;;:8;:22;;;;;;;;;81605:9;:23;;;;;;:48;;81631:22;81605:48;:::i;:::-;81588:65;;81718:1;81709:6;:10;81701:63;;;;-1:-1:-1;;;81701:63:0;;8698:2:1;81701:63:0;;;8680:21:1;8737:2;8717:18;;;8710:30;8776:34;8756:18;;;8749:62;-1:-1:-1;;;8827:18:1;;;8820:38;8875:19;;81701:63:0;8496:404:1;81701:63:0;6494:10;81775:22;;;;:8;:22;;;;;:32;;81801:6;;81775:22;:32;;81801:6;;81775:32;:::i;:::-;;;;-1:-1:-1;;6494:10:0;81915:21;;;;:7;:21;;;;;;;;81910:412;;-1:-1:-1;;;;;81953:5:0;:14;;6494:10;81953:36;;-1:-1:-1;;;;;;81953:36:0;;;;;;;-1:-1:-1;;;;;3949:32:1;;;81953:36:0;;;3931:51:1;3998:18;;;3991:34;;;3904:18;;81953:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;81910:412;;;-1:-1:-1;;;;;82089:5:0;:14;;6494:10;82153:4;82135:14;;82128:4;:21;;;;:::i;:::-;82118:32;;:6;:32;:::i;:::-;:39;;;;:::i;:::-;82089:69;;-1:-1:-1;;;;;;82089:69:0;;;;;;;-1:-1:-1;;;;;3949:32:1;;;82089:69:0;;;3931:51:1;3998:18;;;3991:34;3904:18;;82089:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;82223:8:0;;82242:14;;-1:-1:-1;;;;;82208:5:0;:14;;;;;82223:8;;;82259:4;;82233:23;;:6;:23;:::i;:::-;:30;;;;:::i;:::-;82208:56;;-1:-1:-1;;;;;;82208:56:0;;;;;;;-1:-1:-1;;;;;3949:32:1;;;82208:56:0;;;3931:51:1;3998:18;;;3991:34;3904:18;;82208:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;81910:412;82339:30;;4374:25:1;;;6494:10:0;;82339:30;;4362:2:1;4347:18;82339:30:0;;;;;;;81486:891;81454:923::o;83559:91::-;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;83624:10:::1;:18:::0;83559:91::o;82431:990::-;4782:1;5380:7;;:19;;5372:63;;;;-1:-1:-1;;;5372:63:0;;11149:2:1;5372:63:0;;;11131:21:1;11188:2;11168:18;;;11161:30;11227:33;11207:18;;;11200:61;11278:18;;5372:63:0;10947:355:1;5372:63:0;4782:1;5513:7;:18;82509:12:::1;::::0;-1:-1:-1;;;82509:12:0;::::1;;;82501:83;;;::::0;-1:-1:-1;;;82501:83:0;;7855:2:1;82501:83:0::1;::::0;::::1;7837:21:1::0;7894:2;7874:18;;;7867:30;7933:34;7913:18;;;7906:62;8004:28;7984:18;;;7977:56;8050:19;;82501:83:0::1;7653:422:1::0;82501:83:0::1;6494:10:::0;82603:22:::1;::::0;;;:8:::1;:22;::::0;;;;;:32;-1:-1:-1;82603:32:0::1;82595:105;;;::::0;-1:-1:-1;;;82595:105:0;;7019:2:1;82595:105:0::1;::::0;::::1;7001:21:1::0;7058:2;7038:18;;;7031:30;7097:34;7077:18;;;7070:62;7168:30;7148:18;;;7141:58;7216:19;;82595:105:0::1;6817:424:1::0;82595:105:0::1;-1:-1:-1::0;;;;;82713:5:0::1;:14;;6494:10:::0;82713:36:::1;::::0;-1:-1:-1;;;;;;82713:36:0::1;::::0;;;;;;-1:-1:-1;;;;;3949:32:1;;;82713:36:0::1;::::0;::::1;3931:51:1::0;3998:18;;;3991:34;;;3904:18;;82713:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;82898:6;82871:9;:23;82881:12;6494:10:::0;;6414:98;82881:12:::1;-1:-1:-1::0;;;;;82871:23:0::1;-1:-1:-1::0;;;;;82871:23:0::1;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;6494:10:0;83047:22:::1;::::0;;;:8:::1;:22;::::0;;;;:32;;83073:6;;83047:22;:32:::1;::::0;83073:6;;83047:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;83240:8:0::1;::::0;-1:-1:-1;;;;;83222:4:0::1;:17:::0;::::1;::::0;::::1;::::0;83240:8:::1;83250:12;6494:10:::0;;6414:98;83250:12:::1;83295:9;::::0;83273:19:::1;76169:1;83273:2;:19;:::i;:::-;83264:28;::::0;:6;:28:::1;:::i;:::-;:40;;;;:::i;:::-;83222:83;::::0;-1:-1:-1;;;;;;83222:83:0::1;::::0;;;;;;-1:-1:-1;;;;;3635:15:1;;;83222:83:0::1;::::0;::::1;3617:34:1::0;3687:15;;;;3667:18;;;3660:43;3719:18;;;3712:34;3552:18;;83222:83:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;83383:30:0::1;::::0;4374:25:1;;;6494:10:0;;83383:30:::1;::::0;4362:2:1;4347:18;83383:30:0::1;;;;;;;-1:-1:-1::0;4738:1:0;5692:7;:22;82431:990::o;84678:133::-;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;84745:8:::1;:17:::0;;;84778:25:::1;::::0;4374::1;;;84778::0::1;::::0;4362:2:1;4347:18;84778:25:0::1;4228:177:1::0;83925:162:0;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;83997:16:::1;:25:::0;;-1:-1:-1;;;;83997:25:0::1;-1:-1:-1::0;;;83997:25:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;84038:41:::1;::::0;83997:25:::1;84062:16:::0;;;::::1;;4201:14:1::0;4194:22;4176:41;;84038::0::1;::::0;4164:2:1;4149:18;84038:41:0::1;4036:187:1::0;84862:234:0;84952:8;;-1:-1:-1;;;;;84952:8:0;6494:10;-1:-1:-1;;;;;84936:24:0;;84928:82;;;;-1:-1:-1;;;84928:82:0;;6605:2:1;84928:82:0;;;6587:21:1;6644:2;6624:18;;;6617:30;6683:34;6663:18;;;6656:62;-1:-1:-1;;;6734:18:1;;;6727:43;6787:19;;84928:82:0;6403:409:1;84928:82:0;85021:8;:26;;-1:-1:-1;;;;;;85021:26:0;-1:-1:-1;;;;;85021:26:0;;;;;;;;85063:25;;3315:51:1;;;85063:25:0;;3303:2:1;3288:18;85063:25:0;3169:203:1;8603:201:0;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8692:22:0;::::1;8684:73;;;::::0;-1:-1:-1;;;8684:73:0;;7448:2:1;8684:73:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:34;7506:18;;;7499:62;-1:-1:-1;;;7577:18:1;;;7570:36;7623:19;;8684:73:0::1;7246:402:1::0;8684:73:0::1;8768:28;8787:8;8768:18;:28::i;:::-;8603:201:::0;:::o;84131:146::-;7767:6;;-1:-1:-1;;;;;7767:6:0;6494:10;7914:23;7906:68;;;;-1:-1:-1;;;7906:68:0;;;;;;;:::i;:::-;84199:12:::1;:21:::0;;-1:-1:-1;;;;84199:21:0::1;-1:-1:-1::0;;;84199:21:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;84236:33:::1;::::0;84199:21:::1;84256:12:::0;;;::::1;;4201:14:1::0;4194:22;4176:41;;84236:33:0::1;::::0;4164:2:1;4149:18;84236:33:0::1;4036:187:1::0;49538:174:0;49618:89;49691:2;49695;49699;49703;49634:72;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49634:72:0;;;;;;;;;;;;;;-1:-1:-1;;;;;49634:72:0;-1:-1:-1;;;49634:72:0;;;49618:15;:89::i;:::-;49538:174;;;;:::o;12497:117::-;12551:58;12605:2;12567:41;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12567:41:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12567:41:0;-1:-1:-1;;;12567:41:0;;;12551:15;:58::i;16343:116::-;16394:60;16450:2;16410:43;;;;;;4374:25:1;;4362:2;4347:18;;4228:177;16410:43:0;;;;-1:-1:-1;;16410:43:0;;;;;;;;;;;;;;-1:-1:-1;;;;;16410:43:0;-1:-1:-1;;;16410:43:0;;;16394:15;:60::i;10076:190::-;10201:4;10254;10225:25;10238:5;10245:4;10225:12;:25::i;:::-;:33;;10076:190;-1:-1:-1;;;;10076:190:0:o;8964:191::-;9057:6;;;-1:-1:-1;;;;;9074:17:0;;;-1:-1:-1;;;;;;9074:17:0;;;;;;;9107:40;;9057:6;;;9074:17;9057:6;;9107:40;;9038:16;;9107:40;9027:128;8964:191;:::o;11525:295::-;11614:14;;11476:42;11726:2;11713:16;;11590:21;;11614:14;11713:16;11476:42;11754:5;11743:68;11734:77;;11687:129;;11525:295;:::o;10628:701::-;10711:7;10754:4;10711:7;10769:523;10793:5;:12;10789:1;:16;10769:523;;;10827:20;10850:5;10856:1;10850:8;;;;;;;;:::i;:::-;;;;;;;10827:31;;10893:12;10877;:28;10873:408;;11030:44;;;;;;3074:19:1;;;3109:12;;;3102:28;;;3146:12;;11030:44:0;;;;;;;;;;;;11020:55;;;;;;11005:70;;10873:408;;;11220:44;;;;;;3074:19:1;;;3109:12;;;3102:28;;;3146:12;;11220:44:0;;;;;;;;;;;;11210:55;;;;;;11195:70;;10873:408;-1:-1:-1;10807:3:0;;;;:::i;:::-;;;;10769:523;;;-1:-1:-1;11309:12:0;-1:-1:-1;10628:701:0;;;;;:::o;14:286:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:1;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:1:o;305:241::-;361:6;414:2;402:9;393:7;389:23;385:32;382:52;;;430:1;427;420:12;382:52;469:9;456:23;488:28;510:5;488:28;:::i;551:245::-;618:6;671:2;659:9;650:7;646:23;642:32;639:52;;;687:1;684;677:12;639:52;719:9;713:16;738:28;760:5;738:28;:::i;801:180::-;860:6;913:2;901:9;892:7;888:23;884:32;881:52;;;929:1;926;919:12;881:52;-1:-1:-1;952:23:1;;801:180;-1:-1:-1;801:180:1:o;1171:881::-;1281:6;1289;1297;1305;1313;1366:3;1354:9;1345:7;1341:23;1337:33;1334:53;;;1383:1;1380;1373:12;1334:53;1419:9;1406:23;1396:33;;1476:2;1465:9;1461:18;1448:32;1438:42;;1530:2;1519:9;1515:18;1502:32;1543:28;1565:5;1543:28;:::i;:::-;1590:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1669:18;1699:14;;;1696:34;;;1726:1;1723;1716:12;1696:34;1764:6;1753:9;1749:22;1739:32;;1809:7;1802:4;1798:2;1794:13;1790:27;1780:55;;1831:1;1828;1821:12;1780:55;1871:2;1858:16;1897:2;1889:6;1886:14;1883:34;;;1913:1;1910;1903:12;1883:34;1966:7;1961:2;1951:6;1948:1;1944:14;1940:2;1936:23;1932:32;1929:45;1926:65;;;1987:1;1984;1977:12;1926:65;1171:881;;;;-1:-1:-1;1171:881:1;;-1:-1:-1;2018:2:1;2010:11;;2040:6;1171:881;-1:-1:-1;;;1171:881:1:o;2057:471::-;2098:3;2136:5;2130:12;2163:6;2158:3;2151:19;2188:1;2198:162;2212:6;2209:1;2206:13;2198:162;;;2274:4;2330:13;;;2326:22;;2320:29;2302:11;;;2298:20;;2291:59;2227:12;2198:162;;;2378:6;2375:1;2372:13;2369:87;;;2444:1;2437:4;2428:6;2423:3;2419:16;2415:27;2408:38;2369:87;-1:-1:-1;2510:2:1;2489:15;-1:-1:-1;;2485:29:1;2476:39;;;;2517:4;2472:50;;2057:471;-1:-1:-1;;2057:471:1:o;4410:217::-;4557:2;4546:9;4539:21;4520:4;4577:44;4617:2;4606:9;4602:18;4594:6;4577:44;:::i;5084:470::-;5311:3;5300:9;5293:22;5274:4;5332:45;5372:3;5361:9;5357:19;5349:6;5332:45;:::i;:::-;-1:-1:-1;;;;;5413:32:1;;;;5408:2;5393:18;;5386:60;-1:-1:-1;5477:2:1;5462:18;;5455:34;;;;5532:14;5525:22;5520:2;5505:18;;;5498:50;5324:53;5084:470;-1:-1:-1;5084:470:1:o;9320:426::-;9522:2;9504:21;;;9561:2;9541:18;;;9534:30;9600:34;9595:2;9580:18;;9573:62;9671:32;9666:2;9651:18;;9644:60;9736:3;9721:19;;9320:426::o;10167:356::-;10369:2;10351:21;;;10388:18;;;10381:30;10447:34;10442:2;10427:18;;10420:62;10514:2;10499:18;;10167:356::o;11489:128::-;11529:3;11560:1;11556:6;11553:1;11550:13;11547:39;;;11566:18;;:::i;:::-;-1:-1:-1;11602:9:1;;11489:128::o;11622:217::-;11662:1;11688;11678:132;;11732:10;11727:3;11723:20;11720:1;11713:31;11767:4;11764:1;11757:15;11795:4;11792:1;11785:15;11678:132;-1:-1:-1;11824:9:1;;11622:217::o;11844:422::-;11933:1;11976:5;11933:1;11990:270;12011:7;12001:8;11998:21;11990:270;;;12070:4;12066:1;12062:6;12058:17;12052:4;12049:27;12046:53;;;12079:18;;:::i;:::-;12129:7;12119:8;12115:22;12112:55;;;12149:16;;;;12112:55;12228:22;;;;12188:15;;;;11990:270;;;11994:3;11844:422;;;;;:::o;12271:131::-;12331:5;12360:36;12387:8;12381:4;12456:5;12486:8;12476:80;;-1:-1:-1;12527:1:1;12541:5;;12476:80;12575:4;12565:76;;-1:-1:-1;12612:1:1;12626:5;;12565:76;12657:4;12675:1;12670:59;;;;12743:1;12738:130;;;;12650:218;;12670:59;12700:1;12691:10;;12714:5;;;12738:130;12775:3;12765:8;12762:17;12759:43;;;12782:18;;:::i;:::-;-1:-1:-1;;12838:1:1;12824:16;;12853:5;;12650:218;;12952:2;12942:8;12939:16;12933:3;12927:4;12924:13;12920:36;12914:2;12904:8;12901:16;12896:2;12890:4;12887:12;12883:35;12880:77;12877:159;;;-1:-1:-1;12989:19:1;;;13021:5;;12877:159;13068:34;13093:8;13087:4;13068:34;:::i;:::-;13138:6;13134:1;13130:6;13126:19;13117:7;13114:32;13111:58;;;13149:18;;:::i;:::-;13187:20;;12407:806;-1:-1:-1;;;12407:806:1:o;13218:168::-;13258:7;13324:1;13320;13316:6;13312:14;13309:1;13306:21;13301:1;13294:9;13287:17;13283:45;13280:71;;;13331:18;;:::i;:::-;-1:-1:-1;13371:9:1;;13218:168::o;13391:125::-;13431:4;13459:1;13456;13453:8;13450:34;;;13464:18;;:::i;:::-;-1:-1:-1;13501:9:1;;13391:125::o;13521:135::-;13560:3;-1:-1:-1;;13581:17:1;;13578:43;;;13601:18;;:::i;:::-;-1:-1:-1;13648:1:1;13637:13;;13521:135::o;13661:127::-;13722:10;13717:3;13713:20;13710:1;13703:31;13753:4;13750:1;13743:15;13777:4;13774:1;13767:15;13793:127;13854:10;13849:3;13845:20;13842:1;13835:31;13885:4;13882:1;13875:15;13909:4;13906:1;13899:15;13925:118;14011:5;14004:13;13997:21;13990:5;13987:32;13977:60;;14033:1;14030;14023:12

Swarm Source

ipfs://054e30481b1fe1420b8a2ea1af45de8be621a0f66ed4a743f41ec02d1a8d18fe

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.