{"id":"82800a6ed8918888e7280352cfd7d219","_format":"hh-sol-build-info-1","solcVersion":"0.8.28","solcLongVersion":"0.8.28+commit.7893614a","input":{"language":"Solidity","sources":{"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"contracts/TokenPurchase.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.22;\n\nimport {Ownable} from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @title TokenPurchase\n * @dev Contract providing purchase functionality for tokens with price set by admin\n */\ncontract TokenPurchase is Ownable {\n    IERC20Metadata public token; // Token contract interface to be sold\n    IERC20Metadata public paymentToken; // Token used for payment (if address(0), then native currency is used)\n    uint256 public currentPrice; // Current price (in 10**18 format, 1 = 10**18)\n    address public paymentReceiver; // Address to receive payments\n    uint256 public minPurchaseAmount; // Minimum token amount that can be purchased\n\n    // Price update event\n    event PriceUpdated(uint256 newPrice);\n    // Token purchase event\n    event TokensPurchased(\n        address indexed buyer,\n        uint256 amount,\n        uint256 totalCost\n    );\n    // Minimum purchase amount update event\n    event MinPurchaseAmountUpdated(uint256 newMinAmount);\n\n    /**\n     * @dev Constructor\n     * @param _initialOwner Initial admin address\n     * @param _initialPaymentReceiver Initial payment receiver address\n     * @param _token Token to be sold (can be address(0) to set later)\n     * @param _paymentToken Token used for payment (address(0) for native currency)\n     * @param _initialPrice Initial price (can be 0 to set later)\n     */\n    constructor(\n        address _initialOwner,\n        address _initialPaymentReceiver,\n        address _token,\n        address _paymentToken,\n        uint256 _initialPrice\n    ) Ownable(_initialOwner) {\n        require(\n            _initialPaymentReceiver != address(0),\n            \"TokenPurchase: Payment receiver cannot be zero address\"\n        );\n        paymentReceiver = _initialPaymentReceiver;\n\n        // Set token to be sold if provided\n        if (_token != address(0)) {\n            token = IERC20Metadata(_token);\n        }\n\n        // Set payment token if provided (address(0) means use native currency)\n        if (_paymentToken != address(0)) {\n            paymentToken = IERC20Metadata(_paymentToken);\n        }\n\n        // Set initial price if provided\n        if (_initialPrice > 0) {\n            currentPrice = _initialPrice;\n            emit PriceUpdated(_initialPrice);\n        }\n\n        // Default minimum purchase amount set to 0\n        minPurchaseAmount = 0;\n    }\n\n    /**\n     * @dev Set token contract address\n     * @param _token New token address\n     */\n    function setToken(address _token) external onlyOwner {\n        require(\n            _token != address(0),\n            \"TokenPurchase: Token cannot be zero address\"\n        );\n        token = IERC20Metadata(_token);\n    }\n\n    /**\n     * @dev Set payment token address\n     * @param _paymentToken New payment token address (address(0) for native currency)\n     */\n    function setPaymentToken(address _paymentToken) external onlyOwner {\n        // address(0) is allowed for native currency\n        if (_paymentToken != address(0)) {\n            paymentToken = IERC20Metadata(_paymentToken);\n        } else {\n            paymentToken = IERC20Metadata(address(0));\n        }\n    }\n\n    /**\n     * @dev Set payment receiver address\n     * @param _paymentReceiver New payment receiver address\n     */\n    function setPaymentReceiver(address _paymentReceiver) external onlyOwner {\n        require(\n            _paymentReceiver != address(0),\n            \"TokenPurchase: Payment receiver cannot be zero address\"\n        );\n        paymentReceiver = _paymentReceiver;\n    }\n\n    /**\n     * @dev Set the current price\n     * @param _price New price (in 10**18 format, 1 = 10**18)\n     */\n    function setPrice(uint256 _price) external onlyOwner {\n        require(_price > 0, \"TokenPurchase: Price must be greater than zero\");\n        currentPrice = _price;\n        emit PriceUpdated(_price);\n    }\n\n    /**\n     * @dev Set the minimum purchase amount\n     * @param _minAmount New minimum purchase amount\n     */\n    function setMinPurchaseAmount(uint256 _minAmount) external onlyOwner {\n        minPurchaseAmount = _minAmount;\n        emit MinPurchaseAmountUpdated(_minAmount);\n    }\n\n    /**\n     * @dev Get the current price\n     * @return Current price\n     */\n    function getPrice() external view returns (uint256) {\n        return currentPrice;\n    }\n\n    /**\n     * @dev Purchase tokens\n     * @param _amount Token amount to purchase (in smallest unit)\n     */\n    function purchase(uint256 _amount) external payable {\n        require(address(token) != address(0), \"TokenPurchase: Token not set\");\n        require(currentPrice > 0, \"TokenPurchase: Price not set\");\n        require(_amount > 0, \"TokenPurchase: Amount must be greater than zero\");\n        require(\n            _amount >= minPurchaseAmount,\n            \"TokenPurchase: Amount below minimum purchase amount\"\n        );\n\n        // Get token decimals\n        uint8 tokenDecimals = token.decimals();\n\n        // Calculate payment token decimals (18 for native currency)\n        uint8 paymentDecimals = address(paymentToken) == address(0)\n            ? 18\n            : paymentToken.decimals();\n\n        // Calculate total cost with proper decimal adjustment\n        // Price is in 10**18 format (1 = 10**18)\n        // Solidity 0.8+ has built-in overflow checking\n        uint256 priceTimeAmount = currentPrice * _amount;\n        uint256 totalCost = priceTimeAmount / 10 ** 18;\n\n        // Ensure the calculation didn't result in zero due to precision loss\n        require(\n            totalCost > 0,\n            \"TokenPurchase: Cost calculation resulted in zero\"\n        );\n\n        // Adjust for the difference in decimal places between token and payment token\n        if (tokenDecimals != paymentDecimals) {\n            if (tokenDecimals > paymentDecimals) {\n                totalCost = totalCost / 10 ** (tokenDecimals - paymentDecimals);\n            } else {\n                totalCost = totalCost * 10 ** (paymentDecimals - tokenDecimals);\n            }\n        }\n\n        // Ensure final cost is not zero after all adjustments\n        require(\n            totalCost > 0,\n            \"TokenPurchase: Final cost calculation resulted in zero\"\n        );\n\n        // Check if contract has enough tokens\n        require(\n            token.balanceOf(address(this)) >= _amount,\n            \"TokenPurchase: Insufficient token balance\"\n        );\n\n        // Handle payment based on payment token type\n        if (address(paymentToken) == address(0)) {\n            // Native currency payment\n            require(\n                msg.value >= totalCost,\n                \"TokenPurchase: Insufficient payment\"\n            );\n\n            // Forward payment to payment receiver\n            payable(paymentReceiver).transfer(totalCost);\n\n            // Refund excess payment if any\n            if (msg.value > totalCost) {\n                payable(msg.sender).transfer(msg.value - totalCost);\n            }\n        } else {\n            // ERC20 token payment\n            require(\n                msg.value == 0,\n                \"TokenPurchase: ETH not accepted for token payments\"\n            );\n\n            // Transfer payment tokens from buyer to payment receiver\n            require(\n                paymentToken.transferFrom(\n                    msg.sender,\n                    paymentReceiver,\n                    totalCost\n                ),\n                \"TokenPurchase: Payment token transfer failed\"\n            );\n        }\n\n        // Transfer tokens from contract to buyer\n        require(\n            token.transfer(msg.sender, _amount),\n            \"TokenPurchase: Token transfer failed\"\n        );\n\n        emit TokensPurchased(msg.sender, _amount, totalCost);\n    }\n\n    /**\n     * @dev Allow admin to withdraw tokens from the contract\n     * @param _amount Amount of tokens to withdraw\n     */\n    function withdrawTokens(uint256 _amount) external onlyOwner {\n        require(address(token) != address(0), \"TokenPurchase: Token not set\");\n        require(\n            token.balanceOf(address(this)) >= _amount,\n            \"TokenPurchase: Insufficient token balance\"\n        );\n\n        require(\n            token.transfer(paymentReceiver, _amount),\n            \"TokenPurchase: Token transfer failed\"\n        );\n    }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":200},"evmVersion":"paris","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"sources":{"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[281],"Ownable":[147]},"id":148,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:0"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":148,"sourceUnit":282,"src":"128:45:0","symbolAliases":[{"foreign":{"id":2,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":281,"src":"136:7:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5,"name":"Context","nameLocations":["692:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":281,"src":"692:7:0"},"id":6,"nodeType":"InheritanceSpecifier","src":"692:7:0"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":4,"nodeType":"StructuredDocumentation","src":"175:487:0","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":147,"linearizedBaseContracts":[147,281],"name":"Ownable","nameLocation":"681:7:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8,"mutability":"mutable","name":"_owner","nameLocation":"722:6:0","nodeType":"VariableDeclaration","scope":147,"src":"706:22:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":9,"nodeType":"StructuredDocumentation","src":"735:85:0","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":13,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:0","nodeType":"ErrorDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"account","nameLocation":"866:7:0","nodeType":"VariableDeclaration","scope":13,"src":"858:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:0"},"src":"825:50:0"},{"documentation":{"id":14,"nodeType":"StructuredDocumentation","src":"881:82:0","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":18,"name":"OwnableInvalidOwner","nameLocation":"974:19:0","nodeType":"ErrorDefinition","parameters":{"id":17,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16,"mutability":"mutable","name":"owner","nameLocation":"1002:5:0","nodeType":"VariableDeclaration","scope":18,"src":"994:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:0"},"src":"968:41:0"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":24,"name":"OwnershipTransferred","nameLocation":"1021:20:0","nodeType":"EventDefinition","parameters":{"id":23,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:0","nodeType":"VariableDeclaration","scope":24,"src":"1042:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:0","nodeType":"VariableDeclaration","scope":24,"src":"1073:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:0"},"src":"1015:84:0"},{"body":{"id":49,"nodeType":"Block","src":"1259:153:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"1273:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":33,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":32,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:0","typeDescriptions":{}}},"id":34,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44,"nodeType":"IfStatement","src":"1269:95:0","trueBody":{"id":43,"nodeType":"Block","src":"1301:63:0","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":39,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":38,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:0","typeDescriptions":{}}},"id":40,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18,"src":"1322:19:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":41,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":42,"nodeType":"RevertStatement","src":"1315:38:0"}]}},{"expression":{"arguments":[{"id":46,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"1392:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":45,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"1373:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":47,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48,"nodeType":"ExpressionStatement","src":"1373:32:0"}]},"documentation":{"id":25,"nodeType":"StructuredDocumentation","src":"1105:115:0","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":50,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:0","nodeType":"VariableDeclaration","scope":50,"src":"1237:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:0"},"returnParameters":{"id":29,"nodeType":"ParameterList","parameters":[],"src":"1259:0:0"},"scope":147,"src":"1225:187:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":57,"nodeType":"Block","src":"1521:41:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":53,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"1531:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":54,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55,"nodeType":"ExpressionStatement","src":"1531:13:0"},{"id":56,"nodeType":"PlaceholderStatement","src":"1554:1:0"}]},"documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"1418:77:0","text":" @dev Throws if called by any account other than the owner."},"id":58,"name":"onlyOwner","nameLocation":"1509:9:0","nodeType":"ModifierDefinition","parameters":{"id":52,"nodeType":"ParameterList","parameters":[],"src":"1518:2:0"},"src":"1500:62:0","virtual":false,"visibility":"internal"},{"body":{"id":66,"nodeType":"Block","src":"1693:30:0","statements":[{"expression":{"id":64,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8,"src":"1710:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":63,"id":65,"nodeType":"Return","src":"1703:13:0"}]},"documentation":{"id":59,"nodeType":"StructuredDocumentation","src":"1568:65:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":67,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:0","nodeType":"FunctionDefinition","parameters":{"id":60,"nodeType":"ParameterList","parameters":[],"src":"1652:2:0"},"returnParameters":{"id":63,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":67,"src":"1684:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:0"},"scope":147,"src":"1638:85:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":83,"nodeType":"Block","src":"1841:117:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":75,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":71,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":67,"src":"1855:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":72,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":73,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"1866:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":74,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":82,"nodeType":"IfStatement","src":"1851:101:0","trueBody":{"id":81,"nodeType":"Block","src":"1880:72:0","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":77,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"1928:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":78,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":76,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"1901:26:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":79,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":80,"nodeType":"RevertStatement","src":"1894:47:0"}]}}]},"documentation":{"id":68,"nodeType":"StructuredDocumentation","src":"1729:62:0","text":" @dev Throws if the sender is not the owner."},"id":84,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:0","nodeType":"FunctionDefinition","parameters":{"id":69,"nodeType":"ParameterList","parameters":[],"src":"1816:2:0"},"returnParameters":{"id":70,"nodeType":"ParameterList","parameters":[],"src":"1841:0:0"},"scope":147,"src":"1796:162:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":97,"nodeType":"Block","src":"2347:47:0","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":93,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":92,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":91,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:0","typeDescriptions":{}}},"id":94,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":90,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"2357:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":95,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":96,"nodeType":"ExpressionStatement","src":"2357:30:0"}]},"documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"1964:324:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":98,"implemented":true,"kind":"function","modifiers":[{"id":88,"kind":"modifierInvocation","modifierName":{"id":87,"name":"onlyOwner","nameLocations":["2337:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"2337:9:0"},"nodeType":"ModifierInvocation","src":"2337:9:0"}],"name":"renounceOwnership","nameLocation":"2302:17:0","nodeType":"FunctionDefinition","parameters":{"id":86,"nodeType":"ParameterList","parameters":[],"src":"2319:2:0"},"returnParameters":{"id":89,"nodeType":"ParameterList","parameters":[],"src":"2347:0:0"},"scope":147,"src":"2293:101:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":125,"nodeType":"Block","src":"2613:145:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":106,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101,"src":"2627:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":107,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:0","typeDescriptions":{}}},"id":110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":120,"nodeType":"IfStatement","src":"2623:91:0","trueBody":{"id":119,"nodeType":"Block","src":"2651:63:0","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":113,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:0","typeDescriptions":{}}},"id":116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":112,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18,"src":"2672:19:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":118,"nodeType":"RevertStatement","src":"2665:38:0"}]}},{"expression":{"arguments":[{"id":122,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101,"src":"2742:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":121,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"2723:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":124,"nodeType":"ExpressionStatement","src":"2723:28:0"}]},"documentation":{"id":99,"nodeType":"StructuredDocumentation","src":"2400:138:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":126,"implemented":true,"kind":"function","modifiers":[{"id":104,"kind":"modifierInvocation","modifierName":{"id":103,"name":"onlyOwner","nameLocations":["2603:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"2603:9:0"},"nodeType":"ModifierInvocation","src":"2603:9:0"}],"name":"transferOwnership","nameLocation":"2552:17:0","nodeType":"FunctionDefinition","parameters":{"id":102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":101,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:0","nodeType":"VariableDeclaration","scope":126,"src":"2570:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":100,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:0"},"returnParameters":{"id":105,"nodeType":"ParameterList","parameters":[],"src":"2613:0:0"},"scope":147,"src":"2543:215:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":145,"nodeType":"Block","src":"2975:124:0","statements":[{"assignments":[133],"declarations":[{"constant":false,"id":133,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:0","nodeType":"VariableDeclaration","scope":145,"src":"2985:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":132,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":135,"initialValue":{"id":134,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8,"src":"3004:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:0"},{"expression":{"id":138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":136,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8,"src":"3020:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":137,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"3029:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":139,"nodeType":"ExpressionStatement","src":"3020:17:0"},{"eventCall":{"arguments":[{"id":141,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"3073:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":142,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"3083:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":140,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"3052:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":144,"nodeType":"EmitStatement","src":"3047:45:0"}]},"documentation":{"id":127,"nodeType":"StructuredDocumentation","src":"2764:143:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":146,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:0","nodeType":"FunctionDefinition","parameters":{"id":130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":129,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:0","nodeType":"VariableDeclaration","scope":146,"src":"2940:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":128,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:0"},"returnParameters":{"id":131,"nodeType":"ParameterList","parameters":[],"src":"2975:0:0"},"scope":147,"src":"2912:187:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":148,"src":"663:2438:0","usedErrors":[13,18],"usedEvents":[24]}],"src":"102:3000:0"},"id":0},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[225]},"id":226,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":149,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":150,"nodeType":"StructuredDocumentation","src":"132:71:1","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":225,"linearizedBaseContracts":[225],"name":"IERC20","nameLocation":"214:6:1","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":151,"nodeType":"StructuredDocumentation","src":"227:158:1","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":159,"name":"Transfer","nameLocation":"396:8:1","nodeType":"EventDefinition","parameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":153,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"421:4:1","nodeType":"VariableDeclaration","scope":159,"src":"405:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":152,"name":"address","nodeType":"ElementaryTypeName","src":"405:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":155,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"443:2:1","nodeType":"VariableDeclaration","scope":159,"src":"427:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":154,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":157,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"455:5:1","nodeType":"VariableDeclaration","scope":159,"src":"447:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":156,"name":"uint256","nodeType":"ElementaryTypeName","src":"447:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:57:1"},"src":"390:72:1"},{"anonymous":false,"documentation":{"id":160,"nodeType":"StructuredDocumentation","src":"468:148:1","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":168,"name":"Approval","nameLocation":"627:8:1","nodeType":"EventDefinition","parameters":{"id":167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":162,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"652:5:1","nodeType":"VariableDeclaration","scope":168,"src":"636:21:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":161,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":164,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"675:7:1","nodeType":"VariableDeclaration","scope":168,"src":"659:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":163,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":166,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"692:5:1","nodeType":"VariableDeclaration","scope":168,"src":"684:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":165,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"635:63:1"},"src":"621:78:1"},{"documentation":{"id":169,"nodeType":"StructuredDocumentation","src":"705:65:1","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":174,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"784:11:1","nodeType":"FunctionDefinition","parameters":{"id":170,"nodeType":"ParameterList","parameters":[],"src":"795:2:1"},"returnParameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":174,"src":"821:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"820:9:1"},"scope":225,"src":"775:55:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":175,"nodeType":"StructuredDocumentation","src":"836:71:1","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":182,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:1","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":177,"mutability":"mutable","name":"account","nameLocation":"939:7:1","nodeType":"VariableDeclaration","scope":182,"src":"931:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":176,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:1"},"returnParameters":{"id":181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":182,"src":"971:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":179,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:1"},"scope":225,"src":"912:68:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":183,"nodeType":"StructuredDocumentation","src":"986:213:1","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":192,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:1","nodeType":"FunctionDefinition","parameters":{"id":188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":185,"mutability":"mutable","name":"to","nameLocation":"1230:2:1","nodeType":"VariableDeclaration","scope":192,"src":"1222:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":184,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":187,"mutability":"mutable","name":"value","nameLocation":"1242:5:1","nodeType":"VariableDeclaration","scope":192,"src":"1234:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":186,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:27:1"},"returnParameters":{"id":191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":192,"src":"1267:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":189,"name":"bool","nodeType":"ElementaryTypeName","src":"1267:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1266:6:1"},"scope":225,"src":"1204:69:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":193,"nodeType":"StructuredDocumentation","src":"1279:264:1","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":202,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1557:9:1","nodeType":"FunctionDefinition","parameters":{"id":198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":195,"mutability":"mutable","name":"owner","nameLocation":"1575:5:1","nodeType":"VariableDeclaration","scope":202,"src":"1567:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":194,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":197,"mutability":"mutable","name":"spender","nameLocation":"1590:7:1","nodeType":"VariableDeclaration","scope":202,"src":"1582:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":196,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:32:1"},"returnParameters":{"id":201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":202,"src":"1622:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":199,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:1"},"scope":225,"src":"1548:83:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":203,"nodeType":"StructuredDocumentation","src":"1637:667:1","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":212,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2318:7:1","nodeType":"FunctionDefinition","parameters":{"id":208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":205,"mutability":"mutable","name":"spender","nameLocation":"2334:7:1","nodeType":"VariableDeclaration","scope":212,"src":"2326:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":204,"name":"address","nodeType":"ElementaryTypeName","src":"2326:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":207,"mutability":"mutable","name":"value","nameLocation":"2351:5:1","nodeType":"VariableDeclaration","scope":212,"src":"2343:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":206,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:32:1"},"returnParameters":{"id":211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":212,"src":"2376:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":209,"name":"bool","nodeType":"ElementaryTypeName","src":"2376:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2375:6:1"},"scope":225,"src":"2309:73:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":213,"nodeType":"StructuredDocumentation","src":"2388:297:1","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":224,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2699:12:1","nodeType":"FunctionDefinition","parameters":{"id":220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":215,"mutability":"mutable","name":"from","nameLocation":"2720:4:1","nodeType":"VariableDeclaration","scope":224,"src":"2712:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":214,"name":"address","nodeType":"ElementaryTypeName","src":"2712:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":217,"mutability":"mutable","name":"to","nameLocation":"2734:2:1","nodeType":"VariableDeclaration","scope":224,"src":"2726:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":216,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":219,"mutability":"mutable","name":"value","nameLocation":"2746:5:1","nodeType":"VariableDeclaration","scope":224,"src":"2738:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":218,"name":"uint256","nodeType":"ElementaryTypeName","src":"2738:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2711:41:1"},"returnParameters":{"id":223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":222,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":224,"src":"2771:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":221,"name":"bool","nodeType":"ElementaryTypeName","src":"2771:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2770:6:1"},"scope":225,"src":"2690:87:1","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":226,"src":"204:2575:1","usedErrors":[],"usedEvents":[159,168]}],"src":"106:2674:1"},"id":1},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[225],"IERC20Metadata":[251]},"id":252,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":227,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:2"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":252,"sourceUnit":226,"src":"151:37:2","symbolAliases":[{"foreign":{"id":228,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":225,"src":"159:6:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":231,"name":"IERC20","nameLocations":["306:6:2"],"nodeType":"IdentifierPath","referencedDeclaration":225,"src":"306:6:2"},"id":232,"nodeType":"InheritanceSpecifier","src":"306:6:2"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":230,"nodeType":"StructuredDocumentation","src":"190:87:2","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":251,"linearizedBaseContracts":[251,225],"name":"IERC20Metadata","nameLocation":"288:14:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":233,"nodeType":"StructuredDocumentation","src":"319:54:2","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":238,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:2","nodeType":"FunctionDefinition","parameters":{"id":234,"nodeType":"ParameterList","parameters":[],"src":"391:2:2"},"returnParameters":{"id":237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":238,"src":"417:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":235,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:2"},"scope":251,"src":"378:54:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":239,"nodeType":"StructuredDocumentation","src":"438:56:2","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":244,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:2","nodeType":"FunctionDefinition","parameters":{"id":240,"nodeType":"ParameterList","parameters":[],"src":"514:2:2"},"returnParameters":{"id":243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":242,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":244,"src":"540:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":241,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:2"},"scope":251,"src":"499:56:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":245,"nodeType":"StructuredDocumentation","src":"561:65:2","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":250,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:2","nodeType":"FunctionDefinition","parameters":{"id":246,"nodeType":"ParameterList","parameters":[],"src":"648:2:2"},"returnParameters":{"id":249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":250,"src":"674:5:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":247,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:2"},"scope":251,"src":"631:50:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":252,"src":"278:405:2","usedErrors":[],"usedEvents":[159,168]}],"src":"125:559:2"},"id":2},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[281]},"id":282,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":253,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:3"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":254,"nodeType":"StructuredDocumentation","src":"127:496:3","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":281,"linearizedBaseContracts":[281],"name":"Context","nameLocation":"642:7:3","nodeType":"ContractDefinition","nodes":[{"body":{"id":262,"nodeType":"Block","src":"718:34:3","statements":[{"expression":{"expression":{"id":259,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:3","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:3","memberName":"sender","nodeType":"MemberAccess","src":"735:10:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":258,"id":261,"nodeType":"Return","src":"728:17:3"}]},"id":263,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:3","nodeType":"FunctionDefinition","parameters":{"id":255,"nodeType":"ParameterList","parameters":[],"src":"675:2:3"},"returnParameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":263,"src":"709:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":256,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:3"},"scope":281,"src":"656:96:3","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":271,"nodeType":"Block","src":"825:32:3","statements":[{"expression":{"expression":{"id":268,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:3","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:3","memberName":"data","nodeType":"MemberAccess","src":"842:8:3","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":267,"id":270,"nodeType":"Return","src":"835:15:3"}]},"id":272,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:3","nodeType":"FunctionDefinition","parameters":{"id":264,"nodeType":"ParameterList","parameters":[],"src":"775:2:3"},"returnParameters":{"id":267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":272,"src":"809:14:3","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":265,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:3"},"scope":281,"src":"758:99:3","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":279,"nodeType":"Block","src":"935:25:3","statements":[{"expression":{"hexValue":"30","id":277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":276,"id":278,"nodeType":"Return","src":"945:8:3"}]},"id":280,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:3","nodeType":"FunctionDefinition","parameters":{"id":273,"nodeType":"ParameterList","parameters":[],"src":"892:2:3"},"returnParameters":{"id":276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":280,"src":"926:7:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":274,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:3"},"scope":281,"src":"863:97:3","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":282,"src":"624:338:3","usedErrors":[],"usedEvents":[]}],"src":"101:862:3"},"id":3},"contracts/TokenPurchase.sol":{"ast":{"absolutePath":"contracts/TokenPurchase.sol","exportedSymbols":{"IERC20":[225],"IERC20Metadata":[251],"Ownable":[147],"TokenPurchase":[793]},"id":794,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":283,"literals":["solidity","^","0.8",".22"],"nodeType":"PragmaDirective","src":"32:24:4"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":285,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":794,"sourceUnit":148,"src":"58:67:4","symbolAliases":[{"foreign":{"id":284,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":147,"src":"66:7:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":287,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":794,"sourceUnit":226,"src":"126:70:4","symbolAliases":[{"foreign":{"id":286,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":225,"src":"134:6:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":289,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":794,"sourceUnit":252,"src":"197:97:4","symbolAliases":[{"foreign":{"id":288,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"205:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":291,"name":"Ownable","nameLocations":["439:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":147,"src":"439:7:4"},"id":292,"nodeType":"InheritanceSpecifier","src":"439:7:4"}],"canonicalName":"TokenPurchase","contractDependencies":[],"contractKind":"contract","documentation":{"id":290,"nodeType":"StructuredDocumentation","src":"296:116:4","text":" @title TokenPurchase\n @dev Contract providing purchase functionality for tokens with price set by admin"},"fullyImplemented":true,"id":793,"linearizedBaseContracts":[793,147,281],"name":"TokenPurchase","nameLocation":"422:13:4","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"fc0c546a","id":295,"mutability":"mutable","name":"token","nameLocation":"475:5:4","nodeType":"VariableDeclaration","scope":793,"src":"453:27:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"},"typeName":{"id":294,"nodeType":"UserDefinedTypeName","pathNode":{"id":293,"name":"IERC20Metadata","nameLocations":["453:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"453:14:4"},"referencedDeclaration":251,"src":"453:14:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"visibility":"public"},{"constant":false,"functionSelector":"3013ce29","id":298,"mutability":"mutable","name":"paymentToken","nameLocation":"547:12:4","nodeType":"VariableDeclaration","scope":793,"src":"525:34:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"},"typeName":{"id":297,"nodeType":"UserDefinedTypeName","pathNode":{"id":296,"name":"IERC20Metadata","nameLocations":["525:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"525:14:4"},"referencedDeclaration":251,"src":"525:14:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"visibility":"public"},{"constant":false,"functionSelector":"9d1b464a","id":300,"mutability":"mutable","name":"currentPrice","nameLocation":"652:12:4","nodeType":"VariableDeclaration","scope":793,"src":"637:27:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":299,"name":"uint256","nodeType":"ElementaryTypeName","src":"637:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"cb37f3b2","id":302,"mutability":"mutable","name":"paymentReceiver","nameLocation":"733:15:4","nodeType":"VariableDeclaration","scope":793,"src":"718:30:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":301,"name":"address","nodeType":"ElementaryTypeName","src":"718:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"b47dbf22","id":304,"mutability":"mutable","name":"minPurchaseAmount","nameLocation":"800:17:4","nodeType":"VariableDeclaration","scope":793,"src":"785:32:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"785:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"anonymous":false,"eventSelector":"66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe0","id":308,"name":"PriceUpdated","nameLocation":"902:12:4","nodeType":"EventDefinition","parameters":{"id":307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":306,"indexed":false,"mutability":"mutable","name":"newPrice","nameLocation":"923:8:4","nodeType":"VariableDeclaration","scope":308,"src":"915:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":305,"name":"uint256","nodeType":"ElementaryTypeName","src":"915:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"914:18:4"},"src":"896:37:4"},{"anonymous":false,"eventSelector":"8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f33","id":316,"name":"TokensPurchased","nameLocation":"972:15:4","nodeType":"EventDefinition","parameters":{"id":315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":310,"indexed":true,"mutability":"mutable","name":"buyer","nameLocation":"1013:5:4","nodeType":"VariableDeclaration","scope":316,"src":"997:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":309,"name":"address","nodeType":"ElementaryTypeName","src":"997:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":312,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1036:6:4","nodeType":"VariableDeclaration","scope":316,"src":"1028:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":311,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":314,"indexed":false,"mutability":"mutable","name":"totalCost","nameLocation":"1060:9:4","nodeType":"VariableDeclaration","scope":316,"src":"1052:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":313,"name":"uint256","nodeType":"ElementaryTypeName","src":"1052:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"987:88:4"},"src":"966:110:4"},{"anonymous":false,"eventSelector":"8daad05472f6141017dfcc093d307683226fb7016d5d33792c961bd20a8ad2de","id":320,"name":"MinPurchaseAmountUpdated","nameLocation":"1131:24:4","nodeType":"EventDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":318,"indexed":false,"mutability":"mutable","name":"newMinAmount","nameLocation":"1164:12:4","nodeType":"VariableDeclaration","scope":320,"src":"1156:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":317,"name":"uint256","nodeType":"ElementaryTypeName","src":"1156:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1155:22:4"},"src":"1125:53:4"},{"body":{"id":396,"nodeType":"Block","src":"1765:790:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":338,"name":"_initialPaymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":325,"src":"1796:23:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1831:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1823:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":339,"name":"address","nodeType":"ElementaryTypeName","src":"1823:7:4","typeDescriptions":{}}},"id":342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1823:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1796:37:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a205061796d656e742072656365697665722063616e6e6f74206265207a65726f2061646472657373","id":344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1847:56:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a","typeString":"literal_string \"TokenPurchase: Payment receiver cannot be zero address\""},"value":"TokenPurchase: Payment receiver cannot be zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a","typeString":"literal_string \"TokenPurchase: Payment receiver cannot be zero address\""}],"id":337,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1775:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1775:138:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":346,"nodeType":"ExpressionStatement","src":"1775:138:4"},{"expression":{"id":349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":347,"name":"paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"1923:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":348,"name":"_initialPaymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":325,"src":"1941:23:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1923:41:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":350,"nodeType":"ExpressionStatement","src":"1923:41:4"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":351,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":327,"src":"2023:6:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2033:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":352,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:4","typeDescriptions":{}}},"id":355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2023:20:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":364,"nodeType":"IfStatement","src":"2019:81:4","trueBody":{"id":363,"nodeType":"Block","src":"2045:55:4","statements":[{"expression":{"id":361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":357,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"2059:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":359,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":327,"src":"2082:6:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":358,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"2067:14:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$251_$","typeString":"type(contract IERC20Metadata)"}},"id":360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2067:22:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"src":"2059:30:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":362,"nodeType":"ExpressionStatement","src":"2059:30:4"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":365,"name":"_paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":329,"src":"2194:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2219:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2211:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":366,"name":"address","nodeType":"ElementaryTypeName","src":"2211:7:4","typeDescriptions":{}}},"id":369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2211:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2194:27:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":378,"nodeType":"IfStatement","src":"2190:102:4","trueBody":{"id":377,"nodeType":"Block","src":"2223:69:4","statements":[{"expression":{"id":375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":371,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"2237:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":373,"name":"_paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":329,"src":"2267:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":372,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"2252:14:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$251_$","typeString":"type(contract IERC20Metadata)"}},"id":374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2252:29:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"src":"2237:44:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":376,"nodeType":"ExpressionStatement","src":"2237:44:4"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":379,"name":"_initialPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":331,"src":"2347:13:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2363:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2347:17:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":391,"nodeType":"IfStatement","src":"2343:122:4","trueBody":{"id":390,"nodeType":"Block","src":"2366:99:4","statements":[{"expression":{"id":384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":382,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"2380:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":383,"name":"_initialPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":331,"src":"2395:13:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2380:28:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":385,"nodeType":"ExpressionStatement","src":"2380:28:4"},{"eventCall":{"arguments":[{"id":387,"name":"_initialPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":331,"src":"2440:13:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":386,"name":"PriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"2427:12:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2427:27:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":389,"nodeType":"EmitStatement","src":"2422:32:4"}]}},{"expression":{"id":394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":392,"name":"minPurchaseAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"2527:17:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2547:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2527:21:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":395,"nodeType":"ExpressionStatement","src":"2527:21:4"}]},"documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"1184:377:4","text":" @dev Constructor\n @param _initialOwner Initial admin address\n @param _initialPaymentReceiver Initial payment receiver address\n @param _token Token to be sold (can be address(0) to set later)\n @param _paymentToken Token used for payment (address(0) for native currency)\n @param _initialPrice Initial price (can be 0 to set later)"},"id":397,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":334,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"1750:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":335,"kind":"baseConstructorSpecifier","modifierName":{"id":333,"name":"Ownable","nameLocations":["1742:7:4"],"nodeType":"IdentifierPath","referencedDeclaration":147,"src":"1742:7:4"},"nodeType":"ModifierInvocation","src":"1742:22:4"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"mutability":"mutable","name":"_initialOwner","nameLocation":"1595:13:4","nodeType":"VariableDeclaration","scope":397,"src":"1587:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":322,"name":"address","nodeType":"ElementaryTypeName","src":"1587:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":325,"mutability":"mutable","name":"_initialPaymentReceiver","nameLocation":"1626:23:4","nodeType":"VariableDeclaration","scope":397,"src":"1618:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":324,"name":"address","nodeType":"ElementaryTypeName","src":"1618:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"_token","nameLocation":"1667:6:4","nodeType":"VariableDeclaration","scope":397,"src":"1659:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":326,"name":"address","nodeType":"ElementaryTypeName","src":"1659:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":329,"mutability":"mutable","name":"_paymentToken","nameLocation":"1691:13:4","nodeType":"VariableDeclaration","scope":397,"src":"1683:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":328,"name":"address","nodeType":"ElementaryTypeName","src":"1683:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":331,"mutability":"mutable","name":"_initialPrice","nameLocation":"1722:13:4","nodeType":"VariableDeclaration","scope":397,"src":"1714:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":330,"name":"uint256","nodeType":"ElementaryTypeName","src":"1714:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1577:164:4"},"returnParameters":{"id":336,"nodeType":"ParameterList","parameters":[],"src":"1765:0:4"},"scope":793,"src":"1566:989:4","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":421,"nodeType":"Block","src":"2708:167:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":406,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":400,"src":"2739:6:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2757:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2749:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":407,"name":"address","nodeType":"ElementaryTypeName","src":"2749:7:4","typeDescriptions":{}}},"id":410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2749:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2739:20:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20546f6b656e2063616e6e6f74206265207a65726f2061646472657373","id":412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2773:45:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_80f6aac1d203b48e1f5d29c7815975057f3643826d381b01ea7edb253b073c3f","typeString":"literal_string \"TokenPurchase: Token cannot be zero address\""},"value":"TokenPurchase: Token cannot be zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_80f6aac1d203b48e1f5d29c7815975057f3643826d381b01ea7edb253b073c3f","typeString":"literal_string \"TokenPurchase: Token cannot be zero address\""}],"id":405,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"2718:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:110:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":414,"nodeType":"ExpressionStatement","src":"2718:110:4"},{"expression":{"id":419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":415,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"2838:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":417,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":400,"src":"2861:6:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":416,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"2846:14:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$251_$","typeString":"type(contract IERC20Metadata)"}},"id":418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2846:22:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"src":"2838:30:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":420,"nodeType":"ExpressionStatement","src":"2838:30:4"}]},"documentation":{"id":398,"nodeType":"StructuredDocumentation","src":"2561:89:4","text":" @dev Set token contract address\n @param _token New token address"},"functionSelector":"144fa6d7","id":422,"implemented":true,"kind":"function","modifiers":[{"id":403,"kind":"modifierInvocation","modifierName":{"id":402,"name":"onlyOwner","nameLocations":["2698:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"2698:9:4"},"nodeType":"ModifierInvocation","src":"2698:9:4"}],"name":"setToken","nameLocation":"2664:8:4","nodeType":"FunctionDefinition","parameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"_token","nameLocation":"2681:6:4","nodeType":"VariableDeclaration","scope":422,"src":"2673:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":399,"name":"address","nodeType":"ElementaryTypeName","src":"2673:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2672:16:4"},"returnParameters":{"id":404,"nodeType":"ParameterList","parameters":[],"src":"2708:0:4"},"scope":793,"src":"2655:220:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":454,"nodeType":"Block","src":"3089:243:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":430,"name":"_paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":425,"src":"3156:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3181:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3173:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":431,"name":"address","nodeType":"ElementaryTypeName","src":"3173:7:4","typeDescriptions":{}}},"id":434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3173:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3156:27:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":452,"nodeType":"Block","src":"3260:66:4","statements":[{"expression":{"id":450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":443,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"3274:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"hexValue":"30","id":447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3312:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3304:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":445,"name":"address","nodeType":"ElementaryTypeName","src":"3304:7:4","typeDescriptions":{}}},"id":448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3304:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":444,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"3289:14:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$251_$","typeString":"type(contract IERC20Metadata)"}},"id":449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3289:26:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"src":"3274:41:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":451,"nodeType":"ExpressionStatement","src":"3274:41:4"}]},"id":453,"nodeType":"IfStatement","src":"3152:174:4","trueBody":{"id":442,"nodeType":"Block","src":"3185:69:4","statements":[{"expression":{"id":440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":436,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"3199:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":438,"name":"_paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":425,"src":"3229:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":437,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"3214:14:4","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$251_$","typeString":"type(contract IERC20Metadata)"}},"id":439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3214:29:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"src":"3199:44:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":441,"nodeType":"ExpressionStatement","src":"3199:44:4"}]}}]},"documentation":{"id":423,"nodeType":"StructuredDocumentation","src":"2881:136:4","text":" @dev Set payment token address\n @param _paymentToken New payment token address (address(0) for native currency)"},"functionSelector":"6a326ab1","id":455,"implemented":true,"kind":"function","modifiers":[{"id":428,"kind":"modifierInvocation","modifierName":{"id":427,"name":"onlyOwner","nameLocations":["3079:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"3079:9:4"},"nodeType":"ModifierInvocation","src":"3079:9:4"}],"name":"setPaymentToken","nameLocation":"3031:15:4","nodeType":"FunctionDefinition","parameters":{"id":426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":425,"mutability":"mutable","name":"_paymentToken","nameLocation":"3055:13:4","nodeType":"VariableDeclaration","scope":455,"src":"3047:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":424,"name":"address","nodeType":"ElementaryTypeName","src":"3047:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3046:23:4"},"returnParameters":{"id":429,"nodeType":"ParameterList","parameters":[],"src":"3089:0:4"},"scope":793,"src":"3022:310:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":477,"nodeType":"Block","src":"3528:192:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":464,"name":"_paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":458,"src":"3559:16:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3587:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3579:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":465,"name":"address","nodeType":"ElementaryTypeName","src":"3579:7:4","typeDescriptions":{}}},"id":468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3579:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3559:30:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a205061796d656e742072656365697665722063616e6e6f74206265207a65726f2061646472657373","id":470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3603:56:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a","typeString":"literal_string \"TokenPurchase: Payment receiver cannot be zero address\""},"value":"TokenPurchase: Payment receiver cannot be zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a","typeString":"literal_string \"TokenPurchase: Payment receiver cannot be zero address\""}],"id":463,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3538:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3538:131:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":472,"nodeType":"ExpressionStatement","src":"3538:131:4"},{"expression":{"id":475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":473,"name":"paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"3679:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":474,"name":"_paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":458,"src":"3697:16:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3679:34:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":476,"nodeType":"ExpressionStatement","src":"3679:34:4"}]},"documentation":{"id":456,"nodeType":"StructuredDocumentation","src":"3338:112:4","text":" @dev Set payment receiver address\n @param _paymentReceiver New payment receiver address"},"functionSelector":"65ebf99a","id":478,"implemented":true,"kind":"function","modifiers":[{"id":461,"kind":"modifierInvocation","modifierName":{"id":460,"name":"onlyOwner","nameLocations":["3518:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"3518:9:4"},"nodeType":"ModifierInvocation","src":"3518:9:4"}],"name":"setPaymentReceiver","nameLocation":"3464:18:4","nodeType":"FunctionDefinition","parameters":{"id":459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":458,"mutability":"mutable","name":"_paymentReceiver","nameLocation":"3491:16:4","nodeType":"VariableDeclaration","scope":478,"src":"3483:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":457,"name":"address","nodeType":"ElementaryTypeName","src":"3483:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3482:26:4"},"returnParameters":{"id":462,"nodeType":"ParameterList","parameters":[],"src":"3528:0:4"},"scope":793,"src":"3455:265:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":501,"nodeType":"Block","src":"3891:152:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":487,"name":"_price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"3909:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3918:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3909:10:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a205072696365206d7573742062652067726561746572207468616e207a65726f","id":490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3921:48:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_d1fdc132d89d24a49c6afa67728e034ca70424bb4d57719902661918e12b5ed4","typeString":"literal_string \"TokenPurchase: Price must be greater than zero\""},"value":"TokenPurchase: Price must be greater than zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d1fdc132d89d24a49c6afa67728e034ca70424bb4d57719902661918e12b5ed4","typeString":"literal_string \"TokenPurchase: Price must be greater than zero\""}],"id":486,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"3901:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3901:69:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":492,"nodeType":"ExpressionStatement","src":"3901:69:4"},{"expression":{"id":495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":493,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"3980:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":494,"name":"_price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"3995:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3980:21:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":496,"nodeType":"ExpressionStatement","src":"3980:21:4"},{"eventCall":{"arguments":[{"id":498,"name":"_price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"4029:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":497,"name":"PriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"4016:12:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4016:20:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":500,"nodeType":"EmitStatement","src":"4011:25:4"}]},"documentation":{"id":479,"nodeType":"StructuredDocumentation","src":"3726:107:4","text":" @dev Set the current price\n @param _price New price (in 10**18 format, 1 = 10**18)"},"functionSelector":"91b7f5ed","id":502,"implemented":true,"kind":"function","modifiers":[{"id":484,"kind":"modifierInvocation","modifierName":{"id":483,"name":"onlyOwner","nameLocations":["3881:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"3881:9:4"},"nodeType":"ModifierInvocation","src":"3881:9:4"}],"name":"setPrice","nameLocation":"3847:8:4","nodeType":"FunctionDefinition","parameters":{"id":482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":481,"mutability":"mutable","name":"_price","nameLocation":"3864:6:4","nodeType":"VariableDeclaration","scope":502,"src":"3856:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":480,"name":"uint256","nodeType":"ElementaryTypeName","src":"3856:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3855:16:4"},"returnParameters":{"id":485,"nodeType":"ParameterList","parameters":[],"src":"3891:0:4"},"scope":793,"src":"3838:205:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":518,"nodeType":"Block","src":"4231:98:4","statements":[{"expression":{"id":512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":510,"name":"minPurchaseAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"4241:17:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":511,"name":"_minAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":505,"src":"4261:10:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4241:30:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":513,"nodeType":"ExpressionStatement","src":"4241:30:4"},{"eventCall":{"arguments":[{"id":515,"name":"_minAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":505,"src":"4311:10:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":514,"name":"MinPurchaseAmountUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"4286:24:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4286:36:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":517,"nodeType":"EmitStatement","src":"4281:41:4"}]},"documentation":{"id":503,"nodeType":"StructuredDocumentation","src":"4049:108:4","text":" @dev Set the minimum purchase amount\n @param _minAmount New minimum purchase amount"},"functionSelector":"e9d3fb78","id":519,"implemented":true,"kind":"function","modifiers":[{"id":508,"kind":"modifierInvocation","modifierName":{"id":507,"name":"onlyOwner","nameLocations":["4221:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"4221:9:4"},"nodeType":"ModifierInvocation","src":"4221:9:4"}],"name":"setMinPurchaseAmount","nameLocation":"4171:20:4","nodeType":"FunctionDefinition","parameters":{"id":506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":505,"mutability":"mutable","name":"_minAmount","nameLocation":"4200:10:4","nodeType":"VariableDeclaration","scope":519,"src":"4192:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":504,"name":"uint256","nodeType":"ElementaryTypeName","src":"4192:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4191:20:4"},"returnParameters":{"id":509,"nodeType":"ParameterList","parameters":[],"src":"4231:0:4"},"scope":793,"src":"4162:167:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":527,"nodeType":"Block","src":"4466:36:4","statements":[{"expression":{"id":525,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"4483:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":524,"id":526,"nodeType":"Return","src":"4476:19:4"}]},"documentation":{"id":520,"nodeType":"StructuredDocumentation","src":"4335:74:4","text":" @dev Get the current price\n @return Current price"},"functionSelector":"98d5fdca","id":528,"implemented":true,"kind":"function","modifiers":[],"name":"getPrice","nameLocation":"4423:8:4","nodeType":"FunctionDefinition","parameters":{"id":521,"nodeType":"ParameterList","parameters":[],"src":"4431:2:4"},"returnParameters":{"id":524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":528,"src":"4457:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":522,"name":"uint256","nodeType":"ElementaryTypeName","src":"4457:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4456:9:4"},"scope":793,"src":"4414:88:4","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":747,"nodeType":"Block","src":"4670:3219:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":537,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"4696:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}],"id":536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4688:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":535,"name":"address","nodeType":"ElementaryTypeName","src":"4688:7:4","typeDescriptions":{}}},"id":538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4688:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4714:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":540,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4706:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":539,"name":"address","nodeType":"ElementaryTypeName","src":"4706:7:4","typeDescriptions":{}}},"id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4706:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4688:28:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20546f6b656e206e6f7420736574","id":544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4718:30:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c","typeString":"literal_string \"TokenPurchase: Token not set\""},"value":"TokenPurchase: Token not set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c","typeString":"literal_string \"TokenPurchase: Token not set\""}],"id":534,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4680:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4680:69:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":546,"nodeType":"ExpressionStatement","src":"4680:69:4"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":548,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"4767:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4782:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4767:16:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a205072696365206e6f7420736574","id":551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4785:30:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_11642e9233fe172eab34f4905f0584687897e70bc8ec7e4d8b15b3d4ba325986","typeString":"literal_string \"TokenPurchase: Price not set\""},"value":"TokenPurchase: Price not set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_11642e9233fe172eab34f4905f0584687897e70bc8ec7e4d8b15b3d4ba325986","typeString":"literal_string \"TokenPurchase: Price not set\""}],"id":547,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4759:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4759:57:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":553,"nodeType":"ExpressionStatement","src":"4759:57:4"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":555,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":531,"src":"4834:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4844:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4834:11:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20416d6f756e74206d7573742062652067726561746572207468616e207a65726f","id":558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4847:49:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_429a1077f877e28e64b739f25ce90c3083d57226e67a690330c3580fae257b3f","typeString":"literal_string \"TokenPurchase: Amount must be greater than zero\""},"value":"TokenPurchase: Amount must be greater than zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_429a1077f877e28e64b739f25ce90c3083d57226e67a690330c3580fae257b3f","typeString":"literal_string \"TokenPurchase: Amount must be greater than zero\""}],"id":554,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4826:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4826:71:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":560,"nodeType":"ExpressionStatement","src":"4826:71:4"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":562,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":531,"src":"4928:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":563,"name":"minPurchaseAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":304,"src":"4939:17:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4928:28:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20416d6f756e742062656c6f77206d696e696d756d20707572636861736520616d6f756e74","id":565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4970:53:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_e6aaba7be610f33a5546704299f3a3452d6d6167ed801da7a1aee43030488970","typeString":"literal_string \"TokenPurchase: Amount below minimum purchase amount\""},"value":"TokenPurchase: Amount below minimum purchase amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e6aaba7be610f33a5546704299f3a3452d6d6167ed801da7a1aee43030488970","typeString":"literal_string \"TokenPurchase: Amount below minimum purchase amount\""}],"id":561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4907:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4907:126:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":567,"nodeType":"ExpressionStatement","src":"4907:126:4"},{"assignments":[569],"declarations":[{"constant":false,"id":569,"mutability":"mutable","name":"tokenDecimals","nameLocation":"5080:13:4","nodeType":"VariableDeclaration","scope":747,"src":"5074:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":568,"name":"uint8","nodeType":"ElementaryTypeName","src":"5074:5:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":573,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":570,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"5096:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5102:8:4","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":250,"src":"5096:14:4","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5096:16:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5074:38:4"},{"assignments":[575],"declarations":[{"constant":false,"id":575,"mutability":"mutable","name":"paymentDecimals","nameLocation":"5198:15:4","nodeType":"VariableDeclaration","scope":747,"src":"5192:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":574,"name":"uint8","nodeType":"ElementaryTypeName","src":"5192:5:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":590,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":578,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"5224:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}],"id":577,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5216:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":576,"name":"address","nodeType":"ElementaryTypeName","src":"5216:7:4","typeDescriptions":{}}},"id":579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5216:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5249:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":581,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5241:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":580,"name":"address","nodeType":"ElementaryTypeName","src":"5241:7:4","typeDescriptions":{}}},"id":583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5241:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5216:35:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":586,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"5283:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5296:8:4","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":250,"src":"5283:21:4","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5283:23:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5216:90:4","trueExpression":{"hexValue":"3138","id":585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5266:2:4","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5192:114:4"},{"assignments":[592],"declarations":[{"constant":false,"id":592,"mutability":"mutable","name":"priceTimeAmount","nameLocation":"5494:15:4","nodeType":"VariableDeclaration","scope":747,"src":"5486:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":591,"name":"uint256","nodeType":"ElementaryTypeName","src":"5486:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":596,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":593,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":300,"src":"5512:12:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":594,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":531,"src":"5527:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5512:22:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5486:48:4"},{"assignments":[598],"declarations":[{"constant":false,"id":598,"mutability":"mutable","name":"totalCost","nameLocation":"5552:9:4","nodeType":"VariableDeclaration","scope":747,"src":"5544:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":597,"name":"uint256","nodeType":"ElementaryTypeName","src":"5544:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":604,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":599,"name":"priceTimeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"5564:15:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5582:2:4","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5588:2:4","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"5582:8:4","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}},"src":"5564:26:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5544:46:4"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":606,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"5700:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5712:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5700:13:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20436f73742063616c63756c6174696f6e20726573756c74656420696e207a65726f","id":609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5727:50:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_86886174ef161c6cf8e241afb3d54b8fd98ef4fb31194412942366cb2d4c46e5","typeString":"literal_string \"TokenPurchase: Cost calculation resulted in zero\""},"value":"TokenPurchase: Cost calculation resulted in zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_86886174ef161c6cf8e241afb3d54b8fd98ef4fb31194412942366cb2d4c46e5","typeString":"literal_string \"TokenPurchase: Cost calculation resulted in zero\""}],"id":605,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5679:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5679:108:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":611,"nodeType":"ExpressionStatement","src":"5679:108:4"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":612,"name":"tokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"5889:13:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":613,"name":"paymentDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":575,"src":"5906:15:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"5889:32:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":644,"nodeType":"IfStatement","src":"5885:297:4","trueBody":{"id":643,"nodeType":"Block","src":"5923:259:4","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":615,"name":"tokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"5941:13:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":616,"name":"paymentDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":575,"src":"5957:15:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"5941:31:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":641,"nodeType":"Block","src":"6076:96:4","statements":[{"expression":{"id":639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":630,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"6094:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":631,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"6106:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6118:2:4","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":633,"name":"paymentDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":575,"src":"6125:15:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":634,"name":"tokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"6143:13:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6125:31:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":636,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6124:33:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6118:39:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6106:51:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6094:63:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":640,"nodeType":"ExpressionStatement","src":"6094:63:4"}]},"id":642,"nodeType":"IfStatement","src":"5937:235:4","trueBody":{"id":629,"nodeType":"Block","src":"5974:96:4","statements":[{"expression":{"id":627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":618,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"5992:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":619,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"6004:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6016:2:4","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":621,"name":"tokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"6023:13:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":622,"name":"paymentDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":575,"src":"6039:15:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6023:31:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6022:33:4","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6016:39:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6004:51:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5992:63:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":628,"nodeType":"ExpressionStatement","src":"5992:63:4"}]}}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":646,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"6276:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6288:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6276:13:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a2046696e616c20636f73742063616c63756c6174696f6e20726573756c74656420696e207a65726f","id":649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6303:56:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_e0d3afde06c8f12253dc08a4a976ec97d1840e5744b136804d7cdd0c6c304b49","typeString":"literal_string \"TokenPurchase: Final cost calculation resulted in zero\""},"value":"TokenPurchase: Final cost calculation resulted in zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e0d3afde06c8f12253dc08a4a976ec97d1840e5744b136804d7cdd0c6c304b49","typeString":"literal_string \"TokenPurchase: Final cost calculation resulted in zero\""}],"id":645,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6255:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6255:114:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":651,"nodeType":"ExpressionStatement","src":"6255:114:4"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":657,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6472:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_TokenPurchase_$793","typeString":"contract TokenPurchase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenPurchase_$793","typeString":"contract TokenPurchase"}],"id":656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6464:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":655,"name":"address","nodeType":"ElementaryTypeName","src":"6464:7:4","typeDescriptions":{}}},"id":658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6464:13:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":653,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"6448:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6454:9:4","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":182,"src":"6448:15:4","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6448:30:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":660,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":531,"src":"6482:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6448:41:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20496e73756666696369656e7420746f6b656e2062616c616e6365","id":662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6503:43:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6","typeString":"literal_string \"TokenPurchase: Insufficient token balance\""},"value":"TokenPurchase: Insufficient token balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6","typeString":"literal_string \"TokenPurchase: Insufficient token balance\""}],"id":652,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6427:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6427:129:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":664,"nodeType":"ExpressionStatement","src":"6427:129:4"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":667,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"6633:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}],"id":666,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6625:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":665,"name":"address","nodeType":"ElementaryTypeName","src":"6625:7:4","typeDescriptions":{}}},"id":668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6625:21:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6658:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6650:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":669,"name":"address","nodeType":"ElementaryTypeName","src":"6650:7:4","typeDescriptions":{}}},"id":672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6650:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6625:35:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":728,"nodeType":"Block","src":"7127:514:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":710,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7201:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7205:5:4","memberName":"value","nodeType":"MemberAccess","src":"7201:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7214:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7201:14:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20455448206e6f7420616363657074656420666f7220746f6b656e207061796d656e7473","id":714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7233:52:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_11b85f859e9db479f4e9a393f5c066cd334f3c888472f0da611fdbb5e80d3e98","typeString":"literal_string \"TokenPurchase: ETH not accepted for token payments\""},"value":"TokenPurchase: ETH not accepted for token payments"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_11b85f859e9db479f4e9a393f5c066cd334f3c888472f0da611fdbb5e80d3e98","typeString":"literal_string \"TokenPurchase: ETH not accepted for token payments\""}],"id":709,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7176:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7176:123:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":716,"nodeType":"ExpressionStatement","src":"7176:123:4"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":720,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7456:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7460:6:4","memberName":"sender","nodeType":"MemberAccess","src":"7456:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":722,"name":"paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"7488:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":723,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"7525:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":718,"name":"paymentToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"7409:12:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7422:12:4","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":224,"src":"7409:25:4","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7409:143:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a205061796d656e7420746f6b656e207472616e73666572206661696c6564","id":725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7570:46:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad081e590cc39a4a4599d635bc01bb3e69c58ba2fe8790475bfac5b89b951cd3","typeString":"literal_string \"TokenPurchase: Payment token transfer failed\""},"value":"TokenPurchase: Payment token transfer failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ad081e590cc39a4a4599d635bc01bb3e69c58ba2fe8790475bfac5b89b951cd3","typeString":"literal_string \"TokenPurchase: Payment token transfer failed\""}],"id":717,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7384:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7384:246:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":727,"nodeType":"ExpressionStatement","src":"7384:246:4"}]},"id":729,"nodeType":"IfStatement","src":"6621:1020:4","trueBody":{"id":708,"nodeType":"Block","src":"6662:459:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":675,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6740:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6744:5:4","memberName":"value","nodeType":"MemberAccess","src":"6740:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":677,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"6753:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6740:22:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20496e73756666696369656e74207061796d656e74","id":679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6780:37:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_e27685788135ac0f16015c706d402c0b6bf54cb489a2b8a881f3e9924a771add","typeString":"literal_string \"TokenPurchase: Insufficient payment\""},"value":"TokenPurchase: Insufficient payment"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e27685788135ac0f16015c706d402c0b6bf54cb489a2b8a881f3e9924a771add","typeString":"literal_string \"TokenPurchase: Insufficient payment\""}],"id":674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6715:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:116:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":681,"nodeType":"ExpressionStatement","src":"6715:116:4"},{"expression":{"arguments":[{"id":687,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"6931:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":684,"name":"paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"6905:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6897:8:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":682,"name":"address","nodeType":"ElementaryTypeName","src":"6897:8:4","stateMutability":"payable","typeDescriptions":{}}},"id":685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6897:24:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6922:8:4","memberName":"transfer","nodeType":"MemberAccess","src":"6897:33:4","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6897:44:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":689,"nodeType":"ExpressionStatement","src":"6897:44:4"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":690,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7004:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7008:5:4","memberName":"value","nodeType":"MemberAccess","src":"7004:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":692,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"7016:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7004:21:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":707,"nodeType":"IfStatement","src":"7000:111:4","trueBody":{"id":706,"nodeType":"Block","src":"7027:84:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":700,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7074:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7078:5:4","memberName":"value","nodeType":"MemberAccess","src":"7074:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":702,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"7086:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7074:21:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":696,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7053:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7057:6:4","memberName":"sender","nodeType":"MemberAccess","src":"7053:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7045:8:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":694,"name":"address","nodeType":"ElementaryTypeName","src":"7045:8:4","stateMutability":"payable","typeDescriptions":{}}},"id":698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7045:19:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7065:8:4","memberName":"transfer","nodeType":"MemberAccess","src":"7045:28:4","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7045:51:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":705,"nodeType":"ExpressionStatement","src":"7045:51:4"}]}}]}},{"expression":{"arguments":[{"arguments":[{"expression":{"id":733,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7737:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7741:6:4","memberName":"sender","nodeType":"MemberAccess","src":"7737:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":735,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":531,"src":"7749:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":731,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"7722:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7728:8:4","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":192,"src":"7722:14:4","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7722:35:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20546f6b656e207472616e73666572206661696c6564","id":737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7771:38:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49","typeString":"literal_string \"TokenPurchase: Token transfer failed\""},"value":"TokenPurchase: Token transfer failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49","typeString":"literal_string \"TokenPurchase: Token transfer failed\""}],"id":730,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7701:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7701:118:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":739,"nodeType":"ExpressionStatement","src":"7701:118:4"},{"eventCall":{"arguments":[{"expression":{"id":741,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7851:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7855:6:4","memberName":"sender","nodeType":"MemberAccess","src":"7851:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":743,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":531,"src":"7863:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":744,"name":"totalCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":598,"src":"7872:9:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":740,"name":"TokensPurchased","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":316,"src":"7835:15:4","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7835:47:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":746,"nodeType":"EmitStatement","src":"7830:52:4"}]},"documentation":{"id":529,"nodeType":"StructuredDocumentation","src":"4508:105:4","text":" @dev Purchase tokens\n @param _amount Token amount to purchase (in smallest unit)"},"functionSelector":"efef39a1","id":748,"implemented":true,"kind":"function","modifiers":[],"name":"purchase","nameLocation":"4627:8:4","nodeType":"FunctionDefinition","parameters":{"id":532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":531,"mutability":"mutable","name":"_amount","nameLocation":"4644:7:4","nodeType":"VariableDeclaration","scope":748,"src":"4636:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":530,"name":"uint256","nodeType":"ElementaryTypeName","src":"4636:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4635:17:4"},"returnParameters":{"id":533,"nodeType":"ParameterList","parameters":[],"src":"4670:0:4"},"scope":793,"src":"4618:3271:4","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":791,"nodeType":"Block","src":"8083:359:4","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":759,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"8109:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}],"id":758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8101:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":757,"name":"address","nodeType":"ElementaryTypeName","src":"8101:7:4","typeDescriptions":{}}},"id":760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8101:14:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8127:1:4","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8119:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":761,"name":"address","nodeType":"ElementaryTypeName","src":"8119:7:4","typeDescriptions":{}}},"id":764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8119:10:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8101:28:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20546f6b656e206e6f7420736574","id":766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8131:30:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c","typeString":"literal_string \"TokenPurchase: Token not set\""},"value":"TokenPurchase: Token not set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c","typeString":"literal_string \"TokenPurchase: Token not set\""}],"id":756,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8093:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8093:69:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":768,"nodeType":"ExpressionStatement","src":"8093:69:4"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":774,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8217:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_TokenPurchase_$793","typeString":"contract TokenPurchase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TokenPurchase_$793","typeString":"contract TokenPurchase"}],"id":773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8209:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":772,"name":"address","nodeType":"ElementaryTypeName","src":"8209:7:4","typeDescriptions":{}}},"id":775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8209:13:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":770,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"8193:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8199:9:4","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":182,"src":"8193:15:4","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8193:30:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":777,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":751,"src":"8227:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8193:41:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20496e73756666696369656e7420746f6b656e2062616c616e6365","id":779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8248:43:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6","typeString":"literal_string \"TokenPurchase: Insufficient token balance\""},"value":"TokenPurchase: Insufficient token balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6","typeString":"literal_string \"TokenPurchase: Insufficient token balance\""}],"id":769,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8172:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8172:129:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":781,"nodeType":"ExpressionStatement","src":"8172:129:4"},{"expression":{"arguments":[{"arguments":[{"id":785,"name":"paymentReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":302,"src":"8348:15:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":786,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":751,"src":"8365:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":783,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":295,"src":"8333:5:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$251","typeString":"contract IERC20Metadata"}},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8339:8:4","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":192,"src":"8333:14:4","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8333:40:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f6b656e50757263686173653a20546f6b656e207472616e73666572206661696c6564","id":788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8387:38:4","typeDescriptions":{"typeIdentifier":"t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49","typeString":"literal_string \"TokenPurchase: Token transfer failed\""},"value":"TokenPurchase: Token transfer failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49","typeString":"literal_string \"TokenPurchase: Token transfer failed\""}],"id":782,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"8312:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8312:123:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":790,"nodeType":"ExpressionStatement","src":"8312:123:4"}]},"documentation":{"id":749,"nodeType":"StructuredDocumentation","src":"7895:123:4","text":" @dev Allow admin to withdraw tokens from the contract\n @param _amount Amount of tokens to withdraw"},"functionSelector":"315a095d","id":792,"implemented":true,"kind":"function","modifiers":[{"id":754,"kind":"modifierInvocation","modifierName":{"id":753,"name":"onlyOwner","nameLocations":["8073:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":58,"src":"8073:9:4"},"nodeType":"ModifierInvocation","src":"8073:9:4"}],"name":"withdrawTokens","nameLocation":"8032:14:4","nodeType":"FunctionDefinition","parameters":{"id":752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":751,"mutability":"mutable","name":"_amount","nameLocation":"8055:7:4","nodeType":"VariableDeclaration","scope":792,"src":"8047:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":750,"name":"uint256","nodeType":"ElementaryTypeName","src":"8047:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8046:17:4"},"returnParameters":{"id":755,"nodeType":"ParameterList","parameters":[],"src":"8083:0:4"},"scope":793,"src":"8023:419:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":794,"src":"413:8031:4","usedErrors":[13,18],"usedEvents":[24,308,316,320]}],"src":"32:8413:4"},"id":4}},"contracts":{"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"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. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the address provided by the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    /**\\n     * @dev The caller account is not authorized to perform an operation.\\n     */\\n    error OwnableUnauthorizedAccount(address account);\\n\\n    /**\\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n     */\\n    error OwnableInvalidOwner(address owner);\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n     */\\n    constructor(address initialOwner) {\\n        if (initialOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(initialOwner);\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        if (owner() != _msgSender()) {\\n            revert OwnableUnauthorizedAccount(_msgSender());\\n        }\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        if (newOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8,"contract":"@openzeppelin/contracts/access/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the ERC-20 standard as defined in the ERC.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"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."},"approve(address,uint256)":{"details":"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n     * caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface for the optional metadata functions from the ERC-20 standard.","events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"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."},"approve(address,uint256)":{"details":"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"decimals()":{"details":"Returns the decimals places of the token."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"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.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n     * caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"devdoc":{"details":"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/TokenPurchase.sol":{"TokenPurchase":{"abi":[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_initialPaymentReceiver","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_paymentToken","type":"address"},{"internalType":"uint256","name":"_initialPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinAmount","type":"uint256"}],"name":"MinPurchaseAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalCost","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"inputs":[],"name":"currentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentToken","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"setMinPurchaseAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentReceiver","type":"address"}],"name":"setPaymentReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"setPaymentToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract providing purchase functionality for tokens with price set by admin","errors":{"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"kind":"dev","methods":{"constructor":{"details":"Constructor","params":{"_initialOwner":"Initial admin address","_initialPaymentReceiver":"Initial payment receiver address","_initialPrice":"Initial price (can be 0 to set later)","_paymentToken":"Token used for payment (address(0) for native currency)","_token":"Token to be sold (can be address(0) to set later)"}},"getPrice()":{"details":"Get the current price","returns":{"_0":"Current price"}},"owner()":{"details":"Returns the address of the current owner."},"purchase(uint256)":{"details":"Purchase tokens","params":{"_amount":"Token amount to purchase (in smallest unit)"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"setMinPurchaseAmount(uint256)":{"details":"Set the minimum purchase amount","params":{"_minAmount":"New minimum purchase amount"}},"setPaymentReceiver(address)":{"details":"Set payment receiver address","params":{"_paymentReceiver":"New payment receiver address"}},"setPaymentToken(address)":{"details":"Set payment token address","params":{"_paymentToken":"New payment token address (address(0) for native currency)"}},"setPrice(uint256)":{"details":"Set the current price","params":{"_price":"New price (in 10**18 format, 1 = 10**18)"}},"setToken(address)":{"details":"Set token contract address","params":{"_token":"New token address"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"withdrawTokens(uint256)":{"details":"Allow admin to withdraw tokens from the contract","params":{"_amount":"Amount of tokens to withdraw"}}},"title":"TokenPurchase","version":1},"evm":{"bytecode":{"functionDebugData":{"@_397":{"entryPoint":null,"id":397,"parameterSlots":5,"returnSlots":0},"@_50":{"entryPoint":null,"id":50,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_146":{"entryPoint":418,"id":146,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":498,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256_fromMemory":{"entryPoint":526,"id":null,"parameterSlots":2,"returnSlots":5},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nativeSrc":"0:1537:5","nodeType":"YulBlock","src":"0:1537:5","statements":[{"nativeSrc":"6:3:5","nodeType":"YulBlock","src":"6:3:5","statements":[]},{"body":{"nativeSrc":"74:117:5","nodeType":"YulBlock","src":"74:117:5","statements":[{"nativeSrc":"84:22:5","nodeType":"YulAssignment","src":"84:22:5","value":{"arguments":[{"name":"offset","nativeSrc":"99:6:5","nodeType":"YulIdentifier","src":"99:6:5"}],"functionName":{"name":"mload","nativeSrc":"93:5:5","nodeType":"YulIdentifier","src":"93:5:5"},"nativeSrc":"93:13:5","nodeType":"YulFunctionCall","src":"93:13:5"},"variableNames":[{"name":"value","nativeSrc":"84:5:5","nodeType":"YulIdentifier","src":"84:5:5"}]},{"body":{"nativeSrc":"169:16:5","nodeType":"YulBlock","src":"169:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"178:1:5","nodeType":"YulLiteral","src":"178:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"181:1:5","nodeType":"YulLiteral","src":"181:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"171:6:5","nodeType":"YulIdentifier","src":"171:6:5"},"nativeSrc":"171:12:5","nodeType":"YulFunctionCall","src":"171:12:5"},"nativeSrc":"171:12:5","nodeType":"YulExpressionStatement","src":"171:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"128:5:5","nodeType":"YulIdentifier","src":"128:5:5"},{"arguments":[{"name":"value","nativeSrc":"139:5:5","nodeType":"YulIdentifier","src":"139:5:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"154:3:5","nodeType":"YulLiteral","src":"154:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"159:1:5","nodeType":"YulLiteral","src":"159:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"150:3:5","nodeType":"YulIdentifier","src":"150:3:5"},"nativeSrc":"150:11:5","nodeType":"YulFunctionCall","src":"150:11:5"},{"kind":"number","nativeSrc":"163:1:5","nodeType":"YulLiteral","src":"163:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"146:3:5","nodeType":"YulIdentifier","src":"146:3:5"},"nativeSrc":"146:19:5","nodeType":"YulFunctionCall","src":"146:19:5"}],"functionName":{"name":"and","nativeSrc":"135:3:5","nodeType":"YulIdentifier","src":"135:3:5"},"nativeSrc":"135:31:5","nodeType":"YulFunctionCall","src":"135:31:5"}],"functionName":{"name":"eq","nativeSrc":"125:2:5","nodeType":"YulIdentifier","src":"125:2:5"},"nativeSrc":"125:42:5","nodeType":"YulFunctionCall","src":"125:42:5"}],"functionName":{"name":"iszero","nativeSrc":"118:6:5","nodeType":"YulIdentifier","src":"118:6:5"},"nativeSrc":"118:50:5","nodeType":"YulFunctionCall","src":"118:50:5"},"nativeSrc":"115:70:5","nodeType":"YulIf","src":"115:70:5"}]},"name":"abi_decode_address_fromMemory","nativeSrc":"14:177:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nativeSrc":"53:6:5","nodeType":"YulTypedName","src":"53:6:5","type":""}],"returnVariables":[{"name":"value","nativeSrc":"64:5:5","nodeType":"YulTypedName","src":"64:5:5","type":""}],"src":"14:177:5"},{"body":{"nativeSrc":"345:377:5","nodeType":"YulBlock","src":"345:377:5","statements":[{"body":{"nativeSrc":"392:16:5","nodeType":"YulBlock","src":"392:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"401:1:5","nodeType":"YulLiteral","src":"401:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"404:1:5","nodeType":"YulLiteral","src":"404:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"394:6:5","nodeType":"YulIdentifier","src":"394:6:5"},"nativeSrc":"394:12:5","nodeType":"YulFunctionCall","src":"394:12:5"},"nativeSrc":"394:12:5","nodeType":"YulExpressionStatement","src":"394:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"366:7:5","nodeType":"YulIdentifier","src":"366:7:5"},{"name":"headStart","nativeSrc":"375:9:5","nodeType":"YulIdentifier","src":"375:9:5"}],"functionName":{"name":"sub","nativeSrc":"362:3:5","nodeType":"YulIdentifier","src":"362:3:5"},"nativeSrc":"362:23:5","nodeType":"YulFunctionCall","src":"362:23:5"},{"kind":"number","nativeSrc":"387:3:5","nodeType":"YulLiteral","src":"387:3:5","type":"","value":"160"}],"functionName":{"name":"slt","nativeSrc":"358:3:5","nodeType":"YulIdentifier","src":"358:3:5"},"nativeSrc":"358:33:5","nodeType":"YulFunctionCall","src":"358:33:5"},"nativeSrc":"355:53:5","nodeType":"YulIf","src":"355:53:5"},{"nativeSrc":"417:50:5","nodeType":"YulAssignment","src":"417:50:5","value":{"arguments":[{"name":"headStart","nativeSrc":"457:9:5","nodeType":"YulIdentifier","src":"457:9:5"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"427:29:5","nodeType":"YulIdentifier","src":"427:29:5"},"nativeSrc":"427:40:5","nodeType":"YulFunctionCall","src":"427:40:5"},"variableNames":[{"name":"value0","nativeSrc":"417:6:5","nodeType":"YulIdentifier","src":"417:6:5"}]},{"nativeSrc":"476:59:5","nodeType":"YulAssignment","src":"476:59:5","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"520:9:5","nodeType":"YulIdentifier","src":"520:9:5"},{"kind":"number","nativeSrc":"531:2:5","nodeType":"YulLiteral","src":"531:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"516:3:5","nodeType":"YulIdentifier","src":"516:3:5"},"nativeSrc":"516:18:5","nodeType":"YulFunctionCall","src":"516:18:5"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"486:29:5","nodeType":"YulIdentifier","src":"486:29:5"},"nativeSrc":"486:49:5","nodeType":"YulFunctionCall","src":"486:49:5"},"variableNames":[{"name":"value1","nativeSrc":"476:6:5","nodeType":"YulIdentifier","src":"476:6:5"}]},{"nativeSrc":"544:59:5","nodeType":"YulAssignment","src":"544:59:5","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"588:9:5","nodeType":"YulIdentifier","src":"588:9:5"},{"kind":"number","nativeSrc":"599:2:5","nodeType":"YulLiteral","src":"599:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"584:3:5","nodeType":"YulIdentifier","src":"584:3:5"},"nativeSrc":"584:18:5","nodeType":"YulFunctionCall","src":"584:18:5"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"554:29:5","nodeType":"YulIdentifier","src":"554:29:5"},"nativeSrc":"554:49:5","nodeType":"YulFunctionCall","src":"554:49:5"},"variableNames":[{"name":"value2","nativeSrc":"544:6:5","nodeType":"YulIdentifier","src":"544:6:5"}]},{"nativeSrc":"612:59:5","nodeType":"YulAssignment","src":"612:59:5","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"656:9:5","nodeType":"YulIdentifier","src":"656:9:5"},{"kind":"number","nativeSrc":"667:2:5","nodeType":"YulLiteral","src":"667:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"652:3:5","nodeType":"YulIdentifier","src":"652:3:5"},"nativeSrc":"652:18:5","nodeType":"YulFunctionCall","src":"652:18:5"}],"functionName":{"name":"abi_decode_address_fromMemory","nativeSrc":"622:29:5","nodeType":"YulIdentifier","src":"622:29:5"},"nativeSrc":"622:49:5","nodeType":"YulFunctionCall","src":"622:49:5"},"variableNames":[{"name":"value3","nativeSrc":"612:6:5","nodeType":"YulIdentifier","src":"612:6:5"}]},{"nativeSrc":"680:36:5","nodeType":"YulAssignment","src":"680:36:5","value":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"700:9:5","nodeType":"YulIdentifier","src":"700:9:5"},{"kind":"number","nativeSrc":"711:3:5","nodeType":"YulLiteral","src":"711:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"696:3:5","nodeType":"YulIdentifier","src":"696:3:5"},"nativeSrc":"696:19:5","nodeType":"YulFunctionCall","src":"696:19:5"}],"functionName":{"name":"mload","nativeSrc":"690:5:5","nodeType":"YulIdentifier","src":"690:5:5"},"nativeSrc":"690:26:5","nodeType":"YulFunctionCall","src":"690:26:5"},"variableNames":[{"name":"value4","nativeSrc":"680:6:5","nodeType":"YulIdentifier","src":"680:6:5"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256_fromMemory","nativeSrc":"196:526:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"279:9:5","nodeType":"YulTypedName","src":"279:9:5","type":""},{"name":"dataEnd","nativeSrc":"290:7:5","nodeType":"YulTypedName","src":"290:7:5","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"302:6:5","nodeType":"YulTypedName","src":"302:6:5","type":""},{"name":"value1","nativeSrc":"310:6:5","nodeType":"YulTypedName","src":"310:6:5","type":""},{"name":"value2","nativeSrc":"318:6:5","nodeType":"YulTypedName","src":"318:6:5","type":""},{"name":"value3","nativeSrc":"326:6:5","nodeType":"YulTypedName","src":"326:6:5","type":""},{"name":"value4","nativeSrc":"334:6:5","nodeType":"YulTypedName","src":"334:6:5","type":""}],"src":"196:526:5"},{"body":{"nativeSrc":"828:102:5","nodeType":"YulBlock","src":"828:102:5","statements":[{"nativeSrc":"838:26:5","nodeType":"YulAssignment","src":"838:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"850:9:5","nodeType":"YulIdentifier","src":"850:9:5"},{"kind":"number","nativeSrc":"861:2:5","nodeType":"YulLiteral","src":"861:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"846:3:5","nodeType":"YulIdentifier","src":"846:3:5"},"nativeSrc":"846:18:5","nodeType":"YulFunctionCall","src":"846:18:5"},"variableNames":[{"name":"tail","nativeSrc":"838:4:5","nodeType":"YulIdentifier","src":"838:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"880:9:5","nodeType":"YulIdentifier","src":"880:9:5"},{"arguments":[{"name":"value0","nativeSrc":"895:6:5","nodeType":"YulIdentifier","src":"895:6:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"911:3:5","nodeType":"YulLiteral","src":"911:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"916:1:5","nodeType":"YulLiteral","src":"916:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"907:3:5","nodeType":"YulIdentifier","src":"907:3:5"},"nativeSrc":"907:11:5","nodeType":"YulFunctionCall","src":"907:11:5"},{"kind":"number","nativeSrc":"920:1:5","nodeType":"YulLiteral","src":"920:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"903:3:5","nodeType":"YulIdentifier","src":"903:3:5"},"nativeSrc":"903:19:5","nodeType":"YulFunctionCall","src":"903:19:5"}],"functionName":{"name":"and","nativeSrc":"891:3:5","nodeType":"YulIdentifier","src":"891:3:5"},"nativeSrc":"891:32:5","nodeType":"YulFunctionCall","src":"891:32:5"}],"functionName":{"name":"mstore","nativeSrc":"873:6:5","nodeType":"YulIdentifier","src":"873:6:5"},"nativeSrc":"873:51:5","nodeType":"YulFunctionCall","src":"873:51:5"},"nativeSrc":"873:51:5","nodeType":"YulExpressionStatement","src":"873:51:5"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"727:203:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"797:9:5","nodeType":"YulTypedName","src":"797:9:5","type":""},{"name":"value0","nativeSrc":"808:6:5","nodeType":"YulTypedName","src":"808:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"819:4:5","nodeType":"YulTypedName","src":"819:4:5","type":""}],"src":"727:203:5"},{"body":{"nativeSrc":"1109:244:5","nodeType":"YulBlock","src":"1109:244:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1126:9:5","nodeType":"YulIdentifier","src":"1126:9:5"},{"kind":"number","nativeSrc":"1137:2:5","nodeType":"YulLiteral","src":"1137:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"1119:6:5","nodeType":"YulIdentifier","src":"1119:6:5"},"nativeSrc":"1119:21:5","nodeType":"YulFunctionCall","src":"1119:21:5"},"nativeSrc":"1119:21:5","nodeType":"YulExpressionStatement","src":"1119:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1160:9:5","nodeType":"YulIdentifier","src":"1160:9:5"},{"kind":"number","nativeSrc":"1171:2:5","nodeType":"YulLiteral","src":"1171:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1156:3:5","nodeType":"YulIdentifier","src":"1156:3:5"},"nativeSrc":"1156:18:5","nodeType":"YulFunctionCall","src":"1156:18:5"},{"kind":"number","nativeSrc":"1176:2:5","nodeType":"YulLiteral","src":"1176:2:5","type":"","value":"54"}],"functionName":{"name":"mstore","nativeSrc":"1149:6:5","nodeType":"YulIdentifier","src":"1149:6:5"},"nativeSrc":"1149:30:5","nodeType":"YulFunctionCall","src":"1149:30:5"},"nativeSrc":"1149:30:5","nodeType":"YulExpressionStatement","src":"1149:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1199:9:5","nodeType":"YulIdentifier","src":"1199:9:5"},{"kind":"number","nativeSrc":"1210:2:5","nodeType":"YulLiteral","src":"1210:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1195:3:5","nodeType":"YulIdentifier","src":"1195:3:5"},"nativeSrc":"1195:18:5","nodeType":"YulFunctionCall","src":"1195:18:5"},{"hexValue":"546f6b656e50757263686173653a205061796d656e7420726563656976657220","kind":"string","nativeSrc":"1215:34:5","nodeType":"YulLiteral","src":"1215:34:5","type":"","value":"TokenPurchase: Payment receiver "}],"functionName":{"name":"mstore","nativeSrc":"1188:6:5","nodeType":"YulIdentifier","src":"1188:6:5"},"nativeSrc":"1188:62:5","nodeType":"YulFunctionCall","src":"1188:62:5"},"nativeSrc":"1188:62:5","nodeType":"YulExpressionStatement","src":"1188:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1270:9:5","nodeType":"YulIdentifier","src":"1270:9:5"},{"kind":"number","nativeSrc":"1281:2:5","nodeType":"YulLiteral","src":"1281:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"1266:3:5","nodeType":"YulIdentifier","src":"1266:3:5"},"nativeSrc":"1266:18:5","nodeType":"YulFunctionCall","src":"1266:18:5"},{"hexValue":"63616e6e6f74206265207a65726f2061646472657373","kind":"string","nativeSrc":"1286:24:5","nodeType":"YulLiteral","src":"1286:24:5","type":"","value":"cannot be zero address"}],"functionName":{"name":"mstore","nativeSrc":"1259:6:5","nodeType":"YulIdentifier","src":"1259:6:5"},"nativeSrc":"1259:52:5","nodeType":"YulFunctionCall","src":"1259:52:5"},"nativeSrc":"1259:52:5","nodeType":"YulExpressionStatement","src":"1259:52:5"},{"nativeSrc":"1320:27:5","nodeType":"YulAssignment","src":"1320:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"1332:9:5","nodeType":"YulIdentifier","src":"1332:9:5"},{"kind":"number","nativeSrc":"1343:3:5","nodeType":"YulLiteral","src":"1343:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"1328:3:5","nodeType":"YulIdentifier","src":"1328:3:5"},"nativeSrc":"1328:19:5","nodeType":"YulFunctionCall","src":"1328:19:5"},"variableNames":[{"name":"tail","nativeSrc":"1320:4:5","nodeType":"YulIdentifier","src":"1320:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"935:418:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1086:9:5","nodeType":"YulTypedName","src":"1086:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1100:4:5","nodeType":"YulTypedName","src":"1100:4:5","type":""}],"src":"935:418:5"},{"body":{"nativeSrc":"1459:76:5","nodeType":"YulBlock","src":"1459:76:5","statements":[{"nativeSrc":"1469:26:5","nodeType":"YulAssignment","src":"1469:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"1481:9:5","nodeType":"YulIdentifier","src":"1481:9:5"},{"kind":"number","nativeSrc":"1492:2:5","nodeType":"YulLiteral","src":"1492:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1477:3:5","nodeType":"YulIdentifier","src":"1477:3:5"},"nativeSrc":"1477:18:5","nodeType":"YulFunctionCall","src":"1477:18:5"},"variableNames":[{"name":"tail","nativeSrc":"1469:4:5","nodeType":"YulIdentifier","src":"1469:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1511:9:5","nodeType":"YulIdentifier","src":"1511:9:5"},{"name":"value0","nativeSrc":"1522:6:5","nodeType":"YulIdentifier","src":"1522:6:5"}],"functionName":{"name":"mstore","nativeSrc":"1504:6:5","nodeType":"YulIdentifier","src":"1504:6:5"},"nativeSrc":"1504:25:5","nodeType":"YulFunctionCall","src":"1504:25:5"},"nativeSrc":"1504:25:5","nodeType":"YulExpressionStatement","src":"1504:25:5"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"1358:177:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1428:9:5","nodeType":"YulTypedName","src":"1428:9:5","type":""},{"name":"value0","nativeSrc":"1439:6:5","nodeType":"YulTypedName","src":"1439:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1450:4:5","nodeType":"YulTypedName","src":"1450:4:5","type":""}],"src":"1358:177:5"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n        value3 := abi_decode_address_fromMemory(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"TokenPurchase: Payment receiver \")\n        mstore(add(headStart, 96), \"cannot be zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":5,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161147f38038061147f83398101604081905261002f9161020e565b846001600160a01b03811661005f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610068816101a2565b506001600160a01b0384166100e55760405162461bcd60e51b815260206004820152603660248201527f546f6b656e50757263686173653a205061796d656e742072656365697665722060448201527f63616e6e6f74206265207a65726f2061646472657373000000000000000000006064820152608401610056565b600480546001600160a01b0319166001600160a01b038681169190911790915583161561012857600180546001600160a01b0319166001600160a01b0385161790555b6001600160a01b0382161561015357600280546001600160a01b0319166001600160a01b0384161790555b80156101925760038190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe09060200160405180910390a15b505060006005555061026c915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461020957600080fd5b919050565b600080600080600060a0868803121561022657600080fd5b61022f866101f2565b945061023d602087016101f2565b935061024b604087016101f2565b9250610259606087016101f2565b9150608086015190509295509295909350565b6112048061027b6000396000f3fe6080604052600436106100f35760003560e01c806398d5fdca1161008a578063e9d3fb7811610059578063e9d3fb7814610275578063efef39a114610295578063f2fde38b146102a8578063fc0c546a146102c857600080fd5b806398d5fdca1461020a5780639d1b464a14610229578063b47dbf221461023f578063cb37f3b21461025557600080fd5b80636a326ab1116100c65780636a326ab114610197578063715018a6146101b75780638da5cb5b146101cc57806391b7f5ed146101ea57600080fd5b8063144fa6d7146100f85780633013ce291461011a578063315a095d1461015757806365ebf99a14610177575b600080fd5b34801561010457600080fd5b50610118610113366004610f23565b6102e8565b005b34801561012657600080fd5b5060025461013a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016357600080fd5b50610118610172366004610f53565b610381565b34801561018357600080fd5b50610118610192366004610f23565b610507565b3480156101a357600080fd5b506101186101b2366004610f23565b6105a6565b3480156101c357600080fd5b506101186105f0565b3480156101d857600080fd5b506000546001600160a01b031661013a565b3480156101f657600080fd5b50610118610205366004610f53565b610604565b34801561021657600080fd5b506003545b60405190815260200161014e565b34801561023557600080fd5b5061021b60035481565b34801561024b57600080fd5b5061021b60055481565b34801561026157600080fd5b5060045461013a906001600160a01b031681565b34801561028157600080fd5b50610118610290366004610f53565b6106af565b6101186102a3366004610f53565b6106ec565b3480156102b457600080fd5b506101186102c3366004610f23565b610e6b565b3480156102d457600080fd5b5060015461013a906001600160a01b031681565b6102f0610ea6565b6001600160a01b03811661035f5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e50757263686173653a20546f6b656e2063616e6e6f74206265207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610389610ea6565b6001546001600160a01b03166103e15760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e50757263686173653a20546f6b656e206e6f7420736574000000006044820152606401610356565b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015610429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044d9190610f6c565b101561046b5760405162461bcd60e51b815260040161035690610f85565b6001546004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018490529091169063a9059cbb906044016020604051808303816000875af11580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190610fce565b6105045760405162461bcd60e51b815260040161035690610ff0565b50565b61050f610ea6565b6001600160a01b0381166105845760405162461bcd60e51b815260206004820152603660248201527f546f6b656e50757263686173653a205061796d656e742072656365697665722060448201527563616e6e6f74206265207a65726f206164647265737360501b6064820152608401610356565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6105ae610ea6565b6001600160a01b038116156105dd57600280546001600160a01b0383166001600160a01b031990911617905550565b600280546001600160a01b031916905550565b6105f8610ea6565b6106026000610ed3565b565b61060c610ea6565b600081116106735760405162461bcd60e51b815260206004820152602e60248201527f546f6b656e50757263686173653a205072696365206d7573742062652067726560448201526d61746572207468616e207a65726f60901b6064820152608401610356565b60038190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe0906020015b60405180910390a150565b6106b7610ea6565b60058190556040518181527f8daad05472f6141017dfcc093d307683226fb7016d5d33792c961bd20a8ad2de906020016106a4565b6001546001600160a01b03166107445760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e50757263686173653a20546f6b656e206e6f7420736574000000006044820152606401610356565b6000600354116107965760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e50757263686173653a205072696365206e6f7420736574000000006044820152606401610356565b600081116107fe5760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e50757263686173653a20416d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b6064820152608401610356565b60055481101561086c5760405162461bcd60e51b815260206004820152603360248201527f546f6b656e50757263686173653a20416d6f756e742062656c6f77206d696e696044820152721b5d5b481c1d5c98da185cd948185b5bdd5b9d606a1b6064820152608401610356565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156108b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108da9190611034565b6002549091506000906001600160a01b03161561096d57600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109689190611034565b610970565b60125b9050600083600354610982919061106d565b90506000610998670de0b6b3a76400008361108a565b905060008111610a035760405162461bcd60e51b815260206004820152603060248201527f546f6b656e50757263686173653a20436f73742063616c63756c6174696f6e2060448201526f726573756c74656420696e207a65726f60801b6064820152608401610356565b8260ff168460ff1614610a66578260ff168460ff161115610a4457610a2883856110ac565b610a3390600a6111ac565b610a3d908261108a565b9050610a66565b610a4e84846110ac565b610a5990600a6111ac565b610a63908261106d565b90505b60008111610ad55760405162461bcd60e51b815260206004820152603660248201527f546f6b656e50757263686173653a2046696e616c20636f73742063616c63756c6044820152756174696f6e20726573756c74656420696e207a65726f60501b6064820152608401610356565b6001546040516370a0823160e01b815230600482015286916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190610f6c565b1015610b5f5760405162461bcd60e51b815260040161035690610f85565b6002546001600160a01b0316610c4b5780341015610bcb5760405162461bcd60e51b815260206004820152602360248201527f546f6b656e50757263686173653a20496e73756666696369656e74207061796d604482015262195b9d60ea1b6064820152608401610356565b6004546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b5080341115610c4657336108fc610c1c83346111bb565b6040518115909202916000818181858888f19350505050158015610c44573d6000803e3d6000fd5b505b610d98565b3415610cb45760405162461bcd60e51b815260206004820152603260248201527f546f6b656e50757263686173653a20455448206e6f7420616363657074656420604482015271666f7220746f6b656e207061796d656e747360701b6064820152608401610356565b600254600480546040516323b872dd60e01b815233928101929092526001600160a01b03908116602483015260448201849052909116906323b872dd906064016020604051808303816000875af1158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190610fce565b610d985760405162461bcd60e51b815260206004820152602c60248201527f546f6b656e50757263686173653a205061796d656e7420746f6b656e2074726160448201526b1b9cd9995c8819985a5b195960a21b6064820152608401610356565b60015460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190610fce565b610e295760405162461bcd60e51b815260040161035690610ff0565b604080518681526020810183905233917f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f33910160405180910390a25050505050565b610e73610ea6565b6001600160a01b038116610e9d57604051631e4fbdf760e01b815260006004820152602401610356565b61050481610ed3565b6000546001600160a01b031633146106025760405163118cdaa760e01b8152336004820152602401610356565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610f3557600080fd5b81356001600160a01b0381168114610f4c57600080fd5b9392505050565b600060208284031215610f6557600080fd5b5035919050565b600060208284031215610f7e57600080fd5b5051919050565b60208082526029908201527f546f6b656e50757263686173653a20496e73756666696369656e7420746f6b656040820152686e2062616c616e636560b81b606082015260800190565b600060208284031215610fe057600080fd5b81518015158114610f4c57600080fd5b60208082526024908201527f546f6b656e50757263686173653a20546f6b656e207472616e736665722066616040820152631a5b195960e21b606082015260800190565b60006020828403121561104657600080fd5b815160ff81168114610f4c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761108457611084611057565b92915050565b6000826110a757634e487b7160e01b600052601260045260246000fd5b500490565b60ff828116828216039081111561108457611084611057565b6001815b6001841115611100578085048111156110e4576110e4611057565b60018416156110f257908102905b60019390931c9280026110c9565b935093915050565b60008261111757506001611084565b8161112457506000611084565b816001811461113a576002811461114457611160565b6001915050611084565b60ff84111561115557611155611057565b50506001821b611084565b5060208310610133831016604e8410600b8410161715611183575081810a611084565b61119060001984846110c5565b80600019048211156111a4576111a4611057565b029392505050565b6000610f4c60ff841683611108565b818103818111156110845761108461105756fea2646970667358221220abe8ef6b15f31835ea297e84423450b0231b730c0f5897b47c41cc26a37b792a64736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x147F CODESIZE SUB DUP1 PUSH2 0x147F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x20E JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x5F JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x68 DUP2 PUSH2 0x1A2 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205061796D656E7420726563656976657220 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x63616E6E6F74206265207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP4 AND ISZERO PUSH2 0x128 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x153 JUMPI PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x192 JUMPI PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x66CBCA4F3C64FECF1DCB9CE094ABCF7F68C3450A1D4E3A8E917DD621EDB4EBE0 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP PUSH1 0x0 PUSH1 0x5 SSTORE POP PUSH2 0x26C SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22F DUP7 PUSH2 0x1F2 JUMP JUMPDEST SWAP5 POP PUSH2 0x23D PUSH1 0x20 DUP8 ADD PUSH2 0x1F2 JUMP JUMPDEST SWAP4 POP PUSH2 0x24B PUSH1 0x40 DUP8 ADD PUSH2 0x1F2 JUMP JUMPDEST SWAP3 POP PUSH2 0x259 PUSH1 0x60 DUP8 ADD PUSH2 0x1F2 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH2 0x1204 DUP1 PUSH2 0x27B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x98D5FDCA GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xE9D3FB78 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xE9D3FB78 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0xEFEF39A1 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x9D1B464A EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xB47DBF22 EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0xCB37F3B2 EQ PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6A326AB1 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x6A326AB1 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x91B7F5ED EQ PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x144FA6D7 EQ PUSH2 0xF8 JUMPI DUP1 PUSH4 0x3013CE29 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x315A095D EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x65EBF99A EQ PUSH2 0x177 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x2E8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x13A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x381 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x192 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x507 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x1B2 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x5A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x5F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x604 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21B PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21B PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x261 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x13A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x6AF JUMP JUMPDEST PUSH2 0x118 PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x6EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0xE6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH2 0x13A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2F0 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x35F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E2063616E6E6F74206265207A PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x65726F2061646472657373 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x389 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E206E6F742073657400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x429 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x44D SWAP2 SWAP1 PUSH2 0xF6C JUMP JUMPDEST LT ISZERO PUSH2 0x46B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xF85 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E8 SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST PUSH2 0x504 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xFF0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x50F PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x584 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205061796D656E7420726563656976657220 PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x63616E6E6F74206265207A65726F2061646472657373 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5AE PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x5DD JUMPI PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x5F8 PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x602 PUSH1 0x0 PUSH2 0xED3 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x60C PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x673 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205072696365206D75737420626520677265 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x61746572207468616E207A65726F PUSH1 0x90 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x66CBCA4F3C64FECF1DCB9CE094ABCF7F68C3450A1D4E3A8E917DD621EDB4EBE0 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x6B7 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x8DAAD05472F6141017DFCC093D307683226FB7016D5D33792C961BD20A8AD2DE SWAP1 PUSH1 0x20 ADD PUSH2 0x6A4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x744 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E206E6F742073657400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SLOAD GT PUSH2 0x796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205072696365206E6F742073657400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x7FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20416D6F756E74206D757374206265206772 PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x6561746572207468616E207A65726F PUSH1 0x88 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x86C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20416D6F756E742062656C6F77206D696E69 PUSH1 0x44 DUP3 ADD MSTORE PUSH19 0x1B5D5B481C1D5C98DA185CD948185B5BDD5B9D PUSH1 0x6A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8DA SWAP2 SWAP1 PUSH2 0x1034 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x96D JUMPI PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x944 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x968 SWAP2 SWAP1 PUSH2 0x1034 JUMP JUMPDEST PUSH2 0x970 JUMP JUMPDEST PUSH1 0x12 JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x3 SLOAD PUSH2 0x982 SWAP2 SWAP1 PUSH2 0x106D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x998 PUSH8 0xDE0B6B3A7640000 DUP4 PUSH2 0x108A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xA03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20436F73742063616C63756C6174696F6E20 PUSH1 0x44 DUP3 ADD MSTORE PUSH16 0x726573756C74656420696E207A65726F PUSH1 0x80 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST DUP3 PUSH1 0xFF AND DUP5 PUSH1 0xFF AND EQ PUSH2 0xA66 JUMPI DUP3 PUSH1 0xFF AND DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0xA44 JUMPI PUSH2 0xA28 DUP4 DUP6 PUSH2 0x10AC JUMP JUMPDEST PUSH2 0xA33 SWAP1 PUSH1 0xA PUSH2 0x11AC JUMP JUMPDEST PUSH2 0xA3D SWAP1 DUP3 PUSH2 0x108A JUMP JUMPDEST SWAP1 POP PUSH2 0xA66 JUMP JUMPDEST PUSH2 0xA4E DUP5 DUP5 PUSH2 0x10AC JUMP JUMPDEST PUSH2 0xA59 SWAP1 PUSH1 0xA PUSH2 0x11AC JUMP JUMPDEST PUSH2 0xA63 SWAP1 DUP3 PUSH2 0x106D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xAD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A2046696E616C20636F73742063616C63756C PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x6174696F6E20726573756C74656420696E207A65726F PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP7 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB41 SWAP2 SWAP1 PUSH2 0xF6C JUMP JUMPDEST LT ISZERO PUSH2 0xB5F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xF85 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC4B JUMPI DUP1 CALLVALUE LT ISZERO PUSH2 0xBCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20496E73756666696369656E74207061796D PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x195B9D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xC05 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP DUP1 CALLVALUE GT ISZERO PUSH2 0xC46 JUMPI CALLER PUSH2 0x8FC PUSH2 0xC1C DUP4 CALLVALUE PUSH2 0x11BB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 ISZERO SWAP1 SWAP3 MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xC44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST PUSH2 0xD98 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0xCB4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20455448206E6F7420616363657074656420 PUSH1 0x44 DUP3 ADD MSTORE PUSH18 0x666F7220746F6B656E207061796D656E7473 PUSH1 0x70 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD37 SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST PUSH2 0xD98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205061796D656E7420746F6B656E20747261 PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x1B9CD9995C8819985A5B1959 PUSH1 0xA2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDE9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE0D SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST PUSH2 0xE29 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE CALLER SWAP2 PUSH32 0x8FAFEBCAF9D154343DAD25669BFA277F4FBACD7AC6B0C4FED522580E040A0F33 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE73 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x356 JUMP JUMPDEST PUSH2 0x504 DUP2 PUSH2 0xED3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x602 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xF4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20496E73756666696369656E7420746F6B65 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x6E2062616C616E6365 PUSH1 0xB8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E207472616E73666572206661 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x1A5B1959 PUSH1 0xE2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1046 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x1084 JUMPI PUSH2 0x1084 PUSH2 0x1057 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x10A7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1084 JUMPI PUSH2 0x1084 PUSH2 0x1057 JUMP JUMPDEST PUSH1 0x1 DUP2 JUMPDEST PUSH1 0x1 DUP5 GT ISZERO PUSH2 0x1100 JUMPI DUP1 DUP6 DIV DUP2 GT ISZERO PUSH2 0x10E4 JUMPI PUSH2 0x10E4 PUSH2 0x1057 JUMP JUMPDEST PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x10F2 JUMPI SWAP1 DUP2 MUL SWAP1 JUMPDEST PUSH1 0x1 SWAP4 SWAP1 SWAP4 SHR SWAP3 DUP1 MUL PUSH2 0x10C9 JUMP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1117 JUMPI POP PUSH1 0x1 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH2 0x1124 JUMPI POP PUSH1 0x0 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x113A JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1144 JUMPI PUSH2 0x1160 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1084 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1155 JUMPI PUSH2 0x1155 PUSH2 0x1057 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1084 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x1183 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x1190 PUSH1 0x0 NOT DUP5 DUP5 PUSH2 0x10C5 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x11A4 JUMPI PUSH2 0x11A4 PUSH2 0x1057 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF4C PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x1108 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1084 JUMPI PUSH2 0x1084 PUSH2 0x1057 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB 0xE8 0xEF PUSH12 0x15F31835EA297E84423450B0 0x23 SHL PUSH20 0xC0F5897B47C41CC26A37B792A64736F6C634300 ADDMOD SHR STOP CALLER ","sourceMap":"413:8031:4:-:0;;;1566:989;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1750:13;-1:-1:-1;;;;;1273:26:0;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:0;;1350:1;1322:31;;;873:51:5;846:18;;1322:31:0;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1796:37:4;::::1;1775:138;;;::::0;-1:-1:-1;;;1775:138:4;;1137:2:5;1775:138:4::1;::::0;::::1;1119:21:5::0;1176:2;1156:18;;;1149:30;1215:34;1195:18;;;1188:62;1286:24;1266:18;;;1259:52;1328:19;;1775:138:4::1;935:418:5::0;1775:138:4::1;1923:15;:41:::0;;-1:-1:-1;;;;;;1923:41:4::1;-1:-1:-1::0;;;;;1923:41:4;;::::1;::::0;;;::::1;::::0;;;2023:20;::::1;::::0;2019:81:::1;;2059:5;:30:::0;;-1:-1:-1;;;;;;2059:30:4::1;-1:-1:-1::0;;;;;2059:30:4;::::1;;::::0;;2019:81:::1;-1:-1:-1::0;;;;;2194:27:4;::::1;::::0;2190:102:::1;;2237:12;:44:::0;;-1:-1:-1;;;;;;2237:44:4::1;-1:-1:-1::0;;;;;2237:44:4;::::1;;::::0;;2190:102:::1;2347:17:::0;;2343:122:::1;;2380:12;:28:::0;;;2427:27:::1;::::0;1504:25:5;;;2427:27:4::1;::::0;1492:2:5;1477:18;2427:27:4::1;;;;;;;2343:122;-1:-1:-1::0;;2547:1:4::1;2527:17;:21:::0;-1:-1:-1;413:8031:4;;-1:-1:-1;;413:8031:4;2912:187:0;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:177:5:-;93:13;;-1:-1:-1;;;;;135:31:5;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:526::-;302:6;310;318;326;334;387:3;375:9;366:7;362:23;358:33;355:53;;;404:1;401;394:12;355:53;427:40;457:9;427:40;:::i;:::-;417:50;;486:49;531:2;520:9;516:18;486:49;:::i;:::-;476:59;;554:49;599:2;588:9;584:18;554:49;:::i;:::-;544:59;;622:49;667:2;656:9;652:18;622:49;:::i;:::-;612:59;;711:3;700:9;696:19;690:26;680:36;;196:526;;;;;;;;:::o;1358:177::-;413:8031:4;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_checkOwner_84":{"entryPoint":3750,"id":84,"parameterSlots":0,"returnSlots":0},"@_msgSender_263":{"entryPoint":null,"id":263,"parameterSlots":0,"returnSlots":1},"@_transferOwnership_146":{"entryPoint":3795,"id":146,"parameterSlots":1,"returnSlots":0},"@currentPrice_300":{"entryPoint":null,"id":300,"parameterSlots":0,"returnSlots":0},"@getPrice_528":{"entryPoint":null,"id":528,"parameterSlots":0,"returnSlots":1},"@minPurchaseAmount_304":{"entryPoint":null,"id":304,"parameterSlots":0,"returnSlots":0},"@owner_67":{"entryPoint":null,"id":67,"parameterSlots":0,"returnSlots":1},"@paymentReceiver_302":{"entryPoint":null,"id":302,"parameterSlots":0,"returnSlots":0},"@paymentToken_298":{"entryPoint":null,"id":298,"parameterSlots":0,"returnSlots":0},"@purchase_748":{"entryPoint":1772,"id":748,"parameterSlots":1,"returnSlots":0},"@renounceOwnership_98":{"entryPoint":1520,"id":98,"parameterSlots":0,"returnSlots":0},"@setMinPurchaseAmount_519":{"entryPoint":1711,"id":519,"parameterSlots":1,"returnSlots":0},"@setPaymentReceiver_478":{"entryPoint":1287,"id":478,"parameterSlots":1,"returnSlots":0},"@setPaymentToken_455":{"entryPoint":1446,"id":455,"parameterSlots":1,"returnSlots":0},"@setPrice_502":{"entryPoint":1540,"id":502,"parameterSlots":1,"returnSlots":0},"@setToken_422":{"entryPoint":744,"id":422,"parameterSlots":1,"returnSlots":0},"@token_295":{"entryPoint":null,"id":295,"parameterSlots":0,"returnSlots":0},"@transferOwnership_126":{"entryPoint":3691,"id":126,"parameterSlots":1,"returnSlots":0},"@withdrawTokens_792":{"entryPoint":897,"id":792,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":3875,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":4046,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":3923,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":3948,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":4148,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC20Metadata_$251__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_11642e9233fe172eab34f4905f0584687897e70bc8ec7e4d8b15b3d4ba325986__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_11b85f859e9db479f4e9a393f5c066cd334f3c888472f0da611fdbb5e80d3e98__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3973,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_429a1077f877e28e64b739f25ce90c3083d57226e67a690330c3580fae257b3f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_80f6aac1d203b48e1f5d29c7815975057f3643826d381b01ea7edb253b073c3f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_86886174ef161c6cf8e241afb3d54b8fd98ef4fb31194412942366cb2d4c46e5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4080,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ad081e590cc39a4a4599d635bc01bb3e69c58ba2fe8790475bfac5b89b951cd3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d1fdc132d89d24a49c6afa67728e034ca70424bb4d57719902661918e12b5ed4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e0d3afde06c8f12253dc08a4a976ec97d1840e5744b136804d7cdd0c6c304b49__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e27685788135ac0f16015c706d402c0b6bf54cb489a2b8a881f3e9924a771add__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e6aaba7be610f33a5546704299f3a3452d6d6167ed801da7a1aee43030488970__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":4234,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":4293,"id":null,"parameterSlots":3,"returnSlots":2},"checked_exp_t_uint256_t_uint8":{"entryPoint":4524,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":4360,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":4205,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":4539,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint8":{"entryPoint":4268,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":4183,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nativeSrc":"0:10703:5","nodeType":"YulBlock","src":"0:10703:5","statements":[{"nativeSrc":"6:3:5","nodeType":"YulBlock","src":"6:3:5","statements":[]},{"body":{"nativeSrc":"84:216:5","nodeType":"YulBlock","src":"84:216:5","statements":[{"body":{"nativeSrc":"130:16:5","nodeType":"YulBlock","src":"130:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"139:1:5","nodeType":"YulLiteral","src":"139:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"142:1:5","nodeType":"YulLiteral","src":"142:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"132:6:5","nodeType":"YulIdentifier","src":"132:6:5"},"nativeSrc":"132:12:5","nodeType":"YulFunctionCall","src":"132:12:5"},"nativeSrc":"132:12:5","nodeType":"YulExpressionStatement","src":"132:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"105:7:5","nodeType":"YulIdentifier","src":"105:7:5"},{"name":"headStart","nativeSrc":"114:9:5","nodeType":"YulIdentifier","src":"114:9:5"}],"functionName":{"name":"sub","nativeSrc":"101:3:5","nodeType":"YulIdentifier","src":"101:3:5"},"nativeSrc":"101:23:5","nodeType":"YulFunctionCall","src":"101:23:5"},{"kind":"number","nativeSrc":"126:2:5","nodeType":"YulLiteral","src":"126:2:5","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"97:3:5","nodeType":"YulIdentifier","src":"97:3:5"},"nativeSrc":"97:32:5","nodeType":"YulFunctionCall","src":"97:32:5"},"nativeSrc":"94:52:5","nodeType":"YulIf","src":"94:52:5"},{"nativeSrc":"155:36:5","nodeType":"YulVariableDeclaration","src":"155:36:5","value":{"arguments":[{"name":"headStart","nativeSrc":"181:9:5","nodeType":"YulIdentifier","src":"181:9:5"}],"functionName":{"name":"calldataload","nativeSrc":"168:12:5","nodeType":"YulIdentifier","src":"168:12:5"},"nativeSrc":"168:23:5","nodeType":"YulFunctionCall","src":"168:23:5"},"variables":[{"name":"value","nativeSrc":"159:5:5","nodeType":"YulTypedName","src":"159:5:5","type":""}]},{"body":{"nativeSrc":"254:16:5","nodeType":"YulBlock","src":"254:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"263:1:5","nodeType":"YulLiteral","src":"263:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"266:1:5","nodeType":"YulLiteral","src":"266:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"256:6:5","nodeType":"YulIdentifier","src":"256:6:5"},"nativeSrc":"256:12:5","nodeType":"YulFunctionCall","src":"256:12:5"},"nativeSrc":"256:12:5","nodeType":"YulExpressionStatement","src":"256:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"213:5:5","nodeType":"YulIdentifier","src":"213:5:5"},{"arguments":[{"name":"value","nativeSrc":"224:5:5","nodeType":"YulIdentifier","src":"224:5:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"239:3:5","nodeType":"YulLiteral","src":"239:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"244:1:5","nodeType":"YulLiteral","src":"244:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"235:3:5","nodeType":"YulIdentifier","src":"235:3:5"},"nativeSrc":"235:11:5","nodeType":"YulFunctionCall","src":"235:11:5"},{"kind":"number","nativeSrc":"248:1:5","nodeType":"YulLiteral","src":"248:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"231:3:5","nodeType":"YulIdentifier","src":"231:3:5"},"nativeSrc":"231:19:5","nodeType":"YulFunctionCall","src":"231:19:5"}],"functionName":{"name":"and","nativeSrc":"220:3:5","nodeType":"YulIdentifier","src":"220:3:5"},"nativeSrc":"220:31:5","nodeType":"YulFunctionCall","src":"220:31:5"}],"functionName":{"name":"eq","nativeSrc":"210:2:5","nodeType":"YulIdentifier","src":"210:2:5"},"nativeSrc":"210:42:5","nodeType":"YulFunctionCall","src":"210:42:5"}],"functionName":{"name":"iszero","nativeSrc":"203:6:5","nodeType":"YulIdentifier","src":"203:6:5"},"nativeSrc":"203:50:5","nodeType":"YulFunctionCall","src":"203:50:5"},"nativeSrc":"200:70:5","nodeType":"YulIf","src":"200:70:5"},{"nativeSrc":"279:15:5","nodeType":"YulAssignment","src":"279:15:5","value":{"name":"value","nativeSrc":"289:5:5","nodeType":"YulIdentifier","src":"289:5:5"},"variableNames":[{"name":"value0","nativeSrc":"279:6:5","nodeType":"YulIdentifier","src":"279:6:5"}]}]},"name":"abi_decode_tuple_t_address","nativeSrc":"14:286:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"50:9:5","nodeType":"YulTypedName","src":"50:9:5","type":""},{"name":"dataEnd","nativeSrc":"61:7:5","nodeType":"YulTypedName","src":"61:7:5","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"73:6:5","nodeType":"YulTypedName","src":"73:6:5","type":""}],"src":"14:286:5"},{"body":{"nativeSrc":"428:102:5","nodeType":"YulBlock","src":"428:102:5","statements":[{"nativeSrc":"438:26:5","nodeType":"YulAssignment","src":"438:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"450:9:5","nodeType":"YulIdentifier","src":"450:9:5"},{"kind":"number","nativeSrc":"461:2:5","nodeType":"YulLiteral","src":"461:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"446:3:5","nodeType":"YulIdentifier","src":"446:3:5"},"nativeSrc":"446:18:5","nodeType":"YulFunctionCall","src":"446:18:5"},"variableNames":[{"name":"tail","nativeSrc":"438:4:5","nodeType":"YulIdentifier","src":"438:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"480:9:5","nodeType":"YulIdentifier","src":"480:9:5"},{"arguments":[{"name":"value0","nativeSrc":"495:6:5","nodeType":"YulIdentifier","src":"495:6:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"511:3:5","nodeType":"YulLiteral","src":"511:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"516:1:5","nodeType":"YulLiteral","src":"516:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"507:3:5","nodeType":"YulIdentifier","src":"507:3:5"},"nativeSrc":"507:11:5","nodeType":"YulFunctionCall","src":"507:11:5"},{"kind":"number","nativeSrc":"520:1:5","nodeType":"YulLiteral","src":"520:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"503:3:5","nodeType":"YulIdentifier","src":"503:3:5"},"nativeSrc":"503:19:5","nodeType":"YulFunctionCall","src":"503:19:5"}],"functionName":{"name":"and","nativeSrc":"491:3:5","nodeType":"YulIdentifier","src":"491:3:5"},"nativeSrc":"491:32:5","nodeType":"YulFunctionCall","src":"491:32:5"}],"functionName":{"name":"mstore","nativeSrc":"473:6:5","nodeType":"YulIdentifier","src":"473:6:5"},"nativeSrc":"473:51:5","nodeType":"YulFunctionCall","src":"473:51:5"},"nativeSrc":"473:51:5","nodeType":"YulExpressionStatement","src":"473:51:5"}]},"name":"abi_encode_tuple_t_contract$_IERC20Metadata_$251__to_t_address__fromStack_reversed","nativeSrc":"305:225:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"397:9:5","nodeType":"YulTypedName","src":"397:9:5","type":""},{"name":"value0","nativeSrc":"408:6:5","nodeType":"YulTypedName","src":"408:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"419:4:5","nodeType":"YulTypedName","src":"419:4:5","type":""}],"src":"305:225:5"},{"body":{"nativeSrc":"605:110:5","nodeType":"YulBlock","src":"605:110:5","statements":[{"body":{"nativeSrc":"651:16:5","nodeType":"YulBlock","src":"651:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"660:1:5","nodeType":"YulLiteral","src":"660:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"663:1:5","nodeType":"YulLiteral","src":"663:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"653:6:5","nodeType":"YulIdentifier","src":"653:6:5"},"nativeSrc":"653:12:5","nodeType":"YulFunctionCall","src":"653:12:5"},"nativeSrc":"653:12:5","nodeType":"YulExpressionStatement","src":"653:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"626:7:5","nodeType":"YulIdentifier","src":"626:7:5"},{"name":"headStart","nativeSrc":"635:9:5","nodeType":"YulIdentifier","src":"635:9:5"}],"functionName":{"name":"sub","nativeSrc":"622:3:5","nodeType":"YulIdentifier","src":"622:3:5"},"nativeSrc":"622:23:5","nodeType":"YulFunctionCall","src":"622:23:5"},{"kind":"number","nativeSrc":"647:2:5","nodeType":"YulLiteral","src":"647:2:5","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"618:3:5","nodeType":"YulIdentifier","src":"618:3:5"},"nativeSrc":"618:32:5","nodeType":"YulFunctionCall","src":"618:32:5"},"nativeSrc":"615:52:5","nodeType":"YulIf","src":"615:52:5"},{"nativeSrc":"676:33:5","nodeType":"YulAssignment","src":"676:33:5","value":{"arguments":[{"name":"headStart","nativeSrc":"699:9:5","nodeType":"YulIdentifier","src":"699:9:5"}],"functionName":{"name":"calldataload","nativeSrc":"686:12:5","nodeType":"YulIdentifier","src":"686:12:5"},"nativeSrc":"686:23:5","nodeType":"YulFunctionCall","src":"686:23:5"},"variableNames":[{"name":"value0","nativeSrc":"676:6:5","nodeType":"YulIdentifier","src":"676:6:5"}]}]},"name":"abi_decode_tuple_t_uint256","nativeSrc":"535:180:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"571:9:5","nodeType":"YulTypedName","src":"571:9:5","type":""},{"name":"dataEnd","nativeSrc":"582:7:5","nodeType":"YulTypedName","src":"582:7:5","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"594:6:5","nodeType":"YulTypedName","src":"594:6:5","type":""}],"src":"535:180:5"},{"body":{"nativeSrc":"821:102:5","nodeType":"YulBlock","src":"821:102:5","statements":[{"nativeSrc":"831:26:5","nodeType":"YulAssignment","src":"831:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"843:9:5","nodeType":"YulIdentifier","src":"843:9:5"},{"kind":"number","nativeSrc":"854:2:5","nodeType":"YulLiteral","src":"854:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"839:3:5","nodeType":"YulIdentifier","src":"839:3:5"},"nativeSrc":"839:18:5","nodeType":"YulFunctionCall","src":"839:18:5"},"variableNames":[{"name":"tail","nativeSrc":"831:4:5","nodeType":"YulIdentifier","src":"831:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"873:9:5","nodeType":"YulIdentifier","src":"873:9:5"},{"arguments":[{"name":"value0","nativeSrc":"888:6:5","nodeType":"YulIdentifier","src":"888:6:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"904:3:5","nodeType":"YulLiteral","src":"904:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"909:1:5","nodeType":"YulLiteral","src":"909:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"900:3:5","nodeType":"YulIdentifier","src":"900:3:5"},"nativeSrc":"900:11:5","nodeType":"YulFunctionCall","src":"900:11:5"},{"kind":"number","nativeSrc":"913:1:5","nodeType":"YulLiteral","src":"913:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"896:3:5","nodeType":"YulIdentifier","src":"896:3:5"},"nativeSrc":"896:19:5","nodeType":"YulFunctionCall","src":"896:19:5"}],"functionName":{"name":"and","nativeSrc":"884:3:5","nodeType":"YulIdentifier","src":"884:3:5"},"nativeSrc":"884:32:5","nodeType":"YulFunctionCall","src":"884:32:5"}],"functionName":{"name":"mstore","nativeSrc":"866:6:5","nodeType":"YulIdentifier","src":"866:6:5"},"nativeSrc":"866:51:5","nodeType":"YulFunctionCall","src":"866:51:5"},"nativeSrc":"866:51:5","nodeType":"YulExpressionStatement","src":"866:51:5"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nativeSrc":"720:203:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"790:9:5","nodeType":"YulTypedName","src":"790:9:5","type":""},{"name":"value0","nativeSrc":"801:6:5","nodeType":"YulTypedName","src":"801:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"812:4:5","nodeType":"YulTypedName","src":"812:4:5","type":""}],"src":"720:203:5"},{"body":{"nativeSrc":"1029:76:5","nodeType":"YulBlock","src":"1029:76:5","statements":[{"nativeSrc":"1039:26:5","nodeType":"YulAssignment","src":"1039:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"1051:9:5","nodeType":"YulIdentifier","src":"1051:9:5"},{"kind":"number","nativeSrc":"1062:2:5","nodeType":"YulLiteral","src":"1062:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1047:3:5","nodeType":"YulIdentifier","src":"1047:3:5"},"nativeSrc":"1047:18:5","nodeType":"YulFunctionCall","src":"1047:18:5"},"variableNames":[{"name":"tail","nativeSrc":"1039:4:5","nodeType":"YulIdentifier","src":"1039:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1081:9:5","nodeType":"YulIdentifier","src":"1081:9:5"},{"name":"value0","nativeSrc":"1092:6:5","nodeType":"YulIdentifier","src":"1092:6:5"}],"functionName":{"name":"mstore","nativeSrc":"1074:6:5","nodeType":"YulIdentifier","src":"1074:6:5"},"nativeSrc":"1074:25:5","nodeType":"YulFunctionCall","src":"1074:25:5"},"nativeSrc":"1074:25:5","nodeType":"YulExpressionStatement","src":"1074:25:5"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nativeSrc":"928:177:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"998:9:5","nodeType":"YulTypedName","src":"998:9:5","type":""},{"name":"value0","nativeSrc":"1009:6:5","nodeType":"YulTypedName","src":"1009:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1020:4:5","nodeType":"YulTypedName","src":"1020:4:5","type":""}],"src":"928:177:5"},{"body":{"nativeSrc":"1284:233:5","nodeType":"YulBlock","src":"1284:233:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1301:9:5","nodeType":"YulIdentifier","src":"1301:9:5"},{"kind":"number","nativeSrc":"1312:2:5","nodeType":"YulLiteral","src":"1312:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"1294:6:5","nodeType":"YulIdentifier","src":"1294:6:5"},"nativeSrc":"1294:21:5","nodeType":"YulFunctionCall","src":"1294:21:5"},"nativeSrc":"1294:21:5","nodeType":"YulExpressionStatement","src":"1294:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1335:9:5","nodeType":"YulIdentifier","src":"1335:9:5"},{"kind":"number","nativeSrc":"1346:2:5","nodeType":"YulLiteral","src":"1346:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1331:3:5","nodeType":"YulIdentifier","src":"1331:3:5"},"nativeSrc":"1331:18:5","nodeType":"YulFunctionCall","src":"1331:18:5"},{"kind":"number","nativeSrc":"1351:2:5","nodeType":"YulLiteral","src":"1351:2:5","type":"","value":"43"}],"functionName":{"name":"mstore","nativeSrc":"1324:6:5","nodeType":"YulIdentifier","src":"1324:6:5"},"nativeSrc":"1324:30:5","nodeType":"YulFunctionCall","src":"1324:30:5"},"nativeSrc":"1324:30:5","nodeType":"YulExpressionStatement","src":"1324:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1374:9:5","nodeType":"YulIdentifier","src":"1374:9:5"},{"kind":"number","nativeSrc":"1385:2:5","nodeType":"YulLiteral","src":"1385:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1370:3:5","nodeType":"YulIdentifier","src":"1370:3:5"},"nativeSrc":"1370:18:5","nodeType":"YulFunctionCall","src":"1370:18:5"},{"hexValue":"546f6b656e50757263686173653a20546f6b656e2063616e6e6f74206265207a","kind":"string","nativeSrc":"1390:34:5","nodeType":"YulLiteral","src":"1390:34:5","type":"","value":"TokenPurchase: Token cannot be z"}],"functionName":{"name":"mstore","nativeSrc":"1363:6:5","nodeType":"YulIdentifier","src":"1363:6:5"},"nativeSrc":"1363:62:5","nodeType":"YulFunctionCall","src":"1363:62:5"},"nativeSrc":"1363:62:5","nodeType":"YulExpressionStatement","src":"1363:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1445:9:5","nodeType":"YulIdentifier","src":"1445:9:5"},{"kind":"number","nativeSrc":"1456:2:5","nodeType":"YulLiteral","src":"1456:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"1441:3:5","nodeType":"YulIdentifier","src":"1441:3:5"},"nativeSrc":"1441:18:5","nodeType":"YulFunctionCall","src":"1441:18:5"},{"hexValue":"65726f2061646472657373","kind":"string","nativeSrc":"1461:13:5","nodeType":"YulLiteral","src":"1461:13:5","type":"","value":"ero address"}],"functionName":{"name":"mstore","nativeSrc":"1434:6:5","nodeType":"YulIdentifier","src":"1434:6:5"},"nativeSrc":"1434:41:5","nodeType":"YulFunctionCall","src":"1434:41:5"},"nativeSrc":"1434:41:5","nodeType":"YulExpressionStatement","src":"1434:41:5"},{"nativeSrc":"1484:27:5","nodeType":"YulAssignment","src":"1484:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"1496:9:5","nodeType":"YulIdentifier","src":"1496:9:5"},{"kind":"number","nativeSrc":"1507:3:5","nodeType":"YulLiteral","src":"1507:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"1492:3:5","nodeType":"YulIdentifier","src":"1492:3:5"},"nativeSrc":"1492:19:5","nodeType":"YulFunctionCall","src":"1492:19:5"},"variableNames":[{"name":"tail","nativeSrc":"1484:4:5","nodeType":"YulIdentifier","src":"1484:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_80f6aac1d203b48e1f5d29c7815975057f3643826d381b01ea7edb253b073c3f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1110:407:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1261:9:5","nodeType":"YulTypedName","src":"1261:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1275:4:5","nodeType":"YulTypedName","src":"1275:4:5","type":""}],"src":"1110:407:5"},{"body":{"nativeSrc":"1696:178:5","nodeType":"YulBlock","src":"1696:178:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"1713:9:5","nodeType":"YulIdentifier","src":"1713:9:5"},{"kind":"number","nativeSrc":"1724:2:5","nodeType":"YulLiteral","src":"1724:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"1706:6:5","nodeType":"YulIdentifier","src":"1706:6:5"},"nativeSrc":"1706:21:5","nodeType":"YulFunctionCall","src":"1706:21:5"},"nativeSrc":"1706:21:5","nodeType":"YulExpressionStatement","src":"1706:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1747:9:5","nodeType":"YulIdentifier","src":"1747:9:5"},{"kind":"number","nativeSrc":"1758:2:5","nodeType":"YulLiteral","src":"1758:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"1743:3:5","nodeType":"YulIdentifier","src":"1743:3:5"},"nativeSrc":"1743:18:5","nodeType":"YulFunctionCall","src":"1743:18:5"},{"kind":"number","nativeSrc":"1763:2:5","nodeType":"YulLiteral","src":"1763:2:5","type":"","value":"28"}],"functionName":{"name":"mstore","nativeSrc":"1736:6:5","nodeType":"YulIdentifier","src":"1736:6:5"},"nativeSrc":"1736:30:5","nodeType":"YulFunctionCall","src":"1736:30:5"},"nativeSrc":"1736:30:5","nodeType":"YulExpressionStatement","src":"1736:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"1786:9:5","nodeType":"YulIdentifier","src":"1786:9:5"},{"kind":"number","nativeSrc":"1797:2:5","nodeType":"YulLiteral","src":"1797:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"1782:3:5","nodeType":"YulIdentifier","src":"1782:3:5"},"nativeSrc":"1782:18:5","nodeType":"YulFunctionCall","src":"1782:18:5"},{"hexValue":"546f6b656e50757263686173653a20546f6b656e206e6f7420736574","kind":"string","nativeSrc":"1802:30:5","nodeType":"YulLiteral","src":"1802:30:5","type":"","value":"TokenPurchase: Token not set"}],"functionName":{"name":"mstore","nativeSrc":"1775:6:5","nodeType":"YulIdentifier","src":"1775:6:5"},"nativeSrc":"1775:58:5","nodeType":"YulFunctionCall","src":"1775:58:5"},"nativeSrc":"1775:58:5","nodeType":"YulExpressionStatement","src":"1775:58:5"},{"nativeSrc":"1842:26:5","nodeType":"YulAssignment","src":"1842:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"1854:9:5","nodeType":"YulIdentifier","src":"1854:9:5"},{"kind":"number","nativeSrc":"1865:2:5","nodeType":"YulLiteral","src":"1865:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"1850:3:5","nodeType":"YulIdentifier","src":"1850:3:5"},"nativeSrc":"1850:18:5","nodeType":"YulFunctionCall","src":"1850:18:5"},"variableNames":[{"name":"tail","nativeSrc":"1842:4:5","nodeType":"YulIdentifier","src":"1842:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"1522:352:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1673:9:5","nodeType":"YulTypedName","src":"1673:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"1687:4:5","nodeType":"YulTypedName","src":"1687:4:5","type":""}],"src":"1522:352:5"},{"body":{"nativeSrc":"1960:103:5","nodeType":"YulBlock","src":"1960:103:5","statements":[{"body":{"nativeSrc":"2006:16:5","nodeType":"YulBlock","src":"2006:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2015:1:5","nodeType":"YulLiteral","src":"2015:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"2018:1:5","nodeType":"YulLiteral","src":"2018:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2008:6:5","nodeType":"YulIdentifier","src":"2008:6:5"},"nativeSrc":"2008:12:5","nodeType":"YulFunctionCall","src":"2008:12:5"},"nativeSrc":"2008:12:5","nodeType":"YulExpressionStatement","src":"2008:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"1981:7:5","nodeType":"YulIdentifier","src":"1981:7:5"},{"name":"headStart","nativeSrc":"1990:9:5","nodeType":"YulIdentifier","src":"1990:9:5"}],"functionName":{"name":"sub","nativeSrc":"1977:3:5","nodeType":"YulIdentifier","src":"1977:3:5"},"nativeSrc":"1977:23:5","nodeType":"YulFunctionCall","src":"1977:23:5"},{"kind":"number","nativeSrc":"2002:2:5","nodeType":"YulLiteral","src":"2002:2:5","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"1973:3:5","nodeType":"YulIdentifier","src":"1973:3:5"},"nativeSrc":"1973:32:5","nodeType":"YulFunctionCall","src":"1973:32:5"},"nativeSrc":"1970:52:5","nodeType":"YulIf","src":"1970:52:5"},{"nativeSrc":"2031:26:5","nodeType":"YulAssignment","src":"2031:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"2047:9:5","nodeType":"YulIdentifier","src":"2047:9:5"}],"functionName":{"name":"mload","nativeSrc":"2041:5:5","nodeType":"YulIdentifier","src":"2041:5:5"},"nativeSrc":"2041:16:5","nodeType":"YulFunctionCall","src":"2041:16:5"},"variableNames":[{"name":"value0","nativeSrc":"2031:6:5","nodeType":"YulIdentifier","src":"2031:6:5"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nativeSrc":"1879:184:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"1926:9:5","nodeType":"YulTypedName","src":"1926:9:5","type":""},{"name":"dataEnd","nativeSrc":"1937:7:5","nodeType":"YulTypedName","src":"1937:7:5","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"1949:6:5","nodeType":"YulTypedName","src":"1949:6:5","type":""}],"src":"1879:184:5"},{"body":{"nativeSrc":"2242:231:5","nodeType":"YulBlock","src":"2242:231:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2259:9:5","nodeType":"YulIdentifier","src":"2259:9:5"},{"kind":"number","nativeSrc":"2270:2:5","nodeType":"YulLiteral","src":"2270:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"2252:6:5","nodeType":"YulIdentifier","src":"2252:6:5"},"nativeSrc":"2252:21:5","nodeType":"YulFunctionCall","src":"2252:21:5"},"nativeSrc":"2252:21:5","nodeType":"YulExpressionStatement","src":"2252:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2293:9:5","nodeType":"YulIdentifier","src":"2293:9:5"},{"kind":"number","nativeSrc":"2304:2:5","nodeType":"YulLiteral","src":"2304:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2289:3:5","nodeType":"YulIdentifier","src":"2289:3:5"},"nativeSrc":"2289:18:5","nodeType":"YulFunctionCall","src":"2289:18:5"},{"kind":"number","nativeSrc":"2309:2:5","nodeType":"YulLiteral","src":"2309:2:5","type":"","value":"41"}],"functionName":{"name":"mstore","nativeSrc":"2282:6:5","nodeType":"YulIdentifier","src":"2282:6:5"},"nativeSrc":"2282:30:5","nodeType":"YulFunctionCall","src":"2282:30:5"},"nativeSrc":"2282:30:5","nodeType":"YulExpressionStatement","src":"2282:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2332:9:5","nodeType":"YulIdentifier","src":"2332:9:5"},{"kind":"number","nativeSrc":"2343:2:5","nodeType":"YulLiteral","src":"2343:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2328:3:5","nodeType":"YulIdentifier","src":"2328:3:5"},"nativeSrc":"2328:18:5","nodeType":"YulFunctionCall","src":"2328:18:5"},{"hexValue":"546f6b656e50757263686173653a20496e73756666696369656e7420746f6b65","kind":"string","nativeSrc":"2348:34:5","nodeType":"YulLiteral","src":"2348:34:5","type":"","value":"TokenPurchase: Insufficient toke"}],"functionName":{"name":"mstore","nativeSrc":"2321:6:5","nodeType":"YulIdentifier","src":"2321:6:5"},"nativeSrc":"2321:62:5","nodeType":"YulFunctionCall","src":"2321:62:5"},"nativeSrc":"2321:62:5","nodeType":"YulExpressionStatement","src":"2321:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2403:9:5","nodeType":"YulIdentifier","src":"2403:9:5"},{"kind":"number","nativeSrc":"2414:2:5","nodeType":"YulLiteral","src":"2414:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"2399:3:5","nodeType":"YulIdentifier","src":"2399:3:5"},"nativeSrc":"2399:18:5","nodeType":"YulFunctionCall","src":"2399:18:5"},{"hexValue":"6e2062616c616e6365","kind":"string","nativeSrc":"2419:11:5","nodeType":"YulLiteral","src":"2419:11:5","type":"","value":"n balance"}],"functionName":{"name":"mstore","nativeSrc":"2392:6:5","nodeType":"YulIdentifier","src":"2392:6:5"},"nativeSrc":"2392:39:5","nodeType":"YulFunctionCall","src":"2392:39:5"},"nativeSrc":"2392:39:5","nodeType":"YulExpressionStatement","src":"2392:39:5"},{"nativeSrc":"2440:27:5","nodeType":"YulAssignment","src":"2440:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"2452:9:5","nodeType":"YulIdentifier","src":"2452:9:5"},{"kind":"number","nativeSrc":"2463:3:5","nodeType":"YulLiteral","src":"2463:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"2448:3:5","nodeType":"YulIdentifier","src":"2448:3:5"},"nativeSrc":"2448:19:5","nodeType":"YulFunctionCall","src":"2448:19:5"},"variableNames":[{"name":"tail","nativeSrc":"2440:4:5","nodeType":"YulIdentifier","src":"2440:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"2068:405:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2219:9:5","nodeType":"YulTypedName","src":"2219:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2233:4:5","nodeType":"YulTypedName","src":"2233:4:5","type":""}],"src":"2068:405:5"},{"body":{"nativeSrc":"2607:145:5","nodeType":"YulBlock","src":"2607:145:5","statements":[{"nativeSrc":"2617:26:5","nodeType":"YulAssignment","src":"2617:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"2629:9:5","nodeType":"YulIdentifier","src":"2629:9:5"},{"kind":"number","nativeSrc":"2640:2:5","nodeType":"YulLiteral","src":"2640:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"2625:3:5","nodeType":"YulIdentifier","src":"2625:3:5"},"nativeSrc":"2625:18:5","nodeType":"YulFunctionCall","src":"2625:18:5"},"variableNames":[{"name":"tail","nativeSrc":"2617:4:5","nodeType":"YulIdentifier","src":"2617:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"2659:9:5","nodeType":"YulIdentifier","src":"2659:9:5"},{"arguments":[{"name":"value0","nativeSrc":"2674:6:5","nodeType":"YulIdentifier","src":"2674:6:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2690:3:5","nodeType":"YulLiteral","src":"2690:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"2695:1:5","nodeType":"YulLiteral","src":"2695:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2686:3:5","nodeType":"YulIdentifier","src":"2686:3:5"},"nativeSrc":"2686:11:5","nodeType":"YulFunctionCall","src":"2686:11:5"},{"kind":"number","nativeSrc":"2699:1:5","nodeType":"YulLiteral","src":"2699:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2682:3:5","nodeType":"YulIdentifier","src":"2682:3:5"},"nativeSrc":"2682:19:5","nodeType":"YulFunctionCall","src":"2682:19:5"}],"functionName":{"name":"and","nativeSrc":"2670:3:5","nodeType":"YulIdentifier","src":"2670:3:5"},"nativeSrc":"2670:32:5","nodeType":"YulFunctionCall","src":"2670:32:5"}],"functionName":{"name":"mstore","nativeSrc":"2652:6:5","nodeType":"YulIdentifier","src":"2652:6:5"},"nativeSrc":"2652:51:5","nodeType":"YulFunctionCall","src":"2652:51:5"},"nativeSrc":"2652:51:5","nodeType":"YulExpressionStatement","src":"2652:51:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"2723:9:5","nodeType":"YulIdentifier","src":"2723:9:5"},{"kind":"number","nativeSrc":"2734:2:5","nodeType":"YulLiteral","src":"2734:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"2719:3:5","nodeType":"YulIdentifier","src":"2719:3:5"},"nativeSrc":"2719:18:5","nodeType":"YulFunctionCall","src":"2719:18:5"},{"name":"value1","nativeSrc":"2739:6:5","nodeType":"YulIdentifier","src":"2739:6:5"}],"functionName":{"name":"mstore","nativeSrc":"2712:6:5","nodeType":"YulIdentifier","src":"2712:6:5"},"nativeSrc":"2712:34:5","nodeType":"YulFunctionCall","src":"2712:34:5"},"nativeSrc":"2712:34:5","nodeType":"YulExpressionStatement","src":"2712:34:5"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nativeSrc":"2478:274:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2568:9:5","nodeType":"YulTypedName","src":"2568:9:5","type":""},{"name":"value1","nativeSrc":"2579:6:5","nodeType":"YulTypedName","src":"2579:6:5","type":""},{"name":"value0","nativeSrc":"2587:6:5","nodeType":"YulTypedName","src":"2587:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"2598:4:5","nodeType":"YulTypedName","src":"2598:4:5","type":""}],"src":"2478:274:5"},{"body":{"nativeSrc":"2835:199:5","nodeType":"YulBlock","src":"2835:199:5","statements":[{"body":{"nativeSrc":"2881:16:5","nodeType":"YulBlock","src":"2881:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2890:1:5","nodeType":"YulLiteral","src":"2890:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"2893:1:5","nodeType":"YulLiteral","src":"2893:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2883:6:5","nodeType":"YulIdentifier","src":"2883:6:5"},"nativeSrc":"2883:12:5","nodeType":"YulFunctionCall","src":"2883:12:5"},"nativeSrc":"2883:12:5","nodeType":"YulExpressionStatement","src":"2883:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"2856:7:5","nodeType":"YulIdentifier","src":"2856:7:5"},{"name":"headStart","nativeSrc":"2865:9:5","nodeType":"YulIdentifier","src":"2865:9:5"}],"functionName":{"name":"sub","nativeSrc":"2852:3:5","nodeType":"YulIdentifier","src":"2852:3:5"},"nativeSrc":"2852:23:5","nodeType":"YulFunctionCall","src":"2852:23:5"},{"kind":"number","nativeSrc":"2877:2:5","nodeType":"YulLiteral","src":"2877:2:5","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"2848:3:5","nodeType":"YulIdentifier","src":"2848:3:5"},"nativeSrc":"2848:32:5","nodeType":"YulFunctionCall","src":"2848:32:5"},"nativeSrc":"2845:52:5","nodeType":"YulIf","src":"2845:52:5"},{"nativeSrc":"2906:29:5","nodeType":"YulVariableDeclaration","src":"2906:29:5","value":{"arguments":[{"name":"headStart","nativeSrc":"2925:9:5","nodeType":"YulIdentifier","src":"2925:9:5"}],"functionName":{"name":"mload","nativeSrc":"2919:5:5","nodeType":"YulIdentifier","src":"2919:5:5"},"nativeSrc":"2919:16:5","nodeType":"YulFunctionCall","src":"2919:16:5"},"variables":[{"name":"value","nativeSrc":"2910:5:5","nodeType":"YulTypedName","src":"2910:5:5","type":""}]},{"body":{"nativeSrc":"2988:16:5","nodeType":"YulBlock","src":"2988:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2997:1:5","nodeType":"YulLiteral","src":"2997:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"3000:1:5","nodeType":"YulLiteral","src":"3000:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"2990:6:5","nodeType":"YulIdentifier","src":"2990:6:5"},"nativeSrc":"2990:12:5","nodeType":"YulFunctionCall","src":"2990:12:5"},"nativeSrc":"2990:12:5","nodeType":"YulExpressionStatement","src":"2990:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2957:5:5","nodeType":"YulIdentifier","src":"2957:5:5"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"2978:5:5","nodeType":"YulIdentifier","src":"2978:5:5"}],"functionName":{"name":"iszero","nativeSrc":"2971:6:5","nodeType":"YulIdentifier","src":"2971:6:5"},"nativeSrc":"2971:13:5","nodeType":"YulFunctionCall","src":"2971:13:5"}],"functionName":{"name":"iszero","nativeSrc":"2964:6:5","nodeType":"YulIdentifier","src":"2964:6:5"},"nativeSrc":"2964:21:5","nodeType":"YulFunctionCall","src":"2964:21:5"}],"functionName":{"name":"eq","nativeSrc":"2954:2:5","nodeType":"YulIdentifier","src":"2954:2:5"},"nativeSrc":"2954:32:5","nodeType":"YulFunctionCall","src":"2954:32:5"}],"functionName":{"name":"iszero","nativeSrc":"2947:6:5","nodeType":"YulIdentifier","src":"2947:6:5"},"nativeSrc":"2947:40:5","nodeType":"YulFunctionCall","src":"2947:40:5"},"nativeSrc":"2944:60:5","nodeType":"YulIf","src":"2944:60:5"},{"nativeSrc":"3013:15:5","nodeType":"YulAssignment","src":"3013:15:5","value":{"name":"value","nativeSrc":"3023:5:5","nodeType":"YulIdentifier","src":"3023:5:5"},"variableNames":[{"name":"value0","nativeSrc":"3013:6:5","nodeType":"YulIdentifier","src":"3013:6:5"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nativeSrc":"2757:277:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"2801:9:5","nodeType":"YulTypedName","src":"2801:9:5","type":""},{"name":"dataEnd","nativeSrc":"2812:7:5","nodeType":"YulTypedName","src":"2812:7:5","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"2824:6:5","nodeType":"YulTypedName","src":"2824:6:5","type":""}],"src":"2757:277:5"},{"body":{"nativeSrc":"3213:226:5","nodeType":"YulBlock","src":"3213:226:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3230:9:5","nodeType":"YulIdentifier","src":"3230:9:5"},{"kind":"number","nativeSrc":"3241:2:5","nodeType":"YulLiteral","src":"3241:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"3223:6:5","nodeType":"YulIdentifier","src":"3223:6:5"},"nativeSrc":"3223:21:5","nodeType":"YulFunctionCall","src":"3223:21:5"},"nativeSrc":"3223:21:5","nodeType":"YulExpressionStatement","src":"3223:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3264:9:5","nodeType":"YulIdentifier","src":"3264:9:5"},{"kind":"number","nativeSrc":"3275:2:5","nodeType":"YulLiteral","src":"3275:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3260:3:5","nodeType":"YulIdentifier","src":"3260:3:5"},"nativeSrc":"3260:18:5","nodeType":"YulFunctionCall","src":"3260:18:5"},{"kind":"number","nativeSrc":"3280:2:5","nodeType":"YulLiteral","src":"3280:2:5","type":"","value":"36"}],"functionName":{"name":"mstore","nativeSrc":"3253:6:5","nodeType":"YulIdentifier","src":"3253:6:5"},"nativeSrc":"3253:30:5","nodeType":"YulFunctionCall","src":"3253:30:5"},"nativeSrc":"3253:30:5","nodeType":"YulExpressionStatement","src":"3253:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3303:9:5","nodeType":"YulIdentifier","src":"3303:9:5"},{"kind":"number","nativeSrc":"3314:2:5","nodeType":"YulLiteral","src":"3314:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3299:3:5","nodeType":"YulIdentifier","src":"3299:3:5"},"nativeSrc":"3299:18:5","nodeType":"YulFunctionCall","src":"3299:18:5"},{"hexValue":"546f6b656e50757263686173653a20546f6b656e207472616e73666572206661","kind":"string","nativeSrc":"3319:34:5","nodeType":"YulLiteral","src":"3319:34:5","type":"","value":"TokenPurchase: Token transfer fa"}],"functionName":{"name":"mstore","nativeSrc":"3292:6:5","nodeType":"YulIdentifier","src":"3292:6:5"},"nativeSrc":"3292:62:5","nodeType":"YulFunctionCall","src":"3292:62:5"},"nativeSrc":"3292:62:5","nodeType":"YulExpressionStatement","src":"3292:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3374:9:5","nodeType":"YulIdentifier","src":"3374:9:5"},{"kind":"number","nativeSrc":"3385:2:5","nodeType":"YulLiteral","src":"3385:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3370:3:5","nodeType":"YulIdentifier","src":"3370:3:5"},"nativeSrc":"3370:18:5","nodeType":"YulFunctionCall","src":"3370:18:5"},{"hexValue":"696c6564","kind":"string","nativeSrc":"3390:6:5","nodeType":"YulLiteral","src":"3390:6:5","type":"","value":"iled"}],"functionName":{"name":"mstore","nativeSrc":"3363:6:5","nodeType":"YulIdentifier","src":"3363:6:5"},"nativeSrc":"3363:34:5","nodeType":"YulFunctionCall","src":"3363:34:5"},"nativeSrc":"3363:34:5","nodeType":"YulExpressionStatement","src":"3363:34:5"},{"nativeSrc":"3406:27:5","nodeType":"YulAssignment","src":"3406:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"3418:9:5","nodeType":"YulIdentifier","src":"3418:9:5"},{"kind":"number","nativeSrc":"3429:3:5","nodeType":"YulLiteral","src":"3429:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"3414:3:5","nodeType":"YulIdentifier","src":"3414:3:5"},"nativeSrc":"3414:19:5","nodeType":"YulFunctionCall","src":"3414:19:5"},"variableNames":[{"name":"tail","nativeSrc":"3406:4:5","nodeType":"YulIdentifier","src":"3406:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3039:400:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3190:9:5","nodeType":"YulTypedName","src":"3190:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3204:4:5","nodeType":"YulTypedName","src":"3204:4:5","type":""}],"src":"3039:400:5"},{"body":{"nativeSrc":"3618:244:5","nodeType":"YulBlock","src":"3618:244:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"3635:9:5","nodeType":"YulIdentifier","src":"3635:9:5"},{"kind":"number","nativeSrc":"3646:2:5","nodeType":"YulLiteral","src":"3646:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"3628:6:5","nodeType":"YulIdentifier","src":"3628:6:5"},"nativeSrc":"3628:21:5","nodeType":"YulFunctionCall","src":"3628:21:5"},"nativeSrc":"3628:21:5","nodeType":"YulExpressionStatement","src":"3628:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3669:9:5","nodeType":"YulIdentifier","src":"3669:9:5"},{"kind":"number","nativeSrc":"3680:2:5","nodeType":"YulLiteral","src":"3680:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"3665:3:5","nodeType":"YulIdentifier","src":"3665:3:5"},"nativeSrc":"3665:18:5","nodeType":"YulFunctionCall","src":"3665:18:5"},{"kind":"number","nativeSrc":"3685:2:5","nodeType":"YulLiteral","src":"3685:2:5","type":"","value":"54"}],"functionName":{"name":"mstore","nativeSrc":"3658:6:5","nodeType":"YulIdentifier","src":"3658:6:5"},"nativeSrc":"3658:30:5","nodeType":"YulFunctionCall","src":"3658:30:5"},"nativeSrc":"3658:30:5","nodeType":"YulExpressionStatement","src":"3658:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3708:9:5","nodeType":"YulIdentifier","src":"3708:9:5"},{"kind":"number","nativeSrc":"3719:2:5","nodeType":"YulLiteral","src":"3719:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"3704:3:5","nodeType":"YulIdentifier","src":"3704:3:5"},"nativeSrc":"3704:18:5","nodeType":"YulFunctionCall","src":"3704:18:5"},{"hexValue":"546f6b656e50757263686173653a205061796d656e7420726563656976657220","kind":"string","nativeSrc":"3724:34:5","nodeType":"YulLiteral","src":"3724:34:5","type":"","value":"TokenPurchase: Payment receiver "}],"functionName":{"name":"mstore","nativeSrc":"3697:6:5","nodeType":"YulIdentifier","src":"3697:6:5"},"nativeSrc":"3697:62:5","nodeType":"YulFunctionCall","src":"3697:62:5"},"nativeSrc":"3697:62:5","nodeType":"YulExpressionStatement","src":"3697:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"3779:9:5","nodeType":"YulIdentifier","src":"3779:9:5"},{"kind":"number","nativeSrc":"3790:2:5","nodeType":"YulLiteral","src":"3790:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"3775:3:5","nodeType":"YulIdentifier","src":"3775:3:5"},"nativeSrc":"3775:18:5","nodeType":"YulFunctionCall","src":"3775:18:5"},{"hexValue":"63616e6e6f74206265207a65726f2061646472657373","kind":"string","nativeSrc":"3795:24:5","nodeType":"YulLiteral","src":"3795:24:5","type":"","value":"cannot be zero address"}],"functionName":{"name":"mstore","nativeSrc":"3768:6:5","nodeType":"YulIdentifier","src":"3768:6:5"},"nativeSrc":"3768:52:5","nodeType":"YulFunctionCall","src":"3768:52:5"},"nativeSrc":"3768:52:5","nodeType":"YulExpressionStatement","src":"3768:52:5"},{"nativeSrc":"3829:27:5","nodeType":"YulAssignment","src":"3829:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"3841:9:5","nodeType":"YulIdentifier","src":"3841:9:5"},{"kind":"number","nativeSrc":"3852:3:5","nodeType":"YulLiteral","src":"3852:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"3837:3:5","nodeType":"YulIdentifier","src":"3837:3:5"},"nativeSrc":"3837:19:5","nodeType":"YulFunctionCall","src":"3837:19:5"},"variableNames":[{"name":"tail","nativeSrc":"3829:4:5","nodeType":"YulIdentifier","src":"3829:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3444:418:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"3595:9:5","nodeType":"YulTypedName","src":"3595:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"3609:4:5","nodeType":"YulTypedName","src":"3609:4:5","type":""}],"src":"3444:418:5"},{"body":{"nativeSrc":"4041:236:5","nodeType":"YulBlock","src":"4041:236:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"4058:9:5","nodeType":"YulIdentifier","src":"4058:9:5"},{"kind":"number","nativeSrc":"4069:2:5","nodeType":"YulLiteral","src":"4069:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"4051:6:5","nodeType":"YulIdentifier","src":"4051:6:5"},"nativeSrc":"4051:21:5","nodeType":"YulFunctionCall","src":"4051:21:5"},"nativeSrc":"4051:21:5","nodeType":"YulExpressionStatement","src":"4051:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4092:9:5","nodeType":"YulIdentifier","src":"4092:9:5"},{"kind":"number","nativeSrc":"4103:2:5","nodeType":"YulLiteral","src":"4103:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4088:3:5","nodeType":"YulIdentifier","src":"4088:3:5"},"nativeSrc":"4088:18:5","nodeType":"YulFunctionCall","src":"4088:18:5"},{"kind":"number","nativeSrc":"4108:2:5","nodeType":"YulLiteral","src":"4108:2:5","type":"","value":"46"}],"functionName":{"name":"mstore","nativeSrc":"4081:6:5","nodeType":"YulIdentifier","src":"4081:6:5"},"nativeSrc":"4081:30:5","nodeType":"YulFunctionCall","src":"4081:30:5"},"nativeSrc":"4081:30:5","nodeType":"YulExpressionStatement","src":"4081:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4131:9:5","nodeType":"YulIdentifier","src":"4131:9:5"},{"kind":"number","nativeSrc":"4142:2:5","nodeType":"YulLiteral","src":"4142:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4127:3:5","nodeType":"YulIdentifier","src":"4127:3:5"},"nativeSrc":"4127:18:5","nodeType":"YulFunctionCall","src":"4127:18:5"},{"hexValue":"546f6b656e50757263686173653a205072696365206d75737420626520677265","kind":"string","nativeSrc":"4147:34:5","nodeType":"YulLiteral","src":"4147:34:5","type":"","value":"TokenPurchase: Price must be gre"}],"functionName":{"name":"mstore","nativeSrc":"4120:6:5","nodeType":"YulIdentifier","src":"4120:6:5"},"nativeSrc":"4120:62:5","nodeType":"YulFunctionCall","src":"4120:62:5"},"nativeSrc":"4120:62:5","nodeType":"YulExpressionStatement","src":"4120:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4202:9:5","nodeType":"YulIdentifier","src":"4202:9:5"},{"kind":"number","nativeSrc":"4213:2:5","nodeType":"YulLiteral","src":"4213:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"4198:3:5","nodeType":"YulIdentifier","src":"4198:3:5"},"nativeSrc":"4198:18:5","nodeType":"YulFunctionCall","src":"4198:18:5"},{"hexValue":"61746572207468616e207a65726f","kind":"string","nativeSrc":"4218:16:5","nodeType":"YulLiteral","src":"4218:16:5","type":"","value":"ater than zero"}],"functionName":{"name":"mstore","nativeSrc":"4191:6:5","nodeType":"YulIdentifier","src":"4191:6:5"},"nativeSrc":"4191:44:5","nodeType":"YulFunctionCall","src":"4191:44:5"},"nativeSrc":"4191:44:5","nodeType":"YulExpressionStatement","src":"4191:44:5"},{"nativeSrc":"4244:27:5","nodeType":"YulAssignment","src":"4244:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"4256:9:5","nodeType":"YulIdentifier","src":"4256:9:5"},{"kind":"number","nativeSrc":"4267:3:5","nodeType":"YulLiteral","src":"4267:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"4252:3:5","nodeType":"YulIdentifier","src":"4252:3:5"},"nativeSrc":"4252:19:5","nodeType":"YulFunctionCall","src":"4252:19:5"},"variableNames":[{"name":"tail","nativeSrc":"4244:4:5","nodeType":"YulIdentifier","src":"4244:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_d1fdc132d89d24a49c6afa67728e034ca70424bb4d57719902661918e12b5ed4__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"3867:410:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4018:9:5","nodeType":"YulTypedName","src":"4018:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4032:4:5","nodeType":"YulTypedName","src":"4032:4:5","type":""}],"src":"3867:410:5"},{"body":{"nativeSrc":"4456:178:5","nodeType":"YulBlock","src":"4456:178:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"4473:9:5","nodeType":"YulIdentifier","src":"4473:9:5"},{"kind":"number","nativeSrc":"4484:2:5","nodeType":"YulLiteral","src":"4484:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"4466:6:5","nodeType":"YulIdentifier","src":"4466:6:5"},"nativeSrc":"4466:21:5","nodeType":"YulFunctionCall","src":"4466:21:5"},"nativeSrc":"4466:21:5","nodeType":"YulExpressionStatement","src":"4466:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4507:9:5","nodeType":"YulIdentifier","src":"4507:9:5"},{"kind":"number","nativeSrc":"4518:2:5","nodeType":"YulLiteral","src":"4518:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4503:3:5","nodeType":"YulIdentifier","src":"4503:3:5"},"nativeSrc":"4503:18:5","nodeType":"YulFunctionCall","src":"4503:18:5"},{"kind":"number","nativeSrc":"4523:2:5","nodeType":"YulLiteral","src":"4523:2:5","type":"","value":"28"}],"functionName":{"name":"mstore","nativeSrc":"4496:6:5","nodeType":"YulIdentifier","src":"4496:6:5"},"nativeSrc":"4496:30:5","nodeType":"YulFunctionCall","src":"4496:30:5"},"nativeSrc":"4496:30:5","nodeType":"YulExpressionStatement","src":"4496:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4546:9:5","nodeType":"YulIdentifier","src":"4546:9:5"},{"kind":"number","nativeSrc":"4557:2:5","nodeType":"YulLiteral","src":"4557:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4542:3:5","nodeType":"YulIdentifier","src":"4542:3:5"},"nativeSrc":"4542:18:5","nodeType":"YulFunctionCall","src":"4542:18:5"},{"hexValue":"546f6b656e50757263686173653a205072696365206e6f7420736574","kind":"string","nativeSrc":"4562:30:5","nodeType":"YulLiteral","src":"4562:30:5","type":"","value":"TokenPurchase: Price not set"}],"functionName":{"name":"mstore","nativeSrc":"4535:6:5","nodeType":"YulIdentifier","src":"4535:6:5"},"nativeSrc":"4535:58:5","nodeType":"YulFunctionCall","src":"4535:58:5"},"nativeSrc":"4535:58:5","nodeType":"YulExpressionStatement","src":"4535:58:5"},{"nativeSrc":"4602:26:5","nodeType":"YulAssignment","src":"4602:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"4614:9:5","nodeType":"YulIdentifier","src":"4614:9:5"},{"kind":"number","nativeSrc":"4625:2:5","nodeType":"YulLiteral","src":"4625:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"4610:3:5","nodeType":"YulIdentifier","src":"4610:3:5"},"nativeSrc":"4610:18:5","nodeType":"YulFunctionCall","src":"4610:18:5"},"variableNames":[{"name":"tail","nativeSrc":"4602:4:5","nodeType":"YulIdentifier","src":"4602:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_11642e9233fe172eab34f4905f0584687897e70bc8ec7e4d8b15b3d4ba325986__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"4282:352:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4433:9:5","nodeType":"YulTypedName","src":"4433:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4447:4:5","nodeType":"YulTypedName","src":"4447:4:5","type":""}],"src":"4282:352:5"},{"body":{"nativeSrc":"4813:237:5","nodeType":"YulBlock","src":"4813:237:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"4830:9:5","nodeType":"YulIdentifier","src":"4830:9:5"},{"kind":"number","nativeSrc":"4841:2:5","nodeType":"YulLiteral","src":"4841:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"4823:6:5","nodeType":"YulIdentifier","src":"4823:6:5"},"nativeSrc":"4823:21:5","nodeType":"YulFunctionCall","src":"4823:21:5"},"nativeSrc":"4823:21:5","nodeType":"YulExpressionStatement","src":"4823:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4864:9:5","nodeType":"YulIdentifier","src":"4864:9:5"},{"kind":"number","nativeSrc":"4875:2:5","nodeType":"YulLiteral","src":"4875:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"4860:3:5","nodeType":"YulIdentifier","src":"4860:3:5"},"nativeSrc":"4860:18:5","nodeType":"YulFunctionCall","src":"4860:18:5"},{"kind":"number","nativeSrc":"4880:2:5","nodeType":"YulLiteral","src":"4880:2:5","type":"","value":"47"}],"functionName":{"name":"mstore","nativeSrc":"4853:6:5","nodeType":"YulIdentifier","src":"4853:6:5"},"nativeSrc":"4853:30:5","nodeType":"YulFunctionCall","src":"4853:30:5"},"nativeSrc":"4853:30:5","nodeType":"YulExpressionStatement","src":"4853:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4903:9:5","nodeType":"YulIdentifier","src":"4903:9:5"},{"kind":"number","nativeSrc":"4914:2:5","nodeType":"YulLiteral","src":"4914:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"4899:3:5","nodeType":"YulIdentifier","src":"4899:3:5"},"nativeSrc":"4899:18:5","nodeType":"YulFunctionCall","src":"4899:18:5"},{"hexValue":"546f6b656e50757263686173653a20416d6f756e74206d757374206265206772","kind":"string","nativeSrc":"4919:34:5","nodeType":"YulLiteral","src":"4919:34:5","type":"","value":"TokenPurchase: Amount must be gr"}],"functionName":{"name":"mstore","nativeSrc":"4892:6:5","nodeType":"YulIdentifier","src":"4892:6:5"},"nativeSrc":"4892:62:5","nodeType":"YulFunctionCall","src":"4892:62:5"},"nativeSrc":"4892:62:5","nodeType":"YulExpressionStatement","src":"4892:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"4974:9:5","nodeType":"YulIdentifier","src":"4974:9:5"},{"kind":"number","nativeSrc":"4985:2:5","nodeType":"YulLiteral","src":"4985:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"4970:3:5","nodeType":"YulIdentifier","src":"4970:3:5"},"nativeSrc":"4970:18:5","nodeType":"YulFunctionCall","src":"4970:18:5"},{"hexValue":"6561746572207468616e207a65726f","kind":"string","nativeSrc":"4990:17:5","nodeType":"YulLiteral","src":"4990:17:5","type":"","value":"eater than zero"}],"functionName":{"name":"mstore","nativeSrc":"4963:6:5","nodeType":"YulIdentifier","src":"4963:6:5"},"nativeSrc":"4963:45:5","nodeType":"YulFunctionCall","src":"4963:45:5"},"nativeSrc":"4963:45:5","nodeType":"YulExpressionStatement","src":"4963:45:5"},{"nativeSrc":"5017:27:5","nodeType":"YulAssignment","src":"5017:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"5029:9:5","nodeType":"YulIdentifier","src":"5029:9:5"},{"kind":"number","nativeSrc":"5040:3:5","nodeType":"YulLiteral","src":"5040:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"5025:3:5","nodeType":"YulIdentifier","src":"5025:3:5"},"nativeSrc":"5025:19:5","nodeType":"YulFunctionCall","src":"5025:19:5"},"variableNames":[{"name":"tail","nativeSrc":"5017:4:5","nodeType":"YulIdentifier","src":"5017:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_429a1077f877e28e64b739f25ce90c3083d57226e67a690330c3580fae257b3f__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"4639:411:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"4790:9:5","nodeType":"YulTypedName","src":"4790:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"4804:4:5","nodeType":"YulTypedName","src":"4804:4:5","type":""}],"src":"4639:411:5"},{"body":{"nativeSrc":"5229:241:5","nodeType":"YulBlock","src":"5229:241:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"5246:9:5","nodeType":"YulIdentifier","src":"5246:9:5"},{"kind":"number","nativeSrc":"5257:2:5","nodeType":"YulLiteral","src":"5257:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"5239:6:5","nodeType":"YulIdentifier","src":"5239:6:5"},"nativeSrc":"5239:21:5","nodeType":"YulFunctionCall","src":"5239:21:5"},"nativeSrc":"5239:21:5","nodeType":"YulExpressionStatement","src":"5239:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5280:9:5","nodeType":"YulIdentifier","src":"5280:9:5"},{"kind":"number","nativeSrc":"5291:2:5","nodeType":"YulLiteral","src":"5291:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5276:3:5","nodeType":"YulIdentifier","src":"5276:3:5"},"nativeSrc":"5276:18:5","nodeType":"YulFunctionCall","src":"5276:18:5"},{"kind":"number","nativeSrc":"5296:2:5","nodeType":"YulLiteral","src":"5296:2:5","type":"","value":"51"}],"functionName":{"name":"mstore","nativeSrc":"5269:6:5","nodeType":"YulIdentifier","src":"5269:6:5"},"nativeSrc":"5269:30:5","nodeType":"YulFunctionCall","src":"5269:30:5"},"nativeSrc":"5269:30:5","nodeType":"YulExpressionStatement","src":"5269:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5319:9:5","nodeType":"YulIdentifier","src":"5319:9:5"},{"kind":"number","nativeSrc":"5330:2:5","nodeType":"YulLiteral","src":"5330:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"5315:3:5","nodeType":"YulIdentifier","src":"5315:3:5"},"nativeSrc":"5315:18:5","nodeType":"YulFunctionCall","src":"5315:18:5"},{"hexValue":"546f6b656e50757263686173653a20416d6f756e742062656c6f77206d696e69","kind":"string","nativeSrc":"5335:34:5","nodeType":"YulLiteral","src":"5335:34:5","type":"","value":"TokenPurchase: Amount below mini"}],"functionName":{"name":"mstore","nativeSrc":"5308:6:5","nodeType":"YulIdentifier","src":"5308:6:5"},"nativeSrc":"5308:62:5","nodeType":"YulFunctionCall","src":"5308:62:5"},"nativeSrc":"5308:62:5","nodeType":"YulExpressionStatement","src":"5308:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"5390:9:5","nodeType":"YulIdentifier","src":"5390:9:5"},{"kind":"number","nativeSrc":"5401:2:5","nodeType":"YulLiteral","src":"5401:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"5386:3:5","nodeType":"YulIdentifier","src":"5386:3:5"},"nativeSrc":"5386:18:5","nodeType":"YulFunctionCall","src":"5386:18:5"},{"hexValue":"6d756d20707572636861736520616d6f756e74","kind":"string","nativeSrc":"5406:21:5","nodeType":"YulLiteral","src":"5406:21:5","type":"","value":"mum purchase amount"}],"functionName":{"name":"mstore","nativeSrc":"5379:6:5","nodeType":"YulIdentifier","src":"5379:6:5"},"nativeSrc":"5379:49:5","nodeType":"YulFunctionCall","src":"5379:49:5"},"nativeSrc":"5379:49:5","nodeType":"YulExpressionStatement","src":"5379:49:5"},{"nativeSrc":"5437:27:5","nodeType":"YulAssignment","src":"5437:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"5449:9:5","nodeType":"YulIdentifier","src":"5449:9:5"},{"kind":"number","nativeSrc":"5460:3:5","nodeType":"YulLiteral","src":"5460:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"5445:3:5","nodeType":"YulIdentifier","src":"5445:3:5"},"nativeSrc":"5445:19:5","nodeType":"YulFunctionCall","src":"5445:19:5"},"variableNames":[{"name":"tail","nativeSrc":"5437:4:5","nodeType":"YulIdentifier","src":"5437:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_e6aaba7be610f33a5546704299f3a3452d6d6167ed801da7a1aee43030488970__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"5055:415:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5206:9:5","nodeType":"YulTypedName","src":"5206:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"5220:4:5","nodeType":"YulTypedName","src":"5220:4:5","type":""}],"src":"5055:415:5"},{"body":{"nativeSrc":"5554:194:5","nodeType":"YulBlock","src":"5554:194:5","statements":[{"body":{"nativeSrc":"5600:16:5","nodeType":"YulBlock","src":"5600:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5609:1:5","nodeType":"YulLiteral","src":"5609:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"5612:1:5","nodeType":"YulLiteral","src":"5612:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5602:6:5","nodeType":"YulIdentifier","src":"5602:6:5"},"nativeSrc":"5602:12:5","nodeType":"YulFunctionCall","src":"5602:12:5"},"nativeSrc":"5602:12:5","nodeType":"YulExpressionStatement","src":"5602:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nativeSrc":"5575:7:5","nodeType":"YulIdentifier","src":"5575:7:5"},{"name":"headStart","nativeSrc":"5584:9:5","nodeType":"YulIdentifier","src":"5584:9:5"}],"functionName":{"name":"sub","nativeSrc":"5571:3:5","nodeType":"YulIdentifier","src":"5571:3:5"},"nativeSrc":"5571:23:5","nodeType":"YulFunctionCall","src":"5571:23:5"},{"kind":"number","nativeSrc":"5596:2:5","nodeType":"YulLiteral","src":"5596:2:5","type":"","value":"32"}],"functionName":{"name":"slt","nativeSrc":"5567:3:5","nodeType":"YulIdentifier","src":"5567:3:5"},"nativeSrc":"5567:32:5","nodeType":"YulFunctionCall","src":"5567:32:5"},"nativeSrc":"5564:52:5","nodeType":"YulIf","src":"5564:52:5"},{"nativeSrc":"5625:29:5","nodeType":"YulVariableDeclaration","src":"5625:29:5","value":{"arguments":[{"name":"headStart","nativeSrc":"5644:9:5","nodeType":"YulIdentifier","src":"5644:9:5"}],"functionName":{"name":"mload","nativeSrc":"5638:5:5","nodeType":"YulIdentifier","src":"5638:5:5"},"nativeSrc":"5638:16:5","nodeType":"YulFunctionCall","src":"5638:16:5"},"variables":[{"name":"value","nativeSrc":"5629:5:5","nodeType":"YulTypedName","src":"5629:5:5","type":""}]},{"body":{"nativeSrc":"5702:16:5","nodeType":"YulBlock","src":"5702:16:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5711:1:5","nodeType":"YulLiteral","src":"5711:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"5714:1:5","nodeType":"YulLiteral","src":"5714:1:5","type":"","value":"0"}],"functionName":{"name":"revert","nativeSrc":"5704:6:5","nodeType":"YulIdentifier","src":"5704:6:5"},"nativeSrc":"5704:12:5","nodeType":"YulFunctionCall","src":"5704:12:5"},"nativeSrc":"5704:12:5","nodeType":"YulExpressionStatement","src":"5704:12:5"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nativeSrc":"5676:5:5","nodeType":"YulIdentifier","src":"5676:5:5"},{"arguments":[{"name":"value","nativeSrc":"5687:5:5","nodeType":"YulIdentifier","src":"5687:5:5"},{"kind":"number","nativeSrc":"5694:4:5","nodeType":"YulLiteral","src":"5694:4:5","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"5683:3:5","nodeType":"YulIdentifier","src":"5683:3:5"},"nativeSrc":"5683:16:5","nodeType":"YulFunctionCall","src":"5683:16:5"}],"functionName":{"name":"eq","nativeSrc":"5673:2:5","nodeType":"YulIdentifier","src":"5673:2:5"},"nativeSrc":"5673:27:5","nodeType":"YulFunctionCall","src":"5673:27:5"}],"functionName":{"name":"iszero","nativeSrc":"5666:6:5","nodeType":"YulIdentifier","src":"5666:6:5"},"nativeSrc":"5666:35:5","nodeType":"YulFunctionCall","src":"5666:35:5"},"nativeSrc":"5663:55:5","nodeType":"YulIf","src":"5663:55:5"},{"nativeSrc":"5727:15:5","nodeType":"YulAssignment","src":"5727:15:5","value":{"name":"value","nativeSrc":"5737:5:5","nodeType":"YulIdentifier","src":"5737:5:5"},"variableNames":[{"name":"value0","nativeSrc":"5727:6:5","nodeType":"YulIdentifier","src":"5727:6:5"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nativeSrc":"5475:273:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"5520:9:5","nodeType":"YulTypedName","src":"5520:9:5","type":""},{"name":"dataEnd","nativeSrc":"5531:7:5","nodeType":"YulTypedName","src":"5531:7:5","type":""}],"returnVariables":[{"name":"value0","nativeSrc":"5543:6:5","nodeType":"YulTypedName","src":"5543:6:5","type":""}],"src":"5475:273:5"},{"body":{"nativeSrc":"5785:95:5","nodeType":"YulBlock","src":"5785:95:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"5802:1:5","nodeType":"YulLiteral","src":"5802:1:5","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"5809:3:5","nodeType":"YulLiteral","src":"5809:3:5","type":"","value":"224"},{"kind":"number","nativeSrc":"5814:10:5","nodeType":"YulLiteral","src":"5814:10:5","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"5805:3:5","nodeType":"YulIdentifier","src":"5805:3:5"},"nativeSrc":"5805:20:5","nodeType":"YulFunctionCall","src":"5805:20:5"}],"functionName":{"name":"mstore","nativeSrc":"5795:6:5","nodeType":"YulIdentifier","src":"5795:6:5"},"nativeSrc":"5795:31:5","nodeType":"YulFunctionCall","src":"5795:31:5"},"nativeSrc":"5795:31:5","nodeType":"YulExpressionStatement","src":"5795:31:5"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5842:1:5","nodeType":"YulLiteral","src":"5842:1:5","type":"","value":"4"},{"kind":"number","nativeSrc":"5845:4:5","nodeType":"YulLiteral","src":"5845:4:5","type":"","value":"0x11"}],"functionName":{"name":"mstore","nativeSrc":"5835:6:5","nodeType":"YulIdentifier","src":"5835:6:5"},"nativeSrc":"5835:15:5","nodeType":"YulFunctionCall","src":"5835:15:5"},"nativeSrc":"5835:15:5","nodeType":"YulExpressionStatement","src":"5835:15:5"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"5866:1:5","nodeType":"YulLiteral","src":"5866:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"5869:4:5","nodeType":"YulLiteral","src":"5869:4:5","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"5859:6:5","nodeType":"YulIdentifier","src":"5859:6:5"},"nativeSrc":"5859:15:5","nodeType":"YulFunctionCall","src":"5859:15:5"},"nativeSrc":"5859:15:5","nodeType":"YulExpressionStatement","src":"5859:15:5"}]},"name":"panic_error_0x11","nativeSrc":"5753:127:5","nodeType":"YulFunctionDefinition","src":"5753:127:5"},{"body":{"nativeSrc":"5937:116:5","nodeType":"YulBlock","src":"5937:116:5","statements":[{"nativeSrc":"5947:20:5","nodeType":"YulAssignment","src":"5947:20:5","value":{"arguments":[{"name":"x","nativeSrc":"5962:1:5","nodeType":"YulIdentifier","src":"5962:1:5"},{"name":"y","nativeSrc":"5965:1:5","nodeType":"YulIdentifier","src":"5965:1:5"}],"functionName":{"name":"mul","nativeSrc":"5958:3:5","nodeType":"YulIdentifier","src":"5958:3:5"},"nativeSrc":"5958:9:5","nodeType":"YulFunctionCall","src":"5958:9:5"},"variableNames":[{"name":"product","nativeSrc":"5947:7:5","nodeType":"YulIdentifier","src":"5947:7:5"}]},{"body":{"nativeSrc":"6025:22:5","nodeType":"YulBlock","src":"6025:22:5","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"6027:16:5","nodeType":"YulIdentifier","src":"6027:16:5"},"nativeSrc":"6027:18:5","nodeType":"YulFunctionCall","src":"6027:18:5"},"nativeSrc":"6027:18:5","nodeType":"YulExpressionStatement","src":"6027:18:5"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5996:1:5","nodeType":"YulIdentifier","src":"5996:1:5"}],"functionName":{"name":"iszero","nativeSrc":"5989:6:5","nodeType":"YulIdentifier","src":"5989:6:5"},"nativeSrc":"5989:9:5","nodeType":"YulFunctionCall","src":"5989:9:5"},{"arguments":[{"name":"y","nativeSrc":"6003:1:5","nodeType":"YulIdentifier","src":"6003:1:5"},{"arguments":[{"name":"product","nativeSrc":"6010:7:5","nodeType":"YulIdentifier","src":"6010:7:5"},{"name":"x","nativeSrc":"6019:1:5","nodeType":"YulIdentifier","src":"6019:1:5"}],"functionName":{"name":"div","nativeSrc":"6006:3:5","nodeType":"YulIdentifier","src":"6006:3:5"},"nativeSrc":"6006:15:5","nodeType":"YulFunctionCall","src":"6006:15:5"}],"functionName":{"name":"eq","nativeSrc":"6000:2:5","nodeType":"YulIdentifier","src":"6000:2:5"},"nativeSrc":"6000:22:5","nodeType":"YulFunctionCall","src":"6000:22:5"}],"functionName":{"name":"or","nativeSrc":"5986:2:5","nodeType":"YulIdentifier","src":"5986:2:5"},"nativeSrc":"5986:37:5","nodeType":"YulFunctionCall","src":"5986:37:5"}],"functionName":{"name":"iszero","nativeSrc":"5979:6:5","nodeType":"YulIdentifier","src":"5979:6:5"},"nativeSrc":"5979:45:5","nodeType":"YulFunctionCall","src":"5979:45:5"},"nativeSrc":"5976:71:5","nodeType":"YulIf","src":"5976:71:5"}]},"name":"checked_mul_t_uint256","nativeSrc":"5885:168:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"5916:1:5","nodeType":"YulTypedName","src":"5916:1:5","type":""},{"name":"y","nativeSrc":"5919:1:5","nodeType":"YulTypedName","src":"5919:1:5","type":""}],"returnVariables":[{"name":"product","nativeSrc":"5925:7:5","nodeType":"YulTypedName","src":"5925:7:5","type":""}],"src":"5885:168:5"},{"body":{"nativeSrc":"6104:171:5","nodeType":"YulBlock","src":"6104:171:5","statements":[{"body":{"nativeSrc":"6135:111:5","nodeType":"YulBlock","src":"6135:111:5","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"6156:1:5","nodeType":"YulLiteral","src":"6156:1:5","type":"","value":"0"},{"arguments":[{"kind":"number","nativeSrc":"6163:3:5","nodeType":"YulLiteral","src":"6163:3:5","type":"","value":"224"},{"kind":"number","nativeSrc":"6168:10:5","nodeType":"YulLiteral","src":"6168:10:5","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nativeSrc":"6159:3:5","nodeType":"YulIdentifier","src":"6159:3:5"},"nativeSrc":"6159:20:5","nodeType":"YulFunctionCall","src":"6159:20:5"}],"functionName":{"name":"mstore","nativeSrc":"6149:6:5","nodeType":"YulIdentifier","src":"6149:6:5"},"nativeSrc":"6149:31:5","nodeType":"YulFunctionCall","src":"6149:31:5"},"nativeSrc":"6149:31:5","nodeType":"YulExpressionStatement","src":"6149:31:5"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6200:1:5","nodeType":"YulLiteral","src":"6200:1:5","type":"","value":"4"},{"kind":"number","nativeSrc":"6203:4:5","nodeType":"YulLiteral","src":"6203:4:5","type":"","value":"0x12"}],"functionName":{"name":"mstore","nativeSrc":"6193:6:5","nodeType":"YulIdentifier","src":"6193:6:5"},"nativeSrc":"6193:15:5","nodeType":"YulFunctionCall","src":"6193:15:5"},"nativeSrc":"6193:15:5","nodeType":"YulExpressionStatement","src":"6193:15:5"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6228:1:5","nodeType":"YulLiteral","src":"6228:1:5","type":"","value":"0"},{"kind":"number","nativeSrc":"6231:4:5","nodeType":"YulLiteral","src":"6231:4:5","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"6221:6:5","nodeType":"YulIdentifier","src":"6221:6:5"},"nativeSrc":"6221:15:5","nodeType":"YulFunctionCall","src":"6221:15:5"},"nativeSrc":"6221:15:5","nodeType":"YulExpressionStatement","src":"6221:15:5"}]},"condition":{"arguments":[{"name":"y","nativeSrc":"6124:1:5","nodeType":"YulIdentifier","src":"6124:1:5"}],"functionName":{"name":"iszero","nativeSrc":"6117:6:5","nodeType":"YulIdentifier","src":"6117:6:5"},"nativeSrc":"6117:9:5","nodeType":"YulFunctionCall","src":"6117:9:5"},"nativeSrc":"6114:132:5","nodeType":"YulIf","src":"6114:132:5"},{"nativeSrc":"6255:14:5","nodeType":"YulAssignment","src":"6255:14:5","value":{"arguments":[{"name":"x","nativeSrc":"6264:1:5","nodeType":"YulIdentifier","src":"6264:1:5"},{"name":"y","nativeSrc":"6267:1:5","nodeType":"YulIdentifier","src":"6267:1:5"}],"functionName":{"name":"div","nativeSrc":"6260:3:5","nodeType":"YulIdentifier","src":"6260:3:5"},"nativeSrc":"6260:9:5","nodeType":"YulFunctionCall","src":"6260:9:5"},"variableNames":[{"name":"r","nativeSrc":"6255:1:5","nodeType":"YulIdentifier","src":"6255:1:5"}]}]},"name":"checked_div_t_uint256","nativeSrc":"6058:217:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"6089:1:5","nodeType":"YulTypedName","src":"6089:1:5","type":""},{"name":"y","nativeSrc":"6092:1:5","nodeType":"YulTypedName","src":"6092:1:5","type":""}],"returnVariables":[{"name":"r","nativeSrc":"6098:1:5","nodeType":"YulTypedName","src":"6098:1:5","type":""}],"src":"6058:217:5"},{"body":{"nativeSrc":"6454:238:5","nodeType":"YulBlock","src":"6454:238:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"6471:9:5","nodeType":"YulIdentifier","src":"6471:9:5"},{"kind":"number","nativeSrc":"6482:2:5","nodeType":"YulLiteral","src":"6482:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"6464:6:5","nodeType":"YulIdentifier","src":"6464:6:5"},"nativeSrc":"6464:21:5","nodeType":"YulFunctionCall","src":"6464:21:5"},"nativeSrc":"6464:21:5","nodeType":"YulExpressionStatement","src":"6464:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6505:9:5","nodeType":"YulIdentifier","src":"6505:9:5"},{"kind":"number","nativeSrc":"6516:2:5","nodeType":"YulLiteral","src":"6516:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6501:3:5","nodeType":"YulIdentifier","src":"6501:3:5"},"nativeSrc":"6501:18:5","nodeType":"YulFunctionCall","src":"6501:18:5"},{"kind":"number","nativeSrc":"6521:2:5","nodeType":"YulLiteral","src":"6521:2:5","type":"","value":"48"}],"functionName":{"name":"mstore","nativeSrc":"6494:6:5","nodeType":"YulIdentifier","src":"6494:6:5"},"nativeSrc":"6494:30:5","nodeType":"YulFunctionCall","src":"6494:30:5"},"nativeSrc":"6494:30:5","nodeType":"YulExpressionStatement","src":"6494:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6544:9:5","nodeType":"YulIdentifier","src":"6544:9:5"},{"kind":"number","nativeSrc":"6555:2:5","nodeType":"YulLiteral","src":"6555:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"6540:3:5","nodeType":"YulIdentifier","src":"6540:3:5"},"nativeSrc":"6540:18:5","nodeType":"YulFunctionCall","src":"6540:18:5"},{"hexValue":"546f6b656e50757263686173653a20436f73742063616c63756c6174696f6e20","kind":"string","nativeSrc":"6560:34:5","nodeType":"YulLiteral","src":"6560:34:5","type":"","value":"TokenPurchase: Cost calculation "}],"functionName":{"name":"mstore","nativeSrc":"6533:6:5","nodeType":"YulIdentifier","src":"6533:6:5"},"nativeSrc":"6533:62:5","nodeType":"YulFunctionCall","src":"6533:62:5"},"nativeSrc":"6533:62:5","nodeType":"YulExpressionStatement","src":"6533:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"6615:9:5","nodeType":"YulIdentifier","src":"6615:9:5"},{"kind":"number","nativeSrc":"6626:2:5","nodeType":"YulLiteral","src":"6626:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"6611:3:5","nodeType":"YulIdentifier","src":"6611:3:5"},"nativeSrc":"6611:18:5","nodeType":"YulFunctionCall","src":"6611:18:5"},{"hexValue":"726573756c74656420696e207a65726f","kind":"string","nativeSrc":"6631:18:5","nodeType":"YulLiteral","src":"6631:18:5","type":"","value":"resulted in zero"}],"functionName":{"name":"mstore","nativeSrc":"6604:6:5","nodeType":"YulIdentifier","src":"6604:6:5"},"nativeSrc":"6604:46:5","nodeType":"YulFunctionCall","src":"6604:46:5"},"nativeSrc":"6604:46:5","nodeType":"YulExpressionStatement","src":"6604:46:5"},{"nativeSrc":"6659:27:5","nodeType":"YulAssignment","src":"6659:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"6671:9:5","nodeType":"YulIdentifier","src":"6671:9:5"},{"kind":"number","nativeSrc":"6682:3:5","nodeType":"YulLiteral","src":"6682:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"6667:3:5","nodeType":"YulIdentifier","src":"6667:3:5"},"nativeSrc":"6667:19:5","nodeType":"YulFunctionCall","src":"6667:19:5"},"variableNames":[{"name":"tail","nativeSrc":"6659:4:5","nodeType":"YulIdentifier","src":"6659:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_86886174ef161c6cf8e241afb3d54b8fd98ef4fb31194412942366cb2d4c46e5__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"6280:412:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"6431:9:5","nodeType":"YulTypedName","src":"6431:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"6445:4:5","nodeType":"YulTypedName","src":"6445:4:5","type":""}],"src":"6280:412:5"},{"body":{"nativeSrc":"6744:104:5","nodeType":"YulBlock","src":"6744:104:5","statements":[{"nativeSrc":"6754:39:5","nodeType":"YulAssignment","src":"6754:39:5","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"6770:1:5","nodeType":"YulIdentifier","src":"6770:1:5"},{"kind":"number","nativeSrc":"6773:4:5","nodeType":"YulLiteral","src":"6773:4:5","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"6766:3:5","nodeType":"YulIdentifier","src":"6766:3:5"},"nativeSrc":"6766:12:5","nodeType":"YulFunctionCall","src":"6766:12:5"},{"arguments":[{"name":"y","nativeSrc":"6784:1:5","nodeType":"YulIdentifier","src":"6784:1:5"},{"kind":"number","nativeSrc":"6787:4:5","nodeType":"YulLiteral","src":"6787:4:5","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"6780:3:5","nodeType":"YulIdentifier","src":"6780:3:5"},"nativeSrc":"6780:12:5","nodeType":"YulFunctionCall","src":"6780:12:5"}],"functionName":{"name":"sub","nativeSrc":"6762:3:5","nodeType":"YulIdentifier","src":"6762:3:5"},"nativeSrc":"6762:31:5","nodeType":"YulFunctionCall","src":"6762:31:5"},"variableNames":[{"name":"diff","nativeSrc":"6754:4:5","nodeType":"YulIdentifier","src":"6754:4:5"}]},{"body":{"nativeSrc":"6820:22:5","nodeType":"YulBlock","src":"6820:22:5","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"6822:16:5","nodeType":"YulIdentifier","src":"6822:16:5"},"nativeSrc":"6822:18:5","nodeType":"YulFunctionCall","src":"6822:18:5"},"nativeSrc":"6822:18:5","nodeType":"YulExpressionStatement","src":"6822:18:5"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"6808:4:5","nodeType":"YulIdentifier","src":"6808:4:5"},{"kind":"number","nativeSrc":"6814:4:5","nodeType":"YulLiteral","src":"6814:4:5","type":"","value":"0xff"}],"functionName":{"name":"gt","nativeSrc":"6805:2:5","nodeType":"YulIdentifier","src":"6805:2:5"},"nativeSrc":"6805:14:5","nodeType":"YulFunctionCall","src":"6805:14:5"},"nativeSrc":"6802:40:5","nodeType":"YulIf","src":"6802:40:5"}]},"name":"checked_sub_t_uint8","nativeSrc":"6697:151:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"6726:1:5","nodeType":"YulTypedName","src":"6726:1:5","type":""},{"name":"y","nativeSrc":"6729:1:5","nodeType":"YulTypedName","src":"6729:1:5","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"6735:4:5","nodeType":"YulTypedName","src":"6735:4:5","type":""}],"src":"6697:151:5"},{"body":{"nativeSrc":"6922:306:5","nodeType":"YulBlock","src":"6922:306:5","statements":[{"nativeSrc":"6932:10:5","nodeType":"YulAssignment","src":"6932:10:5","value":{"kind":"number","nativeSrc":"6941:1:5","nodeType":"YulLiteral","src":"6941:1:5","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"6932:5:5","nodeType":"YulIdentifier","src":"6932:5:5"}]},{"nativeSrc":"6951:13:5","nodeType":"YulAssignment","src":"6951:13:5","value":{"name":"_base","nativeSrc":"6959:5:5","nodeType":"YulIdentifier","src":"6959:5:5"},"variableNames":[{"name":"base","nativeSrc":"6951:4:5","nodeType":"YulIdentifier","src":"6951:4:5"}]},{"body":{"nativeSrc":"7009:213:5","nodeType":"YulBlock","src":"7009:213:5","statements":[{"body":{"nativeSrc":"7051:22:5","nodeType":"YulBlock","src":"7051:22:5","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"7053:16:5","nodeType":"YulIdentifier","src":"7053:16:5"},"nativeSrc":"7053:18:5","nodeType":"YulFunctionCall","src":"7053:18:5"},"nativeSrc":"7053:18:5","nodeType":"YulExpressionStatement","src":"7053:18:5"}]},"condition":{"arguments":[{"name":"base","nativeSrc":"7029:4:5","nodeType":"YulIdentifier","src":"7029:4:5"},{"arguments":[{"name":"max","nativeSrc":"7039:3:5","nodeType":"YulIdentifier","src":"7039:3:5"},{"name":"base","nativeSrc":"7044:4:5","nodeType":"YulIdentifier","src":"7044:4:5"}],"functionName":{"name":"div","nativeSrc":"7035:3:5","nodeType":"YulIdentifier","src":"7035:3:5"},"nativeSrc":"7035:14:5","nodeType":"YulFunctionCall","src":"7035:14:5"}],"functionName":{"name":"gt","nativeSrc":"7026:2:5","nodeType":"YulIdentifier","src":"7026:2:5"},"nativeSrc":"7026:24:5","nodeType":"YulFunctionCall","src":"7026:24:5"},"nativeSrc":"7023:50:5","nodeType":"YulIf","src":"7023:50:5"},{"body":{"nativeSrc":"7106:29:5","nodeType":"YulBlock","src":"7106:29:5","statements":[{"nativeSrc":"7108:25:5","nodeType":"YulAssignment","src":"7108:25:5","value":{"arguments":[{"name":"power","nativeSrc":"7121:5:5","nodeType":"YulIdentifier","src":"7121:5:5"},{"name":"base","nativeSrc":"7128:4:5","nodeType":"YulIdentifier","src":"7128:4:5"}],"functionName":{"name":"mul","nativeSrc":"7117:3:5","nodeType":"YulIdentifier","src":"7117:3:5"},"nativeSrc":"7117:16:5","nodeType":"YulFunctionCall","src":"7117:16:5"},"variableNames":[{"name":"power","nativeSrc":"7108:5:5","nodeType":"YulIdentifier","src":"7108:5:5"}]}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"7093:8:5","nodeType":"YulIdentifier","src":"7093:8:5"},{"kind":"number","nativeSrc":"7103:1:5","nodeType":"YulLiteral","src":"7103:1:5","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"7089:3:5","nodeType":"YulIdentifier","src":"7089:3:5"},"nativeSrc":"7089:16:5","nodeType":"YulFunctionCall","src":"7089:16:5"},"nativeSrc":"7086:49:5","nodeType":"YulIf","src":"7086:49:5"},{"nativeSrc":"7148:23:5","nodeType":"YulAssignment","src":"7148:23:5","value":{"arguments":[{"name":"base","nativeSrc":"7160:4:5","nodeType":"YulIdentifier","src":"7160:4:5"},{"name":"base","nativeSrc":"7166:4:5","nodeType":"YulIdentifier","src":"7166:4:5"}],"functionName":{"name":"mul","nativeSrc":"7156:3:5","nodeType":"YulIdentifier","src":"7156:3:5"},"nativeSrc":"7156:15:5","nodeType":"YulFunctionCall","src":"7156:15:5"},"variableNames":[{"name":"base","nativeSrc":"7148:4:5","nodeType":"YulIdentifier","src":"7148:4:5"}]},{"nativeSrc":"7184:28:5","nodeType":"YulAssignment","src":"7184:28:5","value":{"arguments":[{"kind":"number","nativeSrc":"7200:1:5","nodeType":"YulLiteral","src":"7200:1:5","type":"","value":"1"},{"name":"exponent","nativeSrc":"7203:8:5","nodeType":"YulIdentifier","src":"7203:8:5"}],"functionName":{"name":"shr","nativeSrc":"7196:3:5","nodeType":"YulIdentifier","src":"7196:3:5"},"nativeSrc":"7196:16:5","nodeType":"YulFunctionCall","src":"7196:16:5"},"variableNames":[{"name":"exponent","nativeSrc":"7184:8:5","nodeType":"YulIdentifier","src":"7184:8:5"}]}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"6984:8:5","nodeType":"YulIdentifier","src":"6984:8:5"},{"kind":"number","nativeSrc":"6994:1:5","nodeType":"YulLiteral","src":"6994:1:5","type":"","value":"1"}],"functionName":{"name":"gt","nativeSrc":"6981:2:5","nodeType":"YulIdentifier","src":"6981:2:5"},"nativeSrc":"6981:15:5","nodeType":"YulFunctionCall","src":"6981:15:5"},"nativeSrc":"6973:249:5","nodeType":"YulForLoop","post":{"nativeSrc":"6997:3:5","nodeType":"YulBlock","src":"6997:3:5","statements":[]},"pre":{"nativeSrc":"6977:3:5","nodeType":"YulBlock","src":"6977:3:5","statements":[]},"src":"6973:249:5"}]},"name":"checked_exp_helper","nativeSrc":"6853:375:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nativeSrc":"6881:5:5","nodeType":"YulTypedName","src":"6881:5:5","type":""},{"name":"exponent","nativeSrc":"6888:8:5","nodeType":"YulTypedName","src":"6888:8:5","type":""},{"name":"max","nativeSrc":"6898:3:5","nodeType":"YulTypedName","src":"6898:3:5","type":""}],"returnVariables":[{"name":"power","nativeSrc":"6906:5:5","nodeType":"YulTypedName","src":"6906:5:5","type":""},{"name":"base","nativeSrc":"6913:4:5","nodeType":"YulTypedName","src":"6913:4:5","type":""}],"src":"6853:375:5"},{"body":{"nativeSrc":"7292:843:5","nodeType":"YulBlock","src":"7292:843:5","statements":[{"body":{"nativeSrc":"7330:52:5","nodeType":"YulBlock","src":"7330:52:5","statements":[{"nativeSrc":"7344:10:5","nodeType":"YulAssignment","src":"7344:10:5","value":{"kind":"number","nativeSrc":"7353:1:5","nodeType":"YulLiteral","src":"7353:1:5","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"7344:5:5","nodeType":"YulIdentifier","src":"7344:5:5"}]},{"nativeSrc":"7367:5:5","nodeType":"YulLeave","src":"7367:5:5"}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"7312:8:5","nodeType":"YulIdentifier","src":"7312:8:5"}],"functionName":{"name":"iszero","nativeSrc":"7305:6:5","nodeType":"YulIdentifier","src":"7305:6:5"},"nativeSrc":"7305:16:5","nodeType":"YulFunctionCall","src":"7305:16:5"},"nativeSrc":"7302:80:5","nodeType":"YulIf","src":"7302:80:5"},{"body":{"nativeSrc":"7415:52:5","nodeType":"YulBlock","src":"7415:52:5","statements":[{"nativeSrc":"7429:10:5","nodeType":"YulAssignment","src":"7429:10:5","value":{"kind":"number","nativeSrc":"7438:1:5","nodeType":"YulLiteral","src":"7438:1:5","type":"","value":"0"},"variableNames":[{"name":"power","nativeSrc":"7429:5:5","nodeType":"YulIdentifier","src":"7429:5:5"}]},{"nativeSrc":"7452:5:5","nodeType":"YulLeave","src":"7452:5:5"}]},"condition":{"arguments":[{"name":"base","nativeSrc":"7401:4:5","nodeType":"YulIdentifier","src":"7401:4:5"}],"functionName":{"name":"iszero","nativeSrc":"7394:6:5","nodeType":"YulIdentifier","src":"7394:6:5"},"nativeSrc":"7394:12:5","nodeType":"YulFunctionCall","src":"7394:12:5"},"nativeSrc":"7391:76:5","nodeType":"YulIf","src":"7391:76:5"},{"cases":[{"body":{"nativeSrc":"7503:52:5","nodeType":"YulBlock","src":"7503:52:5","statements":[{"nativeSrc":"7517:10:5","nodeType":"YulAssignment","src":"7517:10:5","value":{"kind":"number","nativeSrc":"7526:1:5","nodeType":"YulLiteral","src":"7526:1:5","type":"","value":"1"},"variableNames":[{"name":"power","nativeSrc":"7517:5:5","nodeType":"YulIdentifier","src":"7517:5:5"}]},{"nativeSrc":"7540:5:5","nodeType":"YulLeave","src":"7540:5:5"}]},"nativeSrc":"7496:59:5","nodeType":"YulCase","src":"7496:59:5","value":{"kind":"number","nativeSrc":"7501:1:5","nodeType":"YulLiteral","src":"7501:1:5","type":"","value":"1"}},{"body":{"nativeSrc":"7571:167:5","nodeType":"YulBlock","src":"7571:167:5","statements":[{"body":{"nativeSrc":"7606:22:5","nodeType":"YulBlock","src":"7606:22:5","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"7608:16:5","nodeType":"YulIdentifier","src":"7608:16:5"},"nativeSrc":"7608:18:5","nodeType":"YulFunctionCall","src":"7608:18:5"},"nativeSrc":"7608:18:5","nodeType":"YulExpressionStatement","src":"7608:18:5"}]},"condition":{"arguments":[{"name":"exponent","nativeSrc":"7591:8:5","nodeType":"YulIdentifier","src":"7591:8:5"},{"kind":"number","nativeSrc":"7601:3:5","nodeType":"YulLiteral","src":"7601:3:5","type":"","value":"255"}],"functionName":{"name":"gt","nativeSrc":"7588:2:5","nodeType":"YulIdentifier","src":"7588:2:5"},"nativeSrc":"7588:17:5","nodeType":"YulFunctionCall","src":"7588:17:5"},"nativeSrc":"7585:43:5","nodeType":"YulIf","src":"7585:43:5"},{"nativeSrc":"7641:25:5","nodeType":"YulAssignment","src":"7641:25:5","value":{"arguments":[{"name":"exponent","nativeSrc":"7654:8:5","nodeType":"YulIdentifier","src":"7654:8:5"},{"kind":"number","nativeSrc":"7664:1:5","nodeType":"YulLiteral","src":"7664:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"7650:3:5","nodeType":"YulIdentifier","src":"7650:3:5"},"nativeSrc":"7650:16:5","nodeType":"YulFunctionCall","src":"7650:16:5"},"variableNames":[{"name":"power","nativeSrc":"7641:5:5","nodeType":"YulIdentifier","src":"7641:5:5"}]},{"nativeSrc":"7679:11:5","nodeType":"YulVariableDeclaration","src":"7679:11:5","value":{"kind":"number","nativeSrc":"7689:1:5","nodeType":"YulLiteral","src":"7689:1:5","type":"","value":"0"},"variables":[{"name":"_1","nativeSrc":"7683:2:5","nodeType":"YulTypedName","src":"7683:2:5","type":""}]},{"nativeSrc":"7703:7:5","nodeType":"YulAssignment","src":"7703:7:5","value":{"kind":"number","nativeSrc":"7709:1:5","nodeType":"YulLiteral","src":"7709:1:5","type":"","value":"0"},"variableNames":[{"name":"_1","nativeSrc":"7703:2:5","nodeType":"YulIdentifier","src":"7703:2:5"}]},{"nativeSrc":"7723:5:5","nodeType":"YulLeave","src":"7723:5:5"}]},"nativeSrc":"7564:174:5","nodeType":"YulCase","src":"7564:174:5","value":{"kind":"number","nativeSrc":"7569:1:5","nodeType":"YulLiteral","src":"7569:1:5","type":"","value":"2"}}],"expression":{"name":"base","nativeSrc":"7483:4:5","nodeType":"YulIdentifier","src":"7483:4:5"},"nativeSrc":"7476:262:5","nodeType":"YulSwitch","src":"7476:262:5"},{"body":{"nativeSrc":"7836:114:5","nodeType":"YulBlock","src":"7836:114:5","statements":[{"nativeSrc":"7850:28:5","nodeType":"YulAssignment","src":"7850:28:5","value":{"arguments":[{"name":"base","nativeSrc":"7863:4:5","nodeType":"YulIdentifier","src":"7863:4:5"},{"name":"exponent","nativeSrc":"7869:8:5","nodeType":"YulIdentifier","src":"7869:8:5"}],"functionName":{"name":"exp","nativeSrc":"7859:3:5","nodeType":"YulIdentifier","src":"7859:3:5"},"nativeSrc":"7859:19:5","nodeType":"YulFunctionCall","src":"7859:19:5"},"variableNames":[{"name":"power","nativeSrc":"7850:5:5","nodeType":"YulIdentifier","src":"7850:5:5"}]},{"nativeSrc":"7891:11:5","nodeType":"YulVariableDeclaration","src":"7891:11:5","value":{"kind":"number","nativeSrc":"7901:1:5","nodeType":"YulLiteral","src":"7901:1:5","type":"","value":"0"},"variables":[{"name":"_2","nativeSrc":"7895:2:5","nodeType":"YulTypedName","src":"7895:2:5","type":""}]},{"nativeSrc":"7915:7:5","nodeType":"YulAssignment","src":"7915:7:5","value":{"kind":"number","nativeSrc":"7921:1:5","nodeType":"YulLiteral","src":"7921:1:5","type":"","value":"0"},"variableNames":[{"name":"_2","nativeSrc":"7915:2:5","nodeType":"YulIdentifier","src":"7915:2:5"}]},{"nativeSrc":"7935:5:5","nodeType":"YulLeave","src":"7935:5:5"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nativeSrc":"7760:4:5","nodeType":"YulIdentifier","src":"7760:4:5"},{"kind":"number","nativeSrc":"7766:2:5","nodeType":"YulLiteral","src":"7766:2:5","type":"","value":"11"}],"functionName":{"name":"lt","nativeSrc":"7757:2:5","nodeType":"YulIdentifier","src":"7757:2:5"},"nativeSrc":"7757:12:5","nodeType":"YulFunctionCall","src":"7757:12:5"},{"arguments":[{"name":"exponent","nativeSrc":"7774:8:5","nodeType":"YulIdentifier","src":"7774:8:5"},{"kind":"number","nativeSrc":"7784:2:5","nodeType":"YulLiteral","src":"7784:2:5","type":"","value":"78"}],"functionName":{"name":"lt","nativeSrc":"7771:2:5","nodeType":"YulIdentifier","src":"7771:2:5"},"nativeSrc":"7771:16:5","nodeType":"YulFunctionCall","src":"7771:16:5"}],"functionName":{"name":"and","nativeSrc":"7753:3:5","nodeType":"YulIdentifier","src":"7753:3:5"},"nativeSrc":"7753:35:5","nodeType":"YulFunctionCall","src":"7753:35:5"},{"arguments":[{"arguments":[{"name":"base","nativeSrc":"7797:4:5","nodeType":"YulIdentifier","src":"7797:4:5"},{"kind":"number","nativeSrc":"7803:3:5","nodeType":"YulLiteral","src":"7803:3:5","type":"","value":"307"}],"functionName":{"name":"lt","nativeSrc":"7794:2:5","nodeType":"YulIdentifier","src":"7794:2:5"},"nativeSrc":"7794:13:5","nodeType":"YulFunctionCall","src":"7794:13:5"},{"arguments":[{"name":"exponent","nativeSrc":"7812:8:5","nodeType":"YulIdentifier","src":"7812:8:5"},{"kind":"number","nativeSrc":"7822:2:5","nodeType":"YulLiteral","src":"7822:2:5","type":"","value":"32"}],"functionName":{"name":"lt","nativeSrc":"7809:2:5","nodeType":"YulIdentifier","src":"7809:2:5"},"nativeSrc":"7809:16:5","nodeType":"YulFunctionCall","src":"7809:16:5"}],"functionName":{"name":"and","nativeSrc":"7790:3:5","nodeType":"YulIdentifier","src":"7790:3:5"},"nativeSrc":"7790:36:5","nodeType":"YulFunctionCall","src":"7790:36:5"}],"functionName":{"name":"or","nativeSrc":"7750:2:5","nodeType":"YulIdentifier","src":"7750:2:5"},"nativeSrc":"7750:77:5","nodeType":"YulFunctionCall","src":"7750:77:5"},"nativeSrc":"7747:203:5","nodeType":"YulIf","src":"7747:203:5"},{"nativeSrc":"7959:65:5","nodeType":"YulVariableDeclaration","src":"7959:65:5","value":{"arguments":[{"name":"base","nativeSrc":"8001:4:5","nodeType":"YulIdentifier","src":"8001:4:5"},{"name":"exponent","nativeSrc":"8007:8:5","nodeType":"YulIdentifier","src":"8007:8:5"},{"arguments":[{"kind":"number","nativeSrc":"8021:1:5","nodeType":"YulLiteral","src":"8021:1:5","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"8017:3:5","nodeType":"YulIdentifier","src":"8017:3:5"},"nativeSrc":"8017:6:5","nodeType":"YulFunctionCall","src":"8017:6:5"}],"functionName":{"name":"checked_exp_helper","nativeSrc":"7982:18:5","nodeType":"YulIdentifier","src":"7982:18:5"},"nativeSrc":"7982:42:5","nodeType":"YulFunctionCall","src":"7982:42:5"},"variables":[{"name":"power_1","nativeSrc":"7963:7:5","nodeType":"YulTypedName","src":"7963:7:5","type":""},{"name":"base_1","nativeSrc":"7972:6:5","nodeType":"YulTypedName","src":"7972:6:5","type":""}]},{"body":{"nativeSrc":"8069:22:5","nodeType":"YulBlock","src":"8069:22:5","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"8071:16:5","nodeType":"YulIdentifier","src":"8071:16:5"},"nativeSrc":"8071:18:5","nodeType":"YulFunctionCall","src":"8071:18:5"},"nativeSrc":"8071:18:5","nodeType":"YulExpressionStatement","src":"8071:18:5"}]},"condition":{"arguments":[{"name":"power_1","nativeSrc":"8039:7:5","nodeType":"YulIdentifier","src":"8039:7:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"8056:1:5","nodeType":"YulLiteral","src":"8056:1:5","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"8052:3:5","nodeType":"YulIdentifier","src":"8052:3:5"},"nativeSrc":"8052:6:5","nodeType":"YulFunctionCall","src":"8052:6:5"},{"name":"base_1","nativeSrc":"8060:6:5","nodeType":"YulIdentifier","src":"8060:6:5"}],"functionName":{"name":"div","nativeSrc":"8048:3:5","nodeType":"YulIdentifier","src":"8048:3:5"},"nativeSrc":"8048:19:5","nodeType":"YulFunctionCall","src":"8048:19:5"}],"functionName":{"name":"gt","nativeSrc":"8036:2:5","nodeType":"YulIdentifier","src":"8036:2:5"},"nativeSrc":"8036:32:5","nodeType":"YulFunctionCall","src":"8036:32:5"},"nativeSrc":"8033:58:5","nodeType":"YulIf","src":"8033:58:5"},{"nativeSrc":"8100:29:5","nodeType":"YulAssignment","src":"8100:29:5","value":{"arguments":[{"name":"power_1","nativeSrc":"8113:7:5","nodeType":"YulIdentifier","src":"8113:7:5"},{"name":"base_1","nativeSrc":"8122:6:5","nodeType":"YulIdentifier","src":"8122:6:5"}],"functionName":{"name":"mul","nativeSrc":"8109:3:5","nodeType":"YulIdentifier","src":"8109:3:5"},"nativeSrc":"8109:20:5","nodeType":"YulFunctionCall","src":"8109:20:5"},"variableNames":[{"name":"power","nativeSrc":"8100:5:5","nodeType":"YulIdentifier","src":"8100:5:5"}]}]},"name":"checked_exp_unsigned","nativeSrc":"7233:902:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nativeSrc":"7263:4:5","nodeType":"YulTypedName","src":"7263:4:5","type":""},{"name":"exponent","nativeSrc":"7269:8:5","nodeType":"YulTypedName","src":"7269:8:5","type":""}],"returnVariables":[{"name":"power","nativeSrc":"7282:5:5","nodeType":"YulTypedName","src":"7282:5:5","type":""}],"src":"7233:902:5"},{"body":{"nativeSrc":"8208:72:5","nodeType":"YulBlock","src":"8208:72:5","statements":[{"nativeSrc":"8218:56:5","nodeType":"YulAssignment","src":"8218:56:5","value":{"arguments":[{"name":"base","nativeSrc":"8248:4:5","nodeType":"YulIdentifier","src":"8248:4:5"},{"arguments":[{"name":"exponent","nativeSrc":"8258:8:5","nodeType":"YulIdentifier","src":"8258:8:5"},{"kind":"number","nativeSrc":"8268:4:5","nodeType":"YulLiteral","src":"8268:4:5","type":"","value":"0xff"}],"functionName":{"name":"and","nativeSrc":"8254:3:5","nodeType":"YulIdentifier","src":"8254:3:5"},"nativeSrc":"8254:19:5","nodeType":"YulFunctionCall","src":"8254:19:5"}],"functionName":{"name":"checked_exp_unsigned","nativeSrc":"8227:20:5","nodeType":"YulIdentifier","src":"8227:20:5"},"nativeSrc":"8227:47:5","nodeType":"YulFunctionCall","src":"8227:47:5"},"variableNames":[{"name":"power","nativeSrc":"8218:5:5","nodeType":"YulIdentifier","src":"8218:5:5"}]}]},"name":"checked_exp_t_uint256_t_uint8","nativeSrc":"8140:140:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nativeSrc":"8179:4:5","nodeType":"YulTypedName","src":"8179:4:5","type":""},{"name":"exponent","nativeSrc":"8185:8:5","nodeType":"YulTypedName","src":"8185:8:5","type":""}],"returnVariables":[{"name":"power","nativeSrc":"8198:5:5","nodeType":"YulTypedName","src":"8198:5:5","type":""}],"src":"8140:140:5"},{"body":{"nativeSrc":"8459:244:5","nodeType":"YulBlock","src":"8459:244:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"8476:9:5","nodeType":"YulIdentifier","src":"8476:9:5"},{"kind":"number","nativeSrc":"8487:2:5","nodeType":"YulLiteral","src":"8487:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"8469:6:5","nodeType":"YulIdentifier","src":"8469:6:5"},"nativeSrc":"8469:21:5","nodeType":"YulFunctionCall","src":"8469:21:5"},"nativeSrc":"8469:21:5","nodeType":"YulExpressionStatement","src":"8469:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8510:9:5","nodeType":"YulIdentifier","src":"8510:9:5"},{"kind":"number","nativeSrc":"8521:2:5","nodeType":"YulLiteral","src":"8521:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8506:3:5","nodeType":"YulIdentifier","src":"8506:3:5"},"nativeSrc":"8506:18:5","nodeType":"YulFunctionCall","src":"8506:18:5"},{"kind":"number","nativeSrc":"8526:2:5","nodeType":"YulLiteral","src":"8526:2:5","type":"","value":"54"}],"functionName":{"name":"mstore","nativeSrc":"8499:6:5","nodeType":"YulIdentifier","src":"8499:6:5"},"nativeSrc":"8499:30:5","nodeType":"YulFunctionCall","src":"8499:30:5"},"nativeSrc":"8499:30:5","nodeType":"YulExpressionStatement","src":"8499:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8549:9:5","nodeType":"YulIdentifier","src":"8549:9:5"},{"kind":"number","nativeSrc":"8560:2:5","nodeType":"YulLiteral","src":"8560:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"8545:3:5","nodeType":"YulIdentifier","src":"8545:3:5"},"nativeSrc":"8545:18:5","nodeType":"YulFunctionCall","src":"8545:18:5"},{"hexValue":"546f6b656e50757263686173653a2046696e616c20636f73742063616c63756c","kind":"string","nativeSrc":"8565:34:5","nodeType":"YulLiteral","src":"8565:34:5","type":"","value":"TokenPurchase: Final cost calcul"}],"functionName":{"name":"mstore","nativeSrc":"8538:6:5","nodeType":"YulIdentifier","src":"8538:6:5"},"nativeSrc":"8538:62:5","nodeType":"YulFunctionCall","src":"8538:62:5"},"nativeSrc":"8538:62:5","nodeType":"YulExpressionStatement","src":"8538:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8620:9:5","nodeType":"YulIdentifier","src":"8620:9:5"},{"kind":"number","nativeSrc":"8631:2:5","nodeType":"YulLiteral","src":"8631:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"8616:3:5","nodeType":"YulIdentifier","src":"8616:3:5"},"nativeSrc":"8616:18:5","nodeType":"YulFunctionCall","src":"8616:18:5"},{"hexValue":"6174696f6e20726573756c74656420696e207a65726f","kind":"string","nativeSrc":"8636:24:5","nodeType":"YulLiteral","src":"8636:24:5","type":"","value":"ation resulted in zero"}],"functionName":{"name":"mstore","nativeSrc":"8609:6:5","nodeType":"YulIdentifier","src":"8609:6:5"},"nativeSrc":"8609:52:5","nodeType":"YulFunctionCall","src":"8609:52:5"},"nativeSrc":"8609:52:5","nodeType":"YulExpressionStatement","src":"8609:52:5"},{"nativeSrc":"8670:27:5","nodeType":"YulAssignment","src":"8670:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"8682:9:5","nodeType":"YulIdentifier","src":"8682:9:5"},{"kind":"number","nativeSrc":"8693:3:5","nodeType":"YulLiteral","src":"8693:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"8678:3:5","nodeType":"YulIdentifier","src":"8678:3:5"},"nativeSrc":"8678:19:5","nodeType":"YulFunctionCall","src":"8678:19:5"},"variableNames":[{"name":"tail","nativeSrc":"8670:4:5","nodeType":"YulIdentifier","src":"8670:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_e0d3afde06c8f12253dc08a4a976ec97d1840e5744b136804d7cdd0c6c304b49__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8285:418:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8436:9:5","nodeType":"YulTypedName","src":"8436:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8450:4:5","nodeType":"YulTypedName","src":"8450:4:5","type":""}],"src":"8285:418:5"},{"body":{"nativeSrc":"8882:225:5","nodeType":"YulBlock","src":"8882:225:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"8899:9:5","nodeType":"YulIdentifier","src":"8899:9:5"},{"kind":"number","nativeSrc":"8910:2:5","nodeType":"YulLiteral","src":"8910:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"8892:6:5","nodeType":"YulIdentifier","src":"8892:6:5"},"nativeSrc":"8892:21:5","nodeType":"YulFunctionCall","src":"8892:21:5"},"nativeSrc":"8892:21:5","nodeType":"YulExpressionStatement","src":"8892:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8933:9:5","nodeType":"YulIdentifier","src":"8933:9:5"},{"kind":"number","nativeSrc":"8944:2:5","nodeType":"YulLiteral","src":"8944:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"8929:3:5","nodeType":"YulIdentifier","src":"8929:3:5"},"nativeSrc":"8929:18:5","nodeType":"YulFunctionCall","src":"8929:18:5"},{"kind":"number","nativeSrc":"8949:2:5","nodeType":"YulLiteral","src":"8949:2:5","type":"","value":"35"}],"functionName":{"name":"mstore","nativeSrc":"8922:6:5","nodeType":"YulIdentifier","src":"8922:6:5"},"nativeSrc":"8922:30:5","nodeType":"YulFunctionCall","src":"8922:30:5"},"nativeSrc":"8922:30:5","nodeType":"YulExpressionStatement","src":"8922:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"8972:9:5","nodeType":"YulIdentifier","src":"8972:9:5"},{"kind":"number","nativeSrc":"8983:2:5","nodeType":"YulLiteral","src":"8983:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"8968:3:5","nodeType":"YulIdentifier","src":"8968:3:5"},"nativeSrc":"8968:18:5","nodeType":"YulFunctionCall","src":"8968:18:5"},{"hexValue":"546f6b656e50757263686173653a20496e73756666696369656e74207061796d","kind":"string","nativeSrc":"8988:34:5","nodeType":"YulLiteral","src":"8988:34:5","type":"","value":"TokenPurchase: Insufficient paym"}],"functionName":{"name":"mstore","nativeSrc":"8961:6:5","nodeType":"YulIdentifier","src":"8961:6:5"},"nativeSrc":"8961:62:5","nodeType":"YulFunctionCall","src":"8961:62:5"},"nativeSrc":"8961:62:5","nodeType":"YulExpressionStatement","src":"8961:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9043:9:5","nodeType":"YulIdentifier","src":"9043:9:5"},{"kind":"number","nativeSrc":"9054:2:5","nodeType":"YulLiteral","src":"9054:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"9039:3:5","nodeType":"YulIdentifier","src":"9039:3:5"},"nativeSrc":"9039:18:5","nodeType":"YulFunctionCall","src":"9039:18:5"},{"hexValue":"656e74","kind":"string","nativeSrc":"9059:5:5","nodeType":"YulLiteral","src":"9059:5:5","type":"","value":"ent"}],"functionName":{"name":"mstore","nativeSrc":"9032:6:5","nodeType":"YulIdentifier","src":"9032:6:5"},"nativeSrc":"9032:33:5","nodeType":"YulFunctionCall","src":"9032:33:5"},"nativeSrc":"9032:33:5","nodeType":"YulExpressionStatement","src":"9032:33:5"},{"nativeSrc":"9074:27:5","nodeType":"YulAssignment","src":"9074:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"9086:9:5","nodeType":"YulIdentifier","src":"9086:9:5"},{"kind":"number","nativeSrc":"9097:3:5","nodeType":"YulLiteral","src":"9097:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"9082:3:5","nodeType":"YulIdentifier","src":"9082:3:5"},"nativeSrc":"9082:19:5","nodeType":"YulFunctionCall","src":"9082:19:5"},"variableNames":[{"name":"tail","nativeSrc":"9074:4:5","nodeType":"YulIdentifier","src":"9074:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_e27685788135ac0f16015c706d402c0b6bf54cb489a2b8a881f3e9924a771add__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"8708:399:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"8859:9:5","nodeType":"YulTypedName","src":"8859:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"8873:4:5","nodeType":"YulTypedName","src":"8873:4:5","type":""}],"src":"8708:399:5"},{"body":{"nativeSrc":"9161:79:5","nodeType":"YulBlock","src":"9161:79:5","statements":[{"nativeSrc":"9171:17:5","nodeType":"YulAssignment","src":"9171:17:5","value":{"arguments":[{"name":"x","nativeSrc":"9183:1:5","nodeType":"YulIdentifier","src":"9183:1:5"},{"name":"y","nativeSrc":"9186:1:5","nodeType":"YulIdentifier","src":"9186:1:5"}],"functionName":{"name":"sub","nativeSrc":"9179:3:5","nodeType":"YulIdentifier","src":"9179:3:5"},"nativeSrc":"9179:9:5","nodeType":"YulFunctionCall","src":"9179:9:5"},"variableNames":[{"name":"diff","nativeSrc":"9171:4:5","nodeType":"YulIdentifier","src":"9171:4:5"}]},{"body":{"nativeSrc":"9212:22:5","nodeType":"YulBlock","src":"9212:22:5","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nativeSrc":"9214:16:5","nodeType":"YulIdentifier","src":"9214:16:5"},"nativeSrc":"9214:18:5","nodeType":"YulFunctionCall","src":"9214:18:5"},"nativeSrc":"9214:18:5","nodeType":"YulExpressionStatement","src":"9214:18:5"}]},"condition":{"arguments":[{"name":"diff","nativeSrc":"9203:4:5","nodeType":"YulIdentifier","src":"9203:4:5"},{"name":"x","nativeSrc":"9209:1:5","nodeType":"YulIdentifier","src":"9209:1:5"}],"functionName":{"name":"gt","nativeSrc":"9200:2:5","nodeType":"YulIdentifier","src":"9200:2:5"},"nativeSrc":"9200:11:5","nodeType":"YulFunctionCall","src":"9200:11:5"},"nativeSrc":"9197:37:5","nodeType":"YulIf","src":"9197:37:5"}]},"name":"checked_sub_t_uint256","nativeSrc":"9112:128:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nativeSrc":"9143:1:5","nodeType":"YulTypedName","src":"9143:1:5","type":""},{"name":"y","nativeSrc":"9146:1:5","nodeType":"YulTypedName","src":"9146:1:5","type":""}],"returnVariables":[{"name":"diff","nativeSrc":"9152:4:5","nodeType":"YulTypedName","src":"9152:4:5","type":""}],"src":"9112:128:5"},{"body":{"nativeSrc":"9419:240:5","nodeType":"YulBlock","src":"9419:240:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"9436:9:5","nodeType":"YulIdentifier","src":"9436:9:5"},{"kind":"number","nativeSrc":"9447:2:5","nodeType":"YulLiteral","src":"9447:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"9429:6:5","nodeType":"YulIdentifier","src":"9429:6:5"},"nativeSrc":"9429:21:5","nodeType":"YulFunctionCall","src":"9429:21:5"},"nativeSrc":"9429:21:5","nodeType":"YulExpressionStatement","src":"9429:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9470:9:5","nodeType":"YulIdentifier","src":"9470:9:5"},{"kind":"number","nativeSrc":"9481:2:5","nodeType":"YulLiteral","src":"9481:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9466:3:5","nodeType":"YulIdentifier","src":"9466:3:5"},"nativeSrc":"9466:18:5","nodeType":"YulFunctionCall","src":"9466:18:5"},{"kind":"number","nativeSrc":"9486:2:5","nodeType":"YulLiteral","src":"9486:2:5","type":"","value":"50"}],"functionName":{"name":"mstore","nativeSrc":"9459:6:5","nodeType":"YulIdentifier","src":"9459:6:5"},"nativeSrc":"9459:30:5","nodeType":"YulFunctionCall","src":"9459:30:5"},"nativeSrc":"9459:30:5","nodeType":"YulExpressionStatement","src":"9459:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9509:9:5","nodeType":"YulIdentifier","src":"9509:9:5"},{"kind":"number","nativeSrc":"9520:2:5","nodeType":"YulLiteral","src":"9520:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"9505:3:5","nodeType":"YulIdentifier","src":"9505:3:5"},"nativeSrc":"9505:18:5","nodeType":"YulFunctionCall","src":"9505:18:5"},{"hexValue":"546f6b656e50757263686173653a20455448206e6f7420616363657074656420","kind":"string","nativeSrc":"9525:34:5","nodeType":"YulLiteral","src":"9525:34:5","type":"","value":"TokenPurchase: ETH not accepted "}],"functionName":{"name":"mstore","nativeSrc":"9498:6:5","nodeType":"YulIdentifier","src":"9498:6:5"},"nativeSrc":"9498:62:5","nodeType":"YulFunctionCall","src":"9498:62:5"},"nativeSrc":"9498:62:5","nodeType":"YulExpressionStatement","src":"9498:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9580:9:5","nodeType":"YulIdentifier","src":"9580:9:5"},{"kind":"number","nativeSrc":"9591:2:5","nodeType":"YulLiteral","src":"9591:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"9576:3:5","nodeType":"YulIdentifier","src":"9576:3:5"},"nativeSrc":"9576:18:5","nodeType":"YulFunctionCall","src":"9576:18:5"},{"hexValue":"666f7220746f6b656e207061796d656e7473","kind":"string","nativeSrc":"9596:20:5","nodeType":"YulLiteral","src":"9596:20:5","type":"","value":"for token payments"}],"functionName":{"name":"mstore","nativeSrc":"9569:6:5","nodeType":"YulIdentifier","src":"9569:6:5"},"nativeSrc":"9569:48:5","nodeType":"YulFunctionCall","src":"9569:48:5"},"nativeSrc":"9569:48:5","nodeType":"YulExpressionStatement","src":"9569:48:5"},{"nativeSrc":"9626:27:5","nodeType":"YulAssignment","src":"9626:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"9638:9:5","nodeType":"YulIdentifier","src":"9638:9:5"},{"kind":"number","nativeSrc":"9649:3:5","nodeType":"YulLiteral","src":"9649:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"9634:3:5","nodeType":"YulIdentifier","src":"9634:3:5"},"nativeSrc":"9634:19:5","nodeType":"YulFunctionCall","src":"9634:19:5"},"variableNames":[{"name":"tail","nativeSrc":"9626:4:5","nodeType":"YulIdentifier","src":"9626:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_11b85f859e9db479f4e9a393f5c066cd334f3c888472f0da611fdbb5e80d3e98__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"9245:414:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9396:9:5","nodeType":"YulTypedName","src":"9396:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9410:4:5","nodeType":"YulTypedName","src":"9410:4:5","type":""}],"src":"9245:414:5"},{"body":{"nativeSrc":"9821:214:5","nodeType":"YulBlock","src":"9821:214:5","statements":[{"nativeSrc":"9831:26:5","nodeType":"YulAssignment","src":"9831:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"9843:9:5","nodeType":"YulIdentifier","src":"9843:9:5"},{"kind":"number","nativeSrc":"9854:2:5","nodeType":"YulLiteral","src":"9854:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"9839:3:5","nodeType":"YulIdentifier","src":"9839:3:5"},"nativeSrc":"9839:18:5","nodeType":"YulFunctionCall","src":"9839:18:5"},"variableNames":[{"name":"tail","nativeSrc":"9831:4:5","nodeType":"YulIdentifier","src":"9831:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"9873:9:5","nodeType":"YulIdentifier","src":"9873:9:5"},{"arguments":[{"name":"value0","nativeSrc":"9888:6:5","nodeType":"YulIdentifier","src":"9888:6:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9904:3:5","nodeType":"YulLiteral","src":"9904:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"9909:1:5","nodeType":"YulLiteral","src":"9909:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"9900:3:5","nodeType":"YulIdentifier","src":"9900:3:5"},"nativeSrc":"9900:11:5","nodeType":"YulFunctionCall","src":"9900:11:5"},{"kind":"number","nativeSrc":"9913:1:5","nodeType":"YulLiteral","src":"9913:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"9896:3:5","nodeType":"YulIdentifier","src":"9896:3:5"},"nativeSrc":"9896:19:5","nodeType":"YulFunctionCall","src":"9896:19:5"}],"functionName":{"name":"and","nativeSrc":"9884:3:5","nodeType":"YulIdentifier","src":"9884:3:5"},"nativeSrc":"9884:32:5","nodeType":"YulFunctionCall","src":"9884:32:5"}],"functionName":{"name":"mstore","nativeSrc":"9866:6:5","nodeType":"YulIdentifier","src":"9866:6:5"},"nativeSrc":"9866:51:5","nodeType":"YulFunctionCall","src":"9866:51:5"},"nativeSrc":"9866:51:5","nodeType":"YulExpressionStatement","src":"9866:51:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"9937:9:5","nodeType":"YulIdentifier","src":"9937:9:5"},{"kind":"number","nativeSrc":"9948:2:5","nodeType":"YulLiteral","src":"9948:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"9933:3:5","nodeType":"YulIdentifier","src":"9933:3:5"},"nativeSrc":"9933:18:5","nodeType":"YulFunctionCall","src":"9933:18:5"},{"arguments":[{"name":"value1","nativeSrc":"9957:6:5","nodeType":"YulIdentifier","src":"9957:6:5"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9973:3:5","nodeType":"YulLiteral","src":"9973:3:5","type":"","value":"160"},{"kind":"number","nativeSrc":"9978:1:5","nodeType":"YulLiteral","src":"9978:1:5","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"9969:3:5","nodeType":"YulIdentifier","src":"9969:3:5"},"nativeSrc":"9969:11:5","nodeType":"YulFunctionCall","src":"9969:11:5"},{"kind":"number","nativeSrc":"9982:1:5","nodeType":"YulLiteral","src":"9982:1:5","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"9965:3:5","nodeType":"YulIdentifier","src":"9965:3:5"},"nativeSrc":"9965:19:5","nodeType":"YulFunctionCall","src":"9965:19:5"}],"functionName":{"name":"and","nativeSrc":"9953:3:5","nodeType":"YulIdentifier","src":"9953:3:5"},"nativeSrc":"9953:32:5","nodeType":"YulFunctionCall","src":"9953:32:5"}],"functionName":{"name":"mstore","nativeSrc":"9926:6:5","nodeType":"YulIdentifier","src":"9926:6:5"},"nativeSrc":"9926:60:5","nodeType":"YulFunctionCall","src":"9926:60:5"},"nativeSrc":"9926:60:5","nodeType":"YulExpressionStatement","src":"9926:60:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10006:9:5","nodeType":"YulIdentifier","src":"10006:9:5"},{"kind":"number","nativeSrc":"10017:2:5","nodeType":"YulLiteral","src":"10017:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"10002:3:5","nodeType":"YulIdentifier","src":"10002:3:5"},"nativeSrc":"10002:18:5","nodeType":"YulFunctionCall","src":"10002:18:5"},{"name":"value2","nativeSrc":"10022:6:5","nodeType":"YulIdentifier","src":"10022:6:5"}],"functionName":{"name":"mstore","nativeSrc":"9995:6:5","nodeType":"YulIdentifier","src":"9995:6:5"},"nativeSrc":"9995:34:5","nodeType":"YulFunctionCall","src":"9995:34:5"},"nativeSrc":"9995:34:5","nodeType":"YulExpressionStatement","src":"9995:34:5"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nativeSrc":"9664:371:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"9774:9:5","nodeType":"YulTypedName","src":"9774:9:5","type":""},{"name":"value2","nativeSrc":"9785:6:5","nodeType":"YulTypedName","src":"9785:6:5","type":""},{"name":"value1","nativeSrc":"9793:6:5","nodeType":"YulTypedName","src":"9793:6:5","type":""},{"name":"value0","nativeSrc":"9801:6:5","nodeType":"YulTypedName","src":"9801:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"9812:4:5","nodeType":"YulTypedName","src":"9812:4:5","type":""}],"src":"9664:371:5"},{"body":{"nativeSrc":"10214:234:5","nodeType":"YulBlock","src":"10214:234:5","statements":[{"expression":{"arguments":[{"name":"headStart","nativeSrc":"10231:9:5","nodeType":"YulIdentifier","src":"10231:9:5"},{"kind":"number","nativeSrc":"10242:2:5","nodeType":"YulLiteral","src":"10242:2:5","type":"","value":"32"}],"functionName":{"name":"mstore","nativeSrc":"10224:6:5","nodeType":"YulIdentifier","src":"10224:6:5"},"nativeSrc":"10224:21:5","nodeType":"YulFunctionCall","src":"10224:21:5"},"nativeSrc":"10224:21:5","nodeType":"YulExpressionStatement","src":"10224:21:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10265:9:5","nodeType":"YulIdentifier","src":"10265:9:5"},{"kind":"number","nativeSrc":"10276:2:5","nodeType":"YulLiteral","src":"10276:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10261:3:5","nodeType":"YulIdentifier","src":"10261:3:5"},"nativeSrc":"10261:18:5","nodeType":"YulFunctionCall","src":"10261:18:5"},{"kind":"number","nativeSrc":"10281:2:5","nodeType":"YulLiteral","src":"10281:2:5","type":"","value":"44"}],"functionName":{"name":"mstore","nativeSrc":"10254:6:5","nodeType":"YulIdentifier","src":"10254:6:5"},"nativeSrc":"10254:30:5","nodeType":"YulFunctionCall","src":"10254:30:5"},"nativeSrc":"10254:30:5","nodeType":"YulExpressionStatement","src":"10254:30:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10304:9:5","nodeType":"YulIdentifier","src":"10304:9:5"},{"kind":"number","nativeSrc":"10315:2:5","nodeType":"YulLiteral","src":"10315:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"10300:3:5","nodeType":"YulIdentifier","src":"10300:3:5"},"nativeSrc":"10300:18:5","nodeType":"YulFunctionCall","src":"10300:18:5"},{"hexValue":"546f6b656e50757263686173653a205061796d656e7420746f6b656e20747261","kind":"string","nativeSrc":"10320:34:5","nodeType":"YulLiteral","src":"10320:34:5","type":"","value":"TokenPurchase: Payment token tra"}],"functionName":{"name":"mstore","nativeSrc":"10293:6:5","nodeType":"YulIdentifier","src":"10293:6:5"},"nativeSrc":"10293:62:5","nodeType":"YulFunctionCall","src":"10293:62:5"},"nativeSrc":"10293:62:5","nodeType":"YulExpressionStatement","src":"10293:62:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10375:9:5","nodeType":"YulIdentifier","src":"10375:9:5"},{"kind":"number","nativeSrc":"10386:2:5","nodeType":"YulLiteral","src":"10386:2:5","type":"","value":"96"}],"functionName":{"name":"add","nativeSrc":"10371:3:5","nodeType":"YulIdentifier","src":"10371:3:5"},"nativeSrc":"10371:18:5","nodeType":"YulFunctionCall","src":"10371:18:5"},{"hexValue":"6e73666572206661696c6564","kind":"string","nativeSrc":"10391:14:5","nodeType":"YulLiteral","src":"10391:14:5","type":"","value":"nsfer failed"}],"functionName":{"name":"mstore","nativeSrc":"10364:6:5","nodeType":"YulIdentifier","src":"10364:6:5"},"nativeSrc":"10364:42:5","nodeType":"YulFunctionCall","src":"10364:42:5"},"nativeSrc":"10364:42:5","nodeType":"YulExpressionStatement","src":"10364:42:5"},{"nativeSrc":"10415:27:5","nodeType":"YulAssignment","src":"10415:27:5","value":{"arguments":[{"name":"headStart","nativeSrc":"10427:9:5","nodeType":"YulIdentifier","src":"10427:9:5"},{"kind":"number","nativeSrc":"10438:3:5","nodeType":"YulLiteral","src":"10438:3:5","type":"","value":"128"}],"functionName":{"name":"add","nativeSrc":"10423:3:5","nodeType":"YulIdentifier","src":"10423:3:5"},"nativeSrc":"10423:19:5","nodeType":"YulFunctionCall","src":"10423:19:5"},"variableNames":[{"name":"tail","nativeSrc":"10415:4:5","nodeType":"YulIdentifier","src":"10415:4:5"}]}]},"name":"abi_encode_tuple_t_stringliteral_ad081e590cc39a4a4599d635bc01bb3e69c58ba2fe8790475bfac5b89b951cd3__to_t_string_memory_ptr__fromStack_reversed","nativeSrc":"10040:408:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10191:9:5","nodeType":"YulTypedName","src":"10191:9:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"10205:4:5","nodeType":"YulTypedName","src":"10205:4:5","type":""}],"src":"10040:408:5"},{"body":{"nativeSrc":"10582:119:5","nodeType":"YulBlock","src":"10582:119:5","statements":[{"nativeSrc":"10592:26:5","nodeType":"YulAssignment","src":"10592:26:5","value":{"arguments":[{"name":"headStart","nativeSrc":"10604:9:5","nodeType":"YulIdentifier","src":"10604:9:5"},{"kind":"number","nativeSrc":"10615:2:5","nodeType":"YulLiteral","src":"10615:2:5","type":"","value":"64"}],"functionName":{"name":"add","nativeSrc":"10600:3:5","nodeType":"YulIdentifier","src":"10600:3:5"},"nativeSrc":"10600:18:5","nodeType":"YulFunctionCall","src":"10600:18:5"},"variableNames":[{"name":"tail","nativeSrc":"10592:4:5","nodeType":"YulIdentifier","src":"10592:4:5"}]},{"expression":{"arguments":[{"name":"headStart","nativeSrc":"10634:9:5","nodeType":"YulIdentifier","src":"10634:9:5"},{"name":"value0","nativeSrc":"10645:6:5","nodeType":"YulIdentifier","src":"10645:6:5"}],"functionName":{"name":"mstore","nativeSrc":"10627:6:5","nodeType":"YulIdentifier","src":"10627:6:5"},"nativeSrc":"10627:25:5","nodeType":"YulFunctionCall","src":"10627:25:5"},"nativeSrc":"10627:25:5","nodeType":"YulExpressionStatement","src":"10627:25:5"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nativeSrc":"10672:9:5","nodeType":"YulIdentifier","src":"10672:9:5"},{"kind":"number","nativeSrc":"10683:2:5","nodeType":"YulLiteral","src":"10683:2:5","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"10668:3:5","nodeType":"YulIdentifier","src":"10668:3:5"},"nativeSrc":"10668:18:5","nodeType":"YulFunctionCall","src":"10668:18:5"},{"name":"value1","nativeSrc":"10688:6:5","nodeType":"YulIdentifier","src":"10688:6:5"}],"functionName":{"name":"mstore","nativeSrc":"10661:6:5","nodeType":"YulIdentifier","src":"10661:6:5"},"nativeSrc":"10661:34:5","nodeType":"YulFunctionCall","src":"10661:34:5"},"nativeSrc":"10661:34:5","nodeType":"YulExpressionStatement","src":"10661:34:5"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nativeSrc":"10453:248:5","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nativeSrc":"10543:9:5","nodeType":"YulTypedName","src":"10543:9:5","type":""},{"name":"value1","nativeSrc":"10554:6:5","nodeType":"YulTypedName","src":"10554:6:5","type":""},{"name":"value0","nativeSrc":"10562:6:5","nodeType":"YulTypedName","src":"10562:6:5","type":""}],"returnVariables":[{"name":"tail","nativeSrc":"10573:4:5","nodeType":"YulTypedName","src":"10573:4:5","type":""}],"src":"10453:248:5"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IERC20Metadata_$251__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_80f6aac1d203b48e1f5d29c7815975057f3643826d381b01ea7edb253b073c3f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"TokenPurchase: Token cannot be z\")\n        mstore(add(headStart, 96), \"ero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_396715edc6d49985223843116ccf30a2b387f9aadc824a5d71f9b091c2f0166c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"TokenPurchase: Token not set\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_41f9e3915293d362db4e6d5cc6d23384d76f4ef42bf58c3e6c055a71c643f5f6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 41)\n        mstore(add(headStart, 64), \"TokenPurchase: Insufficient toke\")\n        mstore(add(headStart, 96), \"n balance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_956918a5b253877c91a70daaf23e29571844333e5967c6c1f5b6e5e7e0b9dd49__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"TokenPurchase: Token transfer fa\")\n        mstore(add(headStart, 96), \"iled\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cf648d01604cafbce9edff081f75c707175a7b0390857b7bc8e96f2094c37d5a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"TokenPurchase: Payment receiver \")\n        mstore(add(headStart, 96), \"cannot be zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_d1fdc132d89d24a49c6afa67728e034ca70424bb4d57719902661918e12b5ed4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"TokenPurchase: Price must be gre\")\n        mstore(add(headStart, 96), \"ater than zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_11642e9233fe172eab34f4905f0584687897e70bc8ec7e4d8b15b3d4ba325986__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"TokenPurchase: Price not set\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_429a1077f877e28e64b739f25ce90c3083d57226e67a690330c3580fae257b3f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"TokenPurchase: Amount must be gr\")\n        mstore(add(headStart, 96), \"eater than zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e6aaba7be610f33a5546704299f3a3452d6d6167ed801da7a1aee43030488970__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 51)\n        mstore(add(headStart, 64), \"TokenPurchase: Amount below mini\")\n        mstore(add(headStart, 96), \"mum purchase amount\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        product := mul(x, y)\n        if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_86886174ef161c6cf8e241afb3d54b8fd98ef4fb31194412942366cb2d4c46e5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 48)\n        mstore(add(headStart, 64), \"TokenPurchase: Cost calculation \")\n        mstore(add(headStart, 96), \"resulted in zero\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint8(x, y) -> diff\n    {\n        diff := sub(and(x, 0xff), and(y, 0xff))\n        if gt(diff, 0xff) { panic_error_0x11() }\n    }\n    function checked_exp_helper(_base, exponent, max) -> power, base\n    {\n        power := 1\n        base := _base\n        for { } gt(exponent, 1) { }\n        {\n            if gt(base, div(max, base)) { panic_error_0x11() }\n            if and(exponent, 1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            let _1 := 0\n            _1 := 0\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            let _2 := 0\n            _2 := 0\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent, not(0))\n        if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, and(exponent, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_e0d3afde06c8f12253dc08a4a976ec97d1840e5744b136804d7cdd0c6c304b49__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"TokenPurchase: Final cost calcul\")\n        mstore(add(headStart, 96), \"ation resulted in zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e27685788135ac0f16015c706d402c0b6bf54cb489a2b8a881f3e9924a771add__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"TokenPurchase: Insufficient paym\")\n        mstore(add(headStart, 96), \"ent\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_11b85f859e9db479f4e9a393f5c066cd334f3c888472f0da611fdbb5e80d3e98__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"TokenPurchase: ETH not accepted \")\n        mstore(add(headStart, 96), \"for token payments\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_ad081e590cc39a4a4599d635bc01bb3e69c58ba2fe8790475bfac5b89b951cd3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 44)\n        mstore(add(headStart, 64), \"TokenPurchase: Payment token tra\")\n        mstore(add(headStart, 96), \"nsfer failed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":5,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100f35760003560e01c806398d5fdca1161008a578063e9d3fb7811610059578063e9d3fb7814610275578063efef39a114610295578063f2fde38b146102a8578063fc0c546a146102c857600080fd5b806398d5fdca1461020a5780639d1b464a14610229578063b47dbf221461023f578063cb37f3b21461025557600080fd5b80636a326ab1116100c65780636a326ab114610197578063715018a6146101b75780638da5cb5b146101cc57806391b7f5ed146101ea57600080fd5b8063144fa6d7146100f85780633013ce291461011a578063315a095d1461015757806365ebf99a14610177575b600080fd5b34801561010457600080fd5b50610118610113366004610f23565b6102e8565b005b34801561012657600080fd5b5060025461013a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016357600080fd5b50610118610172366004610f53565b610381565b34801561018357600080fd5b50610118610192366004610f23565b610507565b3480156101a357600080fd5b506101186101b2366004610f23565b6105a6565b3480156101c357600080fd5b506101186105f0565b3480156101d857600080fd5b506000546001600160a01b031661013a565b3480156101f657600080fd5b50610118610205366004610f53565b610604565b34801561021657600080fd5b506003545b60405190815260200161014e565b34801561023557600080fd5b5061021b60035481565b34801561024b57600080fd5b5061021b60055481565b34801561026157600080fd5b5060045461013a906001600160a01b031681565b34801561028157600080fd5b50610118610290366004610f53565b6106af565b6101186102a3366004610f53565b6106ec565b3480156102b457600080fd5b506101186102c3366004610f23565b610e6b565b3480156102d457600080fd5b5060015461013a906001600160a01b031681565b6102f0610ea6565b6001600160a01b03811661035f5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e50757263686173653a20546f6b656e2063616e6e6f74206265207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610389610ea6565b6001546001600160a01b03166103e15760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e50757263686173653a20546f6b656e206e6f7420736574000000006044820152606401610356565b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015610429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044d9190610f6c565b101561046b5760405162461bcd60e51b815260040161035690610f85565b6001546004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018490529091169063a9059cbb906044016020604051808303816000875af11580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e89190610fce565b6105045760405162461bcd60e51b815260040161035690610ff0565b50565b61050f610ea6565b6001600160a01b0381166105845760405162461bcd60e51b815260206004820152603660248201527f546f6b656e50757263686173653a205061796d656e742072656365697665722060448201527563616e6e6f74206265207a65726f206164647265737360501b6064820152608401610356565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6105ae610ea6565b6001600160a01b038116156105dd57600280546001600160a01b0383166001600160a01b031990911617905550565b600280546001600160a01b031916905550565b6105f8610ea6565b6106026000610ed3565b565b61060c610ea6565b600081116106735760405162461bcd60e51b815260206004820152602e60248201527f546f6b656e50757263686173653a205072696365206d7573742062652067726560448201526d61746572207468616e207a65726f60901b6064820152608401610356565b60038190556040518181527f66cbca4f3c64fecf1dcb9ce094abcf7f68c3450a1d4e3a8e917dd621edb4ebe0906020015b60405180910390a150565b6106b7610ea6565b60058190556040518181527f8daad05472f6141017dfcc093d307683226fb7016d5d33792c961bd20a8ad2de906020016106a4565b6001546001600160a01b03166107445760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e50757263686173653a20546f6b656e206e6f7420736574000000006044820152606401610356565b6000600354116107965760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e50757263686173653a205072696365206e6f7420736574000000006044820152606401610356565b600081116107fe5760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e50757263686173653a20416d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b6064820152608401610356565b60055481101561086c5760405162461bcd60e51b815260206004820152603360248201527f546f6b656e50757263686173653a20416d6f756e742062656c6f77206d696e696044820152721b5d5b481c1d5c98da185cd948185b5bdd5b9d606a1b6064820152608401610356565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156108b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108da9190611034565b6002549091506000906001600160a01b03161561096d57600260009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109689190611034565b610970565b60125b9050600083600354610982919061106d565b90506000610998670de0b6b3a76400008361108a565b905060008111610a035760405162461bcd60e51b815260206004820152603060248201527f546f6b656e50757263686173653a20436f73742063616c63756c6174696f6e2060448201526f726573756c74656420696e207a65726f60801b6064820152608401610356565b8260ff168460ff1614610a66578260ff168460ff161115610a4457610a2883856110ac565b610a3390600a6111ac565b610a3d908261108a565b9050610a66565b610a4e84846110ac565b610a5990600a6111ac565b610a63908261106d565b90505b60008111610ad55760405162461bcd60e51b815260206004820152603660248201527f546f6b656e50757263686173653a2046696e616c20636f73742063616c63756c6044820152756174696f6e20726573756c74656420696e207a65726f60501b6064820152608401610356565b6001546040516370a0823160e01b815230600482015286916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190610f6c565b1015610b5f5760405162461bcd60e51b815260040161035690610f85565b6002546001600160a01b0316610c4b5780341015610bcb5760405162461bcd60e51b815260206004820152602360248201527f546f6b656e50757263686173653a20496e73756666696369656e74207061796d604482015262195b9d60ea1b6064820152608401610356565b6004546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610c05573d6000803e3d6000fd5b5080341115610c4657336108fc610c1c83346111bb565b6040518115909202916000818181858888f19350505050158015610c44573d6000803e3d6000fd5b505b610d98565b3415610cb45760405162461bcd60e51b815260206004820152603260248201527f546f6b656e50757263686173653a20455448206e6f7420616363657074656420604482015271666f7220746f6b656e207061796d656e747360701b6064820152608401610356565b600254600480546040516323b872dd60e01b815233928101929092526001600160a01b03908116602483015260448201849052909116906323b872dd906064016020604051808303816000875af1158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d379190610fce565b610d985760405162461bcd60e51b815260206004820152602c60248201527f546f6b656e50757263686173653a205061796d656e7420746f6b656e2074726160448201526b1b9cd9995c8819985a5b195960a21b6064820152608401610356565b60015460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d9190610fce565b610e295760405162461bcd60e51b815260040161035690610ff0565b604080518681526020810183905233917f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f33910160405180910390a25050505050565b610e73610ea6565b6001600160a01b038116610e9d57604051631e4fbdf760e01b815260006004820152602401610356565b61050481610ed3565b6000546001600160a01b031633146106025760405163118cdaa760e01b8152336004820152602401610356565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610f3557600080fd5b81356001600160a01b0381168114610f4c57600080fd5b9392505050565b600060208284031215610f6557600080fd5b5035919050565b600060208284031215610f7e57600080fd5b5051919050565b60208082526029908201527f546f6b656e50757263686173653a20496e73756666696369656e7420746f6b656040820152686e2062616c616e636560b81b606082015260800190565b600060208284031215610fe057600080fd5b81518015158114610f4c57600080fd5b60208082526024908201527f546f6b656e50757263686173653a20546f6b656e207472616e736665722066616040820152631a5b195960e21b606082015260800190565b60006020828403121561104657600080fd5b815160ff81168114610f4c57600080fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761108457611084611057565b92915050565b6000826110a757634e487b7160e01b600052601260045260246000fd5b500490565b60ff828116828216039081111561108457611084611057565b6001815b6001841115611100578085048111156110e4576110e4611057565b60018416156110f257908102905b60019390931c9280026110c9565b935093915050565b60008261111757506001611084565b8161112457506000611084565b816001811461113a576002811461114457611160565b6001915050611084565b60ff84111561115557611155611057565b50506001821b611084565b5060208310610133831016604e8410600b8410161715611183575081810a611084565b61119060001984846110c5565b80600019048211156111a4576111a4611057565b029392505050565b6000610f4c60ff841683611108565b818103818111156110845761108461105756fea2646970667358221220abe8ef6b15f31835ea297e84423450b0231b730c0f5897b47c41cc26a37b792a64736f6c634300081c0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF3 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x98D5FDCA GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xE9D3FB78 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xE9D3FB78 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0xEFEF39A1 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2A8 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x98D5FDCA EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x9D1B464A EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xB47DBF22 EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0xCB37F3B2 EQ PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6A326AB1 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0x6A326AB1 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x91B7F5ED EQ PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x144FA6D7 EQ PUSH2 0xF8 JUMPI DUP1 PUSH4 0x3013CE29 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x315A095D EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x65EBF99A EQ PUSH2 0x177 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x2E8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x13A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x172 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x381 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x192 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x507 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x1B2 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0x5A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x5F0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x604 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21B PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21B PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x261 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x13A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x6AF JUMP JUMPDEST PUSH2 0x118 PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x6EC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x118 PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0xE6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH2 0x13A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2F0 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x35F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E2063616E6E6F74206265207A PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x65726F2061646472657373 PUSH1 0xA8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x389 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3E1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E206E6F742073657400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x429 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x44D SWAP2 SWAP1 PUSH2 0xF6C JUMP JUMPDEST LT ISZERO PUSH2 0x46B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xF85 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E8 SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST PUSH2 0x504 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xFF0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x50F PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x584 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205061796D656E7420726563656976657220 PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x63616E6E6F74206265207A65726F2061646472657373 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x5AE PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x5DD JUMPI PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x5F8 PUSH2 0xEA6 JUMP JUMPDEST PUSH2 0x602 PUSH1 0x0 PUSH2 0xED3 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x60C PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x673 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205072696365206D75737420626520677265 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x61746572207468616E207A65726F PUSH1 0x90 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x66CBCA4F3C64FECF1DCB9CE094ABCF7F68C3450A1D4E3A8E917DD621EDB4EBE0 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x6B7 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x5 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x8DAAD05472F6141017DFCC093D307683226FB7016D5D33792C961BD20A8AD2DE SWAP1 PUSH1 0x20 ADD PUSH2 0x6A4 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x744 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E206E6F742073657400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SLOAD GT PUSH2 0x796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205072696365206E6F742073657400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0x7FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20416D6F756E74206D757374206265206772 PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x6561746572207468616E207A65726F PUSH1 0x88 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x86C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20416D6F756E742062656C6F77206D696E69 PUSH1 0x44 DUP3 ADD MSTORE PUSH19 0x1B5D5B481C1D5C98DA185CD948185B5BDD5B9D PUSH1 0x6A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8DA SWAP2 SWAP1 PUSH2 0x1034 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x96D JUMPI PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x944 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x968 SWAP2 SWAP1 PUSH2 0x1034 JUMP JUMPDEST PUSH2 0x970 JUMP JUMPDEST PUSH1 0x12 JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x3 SLOAD PUSH2 0x982 SWAP2 SWAP1 PUSH2 0x106D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x998 PUSH8 0xDE0B6B3A7640000 DUP4 PUSH2 0x108A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0xA03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20436F73742063616C63756C6174696F6E20 PUSH1 0x44 DUP3 ADD MSTORE PUSH16 0x726573756C74656420696E207A65726F PUSH1 0x80 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST DUP3 PUSH1 0xFF AND DUP5 PUSH1 0xFF AND EQ PUSH2 0xA66 JUMPI DUP3 PUSH1 0xFF AND DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0xA44 JUMPI PUSH2 0xA28 DUP4 DUP6 PUSH2 0x10AC JUMP JUMPDEST PUSH2 0xA33 SWAP1 PUSH1 0xA PUSH2 0x11AC JUMP JUMPDEST PUSH2 0xA3D SWAP1 DUP3 PUSH2 0x108A JUMP JUMPDEST SWAP1 POP PUSH2 0xA66 JUMP JUMPDEST PUSH2 0xA4E DUP5 DUP5 PUSH2 0x10AC JUMP JUMPDEST PUSH2 0xA59 SWAP1 PUSH1 0xA PUSH2 0x11AC JUMP JUMPDEST PUSH2 0xA63 SWAP1 DUP3 PUSH2 0x106D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x0 DUP2 GT PUSH2 0xAD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A2046696E616C20636F73742063616C63756C PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x6174696F6E20726573756C74656420696E207A65726F PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP7 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB41 SWAP2 SWAP1 PUSH2 0xF6C JUMP JUMPDEST LT ISZERO PUSH2 0xB5F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xF85 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC4B JUMPI DUP1 CALLVALUE LT ISZERO PUSH2 0xBCB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20496E73756666696369656E74207061796D PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x195B9D PUSH1 0xEA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xC05 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP DUP1 CALLVALUE GT ISZERO PUSH2 0xC46 JUMPI CALLER PUSH2 0x8FC PUSH2 0xC1C DUP4 CALLVALUE PUSH2 0x11BB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 ISZERO SWAP1 SWAP3 MUL SWAP2 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xC44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST PUSH2 0xD98 JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0xCB4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20455448206E6F7420616363657074656420 PUSH1 0x44 DUP3 ADD MSTORE PUSH18 0x666F7220746F6B656E207061796D656E7473 PUSH1 0x70 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD37 SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST PUSH2 0xD98 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A205061796D656E7420746F6B656E20747261 PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x1B9CD9995C8819985A5B1959 PUSH1 0xA2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDE9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE0D SWAP2 SWAP1 PUSH2 0xFCE JUMP JUMPDEST PUSH2 0xE29 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x356 SWAP1 PUSH2 0xFF0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP7 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE CALLER SWAP2 PUSH32 0x8FAFEBCAF9D154343DAD25669BFA277F4FBACD7AC6B0C4FED522580E040A0F33 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE73 PUSH2 0xEA6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xE9D JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x356 JUMP JUMPDEST PUSH2 0x504 DUP2 PUSH2 0xED3 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x602 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x356 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xF4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20496E73756666696369656E7420746F6B65 PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0x6E2062616C616E6365 PUSH1 0xB8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x546F6B656E50757263686173653A20546F6B656E207472616E73666572206661 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x1A5B1959 PUSH1 0xE2 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1046 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x1084 JUMPI PUSH2 0x1084 PUSH2 0x1057 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x10A7 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH2 0x1084 JUMPI PUSH2 0x1084 PUSH2 0x1057 JUMP JUMPDEST PUSH1 0x1 DUP2 JUMPDEST PUSH1 0x1 DUP5 GT ISZERO PUSH2 0x1100 JUMPI DUP1 DUP6 DIV DUP2 GT ISZERO PUSH2 0x10E4 JUMPI PUSH2 0x10E4 PUSH2 0x1057 JUMP JUMPDEST PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x10F2 JUMPI SWAP1 DUP2 MUL SWAP1 JUMPDEST PUSH1 0x1 SWAP4 SWAP1 SWAP4 SHR SWAP3 DUP1 MUL PUSH2 0x10C9 JUMP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1117 JUMPI POP PUSH1 0x1 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH2 0x1124 JUMPI POP PUSH1 0x0 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x113A JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1144 JUMPI PUSH2 0x1160 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1084 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1155 JUMPI PUSH2 0x1155 PUSH2 0x1057 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1084 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x1183 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x1190 PUSH1 0x0 NOT DUP5 DUP5 PUSH2 0x10C5 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0x11A4 JUMPI PUSH2 0x11A4 PUSH2 0x1057 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF4C PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x1108 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x1084 JUMPI PUSH2 0x1084 PUSH2 0x1057 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB 0xE8 0xEF PUSH12 0x15F31835EA297E84423450B0 0x23 SHL PUSH20 0xC0F5897B47C41CC26A37B792A64736F6C634300 ADDMOD SHR STOP CALLER ","sourceMap":"413:8031:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2655:220;;;;;;;;;;-1:-1:-1;2655:220:4;;;;;:::i;:::-;;:::i;:::-;;525:34;;;;;;;;;;-1:-1:-1;525:34:4;;;;-1:-1:-1;;;;;525:34:4;;;;;;-1:-1:-1;;;;;491:32:5;;;473:51;;461:2;446:18;525:34:4;;;;;;;;8023:419;;;;;;;;;;-1:-1:-1;8023:419:4;;;;;:::i;:::-;;:::i;3455:265::-;;;;;;;;;;-1:-1:-1;3455:265:4;;;;;:::i;:::-;;:::i;3022:310::-;;;;;;;;;;-1:-1:-1;3022:310:4;;;;;:::i;:::-;;:::i;2293:101:0:-;;;;;;;;;;;;;:::i;1638:85::-;;;;;;;;;;-1:-1:-1;1684:7:0;1710:6;-1:-1:-1;;;;;1710:6:0;1638:85;;3838:205:4;;;;;;;;;;-1:-1:-1;3838:205:4;;;;;:::i;:::-;;:::i;4414:88::-;;;;;;;;;;-1:-1:-1;4483:12:4;;4414:88;;;1074:25:5;;;1062:2;1047:18;4414:88:4;928:177:5;637:27:4;;;;;;;;;;;;;;;;785:32;;;;;;;;;;;;;;;;718:30;;;;;;;;;;-1:-1:-1;718:30:4;;;;-1:-1:-1;;;;;718:30:4;;;4162:167;;;;;;;;;;-1:-1:-1;4162:167:4;;;;;:::i;:::-;;:::i;4618:3271::-;;;;;;:::i;:::-;;:::i;2543:215:0:-;;;;;;;;;;-1:-1:-1;2543:215:0;;;;;:::i;:::-;;:::i;453:27:4:-;;;;;;;;;;-1:-1:-1;453:27:4;;;;-1:-1:-1;;;;;453:27:4;;;2655:220;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;2739:20:4;::::1;2718:110;;;::::0;-1:-1:-1;;;2718:110:4;;1312:2:5;2718:110:4::1;::::0;::::1;1294:21:5::0;1351:2;1331:18;;;1324:30;1390:34;1370:18;;;1363:62;-1:-1:-1;;;1441:18:5;;;1434:41;1492:19;;2718:110:4::1;;;;;;;;;2838:5;:30:::0;;-1:-1:-1;;;;;;2838:30:4::1;-1:-1:-1::0;;;;;2838:30:4;;;::::1;::::0;;;::::1;::::0;;2655:220::o;8023:419::-;1531:13:0;:11;:13::i;:::-;8109:5:4::1;::::0;-1:-1:-1;;;;;8109:5:4::1;8093:69;;;::::0;-1:-1:-1;;;8093:69:4;;1724:2:5;8093:69:4::1;::::0;::::1;1706:21:5::0;1763:2;1743:18;;;1736:30;1802;1782:18;;;1775:58;1850:18;;8093:69:4::1;1522:352:5::0;8093:69:4::1;8193:5;::::0;:30:::1;::::0;-1:-1:-1;;;8193:30:4;;8217:4:::1;8193:30;::::0;::::1;473:51:5::0;8227:7:4;;-1:-1:-1;;;;;8193:5:4::1;::::0;:15:::1;::::0;446:18:5;;8193:30:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;8172:129;;;;-1:-1:-1::0;;;8172:129:4::1;;;;;;;:::i;:::-;8333:5;::::0;8348:15:::1;::::0;;8333:40:::1;::::0;-1:-1:-1;;;8333:40:4;;-1:-1:-1;;;;;8348:15:4;;::::1;8333:40:::0;;::::1;2652:51:5::0;;;;2719:18;;;2712:34;;;8333:5:4;;::::1;::::0;:14:::1;::::0;2625:18:5;;8333:40:4::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8312:123;;;;-1:-1:-1::0;;;8312:123:4::1;;;;;;;:::i;:::-;8023:419:::0;:::o;3455:265::-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;3559:30:4;::::1;3538:131;;;::::0;-1:-1:-1;;;3538:131:4;;3646:2:5;3538:131:4::1;::::0;::::1;3628:21:5::0;3685:2;3665:18;;;3658:30;3724:34;3704:18;;;3697:62;-1:-1:-1;;;3775:18:5;;;3768:52;3837:19;;3538:131:4::1;3444:418:5::0;3538:131:4::1;3679:15;:34:::0;;-1:-1:-1;;;;;;3679:34:4::1;-1:-1:-1::0;;;;;3679:34:4;;;::::1;::::0;;;::::1;::::0;;3455:265::o;3022:310::-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;3156:27:4;::::1;::::0;3152:174:::1;;3199:12;:44:::0;;-1:-1:-1;;;;;3199:44:4;::::1;-1:-1:-1::0;;;;;;3199:44:4;;::::1;;::::0;;8023:419;:::o;3152:174::-:1;3274:12;:41:::0;;-1:-1:-1;;;;;;3274:41:4::1;::::0;;3022:310;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;3838:205:4:-;1531:13:0;:11;:13::i;:::-;3918:1:4::1;3909:6;:10;3901:69;;;::::0;-1:-1:-1;;;3901:69:4;;4069:2:5;3901:69:4::1;::::0;::::1;4051:21:5::0;4108:2;4088:18;;;4081:30;4147:34;4127:18;;;4120:62;-1:-1:-1;;;4198:18:5;;;4191:44;4252:19;;3901:69:4::1;3867:410:5::0;3901:69:4::1;3980:12;:21:::0;;;4016:20:::1;::::0;1074:25:5;;;4016:20:4::1;::::0;1062:2:5;1047:18;4016:20:4::1;;;;;;;;3838:205:::0;:::o;4162:167::-;1531:13:0;:11;:13::i;:::-;4241:17:4::1;:30:::0;;;4286:36:::1;::::0;1074:25:5;;;4286:36:4::1;::::0;1062:2:5;1047:18;4286:36:4::1;928:177:5::0;4618:3271:4;4696:5;;-1:-1:-1;;;;;4696:5:4;4680:69;;;;-1:-1:-1;;;4680:69:4;;1724:2:5;4680:69:4;;;1706:21:5;1763:2;1743:18;;;1736:30;1802;1782:18;;;1775:58;1850:18;;4680:69:4;1522:352:5;4680:69:4;4782:1;4767:12;;:16;4759:57;;;;-1:-1:-1;;;4759:57:4;;4484:2:5;4759:57:4;;;4466:21:5;4523:2;4503:18;;;4496:30;4562;4542:18;;;4535:58;4610:18;;4759:57:4;4282:352:5;4759:57:4;4844:1;4834:7;:11;4826:71;;;;-1:-1:-1;;;4826:71:4;;4841:2:5;4826:71:4;;;4823:21:5;4880:2;4860:18;;;4853:30;4919:34;4899:18;;;4892:62;-1:-1:-1;;;4970:18:5;;;4963:45;5025:19;;4826:71:4;4639:411:5;4826:71:4;4939:17;;4928:7;:28;;4907:126;;;;-1:-1:-1;;;4907:126:4;;5257:2:5;4907:126:4;;;5239:21:5;5296:2;5276:18;;;5269:30;5335:34;5315:18;;;5308:62;-1:-1:-1;;;5386:18:5;;;5379:49;5445:19;;4907:126:4;5055:415:5;4907:126:4;5096:5;;:16;;;-1:-1:-1;;;5096:16:4;;;;5074:19;;-1:-1:-1;;;;;5096:5:4;;:14;;:16;;;;;;;;;;;;;;:5;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5224:12;;5074:38;;-1:-1:-1;5192:21:4;;-1:-1:-1;;;;;5224:12:4;5216:35;:90;;5283:12;;;;;;;;;-1:-1:-1;;;;;5283:12:4;-1:-1:-1;;;;;5283:21:4;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5216:90;;;5266:2;5216:90;5192:114;;5486:23;5527:7;5512:12;;:22;;;;:::i;:::-;5486:48;-1:-1:-1;5544:17:4;5564:26;5582:8;5486:48;5564:26;:::i;:::-;5544:46;;5712:1;5700:9;:13;5679:108;;;;-1:-1:-1;;;5679:108:4;;6482:2:5;5679:108:4;;;6464:21:5;6521:2;6501:18;;;6494:30;6560:34;6540:18;;;6533:62;-1:-1:-1;;;6611:18:5;;;6604:46;6667:19;;5679:108:4;6280:412:5;5679:108:4;5906:15;5889:32;;:13;:32;;;5885:297;;5957:15;5941:31;;:13;:31;;;5937:235;;;6023:31;6039:15;6023:13;:31;:::i;:::-;6016:39;;:2;:39;:::i;:::-;6004:51;;:9;:51;:::i;:::-;5992:63;;5937:235;;;6125:31;6143:13;6125:15;:31;:::i;:::-;6118:39;;:2;:39;:::i;:::-;6106:51;;:9;:51;:::i;:::-;6094:63;;5937:235;6288:1;6276:9;:13;6255:114;;;;-1:-1:-1;;;6255:114:4;;8487:2:5;6255:114:4;;;8469:21:5;8526:2;8506:18;;;8499:30;8565:34;8545:18;;;8538:62;-1:-1:-1;;;8616:18:5;;;8609:52;8678:19;;6255:114:4;8285:418:5;6255:114:4;6448:5;;:30;;-1:-1:-1;;;6448:30:4;;6472:4;6448:30;;;473:51:5;6482:7:4;;-1:-1:-1;;;;;6448:5:4;;:15;;446:18:5;;6448:30:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;6427:129;;;;-1:-1:-1;;;6427:129:4;;;;;;;:::i;:::-;6633:12;;-1:-1:-1;;;;;6633:12:4;6621:1020;;6753:9;6740;:22;;6715:116;;;;-1:-1:-1;;;6715:116:4;;8910:2:5;6715:116:4;;;8892:21:5;8949:2;8929:18;;;8922:30;8988:34;8968:18;;;8961:62;-1:-1:-1;;;9039:18:5;;;9032:33;9082:19;;6715:116:4;8708:399:5;6715:116:4;6905:15;;6897:44;;-1:-1:-1;;;;;6905:15:4;;;;6897:44;;;;;6931:9;;6905:15;6897:44;6905:15;6897:44;6931:9;6905:15;6897:44;;;;;;;;;;;;;;;;;;;;;7016:9;7004;:21;7000:111;;;7053:10;7045:51;7074:21;7086:9;7074;:21;:::i;:::-;7045:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7000:111;6621:1020;;;7201:9;:14;7176:123;;;;-1:-1:-1;;;7176:123:4;;9447:2:5;7176:123:4;;;9429:21:5;9486:2;9466:18;;;9459:30;9525:34;9505:18;;;9498:62;-1:-1:-1;;;9576:18:5;;;9569:48;9634:19;;7176:123:4;9245:414:5;7176:123:4;7409:12;;7488:15;;;7409:143;;-1:-1:-1;;;7409:143:4;;7456:10;7409:143;;;9866:51:5;;;;-1:-1:-1;;;;;7488:15:4;;;9933:18:5;;;9926:60;10002:18;;;9995:34;;;7409:12:4;;;;:25;;9839:18:5;;7409:143:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7384:246;;;;-1:-1:-1;;;7384:246:4;;10242:2:5;7384:246:4;;;10224:21:5;10281:2;10261:18;;;10254:30;10320:34;10300:18;;;10293:62;-1:-1:-1;;;10371:18:5;;;10364:42;10423:19;;7384:246:4;10040:408:5;7384:246:4;7722:5;;:35;;-1:-1:-1;;;7722:35:4;;7737:10;7722:35;;;2652:51:5;2719:18;;;2712:34;;;-1:-1:-1;;;;;7722:5:4;;;;:14;;2625:18:5;;7722:35:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7701:118;;;;-1:-1:-1;;;7701:118:4;;;;;;;:::i;:::-;7835:47;;;10627:25:5;;;10683:2;10668:18;;10661:34;;;7851:10:4;;7835:47;;10600:18:5;7835:47:4;;;;;;;4670:3219;;;;4618:3271;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;473:51:5::0;446:18;;2672:31:0::1;305:225:5::0;2623:91:0::1;2723:28;2742:8;2723:18;:28::i;1796:162::-:0;1684:7;1710:6;-1:-1:-1;;;;;1710:6:0;735:10:3;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:3;1901:40:0;;;473:51:5;446:18;;1901:40:0;305:225:5;2912:187:0;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:286:5:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:5;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:5:o;535:180::-;594:6;647:2;635:9;626:7;622:23;618:32;615:52;;;663:1;660;653:12;615:52;-1:-1:-1;686:23:5;;535:180;-1:-1:-1;535:180:5:o;1879:184::-;1949:6;2002:2;1990:9;1981:7;1977:23;1973:32;1970:52;;;2018:1;2015;2008:12;1970:52;-1:-1:-1;2041:16:5;;1879:184;-1:-1:-1;1879:184:5:o;2068:405::-;2270:2;2252:21;;;2309:2;2289:18;;;2282:30;2348:34;2343:2;2328:18;;2321:62;-1:-1:-1;;;2414:2:5;2399:18;;2392:39;2463:3;2448:19;;2068:405::o;2757:277::-;2824:6;2877:2;2865:9;2856:7;2852:23;2848:32;2845:52;;;2893:1;2890;2883:12;2845:52;2925:9;2919:16;2978:5;2971:13;2964:21;2957:5;2954:32;2944:60;;3000:1;2997;2990:12;3039:400;3241:2;3223:21;;;3280:2;3260:18;;;3253:30;3319:34;3314:2;3299:18;;3292:62;-1:-1:-1;;;3385:2:5;3370:18;;3363:34;3429:3;3414:19;;3039:400::o;5475:273::-;5543:6;5596:2;5584:9;5575:7;5571:23;5567:32;5564:52;;;5612:1;5609;5602:12;5564:52;5644:9;5638:16;5694:4;5687:5;5683:16;5676:5;5673:27;5663:55;;5714:1;5711;5704:12;5753:127;5814:10;5809:3;5805:20;5802:1;5795:31;5845:4;5842:1;5835:15;5869:4;5866:1;5859:15;5885:168;5958:9;;;5989;;6006:15;;;6000:22;;5986:37;5976:71;;6027:18;;:::i;:::-;5885:168;;;;:::o;6058:217::-;6098:1;6124;6114:132;;6168:10;6163:3;6159:20;6156:1;6149:31;6203:4;6200:1;6193:15;6231:4;6228:1;6221:15;6114:132;-1:-1:-1;6260:9:5;;6058:217::o;6697:151::-;6787:4;6780:12;;;6766;;;6762:31;;6805:14;;6802:40;;;6822:18;;:::i;6853:375::-;6941:1;6959:5;6973:249;6994:1;6984:8;6981:15;6973:249;;;7044:4;7039:3;7035:14;7029:4;7026:24;7023:50;;;7053:18;;:::i;:::-;7103:1;7093:8;7089:16;7086:49;;;7117:16;;;;7086:49;7200:1;7196:16;;;;;7156:15;;6973:249;;;6853:375;;;;;;:::o;7233:902::-;7282:5;7312:8;7302:80;;-1:-1:-1;7353:1:5;7367:5;;7302:80;7401:4;7391:76;;-1:-1:-1;7438:1:5;7452:5;;7391:76;7483:4;7501:1;7496:59;;;;7569:1;7564:174;;;;7476:262;;7496:59;7526:1;7517:10;;7540:5;;;7564:174;7601:3;7591:8;7588:17;7585:43;;;7608:18;;:::i;:::-;-1:-1:-1;;7664:1:5;7650:16;;7723:5;;7476:262;;7822:2;7812:8;7809:16;7803:3;7797:4;7794:13;7790:36;7784:2;7774:8;7771:16;7766:2;7760:4;7757:12;7753:35;7750:77;7747:203;;;-1:-1:-1;7859:19:5;;;7935:5;;7747:203;7982:42;-1:-1:-1;;8007:8:5;8001:4;7982:42;:::i;:::-;8060:6;8056:1;8052:6;8048:19;8039:7;8036:32;8033:58;;;8071:18;;:::i;:::-;8109:20;;7233:902;-1:-1:-1;;;7233:902:5:o;8140:140::-;8198:5;8227:47;8268:4;8258:8;8254:19;8248:4;8227:47;:::i;9112:128::-;9179:9;;;9200:11;;;9197:37;;;9214:18;;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"922400","executionCost":"infinite","totalCost":"infinite"},"external":{"currentPrice()":"2340","getPrice()":"2304","minPurchaseAmount()":"2362","owner()":"2387","paymentReceiver()":"2415","paymentToken()":"2372","purchase(uint256)":"infinite","renounceOwnership()":"infinite","setMinPurchaseAmount(uint256)":"25587","setPaymentReceiver(address)":"26825","setPaymentToken(address)":"26753","setPrice(uint256)":"25666","setToken(address)":"26759","token()":"2414","transferOwnership(address)":"28364","withdrawTokens(uint256)":"infinite"}},"methodIdentifiers":{"currentPrice()":"9d1b464a","getPrice()":"98d5fdca","minPurchaseAmount()":"b47dbf22","owner()":"8da5cb5b","paymentReceiver()":"cb37f3b2","paymentToken()":"3013ce29","purchase(uint256)":"efef39a1","renounceOwnership()":"715018a6","setMinPurchaseAmount(uint256)":"e9d3fb78","setPaymentReceiver(address)":"65ebf99a","setPaymentToken(address)":"6a326ab1","setPrice(uint256)":"91b7f5ed","setToken(address)":"144fa6d7","token()":"fc0c546a","transferOwnership(address)":"f2fde38b","withdrawTokens(uint256)":"315a095d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialPaymentReceiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_initialPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMinAmount\",\"type\":\"uint256\"}],\"name\":\"MinPurchaseAmountUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPrice\",\"type\":\"uint256\"}],\"name\":\"PriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalCost\",\"type\":\"uint256\"}],\"name\":\"TokensPurchased\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"currentPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minPurchaseAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paymentReceiver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paymentToken\",\"outputs\":[{\"internalType\":\"contract IERC20Metadata\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"purchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minAmount\",\"type\":\"uint256\"}],\"name\":\"setMinPurchaseAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentReceiver\",\"type\":\"address\"}],\"name\":\"setPaymentReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_paymentToken\",\"type\":\"address\"}],\"name\":\"setPaymentToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"setToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20Metadata\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract providing purchase functionality for tokens with price set by admin\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_initialOwner\":\"Initial admin address\",\"_initialPaymentReceiver\":\"Initial payment receiver address\",\"_initialPrice\":\"Initial price (can be 0 to set later)\",\"_paymentToken\":\"Token used for payment (address(0) for native currency)\",\"_token\":\"Token to be sold (can be address(0) to set later)\"}},\"getPrice()\":{\"details\":\"Get the current price\",\"returns\":{\"_0\":\"Current price\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"purchase(uint256)\":{\"details\":\"Purchase tokens\",\"params\":{\"_amount\":\"Token amount to purchase (in smallest unit)\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setMinPurchaseAmount(uint256)\":{\"details\":\"Set the minimum purchase amount\",\"params\":{\"_minAmount\":\"New minimum purchase amount\"}},\"setPaymentReceiver(address)\":{\"details\":\"Set payment receiver address\",\"params\":{\"_paymentReceiver\":\"New payment receiver address\"}},\"setPaymentToken(address)\":{\"details\":\"Set payment token address\",\"params\":{\"_paymentToken\":\"New payment token address (address(0) for native currency)\"}},\"setPrice(uint256)\":{\"details\":\"Set the current price\",\"params\":{\"_price\":\"New price (in 10**18 format, 1 = 10**18)\"}},\"setToken(address)\":{\"details\":\"Set token contract address\",\"params\":{\"_token\":\"New token address\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawTokens(uint256)\":{\"details\":\"Allow admin to withdraw tokens from the contract\",\"params\":{\"_amount\":\"Amount of tokens to withdraw\"}}},\"title\":\"TokenPurchase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TokenPurchase.sol\":\"TokenPurchase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n    address private _owner;\\n\\n    /**\\n     * @dev The caller account is not authorized to perform an operation.\\n     */\\n    error OwnableUnauthorizedAccount(address account);\\n\\n    /**\\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n     */\\n    error OwnableInvalidOwner(address owner);\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n     */\\n    constructor(address initialOwner) {\\n        if (initialOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(initialOwner);\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        _checkOwner();\\n        _;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view virtual returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if the sender is not the owner.\\n     */\\n    function _checkOwner() internal view virtual {\\n        if (owner() != _msgSender()) {\\n            revert OwnableUnauthorizedAccount(_msgSender());\\n        }\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby disabling any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        _transferOwnership(address(0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        if (newOwner == address(0)) {\\n            revert OwnableInvalidOwner(address(0));\\n        }\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Internal function without access restriction.\\n     */\\n    function _transferOwnership(address newOwner) internal virtual {\\n        address oldOwner = _owner;\\n        _owner = newOwner;\\n        emit OwnershipTransferred(oldOwner, newOwner);\\n    }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    /**\\n     * @dev Returns the value of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the value of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n     * caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    /**\\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n     * allowance mechanism. `value` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n    /**\\n     * @dev Returns the name of the token.\\n     */\\n    function name() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the symbol of the token.\\n     */\\n    function symbol() external view returns (string memory);\\n\\n    /**\\n     * @dev Returns the decimals places of the token.\\n     */\\n    function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes calldata) {\\n        return msg.data;\\n    }\\n\\n    function _contextSuffixLength() internal view virtual returns (uint256) {\\n        return 0;\\n    }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"contracts/TokenPurchase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.22;\\n\\nimport {Ownable} from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\n/**\\n * @title TokenPurchase\\n * @dev Contract providing purchase functionality for tokens with price set by admin\\n */\\ncontract TokenPurchase is Ownable {\\n    IERC20Metadata public token; // Token contract interface to be sold\\n    IERC20Metadata public paymentToken; // Token used for payment (if address(0), then native currency is used)\\n    uint256 public currentPrice; // Current price (in 10**18 format, 1 = 10**18)\\n    address public paymentReceiver; // Address to receive payments\\n    uint256 public minPurchaseAmount; // Minimum token amount that can be purchased\\n\\n    // Price update event\\n    event PriceUpdated(uint256 newPrice);\\n    // Token purchase event\\n    event TokensPurchased(\\n        address indexed buyer,\\n        uint256 amount,\\n        uint256 totalCost\\n    );\\n    // Minimum purchase amount update event\\n    event MinPurchaseAmountUpdated(uint256 newMinAmount);\\n\\n    /**\\n     * @dev Constructor\\n     * @param _initialOwner Initial admin address\\n     * @param _initialPaymentReceiver Initial payment receiver address\\n     * @param _token Token to be sold (can be address(0) to set later)\\n     * @param _paymentToken Token used for payment (address(0) for native currency)\\n     * @param _initialPrice Initial price (can be 0 to set later)\\n     */\\n    constructor(\\n        address _initialOwner,\\n        address _initialPaymentReceiver,\\n        address _token,\\n        address _paymentToken,\\n        uint256 _initialPrice\\n    ) Ownable(_initialOwner) {\\n        require(\\n            _initialPaymentReceiver != address(0),\\n            \\\"TokenPurchase: Payment receiver cannot be zero address\\\"\\n        );\\n        paymentReceiver = _initialPaymentReceiver;\\n\\n        // Set token to be sold if provided\\n        if (_token != address(0)) {\\n            token = IERC20Metadata(_token);\\n        }\\n\\n        // Set payment token if provided (address(0) means use native currency)\\n        if (_paymentToken != address(0)) {\\n            paymentToken = IERC20Metadata(_paymentToken);\\n        }\\n\\n        // Set initial price if provided\\n        if (_initialPrice > 0) {\\n            currentPrice = _initialPrice;\\n            emit PriceUpdated(_initialPrice);\\n        }\\n\\n        // Default minimum purchase amount set to 0\\n        minPurchaseAmount = 0;\\n    }\\n\\n    /**\\n     * @dev Set token contract address\\n     * @param _token New token address\\n     */\\n    function setToken(address _token) external onlyOwner {\\n        require(\\n            _token != address(0),\\n            \\\"TokenPurchase: Token cannot be zero address\\\"\\n        );\\n        token = IERC20Metadata(_token);\\n    }\\n\\n    /**\\n     * @dev Set payment token address\\n     * @param _paymentToken New payment token address (address(0) for native currency)\\n     */\\n    function setPaymentToken(address _paymentToken) external onlyOwner {\\n        // address(0) is allowed for native currency\\n        if (_paymentToken != address(0)) {\\n            paymentToken = IERC20Metadata(_paymentToken);\\n        } else {\\n            paymentToken = IERC20Metadata(address(0));\\n        }\\n    }\\n\\n    /**\\n     * @dev Set payment receiver address\\n     * @param _paymentReceiver New payment receiver address\\n     */\\n    function setPaymentReceiver(address _paymentReceiver) external onlyOwner {\\n        require(\\n            _paymentReceiver != address(0),\\n            \\\"TokenPurchase: Payment receiver cannot be zero address\\\"\\n        );\\n        paymentReceiver = _paymentReceiver;\\n    }\\n\\n    /**\\n     * @dev Set the current price\\n     * @param _price New price (in 10**18 format, 1 = 10**18)\\n     */\\n    function setPrice(uint256 _price) external onlyOwner {\\n        require(_price > 0, \\\"TokenPurchase: Price must be greater than zero\\\");\\n        currentPrice = _price;\\n        emit PriceUpdated(_price);\\n    }\\n\\n    /**\\n     * @dev Set the minimum purchase amount\\n     * @param _minAmount New minimum purchase amount\\n     */\\n    function setMinPurchaseAmount(uint256 _minAmount) external onlyOwner {\\n        minPurchaseAmount = _minAmount;\\n        emit MinPurchaseAmountUpdated(_minAmount);\\n    }\\n\\n    /**\\n     * @dev Get the current price\\n     * @return Current price\\n     */\\n    function getPrice() external view returns (uint256) {\\n        return currentPrice;\\n    }\\n\\n    /**\\n     * @dev Purchase tokens\\n     * @param _amount Token amount to purchase (in smallest unit)\\n     */\\n    function purchase(uint256 _amount) external payable {\\n        require(address(token) != address(0), \\\"TokenPurchase: Token not set\\\");\\n        require(currentPrice > 0, \\\"TokenPurchase: Price not set\\\");\\n        require(_amount > 0, \\\"TokenPurchase: Amount must be greater than zero\\\");\\n        require(\\n            _amount >= minPurchaseAmount,\\n            \\\"TokenPurchase: Amount below minimum purchase amount\\\"\\n        );\\n\\n        // Get token decimals\\n        uint8 tokenDecimals = token.decimals();\\n\\n        // Calculate payment token decimals (18 for native currency)\\n        uint8 paymentDecimals = address(paymentToken) == address(0)\\n            ? 18\\n            : paymentToken.decimals();\\n\\n        // Calculate total cost with proper decimal adjustment\\n        // Price is in 10**18 format (1 = 10**18)\\n        // Solidity 0.8+ has built-in overflow checking\\n        uint256 priceTimeAmount = currentPrice * _amount;\\n        uint256 totalCost = priceTimeAmount / 10 ** 18;\\n\\n        // Ensure the calculation didn't result in zero due to precision loss\\n        require(\\n            totalCost > 0,\\n            \\\"TokenPurchase: Cost calculation resulted in zero\\\"\\n        );\\n\\n        // Adjust for the difference in decimal places between token and payment token\\n        if (tokenDecimals != paymentDecimals) {\\n            if (tokenDecimals > paymentDecimals) {\\n                totalCost = totalCost / 10 ** (tokenDecimals - paymentDecimals);\\n            } else {\\n                totalCost = totalCost * 10 ** (paymentDecimals - tokenDecimals);\\n            }\\n        }\\n\\n        // Ensure final cost is not zero after all adjustments\\n        require(\\n            totalCost > 0,\\n            \\\"TokenPurchase: Final cost calculation resulted in zero\\\"\\n        );\\n\\n        // Check if contract has enough tokens\\n        require(\\n            token.balanceOf(address(this)) >= _amount,\\n            \\\"TokenPurchase: Insufficient token balance\\\"\\n        );\\n\\n        // Handle payment based on payment token type\\n        if (address(paymentToken) == address(0)) {\\n            // Native currency payment\\n            require(\\n                msg.value >= totalCost,\\n                \\\"TokenPurchase: Insufficient payment\\\"\\n            );\\n\\n            // Forward payment to payment receiver\\n            payable(paymentReceiver).transfer(totalCost);\\n\\n            // Refund excess payment if any\\n            if (msg.value > totalCost) {\\n                payable(msg.sender).transfer(msg.value - totalCost);\\n            }\\n        } else {\\n            // ERC20 token payment\\n            require(\\n                msg.value == 0,\\n                \\\"TokenPurchase: ETH not accepted for token payments\\\"\\n            );\\n\\n            // Transfer payment tokens from buyer to payment receiver\\n            require(\\n                paymentToken.transferFrom(\\n                    msg.sender,\\n                    paymentReceiver,\\n                    totalCost\\n                ),\\n                \\\"TokenPurchase: Payment token transfer failed\\\"\\n            );\\n        }\\n\\n        // Transfer tokens from contract to buyer\\n        require(\\n            token.transfer(msg.sender, _amount),\\n            \\\"TokenPurchase: Token transfer failed\\\"\\n        );\\n\\n        emit TokensPurchased(msg.sender, _amount, totalCost);\\n    }\\n\\n    /**\\n     * @dev Allow admin to withdraw tokens from the contract\\n     * @param _amount Amount of tokens to withdraw\\n     */\\n    function withdrawTokens(uint256 _amount) external onlyOwner {\\n        require(address(token) != address(0), \\\"TokenPurchase: Token not set\\\");\\n        require(\\n            token.balanceOf(address(this)) >= _amount,\\n            \\\"TokenPurchase: Insufficient token balance\\\"\\n        );\\n\\n        require(\\n            token.transfer(paymentReceiver, _amount),\\n            \\\"TokenPurchase: Token transfer failed\\\"\\n        );\\n    }\\n}\\n\",\"keccak256\":\"0x67a753cd2f8319cc5d7762747d8e3ba78aeb7a5109bc0385579af1b41a5b2bcf\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8,"contract":"contracts/TokenPurchase.sol:TokenPurchase","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":295,"contract":"contracts/TokenPurchase.sol:TokenPurchase","label":"token","offset":0,"slot":"1","type":"t_contract(IERC20Metadata)251"},{"astId":298,"contract":"contracts/TokenPurchase.sol:TokenPurchase","label":"paymentToken","offset":0,"slot":"2","type":"t_contract(IERC20Metadata)251"},{"astId":300,"contract":"contracts/TokenPurchase.sol:TokenPurchase","label":"currentPrice","offset":0,"slot":"3","type":"t_uint256"},{"astId":302,"contract":"contracts/TokenPurchase.sol:TokenPurchase","label":"paymentReceiver","offset":0,"slot":"4","type":"t_address"},{"astId":304,"contract":"contracts/TokenPurchase.sol:TokenPurchase","label":"minPurchaseAmount","offset":0,"slot":"5","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IERC20Metadata)251":{"encoding":"inplace","label":"contract IERC20Metadata","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}}}}}