obsidian-desci_Obsidian-Desci/artifacts/LilypadToken.json
2024-10-28 07:25:46 -07:00

794 lines
No EOL
106 KiB
JSON

{
"address": "0x0352485f8a3cB6d305875FaC0C40ef01e0C06535",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "uint256",
"name": "initialSupply",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"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": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "disableChangeControllerAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"name": "escrowBalanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getControllerAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "payEscrow",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "fromAddress",
"type": "address"
},
{
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "payJob",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "toAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "refundEscrow",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_controllerAddress",
"type": "address"
}
],
"name": "setControllerAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "slashedAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "slashEscrow",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"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": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"transactionHash": "0x7d6ceb89a4e4626a84039a5e9611328e3a5f2f4b504a32b1d3ffed766803a93e",
"receipt": {
"to": null,
"from": "0xd10D15cc705f7D2558352B1212A9b3685155d93D",
"contractAddress": "0x0352485f8a3cB6d305875FaC0C40ef01e0C06535",
"transactionIndex": 2,
"gasUsed": "2234053",
"logsBloom": "0x00400000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000008000000000001000000000000000000000000000000000000060000000000000000000800000000000000000000000010000000400000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000008000000000000000000000400002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000",
"blockHash": "0xebfea7e2a89e96ab7734eeaf94de28dda080f09e12468d9ec64a1ce0db26975b",
"transactionHash": "0x7d6ceb89a4e4626a84039a5e9611328e3a5f2f4b504a32b1d3ffed766803a93e",
"logs": [
{
"transactionIndex": 2,
"blockNumber": 54703715,
"transactionHash": "0x7d6ceb89a4e4626a84039a5e9611328e3a5f2f4b504a32b1d3ffed766803a93e",
"address": "0x0352485f8a3cB6d305875FaC0C40ef01e0C06535",
"topics": [
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x000000000000000000000000d10d15cc705f7d2558352b1212a9b3685155d93d"
],
"data": "0x",
"logIndex": 3,
"blockHash": "0xebfea7e2a89e96ab7734eeaf94de28dda080f09e12468d9ec64a1ce0db26975b"
},
{
"transactionIndex": 2,
"blockNumber": 54703715,
"transactionHash": "0x7d6ceb89a4e4626a84039a5e9611328e3a5f2f4b504a32b1d3ffed766803a93e",
"address": "0x0352485f8a3cB6d305875FaC0C40ef01e0C06535",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x0000000000000000000000000000000000000000000000000000000000000000",
"0x000000000000000000000000d10d15cc705f7d2558352b1212a9b3685155d93d"
],
"data": "0x0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000",
"logIndex": 4,
"blockHash": "0xebfea7e2a89e96ab7734eeaf94de28dda080f09e12468d9ec64a1ce0db26975b"
}
],
"blockNumber": 54703715,
"cumulativeGasUsed": "2358881",
"status": 1,
"byzantium": true
},
"args": [
"Lilypad Token",
"LP",
"1000000000000000000000000000"
],
"numDeployments": 1,
"solcInputHash": "648c61a8a804e137d75320a74adaf899",
"metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"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\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableChangeControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"escrowBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getControllerAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"payEscrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"payJob\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"refundEscrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controllerAddress\",\"type\":\"address\"}],\"name\":\"setControllerAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"slashedAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"slashEscrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"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.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"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.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"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\":{\"contracts/LilypadToken.sol\":\"LilypadToken\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../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 * By default, the owner account will be the one that deploys the contract. This\\n * can 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 event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\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 require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\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 require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\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\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20.sol\\\";\\nimport \\\"./extensions/IERC20Metadata.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20 is Context, IERC20, IERC20Metadata {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(address from, address to, uint256 amount) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(address owner, address spender, uint256 amount) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0xa56ca923f70c1748830700250b19c61b70db9a683516dc5e216694a50445d99c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\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 amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` 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 amount) 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 `amount` as the allowance of `spender` over the 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 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` 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 amount) external returns (bool);\\n}\\n\",\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC20Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20.sol\\\";\\nimport \\\"../../../security/Pausable.sol\\\";\\n\\n/**\\n * @dev ERC20 token with pausable token transfers, minting and burning.\\n *\\n * Useful for scenarios such as preventing trades until the end of an evaluation\\n * period, or having an emergency switch for freezing all token transfers in the\\n * event of a large bug.\\n *\\n * IMPORTANT: This contract does not include public pause and unpause functions. In\\n * addition to inheriting this contract, you must define both functions, invoking the\\n * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate\\n * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will\\n * make the contract unpausable.\\n */\\nabstract contract ERC20Pausable is ERC20, Pausable {\\n /**\\n * @dev See {ERC20-_beforeTokenTransfer}.\\n *\\n * Requirements:\\n *\\n * - the contract must not be paused.\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {\\n super._beforeTokenTransfer(from, to, amount);\\n\\n require(!paused(), \\\"ERC20Pausable: token transfer while paused\\\");\\n }\\n}\\n\",\"keccak256\":\"0x180079d8b66f41427ac8ba376d9b60da8161eb327827d3085623798305d4658b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\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\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\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\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/ControllerOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n// as well as being ownable (i.e. our admin wallet)\\n// this contract has a modifier called onlyController\\n// it works the same way as Ownable but only the Owner\\n// can change the controller address so it gives us a way of\\n// re-pointing contracts if needed\\ncontract ControllerOwnable is Ownable {\\n\\n // the address of the controller that is allowed to call functions\\n address private controllerAddress;\\n\\n // used to \\\"freeze\\\" the controller address - even the admin cannot\\n // change it from this point onwards\\n bool private canChangeControllerAddress = true;\\n\\n modifier onlyController() {\\n _checkControllerAccess();\\n _;\\n }\\n\\n function _checkControllerAccess() internal view virtual returns (bool) {\\n require(controllerAddress != address(0), \\\"ControllerOwnable: Controller address must be defined\\\");\\n require(_msgSender() == controllerAddress, \\\"ControllerOwnable: Only the controller can call this method\\\");\\n return true;\\n }\\n\\n function setControllerAddress(address _controllerAddress) public onlyOwner {\\n require(_controllerAddress != address(0), \\\"ControllerOwnable: Controller address must be defined\\\");\\n require(canChangeControllerAddress, \\\"ControllerOwnable: canChangeControllerAddress is disabled\\\");\\n controllerAddress = _controllerAddress;\\n }\\n\\n function getControllerAddress() public view returns (address) {\\n return controllerAddress;\\n }\\n\\n function disableChangeControllerAddress() public onlyOwner {\\n canChangeControllerAddress = false;\\n }\\n}\\n\",\"keccak256\":\"0xecfd8b0beb12340f51cefee5e121932fa7aee0a41fb7d0233966419d153ef429\",\"license\":\"Apache-2.0\"},\"contracts/LilypadToken.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol\\\";\\nimport \\\"./ControllerOwnable.sol\\\";\\n\\n/*\\n standard ERC20 token but with some additional features:\\n\\n * ControllerOwnable\\n * for paying in, we use tx.origin so the actual payee must call the contract\\n * for paying out - we use the Controller Ownable feature so only the payments contract\\n can pay out from the escrow account\\n * escrowBalanceOf\\n * get the current escrow balance for an address\\n * payEscrow\\n * pay into the escrow account\\n * refundEscrow\\n * get refunded from the escrow account\\n * payJob\\n * reduce the \\\"from\\\" account by X amount\\n * actually pay that amount to the \\\"to\\\" address\\n * slashEscrow\\n * reduce the \\\"slashed\\\" account by X amount\\n\\n the escrow functions are designed to be called by the payments contract\\n\\n * deploy this contract as admin\\n * deploy the payments contract as admin and pass this address to it\\n * update the ControllerOwnable address of this contract to be the payments contract\\n \\n now, only the payments contract can call the escrow functions that pay out\\n\\n */\\ncontract LilypadToken is ControllerOwnable, ERC20, ERC20Pausable {\\n\\n // keep track of the current escrow balance for each address\\n mapping(address => uint256) private escrowBalances;\\n\\n constructor(\\n string memory name,\\n string memory symbol,\\n uint256 initialSupply\\n ) ERC20(name, symbol) {\\n _mint(msg.sender, initialSupply);\\n }\\n\\n function escrowBalanceOf(\\n address _address\\n ) public view returns (uint256) {\\n return escrowBalances[_address];\\n }\\n\\n // money being paid into the escrow account\\n function payEscrow(\\n uint256 amount\\n ) public returns (bool) {\\n // it's important we use tx.origin and not msg.sender here\\n // msg.sender will be the payments contract\\n // tx.origin will be the user who called the controller -> payments -> token\\n // i.e. the account that is actually paying into the escrow address\\n _transfer(tx.origin, address(this), amount);\\n escrowBalances[tx.origin] += amount;\\n return true;\\n }\\n\\n // money being paid back from the escrow account\\n function refundEscrow(\\n address toAddress,\\n uint256 amount\\n ) public onlyController returns (bool) {\\n require(toAddress != address(0), \\\"LilypadToken: toAddress cannot be zero address\\\");\\n require(escrowBalances[toAddress] >= amount, \\\"LilypadToken: not enough funds in escrow\\\");\\n escrowBalances[toAddress] -= amount;\\n _transfer(address(this), toAddress, amount);\\n return true;\\n }\\n\\n // pay the RP account from the JC escrow account\\n function payJob(\\n address fromAddress,\\n address toAddress,\\n uint256 amount\\n ) public onlyController returns (bool) {\\n require(escrowBalances[fromAddress] >= amount, \\\"LilypadToken: not enough funds in escrow\\\");\\n escrowBalances[fromAddress] -= amount;\\n _transfer(address(this), toAddress, amount);\\n return true;\\n }\\n\\n // the given party has been slashed so the money stays in the contract\\n // TODO: what should happen to slashed funds?\\n // at the moment we move them to the owner address so they are not locked\\n function slashEscrow(\\n address slashedAddress,\\n uint256 amount\\n ) public onlyController returns (bool) {\\n require(escrowBalances[slashedAddress] >= amount, \\\"LilypadToken: not enough funds in escrow\\\");\\n escrowBalances[slashedAddress] -= amount;\\n _transfer(address(this), owner(), amount);\\n return true;\\n }\\n\\n function pause() public onlyOwner {\\n _pause();\\n }\\n\\n function unpause() public onlyOwner {\\n _unpause();\\n }\\n\\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal override(ERC20, ERC20Pausable) {\\n super._beforeTokenTransfer(from, to, amount);\\n }\\n}\\n\",\"keccak256\":\"0xb9c559cdc356a5acb42dd33475982cebb8aefd282e79f4dc7f928f24967b162a\",\"license\":\"Apache-2.0\"}},\"version\":1}",
"bytecode": "0x608060405260018060146101000a81548160ff0219169083151502179055503480156200002a575f80fd5b5060405162002efd38038062002efd833981810160405281019062000050919062000559565b82826200007262000066620000cc60201b60201c565b620000d360201b60201c565b81600590816200008391906200081e565b5080600690816200009591906200081e565b5050505f60075f6101000a81548160ff021916908315150217905550620000c333826200019460201b60201c565b50505062000aa7565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000205576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001fc9062000960565b60405180910390fd5b620002185f8383620002fa60201b60201c565b8060045f8282546200022b9190620009ad565b925050819055508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002db9190620009f8565b60405180910390a3620002f65f83836200031260201b60201c565b5050565b6200030d8383836200031760201b60201c565b505050565b505050565b6200032a8383836200038260201b60201c565b6200033a6200038760201b60201c565b156200037d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003749062000a87565b60405180910390fd5b505050565b505050565b5f60075f9054906101000a900460ff16905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620003fd82620003b5565b810181811067ffffffffffffffff821117156200041f576200041e620003c5565b5b80604052505050565b5f620004336200039c565b9050620004418282620003f2565b919050565b5f67ffffffffffffffff821115620004635762000462620003c5565b5b6200046e82620003b5565b9050602081019050919050565b5f5b838110156200049a5780820151818401526020810190506200047d565b5f8484015250505050565b5f620004bb620004b58462000446565b62000428565b905082815260208101848484011115620004da57620004d9620003b1565b5b620004e78482856200047b565b509392505050565b5f82601f830112620005065762000505620003ad565b5b815162000518848260208601620004a5565b91505092915050565b5f819050919050565b620005358162000521565b811462000540575f80fd5b50565b5f8151905062000553816200052a565b92915050565b5f805f60608486031215620005735762000572620003a5565b5b5f84015167ffffffffffffffff811115620005935762000592620003a9565b5b620005a186828701620004ef565b935050602084015167ffffffffffffffff811115620005c557620005c4620003a9565b5b620005d386828701620004ef565b9250506040620005e68682870162000543565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200063f57607f821691505b602082108103620006555762000654620005fa565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200067c565b620006c586836200067c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200070662000700620006fa8462000521565b620006dd565b62000521565b9050919050565b5f819050919050565b6200072183620006e6565b6200073962000730826200070d565b84845462000688565b825550505050565b5f90565b6200074f62000741565b6200075c81848462000716565b505050565b5b818110156200078357620007775f8262000745565b60018101905062000762565b5050565b601f821115620007d2576200079c816200065b565b620007a7846200066d565b81016020851015620007b7578190505b620007cf620007c6856200066d565b83018262000761565b50505b505050565b5f82821c905092915050565b5f620007f45f1984600802620007d7565b1980831691505092915050565b5f6200080e8383620007e3565b9150826002028217905092915050565b6200082982620005f0565b67ffffffffffffffff811115620008455762000844620003c5565b5b62000851825462000627565b6200085e82828562000787565b5f60209050601f83116001811462000894575f84156200087f578287015190505b6200088b858262000801565b865550620008fa565b601f198416620008a4866200065b565b5f5b82811015620008cd57848901518255600182019150602085019450602081019050620008a6565b86831015620008ed5784890151620008e9601f891682620007e3565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000948601f8362000902565b9150620009558262000912565b602082019050919050565b5f6020820190508181035f83015262000979816200093a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620009b98262000521565b9150620009c68362000521565b9250828201905080821115620009e157620009e062000980565b5b92915050565b620009f28162000521565b82525050565b5f60208201905062000a0d5f830184620009e7565b92915050565b7f45524332305061757361626c653a20746f6b656e207472616e736665722077685f8201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b5f62000a6f602a8362000902565b915062000a7c8262000a13565b604082019050919050565b5f6020820190508181035f83015262000aa08162000a61565b9050919050565b6124488062000ab55f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c8063715018a6116100dc578063a457c2d711610095578063c57380a21161006f578063c57380a214610461578063dd62ed3e1461047f578063f2fde38b146104af578063f3d3d448146104cb57610171565b8063a457c2d7146103f7578063a470295814610427578063a9059cbb1461043157610171565b8063715018a6146103475780638456cb591461035157806388c2bdfe1461035b5780638da5cb5b1461038b57806395d89b41146103a9578063987bf9a7146103c757610171565b8063395093511161012e578063395093511461025f5780633f4ba83a1461028f5780635407e93c14610299578063599efa6b146102c95780635c975abb146102f957806370a082311461031757610171565b8063065e86c81461017557806306fdde03146101a5578063095ea7b3146101c357806318160ddd146101f357806323b872dd14610211578063313ce56714610241575b5f80fd5b61018f600480360381019061018a91906117c9565b6104e7565b60405161019c9190611833565b60405180910390f35b6101ad6105da565b6040516101ba91906118d6565b60405180910390f35b6101dd60048036038101906101d891906118f6565b61066a565b6040516101ea9190611833565b60405180910390f35b6101fb61068c565b6040516102089190611943565b60405180910390f35b61022b600480360381019061022691906117c9565b610695565b6040516102389190611833565b60405180910390f35b6102496106c3565b6040516102569190611977565b60405180910390f35b610279600480360381019061027491906118f6565b6106cb565b6040516102869190611833565b60405180910390f35b610297610701565b005b6102b360048036038101906102ae9190611990565b610713565b6040516102c09190611833565b60405180910390f35b6102e360048036038101906102de91906118f6565b61077b565b6040516102f09190611833565b60405180910390f35b6103016108db565b60405161030e9190611833565b60405180910390f35b610331600480360381019061032c91906119bb565b6108f0565b60405161033e9190611943565b60405180910390f35b61034f610936565b005b610359610949565b005b610375600480360381019061037091906118f6565b61095b565b6040516103829190611833565b60405180910390f35b610393610a54565b6040516103a091906119f5565b60405180910390f35b6103b1610a7b565b6040516103be91906118d6565b60405180910390f35b6103e160048036038101906103dc91906119bb565b610b0b565b6040516103ee9190611943565b60405180910390f35b610411600480360381019061040c91906118f6565b610b51565b60405161041e9190611833565b60405180910390f35b61042f610bc6565b005b61044b600480360381019061044691906118f6565b610bea565b6040516104589190611833565b60405180910390f35b610469610c0c565b60405161047691906119f5565b60405180910390f35b61049960048036038101906104949190611a0e565b610c34565b6040516104a69190611943565b60405180910390f35b6104c960048036038101906104c491906119bb565b610cb6565b005b6104e560048036038101906104e091906119bb565b610d38565b005b5f6104f0610e40565b508160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056890611abc565b60405180910390fd5b8160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105bd9190611b07565b925050819055506105cf308484610f6d565b600190509392505050565b6060600580546105e990611b67565b80601f016020809104026020016040519081016040528092919081815260200182805461061590611b67565b80156106605780601f1061063757610100808354040283529160200191610660565b820191905f5260205f20905b81548152906001019060200180831161064357829003601f168201915b5050505050905090565b5f806106746111dc565b90506106818185856111e3565b600191505092915050565b5f600454905090565b5f8061069f6111dc565b90506106ac8582856113a6565b6106b7858585610f6d565b60019150509392505050565b5f6012905090565b5f806106d56111dc565b90506106f68185856106e78589610c34565b6106f19190611b97565b6111e3565b600191505092915050565b610709611431565b6107116114af565b565b5f61071f323084610f6d565b8160085f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461076b9190611b97565b9250508190555060019050919050565b5f610784610e40565b505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90611c3a565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90611abc565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108bf9190611b07565b925050819055506108d1308484610f6d565b6001905092915050565b5f60075f9054906101000a900460ff16905090565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61093e611431565b6109475f611510565b565b610951611431565b6109596115d1565b565b5f610964610e40565b508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90611abc565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a319190611b07565b92505081905550610a4a30610a44610a54565b84610f6d565b6001905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610a8a90611b67565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab690611b67565b8015610b015780601f10610ad857610100808354040283529160200191610b01565b820191905f5260205f20905b815481529060010190602001808311610ae457829003601f168201915b5050505050905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80610b5b6111dc565b90505f610b688286610c34565b905083811015610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490611cc8565b60405180910390fd5b610bba82868684036111e3565b60019250505092915050565b610bce611431565b5f600160146101000a81548160ff021916908315150217905550565b5f80610bf46111dc565b9050610c01818585610f6d565b600191505092915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610cbe611431565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2390611d56565b60405180910390fd5b610d3581611510565b50565b610d40611431565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590611de4565b60405180910390fd5b600160149054906101000a900460ff16610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490611e72565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790611de4565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f106111dc565b73ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90611f00565b60405180910390fd5b6001905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290611f8e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110409061201c565b60405180910390fd5b611054838383611633565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf906120aa565b60405180910390fd5b81810360025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111c39190611943565b60405180910390a36111d6848484611643565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890612138565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b6906121c6565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113999190611943565b60405180910390a3505050565b5f6113b18484610c34565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461142b578181101561141d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114149061222e565b60405180910390fd5b61142a84848484036111e3565b5b50505050565b6114396111dc565b73ffffffffffffffffffffffffffffffffffffffff16611457610a54565b73ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490612296565b60405180910390fd5b565b6114b7611648565b5f60075f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6114f96111dc565b60405161150691906119f5565b60405180910390a1565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6115d9611691565b600160075f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861161c6111dc565b60405161162991906119f5565b60405180910390a1565b61163e8383836116db565b505050565b505050565b6116506108db565b61168f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611686906122fe565b60405180910390fd5b565b6116996108db565b156116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090612366565b60405180910390fd5b565b6116e6838383611733565b6116ee6108db565b1561172e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611725906123f4565b60405180910390fd5b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117658261173c565b9050919050565b6117758161175b565b811461177f575f80fd5b50565b5f813590506117908161176c565b92915050565b5f819050919050565b6117a881611796565b81146117b2575f80fd5b50565b5f813590506117c38161179f565b92915050565b5f805f606084860312156117e0576117df611738565b5b5f6117ed86828701611782565b93505060206117fe86828701611782565b925050604061180f868287016117b5565b9150509250925092565b5f8115159050919050565b61182d81611819565b82525050565b5f6020820190506118465f830184611824565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611883578082015181840152602081019050611868565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6118a88261184c565b6118b28185611856565b93506118c2818560208601611866565b6118cb8161188e565b840191505092915050565b5f6020820190508181035f8301526118ee818461189e565b905092915050565b5f806040838503121561190c5761190b611738565b5b5f61191985828601611782565b925050602061192a858286016117b5565b9150509250929050565b61193d81611796565b82525050565b5f6020820190506119565f830184611934565b92915050565b5f60ff82169050919050565b6119718161195c565b82525050565b5f60208201905061198a5f830184611968565b92915050565b5f602082840312156119a5576119a4611738565b5b5f6119b2848285016117b5565b91505092915050565b5f602082840312156119d0576119cf611738565b5b5f6119dd84828501611782565b91505092915050565b6119ef8161175b565b82525050565b5f602082019050611a085f8301846119e6565b92915050565b5f8060408385031215611a2457611a23611738565b5b5f611a3185828601611782565b9250506020611a4285828601611782565b9150509250929050565b7f4c696c79706164546f6b656e3a206e6f7420656e6f7567682066756e647320695f8201527f6e20657363726f77000000000000000000000000000000000000000000000000602082015250565b5f611aa6602883611856565b9150611ab182611a4c565b604082019050919050565b5f6020820190508181035f830152611ad381611a9a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b1182611796565b9150611b1c83611796565b9250828203905081811115611b3457611b33611ada565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b7e57607f821691505b602082108103611b9157611b90611b3a565b5b50919050565b5f611ba182611796565b9150611bac83611796565b9250828201905080821115611bc457611bc3611ada565b5b92915050565b7f4c696c79706164546f6b656e3a20746f416464726573732063616e6e6f7420625f8201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b5f611c24602e83611856565b9150611c2f82611bca565b604082019050919050565b5f6020820190508181035f830152611c5181611c18565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611cb2602583611856565b9150611cbd82611c58565b604082019050919050565b5f6020820190508181035f830152611cdf81611ca6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611d40602683611856565b9150611d4b82611ce6565b604082019050919050565b5f6020820190508181035f830152611d6d81611d34565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611dce603583611856565b9150611dd982611d74565b604082019050919050565b5f6020820190508181035f830152611dfb81611dc2565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611e5c603983611856565b9150611e6782611e02565b604082019050919050565b5f6020820190508181035f830152611e8981611e50565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611eea603b83611856565b9150611ef582611e90565b604082019050919050565b5f6020820190508181035f830152611f1781611ede565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611f78602583611856565b9150611f8382611f1e565b604082019050919050565b5f6020820190508181035f830152611fa581611f6c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612006602383611856565b915061201182611fac565b604082019050919050565b5f6020820190508181035f83015261203381611ffa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612094602683611856565b915061209f8261203a565b604082019050919050565b5f6020820190508181035f8301526120c181612088565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612122602483611856565b915061212d826120c8565b604082019050919050565b5f6020820190508181035f83015261214f81612116565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6121b0602283611856565b91506121bb82612156565b604082019050919050565b5f6020820190508181035f8301526121dd816121a4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612218601d83611856565b9150612223826121e4565b602082019050919050565b5f6020820190508181035f8301526122458161220c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612280602083611856565b915061228b8261224c565b602082019050919050565b5f6020820190508181035f8301526122ad81612274565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f6122e8601483611856565b91506122f3826122b4565b602082019050919050565b5f6020820190508181035f830152612315816122dc565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f612350601083611856565b915061235b8261231c565b602082019050919050565b5f6020820190508181035f83015261237d81612344565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e736665722077685f8201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b5f6123de602a83611856565b91506123e982612384565b604082019050919050565b5f6020820190508181035f83015261240b816123d2565b905091905056fea26469706673582212201d8d13bbe4cf01e08b4ea25478b99ae89cdf8b5ea85127299fa37feb146b075164736f6c63430008150033",
"deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610171575f3560e01c8063715018a6116100dc578063a457c2d711610095578063c57380a21161006f578063c57380a214610461578063dd62ed3e1461047f578063f2fde38b146104af578063f3d3d448146104cb57610171565b8063a457c2d7146103f7578063a470295814610427578063a9059cbb1461043157610171565b8063715018a6146103475780638456cb591461035157806388c2bdfe1461035b5780638da5cb5b1461038b57806395d89b41146103a9578063987bf9a7146103c757610171565b8063395093511161012e578063395093511461025f5780633f4ba83a1461028f5780635407e93c14610299578063599efa6b146102c95780635c975abb146102f957806370a082311461031757610171565b8063065e86c81461017557806306fdde03146101a5578063095ea7b3146101c357806318160ddd146101f357806323b872dd14610211578063313ce56714610241575b5f80fd5b61018f600480360381019061018a91906117c9565b6104e7565b60405161019c9190611833565b60405180910390f35b6101ad6105da565b6040516101ba91906118d6565b60405180910390f35b6101dd60048036038101906101d891906118f6565b61066a565b6040516101ea9190611833565b60405180910390f35b6101fb61068c565b6040516102089190611943565b60405180910390f35b61022b600480360381019061022691906117c9565b610695565b6040516102389190611833565b60405180910390f35b6102496106c3565b6040516102569190611977565b60405180910390f35b610279600480360381019061027491906118f6565b6106cb565b6040516102869190611833565b60405180910390f35b610297610701565b005b6102b360048036038101906102ae9190611990565b610713565b6040516102c09190611833565b60405180910390f35b6102e360048036038101906102de91906118f6565b61077b565b6040516102f09190611833565b60405180910390f35b6103016108db565b60405161030e9190611833565b60405180910390f35b610331600480360381019061032c91906119bb565b6108f0565b60405161033e9190611943565b60405180910390f35b61034f610936565b005b610359610949565b005b610375600480360381019061037091906118f6565b61095b565b6040516103829190611833565b60405180910390f35b610393610a54565b6040516103a091906119f5565b60405180910390f35b6103b1610a7b565b6040516103be91906118d6565b60405180910390f35b6103e160048036038101906103dc91906119bb565b610b0b565b6040516103ee9190611943565b60405180910390f35b610411600480360381019061040c91906118f6565b610b51565b60405161041e9190611833565b60405180910390f35b61042f610bc6565b005b61044b600480360381019061044691906118f6565b610bea565b6040516104589190611833565b60405180910390f35b610469610c0c565b60405161047691906119f5565b60405180910390f35b61049960048036038101906104949190611a0e565b610c34565b6040516104a69190611943565b60405180910390f35b6104c960048036038101906104c491906119bb565b610cb6565b005b6104e560048036038101906104e091906119bb565b610d38565b005b5f6104f0610e40565b508160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056890611abc565b60405180910390fd5b8160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105bd9190611b07565b925050819055506105cf308484610f6d565b600190509392505050565b6060600580546105e990611b67565b80601f016020809104026020016040519081016040528092919081815260200182805461061590611b67565b80156106605780601f1061063757610100808354040283529160200191610660565b820191905f5260205f20905b81548152906001019060200180831161064357829003601f168201915b5050505050905090565b5f806106746111dc565b90506106818185856111e3565b600191505092915050565b5f600454905090565b5f8061069f6111dc565b90506106ac8582856113a6565b6106b7858585610f6d565b60019150509392505050565b5f6012905090565b5f806106d56111dc565b90506106f68185856106e78589610c34565b6106f19190611b97565b6111e3565b600191505092915050565b610709611431565b6107116114af565b565b5f61071f323084610f6d565b8160085f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461076b9190611b97565b9250508190555060019050919050565b5f610784610e40565b505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90611c3a565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90611abc565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108bf9190611b07565b925050819055506108d1308484610f6d565b6001905092915050565b5f60075f9054906101000a900460ff16905090565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61093e611431565b6109475f611510565b565b610951611431565b6109596115d1565b565b5f610964610e40565b508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90611abc565b60405180910390fd5b8160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a319190611b07565b92505081905550610a4a30610a44610a54565b84610f6d565b6001905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610a8a90611b67565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab690611b67565b8015610b015780601f10610ad857610100808354040283529160200191610b01565b820191905f5260205f20905b815481529060010190602001808311610ae457829003601f168201915b5050505050905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f80610b5b6111dc565b90505f610b688286610c34565b905083811015610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490611cc8565b60405180910390fd5b610bba82868684036111e3565b60019250505092915050565b610bce611431565b5f600160146101000a81548160ff021916908315150217905550565b5f80610bf46111dc565b9050610c01818585610f6d565b600191505092915050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610cbe611431565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2390611d56565b60405180910390fd5b610d3581611510565b50565b610d40611431565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590611de4565b60405180910390fd5b600160149054906101000a900460ff16610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490611e72565b60405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec790611de4565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f106111dc565b73ffffffffffffffffffffffffffffffffffffffff1614610f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5d90611f00565b60405180910390fd5b6001905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290611f8e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110409061201c565b60405180910390fd5b611054838383611633565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf906120aa565b60405180910390fd5b81810360025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111c39190611943565b60405180910390a36111d6848484611643565b50505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124890612138565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b6906121c6565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113999190611943565b60405180910390a3505050565b5f6113b18484610c34565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461142b578181101561141d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114149061222e565b60405180910390fd5b61142a84848484036111e3565b5b50505050565b6114396111dc565b73ffffffffffffffffffffffffffffffffffffffff16611457610a54565b73ffffffffffffffffffffffffffffffffffffffff16146114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490612296565b60405180910390fd5b565b6114b7611648565b5f60075f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6114f96111dc565b60405161150691906119f5565b60405180910390a1565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6115d9611691565b600160075f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861161c6111dc565b60405161162991906119f5565b60405180910390a1565b61163e8383836116db565b505050565b505050565b6116506108db565b61168f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611686906122fe565b60405180910390fd5b565b6116996108db565b156116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090612366565b60405180910390fd5b565b6116e6838383611733565b6116ee6108db565b1561172e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611725906123f4565b60405180910390fd5b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117658261173c565b9050919050565b6117758161175b565b811461177f575f80fd5b50565b5f813590506117908161176c565b92915050565b5f819050919050565b6117a881611796565b81146117b2575f80fd5b50565b5f813590506117c38161179f565b92915050565b5f805f606084860312156117e0576117df611738565b5b5f6117ed86828701611782565b93505060206117fe86828701611782565b925050604061180f868287016117b5565b9150509250925092565b5f8115159050919050565b61182d81611819565b82525050565b5f6020820190506118465f830184611824565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611883578082015181840152602081019050611868565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6118a88261184c565b6118b28185611856565b93506118c2818560208601611866565b6118cb8161188e565b840191505092915050565b5f6020820190508181035f8301526118ee818461189e565b905092915050565b5f806040838503121561190c5761190b611738565b5b5f61191985828601611782565b925050602061192a858286016117b5565b9150509250929050565b61193d81611796565b82525050565b5f6020820190506119565f830184611934565b92915050565b5f60ff82169050919050565b6119718161195c565b82525050565b5f60208201905061198a5f830184611968565b92915050565b5f602082840312156119a5576119a4611738565b5b5f6119b2848285016117b5565b91505092915050565b5f602082840312156119d0576119cf611738565b5b5f6119dd84828501611782565b91505092915050565b6119ef8161175b565b82525050565b5f602082019050611a085f8301846119e6565b92915050565b5f8060408385031215611a2457611a23611738565b5b5f611a3185828601611782565b9250506020611a4285828601611782565b9150509250929050565b7f4c696c79706164546f6b656e3a206e6f7420656e6f7567682066756e647320695f8201527f6e20657363726f77000000000000000000000000000000000000000000000000602082015250565b5f611aa6602883611856565b9150611ab182611a4c565b604082019050919050565b5f6020820190508181035f830152611ad381611a9a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b1182611796565b9150611b1c83611796565b9250828203905081811115611b3457611b33611ada565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b7e57607f821691505b602082108103611b9157611b90611b3a565b5b50919050565b5f611ba182611796565b9150611bac83611796565b9250828201905080821115611bc457611bc3611ada565b5b92915050565b7f4c696c79706164546f6b656e3a20746f416464726573732063616e6e6f7420625f8201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b5f611c24602e83611856565b9150611c2f82611bca565b604082019050919050565b5f6020820190508181035f830152611c5181611c18565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611cb2602583611856565b9150611cbd82611c58565b604082019050919050565b5f6020820190508181035f830152611cdf81611ca6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611d40602683611856565b9150611d4b82611ce6565b604082019050919050565b5f6020820190508181035f830152611d6d81611d34565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a20436f6e74726f6c6c65722061645f8201527f6472657373206d75737420626520646566696e65640000000000000000000000602082015250565b5f611dce603583611856565b9150611dd982611d74565b604082019050919050565b5f6020820190508181035f830152611dfb81611dc2565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a2063616e4368616e6765436f6e745f8201527f726f6c6c6572416464726573732069732064697361626c656400000000000000602082015250565b5f611e5c603983611856565b9150611e6782611e02565b604082019050919050565b5f6020820190508181035f830152611e8981611e50565b9050919050565b7f436f6e74726f6c6c65724f776e61626c653a204f6e6c792074686520636f6e745f8201527f726f6c6c65722063616e2063616c6c2074686973206d6574686f640000000000602082015250565b5f611eea603b83611856565b9150611ef582611e90565b604082019050919050565b5f6020820190508181035f830152611f1781611ede565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611f78602583611856565b9150611f8382611f1e565b604082019050919050565b5f6020820190508181035f830152611fa581611f6c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612006602383611856565b915061201182611fac565b604082019050919050565b5f6020820190508181035f83015261203381611ffa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612094602683611856565b915061209f8261203a565b604082019050919050565b5f6020820190508181035f8301526120c181612088565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612122602483611856565b915061212d826120c8565b604082019050919050565b5f6020820190508181035f83015261214f81612116565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6121b0602283611856565b91506121bb82612156565b604082019050919050565b5f6020820190508181035f8301526121dd816121a4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612218601d83611856565b9150612223826121e4565b602082019050919050565b5f6020820190508181035f8301526122458161220c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612280602083611856565b915061228b8261224c565b602082019050919050565b5f6020820190508181035f8301526122ad81612274565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f6122e8601483611856565b91506122f3826122b4565b602082019050919050565b5f6020820190508181035f830152612315816122dc565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f612350601083611856565b915061235b8261231c565b602082019050919050565b5f6020820190508181035f83015261237d81612344565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e736665722077685f8201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b5f6123de602a83611856565b91506123e982612384565b604082019050919050565b5f6020820190508181035f83015261240b816123d2565b905091905056fea26469706673582212201d8d13bbe4cf01e08b4ea25478b99ae89cdf8b5ea85127299fa37feb146b075164736f6c63430008150033",
"devdoc": {
"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."
},
"Paused(address)": {
"details": "Emitted when the pause is triggered by `account`."
},
"Transfer(address,address,uint256)": {
"details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
},
"Unpaused(address)": {
"details": "Emitted when the pause is lifted by `account`."
}
},
"kind": "dev",
"methods": {
"allowance(address,address)": {
"details": "See {IERC20-allowance}."
},
"approve(address,uint256)": {
"details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
},
"balanceOf(address)": {
"details": "See {IERC20-balanceOf}."
},
"decimals()": {
"details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
},
"decreaseAllowance(address,uint256)": {
"details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
},
"increaseAllowance(address,uint256)": {
"details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
},
"name()": {
"details": "Returns the name of the token."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"paused()": {
"details": "Returns true if the contract is paused, and false otherwise."
},
"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."
},
"symbol()": {
"details": "Returns the symbol of the token, usually a shorter version of the name."
},
"totalSupply()": {
"details": "See {IERC20-totalSupply}."
},
"transfer(address,uint256)": {
"details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
},
"transferFrom(address,address,uint256)": {
"details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
},
"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
},
"storageLayout": {
"storage": [
{
"astId": 506,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
},
{
"astId": 1475,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "controllerAddress",
"offset": 0,
"slot": "1",
"type": "t_address"
},
{
"astId": 1478,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "canChangeControllerAddress",
"offset": 20,
"slot": "1",
"type": "t_bool"
},
{
"astId": 735,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_balances",
"offset": 0,
"slot": "2",
"type": "t_mapping(t_address,t_uint256)"
},
{
"astId": 741,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_allowances",
"offset": 0,
"slot": "3",
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))"
},
{
"astId": 743,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_totalSupply",
"offset": 0,
"slot": "4",
"type": "t_uint256"
},
{
"astId": 745,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_name",
"offset": 0,
"slot": "5",
"type": "t_string_storage"
},
{
"astId": 747,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_symbol",
"offset": 0,
"slot": "6",
"type": "t_string_storage"
},
{
"astId": 629,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "_paused",
"offset": 0,
"slot": "7",
"type": "t_bool"
},
{
"astId": 5706,
"contract": "contracts/LilypadToken.sol:LilypadToken",
"label": "escrowBalances",
"offset": 0,
"slot": "8",
"type": "t_mapping(t_address,t_uint256)"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_bool": {
"encoding": "inplace",
"label": "bool",
"numberOfBytes": "1"
},
"t_mapping(t_address,t_mapping(t_address,t_uint256))": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => mapping(address => uint256))",
"numberOfBytes": "32",
"value": "t_mapping(t_address,t_uint256)"
},
"t_mapping(t_address,t_uint256)": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => uint256)",
"numberOfBytes": "32",
"value": "t_uint256"
},
"t_string_storage": {
"encoding": "bytes",
"label": "string",
"numberOfBytes": "32"
},
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
}
}
}
}