ERC-20
Overview
Max Total Supply
25,246.197025174129353236 XIM
Holders
19
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.473164804670844493 XIMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LUSDToken
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-07 */ // Sources flattened with hardhat v2.1.1 https://hardhat.org // File contracts/Dependencies/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.11; /** * Based on the OpenZeppelin IER20 interface: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol * * @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); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); /** * @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); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); /** * @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 contracts/Dependencies/IERC2612.sol /** * @dev Interface of the ERC2612 standard as defined in the EIP. * * Adds the {permit} method, which can be used to change one's * {IERC20-allowance} without having to send a transaction, by signing a * message. This allows users to spend tokens without having to hold Ether. * * See https://eips.ethereum.org/EIPS/eip-2612. * * Code adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/ */ interface IERC2612 { /** * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens, * given `owner`'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; /** * @dev Returns the current ERC2612 nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases `owner`'s nonce by one. This * prevents a signature from being used multiple times. * * `owner` can limit the time a Permit is valid for by setting `deadline` to * a value in the near future. The deadline argument can be set to uint(-1) to * create Permits that effectively never expire. */ function nonces(address owner) external view returns (uint256); function version() external view returns (string memory); function permitTypeHash() external view returns (bytes32); function domainSeparator() external view returns (bytes32); } // File contracts/Interfaces/ILUSDToken.sol interface ILUSDToken is IERC20, IERC2612 { // --- Events --- event LUSDTokenBalanceUpdated(address _user, uint256 _amount); event CollateralAdded( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ); event ColllateralRemoved( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ); // --- Functions --- function addAddressesForColl( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ) external; function removeAddressesForColl( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ) external; function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; function sendToPool( address _sender, address poolAddress, uint256 _amount ) external; function returnFromPool( address poolAddress, address user, uint256 _amount ) external; } // File contracts/Dependencies/SafeMath.sol /** * Based on OpenZeppelin's SafeMath: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol * * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/Dependencies/Ownable.sol /** * Based on OpenZeppelin's Ownable contract: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol * * @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. * * 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. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. * * NOTE: This function is not safe, as it doesn’t check owner is calling it. * Make sure you check it before calling it. */ function _renounceOwnership() internal { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } // File contracts/Dependencies/CheckContract.sol contract CheckContract { /** * Check that the account is an already deployed non-destroyed contract. * See: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol#L12 */ function checkContract(address _account) internal view { require(_account != address(0), "Account cannot be zero address"); uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(_account) } require(size > 0, "Account code size cannot be zero"); } } // File contracts/Dependencies/console.sol // Buidler's helper contract for console logging library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function log() internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log()")); ignored; } function logInt(int p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(int)", p0)); ignored; } function logUint(uint p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint)", p0)); ignored; } function logString(string memory p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string)", p0)); ignored; } function logBool(bool p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool)", p0)); ignored; } function logAddress(address p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address)", p0)); ignored; } function logBytes(bytes memory p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes)", p0)); ignored; } function logByte(byte p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(byte)", p0)); ignored; } function logBytes1(bytes1 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes1)", p0)); ignored; } function logBytes2(bytes2 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes2)", p0)); ignored; } function logBytes3(bytes3 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes3)", p0)); ignored; } function logBytes4(bytes4 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes4)", p0)); ignored; } function logBytes5(bytes5 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes5)", p0)); ignored; } function logBytes6(bytes6 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes6)", p0)); ignored; } function logBytes7(bytes7 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes7)", p0)); ignored; } function logBytes8(bytes8 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes8)", p0)); ignored; } function logBytes9(bytes9 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes9)", p0)); ignored; } function logBytes10(bytes10 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes10)", p0)); ignored; } function logBytes11(bytes11 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes11)", p0)); ignored; } function logBytes12(bytes12 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes12)", p0)); ignored; } function logBytes13(bytes13 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes13)", p0)); ignored; } function logBytes14(bytes14 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes14)", p0)); ignored; } function logBytes15(bytes15 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes15)", p0)); ignored; } function logBytes16(bytes16 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes16)", p0)); ignored; } function logBytes17(bytes17 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes17)", p0)); ignored; } function logBytes18(bytes18 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes18)", p0)); ignored; } function logBytes19(bytes19 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes19)", p0)); ignored; } function logBytes20(bytes20 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes20)", p0)); ignored; } function logBytes21(bytes21 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes21)", p0)); ignored; } function logBytes22(bytes22 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes22)", p0)); ignored; } function logBytes23(bytes23 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes23)", p0)); ignored; } function logBytes24(bytes24 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes24)", p0)); ignored; } function logBytes25(bytes25 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes25)", p0)); ignored; } function logBytes26(bytes26 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes26)", p0)); ignored; } function logBytes27(bytes27 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes27)", p0)); ignored; } function logBytes28(bytes28 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes28)", p0)); ignored; } function logBytes29(bytes29 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes29)", p0)); ignored; } function logBytes30(bytes30 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes30)", p0)); ignored; } function logBytes31(bytes31 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes31)", p0)); ignored; } function logBytes32(bytes32 p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bytes32)", p0)); ignored; } function log(uint p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint)", p0)); ignored; } function log(string memory p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string)", p0)); ignored; } function log(bool p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool)", p0)); ignored; } function log(address p0) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address)", p0)); ignored; } function log(uint p0, uint p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint)", p0, p1)); ignored; } function log(uint p0, string memory p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string)", p0, p1)); ignored; } function log(uint p0, bool p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool)", p0, p1)); ignored; } function log(uint p0, address p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address)", p0, p1)); ignored; } function log(string memory p0, uint p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint)", p0, p1)); ignored; } function log(string memory p0, string memory p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string)", p0, p1)); ignored; } function log(string memory p0, bool p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool)", p0, p1)); ignored; } function log(string memory p0, address p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address)", p0, p1)); ignored; } function log(bool p0, uint p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint)", p0, p1)); ignored; } function log(bool p0, string memory p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string)", p0, p1)); ignored; } function log(bool p0, bool p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool)", p0, p1)); ignored; } function log(bool p0, address p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address)", p0, p1)); ignored; } function log(address p0, uint p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint)", p0, p1)); ignored; } function log(address p0, string memory p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string)", p0, p1)); ignored; } function log(address p0, bool p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool)", p0, p1)); ignored; } function log(address p0, address p1) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address)", p0, p1)); ignored; } function log(uint p0, uint p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); ignored; } function log(uint p0, uint p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); ignored; } function log(uint p0, uint p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); ignored; } function log(uint p0, uint p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); ignored; } function log(uint p0, string memory p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); ignored; } function log(uint p0, string memory p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); ignored; } function log(uint p0, string memory p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); ignored; } function log(uint p0, string memory p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); ignored; } function log(uint p0, bool p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); ignored; } function log(uint p0, bool p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); ignored; } function log(uint p0, bool p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); ignored; } function log(uint p0, bool p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); ignored; } function log(uint p0, address p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); ignored; } function log(uint p0, address p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); ignored; } function log(uint p0, address p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); ignored; } function log(uint p0, address p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); ignored; } function log(string memory p0, uint p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); ignored; } function log(string memory p0, uint p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); ignored; } function log(string memory p0, uint p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); ignored; } function log(string memory p0, uint p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); ignored; } function log(string memory p0, string memory p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); ignored; } function log(string memory p0, string memory p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); ignored; } function log(string memory p0, string memory p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); ignored; } function log(string memory p0, string memory p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); ignored; } function log(string memory p0, bool p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); ignored; } function log(string memory p0, bool p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); ignored; } function log(string memory p0, bool p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); ignored; } function log(string memory p0, bool p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); ignored; } function log(string memory p0, address p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); ignored; } function log(string memory p0, address p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); ignored; } function log(string memory p0, address p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); ignored; } function log(string memory p0, address p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); ignored; } function log(bool p0, uint p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); ignored; } function log(bool p0, uint p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); ignored; } function log(bool p0, uint p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); ignored; } function log(bool p0, uint p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); ignored; } function log(bool p0, string memory p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); ignored; } function log(bool p0, string memory p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); ignored; } function log(bool p0, string memory p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); ignored; } function log(bool p0, string memory p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); ignored; } function log(bool p0, bool p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); ignored; } function log(bool p0, bool p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); ignored; } function log(bool p0, bool p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); ignored; } function log(bool p0, bool p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); ignored; } function log(bool p0, address p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); ignored; } function log(bool p0, address p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); ignored; } function log(bool p0, address p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); ignored; } function log(bool p0, address p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); ignored; } function log(address p0, uint p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); ignored; } function log(address p0, uint p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); ignored; } function log(address p0, uint p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); ignored; } function log(address p0, uint p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); ignored; } function log(address p0, string memory p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); ignored; } function log(address p0, string memory p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); ignored; } function log(address p0, string memory p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); ignored; } function log(address p0, string memory p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); ignored; } function log(address p0, bool p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); ignored; } function log(address p0, bool p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); ignored; } function log(address p0, bool p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); ignored; } function log(address p0, bool p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); ignored; } function log(address p0, address p1, uint p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); ignored; } function log(address p0, address p1, string memory p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); ignored; } function log(address p0, address p1, bool p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); ignored; } function log(address p0, address p1, address p2) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); ignored; } function log(uint p0, uint p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, uint p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, string memory p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, bool p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); ignored; } function log(uint p0, address p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, uint p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, string memory p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, bool p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); ignored; } function log(string memory p0, address p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, uint p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, string memory p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, bool p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); ignored; } function log(bool p0, address p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, uint p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, string memory p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, bool p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, uint p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, uint p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, uint p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, uint p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, string memory p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, string memory p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, string memory p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, string memory p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, bool p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, bool p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, bool p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, bool p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, address p2, uint p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, address p2, string memory p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, address p2, bool p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); ignored; } function log(address p0, address p1, address p2, address p3) internal view { (bool ignored, ) = CONSOLE_ADDRESS.staticcall(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); ignored; } } // File contracts/LUSDToken.sol /* * * Based upon OpenZeppelin's ERC20 contract: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol * * and their EIP2612 (ERC20Permit / ERC712) functionality: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/53516bc555a454862470e7860a9b5254db4d00f5/contracts/token/ERC20/ERC20Permit.sol * * * --- Functionality added specific to the LUSDToken --- * * 1) Transfer protection: blacklist of addresses that are invalid recipients (i.e. core Liquity contracts) in external * transfer() and transferFrom() calls. The purpose is to protect users from losing tokens by mistakenly sending LUSD directly to a Liquity * core contract, when they should rather call the right function. * * 2) sendToPool() and returnFromPool(): functions callable only Liquity core contracts, which move LUSD tokens between Liquity <-> user. */ contract LUSDToken is CheckContract, ILUSDToken, Ownable { using SafeMath for uint256; uint256 private _totalSupply; string internal constant _NAME = "xDollar Interverse Money"; string internal constant _SYMBOL = "XIM"; string internal constant _VERSION = "1"; uint8 internal constant _DECIMALS = 18; // --- Data for EIP2612 --- // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 private constant _PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); bytes32 private constant _TYPE_HASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f; // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; mapping(address => uint256) private _nonces; // User data for LUSD token mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; // --- Addresses --- mapping(address => bool) public troveManagerAddresses; mapping(address => bool) public stabilityPoolAddresses; mapping(address => bool) public borrowerOperationsAddresses; enum Functions { ADD_ADDRESSES_FOR_COLL, REMOVE_ADDRESSES_FOR_COLL } uint256 private constant _TIMELOCK = 1 days; mapping(Functions => uint256) public timelock; // --- Time lock modifier notLocked(Functions _fn) { require( timelock[_fn] != 1 && timelock[_fn] <= block.timestamp, "Function is timelocked" ); _; } //unlock timelock function unlockFunction(Functions _fn) public onlyOwner { timelock[_fn] = block.timestamp + _TIMELOCK; } //lock timelock function lockFunction(Functions _fn) public onlyOwner { timelock[_fn] = 1; } // --- Events --- event CollateralAdded( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ); event ColllateralRemoved( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ); constructor() public { bytes32 hashedName = keccak256(bytes(_NAME)); bytes32 hashedVersion = keccak256(bytes(_VERSION)); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = _chainID(); _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion); } function addAddressesForColl( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ) external override onlyOwner notLocked(Functions.ADD_ADDRESSES_FOR_COLL) { _requireCollateralNotExist( _troveManagerAddress, _stabilityPoolAddress, _borrowerOperationsAddress ); checkContract(_troveManagerAddress); checkContract(_stabilityPoolAddress); checkContract(_borrowerOperationsAddress); troveManagerAddresses[_troveManagerAddress] = true; stabilityPoolAddresses[_stabilityPoolAddress] = true; borrowerOperationsAddresses[_borrowerOperationsAddress] = true; emit CollateralAdded( _troveManagerAddress, _stabilityPoolAddress, _borrowerOperationsAddress ); timelock[Functions.ADD_ADDRESSES_FOR_COLL] = 1; } function removeAddressesForColl( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ) external override onlyOwner notLocked(Functions.REMOVE_ADDRESSES_FOR_COLL) { _requireCollateralExist( _troveManagerAddress, _stabilityPoolAddress, _borrowerOperationsAddress ); troveManagerAddresses[_troveManagerAddress] = false; stabilityPoolAddresses[_stabilityPoolAddress] = false; borrowerOperationsAddresses[_borrowerOperationsAddress] = false; emit ColllateralRemoved( _troveManagerAddress, _stabilityPoolAddress, _borrowerOperationsAddress ); timelock[Functions.REMOVE_ADDRESSES_FOR_COLL] = 1; } // --- Functions for intra-Liquity calls --- function mint(address _account, uint256 _amount) external override { _requireCallerIsBorrowerOperations(); _mint(_account, _amount); } function burn(address _account, uint256 _amount) external override { _requireCallerIsBOorTroveMorSP(); _burn(_account, _amount); } function sendToPool( address _sender, address _poolAddress, uint256 _amount ) external override { _requireCallerIsStabilityPool(); _transfer(_sender, _poolAddress, _amount); } function returnFromPool( address _poolAddress, address _receiver, uint256 _amount ) external override { _requireCallerIsTroveMorSP(); _transfer(_poolAddress, _receiver, _amount); } // --- External functions --- function totalSupply() external view override returns (uint256) { return _totalSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _requireValidRecipient(recipient); _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _requireValidRecipient(recipient); _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance") ); return true; } function increaseAllowance(address spender, uint256 addedValue) external override returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external override returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } // --- EIP 2612 Functionality --- function domainSeparator() public view override returns (bytes32) { if (_chainID() == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external override { require(deadline >= now, "LUSD: expired deadline"); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator(), keccak256( abi.encode(_PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner]++, deadline) ) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress == owner, "LUSD: invalid signature"); _approve(owner, spender, amount); } function nonces(address owner) external view override returns (uint256) { // FOR EIP 2612 return _nonces[owner]; } // --- Internal operations --- function _chainID() private pure returns (uint256 chainID) { assembly { chainID := chainid() } } function _buildDomainSeparator( bytes32 typeHash, bytes32 name, bytes32 version ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, name, version, _chainID(), address(this))); } // --- Internal operations --- // Warning: sanity checks (for sender and recipient) should have been done before calling these internal functions function _transfer( address sender, address recipient, uint256 amount ) internal { assert(sender != address(0)); assert(recipient != address(0)); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal { assert(account != address(0)); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal { assert(account != address(0)); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal { assert(owner != address(0)); assert(spender != address(0)); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } // --- 'require' functions --- function _requireValidRecipient(address _recipient) internal view { require( _recipient != address(0) && _recipient != address(this), "LUSD: Cannot transfer tokens directly to the LUSD token contract or the zero address" ); require( stabilityPoolAddresses[_recipient] != true && troveManagerAddresses[_recipient] != true && borrowerOperationsAddresses[_recipient] != true, "LUSD: Cannot transfer tokens directly to the StabilityPool, TroveManager or BorrowerOps" ); } function _requireCallerIsBorrowerOperations() internal view { require( borrowerOperationsAddresses[msg.sender] == true, "LUSDToken: Caller is not BorrowerOperations" ); } function _requireCallerIsBOorTroveMorSP() internal view { require( borrowerOperationsAddresses[msg.sender] == true || troveManagerAddresses[msg.sender] == true || stabilityPoolAddresses[msg.sender] == true, "LUSD: Caller is neither BorrowerOperations nor TroveManager nor StabilityPool" ); } function _requireCallerIsStabilityPool() internal view { require(stabilityPoolAddresses[msg.sender] == true, "LUSD: Caller is not the StabilityPool"); } function _requireCallerIsTroveMorSP() internal view { require( troveManagerAddresses[msg.sender] == true || stabilityPoolAddresses[msg.sender] == true, "LUSD: Caller is neither TroveManager nor StabilityPool" ); } function _requireCollateralNotExist( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ) internal view { require( troveManagerAddresses[_troveManagerAddress] == false && stabilityPoolAddresses[_stabilityPoolAddress] == false && borrowerOperationsAddresses[_borrowerOperationsAddress] == false, "LUSDToken: collateral already added." ); } function _requireCollateralExist( address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress ) internal view { require( troveManagerAddresses[_troveManagerAddress] == true && stabilityPoolAddresses[_stabilityPoolAddress] == true && borrowerOperationsAddresses[_borrowerOperationsAddress] == true, "LUSDToken: collateral does not exist." ); } // --- Optional functions --- function name() external view override returns (string memory) { return _NAME; } function symbol() external view override returns (string memory) { return _SYMBOL; } function decimals() external view override returns (uint8) { return _DECIMALS; } function version() external view override returns (string memory) { return _VERSION; } function permitTypeHash() external view override returns (bytes32) { return _PERMIT_TYPEHASH; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_troveManagerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_stabilityPoolAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_borrowerOperationsAddress","type":"address"}],"name":"CollateralAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_troveManagerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_stabilityPoolAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_borrowerOperationsAddress","type":"address"}],"name":"ColllateralRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"LUSDTokenBalanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_troveManagerAddress","type":"address"},{"internalType":"address","name":"_stabilityPoolAddress","type":"address"},{"internalType":"address","name":"_borrowerOperationsAddress","type":"address"}],"name":"addAddressesForColl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowerOperationsAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum LUSDToken.Functions","name":"_fn","type":"uint8"}],"name":"lockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"permitTypeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_troveManagerAddress","type":"address"},{"internalType":"address","name":"_stabilityPoolAddress","type":"address"},{"internalType":"address","name":"_borrowerOperationsAddress","type":"address"}],"name":"removeAddressesForColl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"returnFromPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_poolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stabilityPoolAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum LUSDToken.Functions","name":"","type":"uint8"}],"name":"timelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"troveManagerAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum LUSDToken.Functions","name":"_fn","type":"uint8"}],"name":"unlockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61010060405234801561001157600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3604080518082018252601881527f78446f6c6c617220496e7465727665727365204d6f6e65790000000000000000602091820152815180830190925260018252603160f81b9101527f672b68e6529792b059cf85e2fe1c77dbeb36957c01d68de7cd006f0d0d2c423960c08190527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660e08190526100f66001600160e01b0361013816565b60a05261012d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83836001600160e01b0361013c16565b6080525061019b9050565b4690565b60008383836101526001600160e01b0361013816565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b60805160a05160c05160e051611c2c620001d160003980611033525080611012525080610f98525080610fc85250611c2c6000f3fe608060405234801561001057600080fd5b506004361061019a5760003560e01c80638da5cb5b116100e4578063aa53099d11610092578063aa53099d1461052a578063b4fa3b981461054a578063bb997bac1461056a578063c17bae2a146105a0578063cd8b018d146105c0578063d505accf146105e6578063dd62ed3e14610637578063f698da25146106655761019a565b80638da5cb5b1461043a5780638f32d59b1461045e57806395d89b41146104665780639c44b4c81461046e5780639dc29fac146104a6578063a457c2d7146104d2578063a9059cbb146104fe5761019a565b8063308a54d81161014c578063308a54d814610312578063313ce56714610338578063395093511461035657806340c10f191461038257806354fd4d50146103ae5780636abc41b9146103b657806370a08231146103ee5780637ecebe00146104145761019a565b806306fdde031461019f57806307f978471461021c578063095ea7b31461025657806310ce43bd1461028257806318160ddd1461029c57806320c582be146102a457806323b872dd146102dc575b600080fd5b6101a761066d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e15781810151838201526020016101c9565b50505050905090810190601f16801561020e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102426004803603602081101561023257600080fd5b50356001600160a01b03166106a0565b604080519115158252519081900360200190f35b6102426004803603604081101561026c57600080fd5b506001600160a01b0381351690602001356106b5565b61028a6106cb565b60408051918252519081900360200190f35b61028a6106ef565b6102da600480360360608110156102ba57600080fd5b506001600160a01b038135811691602081013590911690604001356106f5565b005b610242600480360360608110156102f257600080fd5b506001600160a01b0381358116916020810135909116906040013561070d565b6102426004803603602081101561032857600080fd5b50356001600160a01b0316610785565b61034061079a565b6040805160ff9092168252519081900360200190f35b6102426004803603604081101561036c57600080fd5b506001600160a01b03813516906020013561079f565b6102da6004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107db565b6101a76107f1565b6102da600480360360608110156103cc57600080fd5b506001600160a01b03813581169160208101358216916040909101351661080c565b61028a6004803603602081101561040457600080fd5b50356001600160a01b03166109e7565b61028a6004803603602081101561042a57600080fd5b50356001600160a01b0316610a02565b610442610a1d565b604080516001600160a01b039092168252519081900360200190f35b610242610a2c565b6101a7610a3d565b6102da6004803603606081101561048457600080fd5b506001600160a01b038135811691602081013582169160409091013516610a5a565b6102da600480360360408110156104bc57600080fd5b506001600160a01b038135169060200135610bf3565b610242600480360360408110156104e857600080fd5b506001600160a01b038135169060200135610c05565b6102426004803603604081101561051457600080fd5b506001600160a01b038135169060200135610c5a565b6102da6004803603602081101561054057600080fd5b503560ff16610c70565b6102da6004803603602081101561056057600080fd5b503560ff16610cec565b6102da6004803603606081101561058057600080fd5b506001600160a01b03813581169160208101359091169060400135610d45565b61028a600480360360208110156105b657600080fd5b503560ff16610d4d565b610242600480360360208110156105d657600080fd5b50356001600160a01b0316610d5f565b6102da600480360360e08110156105fc57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610d74565b61028a6004803603604081101561064d57600080fd5b506001600160a01b0381358116916020013516610f69565b61028a610f94565b60408051808201909152601881527778446f6c6c617220496e7465727665727365204d6f6e657960401b60208201525b90565b60076020526000908152604090205460ff1681565b60006106c233848461105e565b50600192915050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990565b60015490565b6106fd6110e0565b610708838383611154565b505050565b600061071883611236565b610723848484611154565b61077b843361077685604051806060016040528060288152602001611abf602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919063ffffffff61134616565b61105e565b5060019392505050565b60056020526000908152604090205460ff1681565b601290565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916106c2918590610776908663ffffffff6113dd16565b6107e361143e565b6107ed8282611491565b5050565b6040805180820190915260018152603160f81b602082015290565b610814610a2c565b610853576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b600080805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7546001148015906108b85750426008600083600181111561089b57fe5b60018111156108a657fe5b81526020019081526020016000205411155b610902576040805162461bcd60e51b8152602060048201526016602482015275119d5b98dd1a5bdb881a5cc81d1a5b595b1bd8dad95960521b604482015290519081900360640190fd5b61090d848484611526565b610916846115c8565b61091f836115c8565b610928826115c8565b6001600160a01b038085166000818152600560209081526040808320805460ff1990811660019081179092558987168086526006855283862080548316841790559689168086526007855294839020805490911690911790558051938452908301939093528183015290517f0c39fe206ce07a947ee30551c3d7ec3eb73d2b6434cc6176177a9323844ed40b9181900360600190a1600160086000805b60018111156109d057fe5b815260208101919091526040016000205550505050565b6001600160a01b031660009081526003602052604090205490565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60408051808201909152600381526258494d60e81b602082015290565b610a62610a2c565b610aa1576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b6001600081905260086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f548114801590610b0757504260086000836001811115610aea57fe5b6001811115610af557fe5b81526020019081526020016000205411155b610b51576040805162461bcd60e51b8152602060048201526016602482015275119d5b98dd1a5bdb881a5cc81d1a5b595b1bd8dad95960521b604482015290519081900360640190fd5b610b5c848484611677565b6001600160a01b038085166000818152600560209081526040808320805460ff19908116909155888616808552600684528285208054831690559588168085526007845293829020805490911690558051938452908301939093528183015290517f807a08b1f57793f91980e4e4ccd765a7120c6c8604221f55b5b9108014c8593b9181900360600190a1600160086000826109c5565b610bfb611725565b6107ed82826117b6565b60006106c2338461077685604051806060016040528060258152602001611b7e602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919063ffffffff61134616565b6000610c6583611236565b6106c2338484611154565b610c78610a2c565b610cb7576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b62015180420160086000836001811115610ccd57fe5b6001811115610cd857fe5b815260208101919091526040016000205550565b610cf4610a2c565b610d33576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b600160086000836001811115610ccd57fe5b6106fd61186b565b60086020526000908152604090205481565b60066020526000908152604090205460ff1681565b42841015610dc2576040805162461bcd60e51b81526020600482015260166024820152754c5553443a206578706972656420646561646c696e6560501b604482015290519081900360640190fd5b6000610dcc610f94565b6001600160a01b03808a1660008181526002602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958e166060860152608085018d905260a085019590955260c08085018c90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff8a166101828501526101a284018990526101c284018890525194955090936101e280840193601f198301929081900390910190855afa158015610ee7573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b031614610f53576040805162461bcd60e51b81526020600482015260176024820152764c5553443a20696e76616c6964207369676e617475726560481b604482015290519081900360640190fd5b610f5e89898961105e565b505050505050505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60007f0000000000000000000000000000000000000000000000000000000000000000610fbf6118be565b1415610fec57507f000000000000000000000000000000000000000000000000000000000000000061069d565b6110577f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118c2565b905061069d565b6001600160a01b03831661106e57fe5b6001600160a01b03821661107e57fe5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b3360009081526005602052604090205460ff1615156001148061111757503360009081526006602052604090205460ff1615156001145b6111525760405162461bcd60e51b815260040180806020018281038252603681526020018061195b6036913960400191505060405180910390fd5b565b6001600160a01b03831661116457fe5b6001600160a01b03821661117457fe5b6111b7816040518060600160405280602681526020016119d7602691396001600160a01b038616600090815260036020526040902054919063ffffffff61134616565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546111ec908263ffffffff6113dd16565b6001600160a01b038084166000818152600360209081526040918290209490945580518581529051919392871692600080516020611b5e83398151915292918290030190a3505050565b6001600160a01b0381161580159061125757506001600160a01b0381163014155b6112925760405162461bcd60e51b8152600401808060200182810382526054815260200180611ba36054913960600191505060405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff1615156001148015906112de57506001600160a01b03811660009081526005602052604090205460ff161515600114155b801561130857506001600160a01b03811660009081526007602052604090205460ff161515600114155b6113435760405162461bcd60e51b8152600401808060200182810382526057815260200180611b076057913960600191505060405180910390fd5b50565b600081848411156113d55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561139a578181015183820152602001611382565b50505050905090810190601f1680156113c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611437576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3360009081526007602052604090205460ff1615156001146111525760405162461bcd60e51b815260040180806020018281038252602b815260200180611a94602b913960400191505060405180910390fd5b6001600160a01b0382166114a157fe5b6001546114b4908263ffffffff6113dd16565b6001556001600160a01b0382166000908152600360205260409020546114e0908263ffffffff6113dd16565b6001600160a01b0383166000818152600360209081526040808320949094558351858152935192939192600080516020611b5e8339815191529281900390910190a35050565b6001600160a01b03831660009081526005602052604090205460ff1615801561156857506001600160a01b03821660009081526006602052604090205460ff16155b801561158d57506001600160a01b03811660009081526007602052604090205460ff16155b6107085760405162461bcd60e51b81526004018080602001828103825260248152602001806119916024913960400191505060405180910390fd5b6001600160a01b038116611623576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e742063616e6e6f74206265207a65726f20616464726573730000604482015290519081900360640190fd5b803b806107ed576040805162461bcd60e51b815260206004820181905260248201527f4163636f756e7420636f64652073697a652063616e6e6f74206265207a65726f604482015290519081900360640190fd5b6001600160a01b03831660009081526005602052604090205460ff16151560011480156116c157506001600160a01b03821660009081526006602052604090205460ff1615156001145b80156116ea57506001600160a01b03811660009081526007602052604090205460ff1615156001145b6107085760405162461bcd60e51b81526004018080602001828103825260258152602001806119fd6025913960400191505060405180910390fd5b3360009081526007602052604090205460ff1615156001148061175c57503360009081526005602052604090205460ff1615156001145b8061177b57503360009081526006602052604090205460ff1615156001145b6111525760405162461bcd60e51b815260040180806020018281038252604d815260200180611a22604d913960600191505060405180910390fd5b6001600160a01b0382166117c657fe5b611809816040518060600160405280602281526020016119b5602291396001600160a01b038516600090815260036020526040902054919063ffffffff61134616565b6001600160a01b038316600090815260036020526040902055600154611835908263ffffffff61191816565b6001556040805182815290516000916001600160a01b03851691600080516020611b5e8339815191529181900360200190a35050565b3360009081526006602052604090205460ff1615156001146111525760405162461bcd60e51b8152600401808060200182810382526025815260200180611a6f6025913960400191505060405180910390fd5b4690565b60008383836118cf6118be565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b600061143783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061134656fe4c5553443a2043616c6c6572206973206e6569746865722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c4c555344546f6b656e3a20636f6c6c61746572616c20616c72656164792061646465642e45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c555344546f6b656e3a20636f6c6c61746572616c20646f6573206e6f742065786973742e4c5553443a2043616c6c6572206973206e65697468657220426f72726f7765724f7065726174696f6e73206e6f722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c4c5553443a2043616c6c6572206973206e6f74207468652053746162696c697479506f6f6c4c555344546f6b656e3a2043616c6c6572206973206e6f7420426f72726f7765724f7065726174696f6e7345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c5553443a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f207468652053746162696c697479506f6f6c2c2054726f76654d616e61676572206f7220426f72726f7765724f7073ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4c5553443a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f20746865204c55534420746f6b656e20636f6e7472616374206f7220746865207a65726f2061646472657373a26469706673582212200c87aa3e4c4b5f7e3c78197018cdcbdb45bcaaa48e58477a38b323a0dfbe4d5a64736f6c634300060b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061019a5760003560e01c80638da5cb5b116100e4578063aa53099d11610092578063aa53099d1461052a578063b4fa3b981461054a578063bb997bac1461056a578063c17bae2a146105a0578063cd8b018d146105c0578063d505accf146105e6578063dd62ed3e14610637578063f698da25146106655761019a565b80638da5cb5b1461043a5780638f32d59b1461045e57806395d89b41146104665780639c44b4c81461046e5780639dc29fac146104a6578063a457c2d7146104d2578063a9059cbb146104fe5761019a565b8063308a54d81161014c578063308a54d814610312578063313ce56714610338578063395093511461035657806340c10f191461038257806354fd4d50146103ae5780636abc41b9146103b657806370a08231146103ee5780637ecebe00146104145761019a565b806306fdde031461019f57806307f978471461021c578063095ea7b31461025657806310ce43bd1461028257806318160ddd1461029c57806320c582be146102a457806323b872dd146102dc575b600080fd5b6101a761066d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101e15781810151838201526020016101c9565b50505050905090810190601f16801561020e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102426004803603602081101561023257600080fd5b50356001600160a01b03166106a0565b604080519115158252519081900360200190f35b6102426004803603604081101561026c57600080fd5b506001600160a01b0381351690602001356106b5565b61028a6106cb565b60408051918252519081900360200190f35b61028a6106ef565b6102da600480360360608110156102ba57600080fd5b506001600160a01b038135811691602081013590911690604001356106f5565b005b610242600480360360608110156102f257600080fd5b506001600160a01b0381358116916020810135909116906040013561070d565b6102426004803603602081101561032857600080fd5b50356001600160a01b0316610785565b61034061079a565b6040805160ff9092168252519081900360200190f35b6102426004803603604081101561036c57600080fd5b506001600160a01b03813516906020013561079f565b6102da6004803603604081101561039857600080fd5b506001600160a01b0381351690602001356107db565b6101a76107f1565b6102da600480360360608110156103cc57600080fd5b506001600160a01b03813581169160208101358216916040909101351661080c565b61028a6004803603602081101561040457600080fd5b50356001600160a01b03166109e7565b61028a6004803603602081101561042a57600080fd5b50356001600160a01b0316610a02565b610442610a1d565b604080516001600160a01b039092168252519081900360200190f35b610242610a2c565b6101a7610a3d565b6102da6004803603606081101561048457600080fd5b506001600160a01b038135811691602081013582169160409091013516610a5a565b6102da600480360360408110156104bc57600080fd5b506001600160a01b038135169060200135610bf3565b610242600480360360408110156104e857600080fd5b506001600160a01b038135169060200135610c05565b6102426004803603604081101561051457600080fd5b506001600160a01b038135169060200135610c5a565b6102da6004803603602081101561054057600080fd5b503560ff16610c70565b6102da6004803603602081101561056057600080fd5b503560ff16610cec565b6102da6004803603606081101561058057600080fd5b506001600160a01b03813581169160208101359091169060400135610d45565b61028a600480360360208110156105b657600080fd5b503560ff16610d4d565b610242600480360360208110156105d657600080fd5b50356001600160a01b0316610d5f565b6102da600480360360e08110156105fc57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610d74565b61028a6004803603604081101561064d57600080fd5b506001600160a01b0381358116916020013516610f69565b61028a610f94565b60408051808201909152601881527778446f6c6c617220496e7465727665727365204d6f6e657960401b60208201525b90565b60076020526000908152604090205460ff1681565b60006106c233848461105e565b50600192915050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990565b60015490565b6106fd6110e0565b610708838383611154565b505050565b600061071883611236565b610723848484611154565b61077b843361077685604051806060016040528060288152602001611abf602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919063ffffffff61134616565b61105e565b5060019392505050565b60056020526000908152604090205460ff1681565b601290565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916106c2918590610776908663ffffffff6113dd16565b6107e361143e565b6107ed8282611491565b5050565b6040805180820190915260018152603160f81b602082015290565b610814610a2c565b610853576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b600080805260086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7546001148015906108b85750426008600083600181111561089b57fe5b60018111156108a657fe5b81526020019081526020016000205411155b610902576040805162461bcd60e51b8152602060048201526016602482015275119d5b98dd1a5bdb881a5cc81d1a5b595b1bd8dad95960521b604482015290519081900360640190fd5b61090d848484611526565b610916846115c8565b61091f836115c8565b610928826115c8565b6001600160a01b038085166000818152600560209081526040808320805460ff1990811660019081179092558987168086526006855283862080548316841790559689168086526007855294839020805490911690911790558051938452908301939093528183015290517f0c39fe206ce07a947ee30551c3d7ec3eb73d2b6434cc6176177a9323844ed40b9181900360600190a1600160086000805b60018111156109d057fe5b815260208101919091526040016000205550505050565b6001600160a01b031660009081526003602052604090205490565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60408051808201909152600381526258494d60e81b602082015290565b610a62610a2c565b610aa1576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b6001600081905260086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f548114801590610b0757504260086000836001811115610aea57fe5b6001811115610af557fe5b81526020019081526020016000205411155b610b51576040805162461bcd60e51b8152602060048201526016602482015275119d5b98dd1a5bdb881a5cc81d1a5b595b1bd8dad95960521b604482015290519081900360640190fd5b610b5c848484611677565b6001600160a01b038085166000818152600560209081526040808320805460ff19908116909155888616808552600684528285208054831690559588168085526007845293829020805490911690558051938452908301939093528183015290517f807a08b1f57793f91980e4e4ccd765a7120c6c8604221f55b5b9108014c8593b9181900360600190a1600160086000826109c5565b610bfb611725565b6107ed82826117b6565b60006106c2338461077685604051806060016040528060258152602001611b7e602591393360009081526004602090815260408083206001600160a01b038d168452909152902054919063ffffffff61134616565b6000610c6583611236565b6106c2338484611154565b610c78610a2c565b610cb7576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b62015180420160086000836001811115610ccd57fe5b6001811115610cd857fe5b815260208101919091526040016000205550565b610cf4610a2c565b610d33576040805162461bcd60e51b81526020600482018190526024820152600080516020611ae7833981519152604482015290519081900360640190fd5b600160086000836001811115610ccd57fe5b6106fd61186b565b60086020526000908152604090205481565b60066020526000908152604090205460ff1681565b42841015610dc2576040805162461bcd60e51b81526020600482015260166024820152754c5553443a206578706972656420646561646c696e6560501b604482015290519081900360640190fd5b6000610dcc610f94565b6001600160a01b03808a1660008181526002602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958e166060860152608085018d905260a085019590955260c08085018c90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff8a166101828501526101a284018990526101c284018890525194955090936101e280840193601f198301929081900390910190855afa158015610ee7573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b031614610f53576040805162461bcd60e51b81526020600482015260176024820152764c5553443a20696e76616c6964207369676e617475726560481b604482015290519081900360640190fd5b610f5e89898961105e565b505050505050505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60007f0000000000000000000000000000000000000000000000000000000000000001610fbf6118be565b1415610fec57507fe074b3e4e5fac3f2682f65c9e5c455da69c676624cea946eb1f55f14de4c1b8661069d565b6110577f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f672b68e6529792b059cf85e2fe1c77dbeb36957c01d68de7cd006f0d0d2c42397fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66118c2565b905061069d565b6001600160a01b03831661106e57fe5b6001600160a01b03821661107e57fe5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b3360009081526005602052604090205460ff1615156001148061111757503360009081526006602052604090205460ff1615156001145b6111525760405162461bcd60e51b815260040180806020018281038252603681526020018061195b6036913960400191505060405180910390fd5b565b6001600160a01b03831661116457fe5b6001600160a01b03821661117457fe5b6111b7816040518060600160405280602681526020016119d7602691396001600160a01b038616600090815260036020526040902054919063ffffffff61134616565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546111ec908263ffffffff6113dd16565b6001600160a01b038084166000818152600360209081526040918290209490945580518581529051919392871692600080516020611b5e83398151915292918290030190a3505050565b6001600160a01b0381161580159061125757506001600160a01b0381163014155b6112925760405162461bcd60e51b8152600401808060200182810382526054815260200180611ba36054913960600191505060405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff1615156001148015906112de57506001600160a01b03811660009081526005602052604090205460ff161515600114155b801561130857506001600160a01b03811660009081526007602052604090205460ff161515600114155b6113435760405162461bcd60e51b8152600401808060200182810382526057815260200180611b076057913960600191505060405180910390fd5b50565b600081848411156113d55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561139a578181015183820152602001611382565b50505050905090810190601f1680156113c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611437576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3360009081526007602052604090205460ff1615156001146111525760405162461bcd60e51b815260040180806020018281038252602b815260200180611a94602b913960400191505060405180910390fd5b6001600160a01b0382166114a157fe5b6001546114b4908263ffffffff6113dd16565b6001556001600160a01b0382166000908152600360205260409020546114e0908263ffffffff6113dd16565b6001600160a01b0383166000818152600360209081526040808320949094558351858152935192939192600080516020611b5e8339815191529281900390910190a35050565b6001600160a01b03831660009081526005602052604090205460ff1615801561156857506001600160a01b03821660009081526006602052604090205460ff16155b801561158d57506001600160a01b03811660009081526007602052604090205460ff16155b6107085760405162461bcd60e51b81526004018080602001828103825260248152602001806119916024913960400191505060405180910390fd5b6001600160a01b038116611623576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e742063616e6e6f74206265207a65726f20616464726573730000604482015290519081900360640190fd5b803b806107ed576040805162461bcd60e51b815260206004820181905260248201527f4163636f756e7420636f64652073697a652063616e6e6f74206265207a65726f604482015290519081900360640190fd5b6001600160a01b03831660009081526005602052604090205460ff16151560011480156116c157506001600160a01b03821660009081526006602052604090205460ff1615156001145b80156116ea57506001600160a01b03811660009081526007602052604090205460ff1615156001145b6107085760405162461bcd60e51b81526004018080602001828103825260258152602001806119fd6025913960400191505060405180910390fd5b3360009081526007602052604090205460ff1615156001148061175c57503360009081526005602052604090205460ff1615156001145b8061177b57503360009081526006602052604090205460ff1615156001145b6111525760405162461bcd60e51b815260040180806020018281038252604d815260200180611a22604d913960600191505060405180910390fd5b6001600160a01b0382166117c657fe5b611809816040518060600160405280602281526020016119b5602291396001600160a01b038516600090815260036020526040902054919063ffffffff61134616565b6001600160a01b038316600090815260036020526040902055600154611835908263ffffffff61191816565b6001556040805182815290516000916001600160a01b03851691600080516020611b5e8339815191529181900360200190a35050565b3360009081526006602052604090205460ff1615156001146111525760405162461bcd60e51b8152600401808060200182810382526025815260200180611a6f6025913960400191505060405180910390fd5b4690565b60008383836118cf6118be565b6040805160208082019690965280820194909452606084019290925260808301523060a0808401919091528151808403909101815260c090920190528051910120949350505050565b600061143783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061134656fe4c5553443a2043616c6c6572206973206e6569746865722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c4c555344546f6b656e3a20636f6c6c61746572616c20616c72656164792061646465642e45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c555344546f6b656e3a20636f6c6c61746572616c20646f6573206e6f742065786973742e4c5553443a2043616c6c6572206973206e65697468657220426f72726f7765724f7065726174696f6e73206e6f722054726f76654d616e61676572206e6f722053746162696c697479506f6f6c4c5553443a2043616c6c6572206973206e6f74207468652053746162696c697479506f6f6c4c555344546f6b656e3a2043616c6c6572206973206e6f7420426f72726f7765724f7065726174696f6e7345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724c5553443a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f207468652053746162696c697479506f6f6c2c2054726f76654d616e61676572206f7220426f72726f7765724f7073ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4c5553443a2043616e6e6f74207472616e7366657220746f6b656e73206469726563746c7920746f20746865204c55534420746f6b656e20636f6e7472616374206f7220746865207a65726f2061646472657373a26469706673582212200c87aa3e4c4b5f7e3c78197018cdcbdb45bcaaa48e58477a38b323a0dfbe4d5a64736f6c634300060b0033
Deployed Bytecode Sourcemap
95758:14044:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109272:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;97348:59;;;;;;;;;;;;;;;;-1:-1:-1;97348:59:0;-1:-1:-1;;;;;97348:59:0;;:::i;:::-;;;;;;;;;;;;;;;;;;102096:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;102096:161:0;;;;;;;;:::i;109690:109::-;;;:::i;:::-;;;;;;;;;;;;;;;;101485:102;;;:::i;101205:235::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;101205:235:0;;;;;;;;;;;;;;;;;:::i;:::-;;102265:439;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;102265:439:0;;;;;;;;;;;;;;;;;:::i;97227:53::-;;;;;;;;;;;;;;;;-1:-1:-1;97227:53:0;-1:-1:-1;;;;;97227:53:0;;:::i;109480:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;102712:249;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;102712:249:0;;;;;;;;:::i;100641:157::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;100641:157:0;;;;;;;;:::i;109582:100::-;;;:::i;98788:959::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;98788:959:0;;;;;;;;;;;;;;;;;;;:::i;101595:121::-;;;;;;;;;;;;;;;;-1:-1:-1;101595:121:0;-1:-1:-1;;;;;101595:121:0;;:::i;104473:137::-;;;;;;;;;;;;;;;;-1:-1:-1;104473:137:0;-1:-1:-1;;;;;104473:137:0;;:::i;13709:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;13709:79:0;;;;;;;;;;;;;;14075:92;;;:::i;109374:98::-;;;:::i;99755:826::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;99755:826:0;;;;;;;;;;;;;;;;;;;:::i;100806:153::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;100806:153:0;;;;;;;;:::i;102969:399::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;102969:399:0;;;;;;;;:::i;101724:211::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;101724:211:0;;;;;;;;:::i;97830:118::-;;;;;;;;;;;;;;;;-1:-1:-1;97830:118:0;;;;:::i;97975:90::-;;;;;;;;;;;;;;;;-1:-1:-1;97975:90:0;;;;:::i;100967:230::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;100967:230:0;;;;;;;;;;;;;;;;;:::i;97542:45::-;;;;;;;;;;;;;;;;-1:-1:-1;97542:45:0;;;;:::i;97287:54::-;;;;;;;;;;;;;;;;-1:-1:-1;97287:54:0;-1:-1:-1;;;;;97287:54:0;;:::i;103707:758::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;103707:758:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;101943:145::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;101943:145:0;;;;;;;;;;:::i;103417:282::-;;;:::i;109272:94::-;109353:5;;;;;;;;;;;;-1:-1:-1;;;109353:5:0;;;;109272:94;;:::o;97348:59::-;;;;;;;;;;;;;;;:::o;102096:161::-;102173:4;102190:37;102199:10;102211:7;102220:6;102190:8;:37::i;:::-;-1:-1:-1;102245:4:0;102096:161;;;;:::o;109690:109::-;96291:66;109690:109;:::o;101485:102::-;101567:12;;101485:102;:::o;101205:235::-;101350:28;:26;:28::i;:::-;101389:43;101399:12;101413:9;101424:7;101389:9;:43::i;:::-;101205:235;;;:::o;102265:439::-;102399:4;102416:33;102439:9;102416:22;:33::i;:::-;102460:36;102470:6;102478:9;102489:6;102460:9;:36::i;:::-;102507:167;102530:6;102551:10;102576:87;102612:6;102576:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;102576:19:0;;;;;;:11;:19;;;;;;;;102596:10;102576:31;;;;;;;;;:87;;:35;:87;:::i;:::-;102507:8;:167::i;:::-;-1:-1:-1;102692:4:0;102265:439;;;;;:::o;97227:53::-;;;;;;;;;;;;;;;:::o;109480:94::-;96087:2;109480:94;:::o;102712:249::-;102861:10;102830:4;102882:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;102882:32:0;;;;;;;;;;102830:4;;102852:79;;102873:7;;102882:48;;102919:10;102882:48;:36;:48;:::i;100641:157::-;100719:36;:34;:36::i;:::-;100766:24;100772:8;100782:7;100766:5;:24::i;:::-;100641:157;;:::o;109582:100::-;109666:8;;;;;;;;;;;;-1:-1:-1;;;109666:8:0;;;;109582:100;:::o;98788:959::-;13921:9;:7;:9::i;:::-;13913:54;;;;;-1:-1:-1;;;13913:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13913:54:0;;;;;;;;;;;;;;;98986:32:::1;97681:13:::0;;;:8:::1;:13;::::0;;;97698:1:::1;97681:18;::::0;::::1;::::0;:54:::1;;;97720:15;97703:8;:13;97712:3;97703:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:32;;97681:54;97663:118;;;::::0;;-1:-1:-1;;;97663:118:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;97663:118:0;;;;;;;;;;;;;::::1;;99031:149:::2;99072:20;99107:21;99143:26;99031;:149::i;:::-;99191:35;99205:20;99191:13;:35::i;:::-;99237:36;99251:21;99237:13;:36::i;:::-;99284:41;99298:26;99284:13;:41::i;:::-;-1:-1:-1::0;;;;;99338:43:0;;::::2;;::::0;;;:21:::2;:43;::::0;;;;;;;:50;;-1:-1:-1;;99338:50:0;;::::2;99384:4;99338:50:::0;;::::2;::::0;;;99399:45;;::::2;::::0;;;:22:::2;:45:::0;;;;;:52;;;::::2;::::0;::::2;::::0;;99462:55;;::::2;::::0;;;:27:::2;:55:::0;;;;;;:62;;;;::::2;::::0;;::::2;::::0;;99542:138;;;;;;;::::2;::::0;;;;;;;;;;::::2;::::0;;;;;;;::::2;99738:1;99693:8;:42;::::0;::::2;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;99693:42:0;:46;-1:-1:-1;;;;98788:959:0:o;101595:121::-;-1:-1:-1;;;;;101690:18:0;101663:7;101690:18;;;:9;:18;;;;;;;101595:121::o;104473:137::-;-1:-1:-1;;;;;104588:14:0;104536:7;104588:14;;;:7;:14;;;;;;;104473:137::o;13709:79::-;13747:7;13774:6;-1:-1:-1;;;;;13774:6:0;13709:79;:::o;14075:92::-;14115:4;14153:6;-1:-1:-1;;;;;14153:6:0;14139:10;:20;;14075:92::o;109374:98::-;109457:7;;;;;;;;;;;;-1:-1:-1;;;109457:7:0;;;;109374:98;:::o;99755:826::-;13921:9;:7;:9::i;:::-;13913:54;;;;;-1:-1:-1;;;13913:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13913:54:0;;;;;;;;;;;;;;;99956:35:::1;97681:13;::::0;;;:8:::1;:13;::::0;;;:18;::::1;::::0;::::1;::::0;:54:::1;;;97720:15;97703:8;:13;97712:3;97703:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:32;;97681:54;97663:118;;;::::0;;-1:-1:-1;;;97663:118:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;97663:118:0;;;;;;;;;;;;;::::1;;100004:146:::2;100042:20;100077:21;100113:26;100004:23;:146::i;:::-;-1:-1:-1::0;;;;;100163:43:0;;::::2;100209:5;100163:43:::0;;;:21:::2;:43;::::0;;;;;;;:51;;-1:-1:-1;;100163:51:0;;::::2;::::0;;;100225:45;;::::2;::::0;;;:22:::2;:45:::0;;;;;:53;;;::::2;::::0;;100289:55;;::::2;::::0;;;:27:::2;:55:::0;;;;;;:63;;;;::::2;::::0;;100370:141;;;;;;;::::2;::::0;;;;;;;;;;::::2;::::0;;;;;;;::::2;100572:1;100524:8;:45;100572:1:::0;100524:45:::2;::::0;100806:153;100884:32;:30;:32::i;:::-;100927:24;100933:8;100943:7;100927:5;:24::i;102969:399::-;103092:4;103114:224;103137:10;103162:7;103184:143;103239:15;103184:143;;;;;;;;;;;;;;;;;103196:10;103184:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;103184:32:0;;;;;;;;;;;:143;;:36;:143;:::i;101724:211::-;101804:4;101821:33;101844:9;101821:22;:33::i;:::-;101865:40;101875:10;101887:9;101898:6;101865:9;:40::i;97830:118::-;13921:9;:7;:9::i;:::-;13913:54;;;;;-1:-1:-1;;;13913:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13913:54:0;;;;;;;;;;;;;;;97529:6:::1;97913:15;:27;97897:8;:13;97906:3;97897:13;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;97897:13:0;:43;-1:-1:-1;97830:118:0:o;97975:90::-;13921:9;:7;:9::i;:::-;13913:54;;;;;-1:-1:-1;;;13913:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13913:54:0;;;;;;;;;;;;;;;98056:1:::1;98040:8;:13;98049:3;98040:13;;;;;;;100967:230:::0;101106:31;:29;:31::i;97542:45::-;;;;;;;;;;;;;:::o;97287:54::-;;;;;;;;;;;;;;;:::o;103707:758::-;103939:3;103927:8;:15;;103919:50;;;;;-1:-1:-1;;;103919:50:0;;;;;;;;;;;;-1:-1:-1;;;103919:50:0;;;;;;;;;;;;;;;103980:14;104085:17;:15;:17::i;:::-;-1:-1:-1;;;;;104206:14:0;;;104164:16;104206:14;;;:7;:14;;;;;;;;:16;;;;;;;;;104153:80;;96291:66;104153:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104121:131;;;;;;-1:-1:-1;;;104021:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103997:281;;;;;;;;;104316:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;103997:281;;-1:-1:-1;104164:16:0;;104316:26;;;;;-1:-1:-1;;104316:26:0;;;;;;;;;;;104206:16;104316:26;;;;;;;;;;;;;;;;;;;;;;;104289:53;;104381:5;-1:-1:-1;;;;;104361:25:0;:16;-1:-1:-1;;;;;104361:25:0;;104353:61;;;;;-1:-1:-1;;;104353:61:0;;;;;;;;;;;;-1:-1:-1;;;104353:61:0;;;;;;;;;;;;;;;104425:32;104434:5;104441:7;104450:6;104425:8;:32::i;:::-;103707:758;;;;;;;;;:::o;101943:145::-;-1:-1:-1;;;;;102053:18:0;;;102026:7;102053:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;101943:145::o;103417:282::-;103474:7;103512:16;103498:10;:8;:10::i;:::-;:30;103494:198;;;-1:-1:-1;103552:24:0;103545:31;;103494:198;103616:64;96516:66;103650:12;103664:15;103616:21;:64::i;:::-;103609:71;;;;106235:292;-1:-1:-1;;;;;106362:19:0;;106355:27;;;;-1:-1:-1;;;;;106400:21:0;;106393:29;;;;-1:-1:-1;;;;;106435:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;106487:32;;;;;;;;;;;;;;;;;106235:292;;;:::o;107958:262::-;108065:10;108043:33;;;;:21;:33;;;;;;;;:41;;:33;:41;;:87;;-1:-1:-1;108111:10:0;108088:34;;;;:22;:34;;;;;;;;:42;;:34;:42;108043:87;108021:191;;;;-1:-1:-1;;;108021:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107958:262::o;105206:423::-;-1:-1:-1;;;;;105337:20:0;;105330:28;;;;-1:-1:-1;;;;;105376:23:0;;105369:31;;;;105433:71;105455:6;105433:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;105433:17:0;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;105413:17:0;;;;;;;:9;:17;;;;;;:91;;;;105538:20;;;;;;;:32;;105563:6;105538:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;105515:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;105586:35;;;;;;;105515:20;;105586:35;;;;-1:-1:-1;;;;;;;;;;;105586:35:0;;;;;;;;105206:423;;;:::o;106573:594::-;-1:-1:-1;;;;;106672:24:0;;;;;;:55;;-1:-1:-1;;;;;;106700:27:0;;106722:4;106700:27;;106672:55;106650:189;;;;-1:-1:-1;;;106650:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;106872:34:0;;;;;;:22;:34;;;;;;;;:42;;:34;:42;;;;:104;;-1:-1:-1;;;;;;106935:33:0;;;;;;:21;:33;;;;;;;;:41;;:33;:41;;106872:104;:172;;;;-1:-1:-1;;;;;;106997:39:0;;;;;;:27;:39;;;;;;;;:47;;:39;:47;;106872:172;106850:309;;;;-1:-1:-1;;;106850:309:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;106573:594;:::o;9016:192::-;9102:7;9138:12;9130:6;;;;9122:29;;;;-1:-1:-1;;;9122:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9174:5:0;;;9016:192::o;8087:181::-;8145:7;8177:5;;;8201:6;;;;8193:46;;;;;-1:-1:-1;;;8193:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:1;8087:181;-1:-1:-1;;;8087:181:0:o;107175:219::-;107296:10;107268:39;;;;:27;:39;;;;;;;;:47;;:39;:47;107246:140;;;;-1:-1:-1;;;107246:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;105637:272;-1:-1:-1;;;;;105712:21:0;;105705:29;;;;105762:12;;:24;;105779:6;105762:24;:16;:24;:::i;:::-;105747:12;:39;-1:-1:-1;;;;;105818:18:0;;;;;;:9;:18;;;;;;:30;;105841:6;105818:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;105797:18:0;;;;;;:9;:18;;;;;;;;:51;;;;105864:37;;;;;;;105797:18;;;;-1:-1:-1;;;;;;;;;;;105864:37:0;;;;;;;;;105637:272;;:::o;108228:498::-;-1:-1:-1;;;;;108442:43:0;;;;;;:21;:43;;;;;;;;:52;;;:127;;-1:-1:-1;;;;;;108515:45:0;;;;;;:22;:45;;;;;;;;:54;108442:127;:212;;;;-1:-1:-1;;;;;;108590:55:0;;;;;;:27;:55;;;;;;;;:64;108442:212;108420:298;;;;-1:-1:-1;;;108420:298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15061:337;-1:-1:-1;;;;;15135:22:0;;15127:65;;;;;-1:-1:-1;;;15127:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15304:21;;15345:8;15337:53;;;;;-1:-1:-1;;;15337:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;108734:493;-1:-1:-1;;;;;108945:43:0;;;;;;:21;:43;;;;;;;;:51;;:43;:51;:125;;;;-1:-1:-1;;;;;;109017:45:0;;;;;;:22;:45;;;;;;;;:53;;:45;:53;108945:125;:209;;;;-1:-1:-1;;;;;;109091:55:0;;;;;;:27;:55;;;;;;;;:63;;:55;:63;108945:209;108923:296;;;;-1:-1:-1;;;108923:296:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107402:374;107519:10;107491:39;;;;:27;:39;;;;;;;;:47;;:39;:47;;:109;;-1:-1:-1;107581:10:0;107559:33;;;;:21;:33;;;;;;;;:41;;:33;:41;107491:109;:172;;;-1:-1:-1;107644:10:0;107621:34;;;;:22;:34;;;;;;;;:42;;:34;:42;107491:172;107469:299;;;;-1:-1:-1;;;107469:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;105917:310;-1:-1:-1;;;;;105992:21:0;;105985:29;;;;106048:68;106071:6;106048:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;106048:18:0;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;106027:18:0;;;;;;:9;:18;;;;;:89;106142:12;;:24;;106159:6;106142:24;:16;:24;:::i;:::-;106127:12;:39;106182:37;;;;;;;;106208:1;;-1:-1:-1;;;;;106182:37:0;;;-1:-1:-1;;;;;;;;;;;106182:37:0;;;;;;;;105917:310;;:::o;107784:166::-;107881:10;107858:34;;;;:22;:34;;;;;;;;:42;;:34;:42;107850:92;;;;-1:-1:-1;;;107850:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104656:132;104761:9;;104735:46::o;104796:244::-;104932:7;104980:8;104990:4;104996:7;105005:10;:8;:10::i;:::-;104969:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;105025:4;104969:62;;;;;;;;;;;;;;;;;;;;;;;;104959:73;;;;;;104796:244;-1:-1:-1;;;;104796:244:0:o;8543:136::-;8601:7;8628:43;8632:1;8635;8628:43;;;;;;;;;;;;;;;;;:3;:43::i
Swarm Source
ipfs://0c87aa3e4c4b5f7e3c78197018cdcbdb45bcaaa48e58477a38b323a0dfbe4d5a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.