@atomicport/evm
Version:
Support Cross-Chain-Swap with HTLC on any blockchains
359 lines • 1.09 MB
JSON
{
"contractName": "HashedTimelockERC721",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "contractId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "tokenContract",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "hashlock",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "timelock",
"type": "uint256"
}
],
"name": "HTLCERC721New",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "contractId",
"type": "bytes32"
}
],
"name": "HTLCERC721Refund",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "contractId",
"type": "bytes32"
}
],
"name": "HTLCERC721Withdraw",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_hashlock",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_timelock",
"type": "uint256"
},
{
"internalType": "address",
"name": "_tokenContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "newContract",
"outputs": [
{
"internalType": "bytes32",
"name": "contractId",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_contractId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_preimage",
"type": "bytes32"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_contractId",
"type": "bytes32"
}
],
"name": "refund",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_contractId",
"type": "bytes32"
}
],
"name": "getContract",
"outputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "address",
"name": "tokenContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "hashlock",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "timelock",
"type": "uint256"
},
{
"internalType": "bool",
"name": "withdrawn",
"type": "bool"
},
{
"internalType": "bool",
"name": "refunded",
"type": "bool"
},
{
"internalType": "bytes32",
"name": "preimage",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function",
"constant": true
}
],
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"contractId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hashlock\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timelock\",\"type\":\"uint256\"}],\"name\":\"HTLCERC721New\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"contractId\",\"type\":\"bytes32\"}],\"name\":\"HTLCERC721Refund\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"contractId\",\"type\":\"bytes32\"}],\"name\":\"HTLCERC721Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractId\",\"type\":\"bytes32\"}],\"name\":\"getContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"hashlock\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timelock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"withdrawn\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"refunded\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"preimage\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hashlock\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_timelock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"newContract\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"contractId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractId\",\"type\":\"bytes32\"}],\"name\":\"refund\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_contractId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_preimage\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getContract(bytes32)\":{\"details\":\"Get contract details.\",\"params\":{\"_contractId\":\"HTLC contract id\"}},\"newContract(address,bytes32,uint256,address,uint256)\":{\"details\":\"Sender / Payer sets up a new hash time lock contract depositing the funds and providing the reciever and terms. NOTE: _receiver must first call approve() on the token contract. See isApprovedOrOwner check in tokensTransferable modifier.\",\"params\":{\"_hashlock\":\"A sha-2 sha256 hash hashlock.\",\"_receiver\":\"Receiver of the tokens.\",\"_timelock\":\"UNIX epoch seconds time that the lock expires at. Refunds can be made after this time.\",\"_tokenContract\":\"ERC20 Token contract address.\",\"_tokenId\":\"Id of the token to lock up.\"},\"returns\":{\"contractId\":\"Id of the new HTLC. This is needed for subsequent calls.\"}},\"refund(bytes32)\":{\"details\":\"Called by the sender if there was no withdraw AND the time lock has expired. This will restore ownership of the tokens to the sender.\",\"params\":{\"_contractId\":\"Id of HTLC to refund from.\"},\"returns\":{\"_0\":\"bool true on success\"}},\"withdraw(bytes32,bytes32)\":{\"details\":\"Called by the receiver once they know the preimage of the hashlock. This will transfer ownership of the locked tokens to their address.\",\"params\":{\"_contractId\":\"Id of the HTLC.\",\"_preimage\":\"sha256(_preimage) should equal the contract hashlock.\"},\"returns\":{\"_0\":\"bool true on success\"}}},\"title\":\"Hashed Timelock Contracts (HTLCs) on Ethereum ERC721 tokens. This contract provides a way to create and keep HTLCs for ERC721 tokens. See HashedTimelock.sol for a contract that provides the same functions for the native ETH token. Protocol: 1) newContract(receiver, hashlock, timelock, tokenContract, tokenId) - a sender calls this to create a new HTLC on a given token (tokenContract) for a given token ID. A 32 byte contract id is returned 2) withdraw(contractId, preimage) - once the receiver knows the preimage of the hashlock hash they can claim the tokens with this function 3) refund() - after timelock has expired and if the receiver did not withdraw the tokens the sender / creater of the HTLC can get their tokens back with this function.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/HashedTimelockERC721.sol\":\"HashedTimelockERC721\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/HashedTimelockERC721.sol\":{\"keccak256\":\"0x46ab52eb181c74b1543ed9e416902e1842104ebb6de70d085aea1f1c7f02a505\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92384a08edc712ae5d23577894c89c6b020e92d47f77d1c3181d9bf5b79d33a7\",\"dweb:/ipfs/QmNy7utStXGguGqM82ncGDuk5WF8r8dAad7S1LXjZ4sbqc\"]},\"project:/node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xd89f3585b211fc9e3408384a4c4efdc3a93b2f877a3821046fa01c219d35be1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5ea15ef7c8980240ccd46df13809d163f749bc0a01d8bced1875660d4872da1c\",\"dweb:/ipfs/QmbDfAT9VeCSG4cnPd6tjDMp8ED85dLHbWyMyv7wbmL4CH\"]},\"project:/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"project:/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"project:/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"project:/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"project:/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634\",\"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb\"]},\"project:/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"project:/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"project:/node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33bbf48cc069be677705037ba7520c22b1b622c23b33e1a71495f2d36549d40b\",\"dweb:/ipfs/Qmct36zWXv3j7LZB83uwbg7TXwnZSN1fqHNDZ93GG98bGz\"]}},\"version\":1}",
"bytecode": "0x608060405234801561001057600080fd5b50611a46806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063398a7a981461005157806363615149146100815780637249fbb6146100b1578063e16c7d98146100e1575b600080fd5b61006b60048036038101906100669190610fac565b610119565b6040516100789190611036565b60405180910390f35b61009b60048036038101906100969190611051565b6105d0565b6040516100a891906110ac565b60405180910390f35b6100cb60048036038101906100c691906110c7565b6109ff565b6040516100d891906110ac565b60405180910390f35b6100fb60048036038101906100f691906110c7565b610d3f565b60405161011099989796959493929190611112565b60405180910390f35b600082823073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663081812fc836040518263ffffffff1660e01b815260040161016d919061119f565b602060405180830381865afa15801561018a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ae91906111cf565b73ffffffffffffffffffffffffffffffffffffffff1614610204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101fb906112a5565b60405180910390fd5b85428111610247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023e90611337565b60405180910390fd5b6002338a88888c8c604051602001610264969594939291906113e1565b60405160208183030381529060405260405161028091906114c2565b602060405180830381855afa15801561029d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102c091906114ee565b93506102cb84610e6f565b1561030b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030290611567565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b815260040161034893929190611587565b600060405180830381600087803b15801561036257600080fd5b505af1158015610376573d6000803e3d6000fd5b505050506040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018981526020018881526020016000151581526020016000151581526020016000801b81525060008086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff02191690831515021790555061010082015181600701559050508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16857fb02ad9e7e61bb795ea1b7083cc09e3fd4d3a4ea3d79c5bd55a0960643dbc20ff89898d8d6040516105bc94939291906115be565b60405180910390a450505095945050505050565b6000826105dc81610e6f565b61061b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061164f565b60405180910390fd5b83836000600282604051602001610632919061166f565b60405160208183030381529060405260405161064e91906114c2565b602060405180830381855afa15801561066b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061068e91906114ee565b90506002816040516020016106a3919061166f565b6040516020818303038152906040526040516106bf91906114c2565b602060405180830381855afa1580156106dc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906106ff91906114ee565b6000808581526020019081526020016000206004015414610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074c906116d6565b60405180910390fd5b863373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090611742565b60405180910390fd5b6000151560008083815260200190815260200160002060060160009054906101000a900460ff16151514610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906117ae565b60405180910390fd5b6000151560008083815260200190815260200160002060060160019054906101000a900460ff161515146108cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c29061181a565b60405180910390fd5b60008060008a8152602001908152602001600020905087816007018190555060018160060160006101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd308360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600301546040518463ffffffff1660e01b815260040161099093929190611587565b600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050887fb7358acefea4917350b35745bfd31b7cb6f943bec8883d36d66ab946141c27f660405160405180910390a26001965050505050505092915050565b600081610a0b81610e6f565b610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a419061164f565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590611886565b60405180910390fd5b6000151560008083815260200190815260200160002060060160019054906101000a900460ff16151514610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906118f2565b60405180910390fd5b6000151560008083815260200190815260200160002060060160009054906101000a900460ff16151514610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061195e565b60405180910390fd5b42600080838152602001908152602001600020600501541115610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906119f0565b60405180910390fd5b6000806000868152602001908152602001600020905060018160060160016101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd308360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600301546040518463ffffffff1660e01b8152600401610cd493929190611587565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b50505050847fba3a5e0fba071659b91c5265298818069091d4c67108a685ee376f779a606fa760405160405180910390a260019350505050919050565b6000806000806000806000806000801515610d598b610e6f565b151503610d915760008060008060008060008060008460001b94508060001b9050985098509850985098509850985098509850610e62565b60008060008c815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030154846004015485600501548660060160009054906101000a900460ff168760060160019054906101000a900460ff168860070154995099509950995099509950995099509950505b9193959799909294969850565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f0d82610ee2565b9050919050565b610f1d81610f02565b8114610f2857600080fd5b50565b600081359050610f3a81610f14565b92915050565b6000819050919050565b610f5381610f40565b8114610f5e57600080fd5b50565b600081359050610f7081610f4a565b92915050565b6000819050919050565b610f8981610f76565b8114610f9457600080fd5b50565b600081359050610fa681610f80565b92915050565b600080600080600060a08688031215610fc857610fc7610edd565b5b6000610fd688828901610f2b565b9550506020610fe788828901610f61565b9450506040610ff888828901610f97565b935050606061100988828901610f2b565b925050608061101a88828901610f97565b9150509295509295909350565b61103081610f40565b82525050565b600060208201905061104b6000830184611027565b92915050565b6000806040838503121561106857611067610edd565b5b600061107685828601610f61565b925050602061108785828601610f61565b9150509250929050565b60008115159050919050565b6110a681611091565b82525050565b60006020820190506110c1600083018461109d565b92915050565b6000602082840312156110dd576110dc610edd565b5b60006110eb84828501610f61565b91505092915050565b6110fd81610f02565b82525050565b61110c81610f76565b82525050565b600061012082019050611128600083018c6110f4565b611135602083018b6110f4565b611142604083018a6110f4565b61114f6060830189611103565b61115c6080830188611027565b61116960a0830187611103565b61117660c083018661109d565b61118360e083018561109d565b611191610100830184611027565b9a9950505050505050505050565b60006020820190506111b46000830184611103565b92915050565b6000815190506111c981610f14565b92915050565b6000602082840312156111e5576111e4610edd565b5b60006111f3848285016111ba565b91505092915050565b600082825260208201905092915050565b7f5468652048544c43206d7573742068617665206265656e2064657369676e617460008201527f656420616e20617070726f766564207370656e64657220666f7220746865207460208201527f6f6b656e49640000000000000000000000000000000000000000000000000000604082015250565b600061128f6046836111fc565b915061129a8261120d565b606082019050919050565b600060208201905081810360008301526112be81611282565b9050919050565b7f74696d656c6f636b2074696d65206d75737420626520696e207468652066757460008201527f7572650000000000000000000000000000000000000000000000000000000000602082015250565b60006113216023836111fc565b915061132c826112c5565b604082019050919050565b6000602082019050818103600083015261135081611314565b9050919050565b60008160601b9050919050565b600061136f82611357565b9050919050565b600061138182611364565b9050919050565b61139961139482610f02565b611376565b82525050565b6000819050919050565b6113ba6113b582610f76565b61139f565b82525050565b6000819050919050565b6113db6113d682610f40565b6113c0565b82525050565b60006113ed8289611388565b6014820191506113fd8288611388565b60148201915061140d8287611388565b60148201915061141d82866113a9565b60208201915061142d82856113ca565b60208201915061143d82846113a9565b602082019150819050979650505050505050565b600081519050919050565b600081905092915050565b60005b8381101561148557808201518184015260208101905061146a565b60008484015250505050565b600061149c82611451565b6114a6818561145c565b93506114b6818560208601611467565b80840191505092915050565b60006114ce8284611491565b915081905092915050565b6000815190506114e881610f4a565b92915050565b60006020828403121561150457611503610edd565b5b6000611512848285016114d9565b91505092915050565b7f436f6e747261637420616c726561647920657869737473000000000000000000600082015250565b60006115516017836111fc565b915061155c8261151b565b602082019050919050565b6000602082019050818103600083015261158081611544565b9050919050565b600060608201905061159c60008301866110f4565b6115a960208301856110f4565b6115b66040830184611103565b949350505050565b60006080820190506115d360008301876110f4565b6115e06020830186611103565b6115ed6040830185611027565b6115fa6060830184611103565b95945050505050565b7f636f6e7472616374496420646f6573206e6f7420657869737400000000000000600082015250565b60006116396019836111fc565b915061164482611603565b602082019050919050565b600060208201905081810360008301526116688161162c565b9050919050565b600061167b82846113ca565b60208201915081905092915050565b7f686173686c6f636b206861736820646f6573206e6f74206d6174636800000000600082015250565b60006116c0601c836111fc565b91506116cb8261168a565b602082019050919050565b600060208201905081810360008301526116ef816116b3565b9050919050565b7f776974686472617761626c653a206e6f74207265636569766572000000000000600082015250565b600061172c601a836111fc565b9150611737826116f6565b602082019050919050565b6000602082019050818103600083015261175b8161171f565b9050919050565b7f776974686472617761626c653a20616c72656164792077697468647261776e00600082015250565b6000611798601f836111fc565b91506117a382611762565b602082019050919050565b600060208201905081810360008301526117c78161178b565b9050919050565b7f776974686472617761626c653a20616c726561647920726566756e6465640000600082015250565b6000611804601e836111fc565b915061180f826117ce565b602082019050919050565b60006020820190508181036000830152611833816117f7565b9050919050565b7f726566756e6461626c653a206e6f742073656e64657200000000000000000000600082015250565b60006118706016836111fc565b915061187b8261183a565b602082019050919050565b6000602082019050818103600083015261189f81611863565b9050919050565b7f726566756e6461626c653a20616c726561647920726566756e64656400000000600082015250565b60006118dc601c836111fc565b91506118e7826118a6565b602082019050919050565b6000602082019050818103600083015261190b816118cf565b9050919050565b7f726566756e6461626c653a20616c72656164792077697468647261776e000000600082015250565b6000611948601d836111fc565b915061195382611912565b602082019050919050565b600060208201905081810360008301526119778161193b565b9050919050565b7f726566756e6461626c653a2074696d656c6f636b206e6f74207965742070617360008201527f7365640000000000000000000000000000000000000000000000000000000000602082015250565b60006119da6023836111fc565b91506119e58261197e565b604082019050919050565b60006020820190508181036000830152611a09816119cd565b905091905056fea2646970667358221220595cf5fcafb099952e0c90ac791fca6ce70c5155407bcdc421e14532854ad6ef64736f6c63430008110033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063398a7a981461005157806363615149146100815780637249fbb6146100b1578063e16c7d98146100e1575b600080fd5b61006b60048036038101906100669190610fac565b610119565b6040516100789190611036565b60405180910390f35b61009b60048036038101906100969190611051565b6105d0565b6040516100a891906110ac565b60405180910390f35b6100cb60048036038101906100c691906110c7565b6109ff565b6040516100d891906110ac565b60405180910390f35b6100fb60048036038101906100f691906110c7565b610d3f565b60405161011099989796959493929190611112565b60405180910390f35b600082823073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663081812fc836040518263ffffffff1660e01b815260040161016d919061119f565b602060405180830381865afa15801561018a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ae91906111cf565b73ffffffffffffffffffffffffffffffffffffffff1614610204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101fb906112a5565b60405180910390fd5b85428111610247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023e90611337565b60405180910390fd5b6002338a88888c8c604051602001610264969594939291906113e1565b60405160208183030381529060405260405161028091906114c2565b602060405180830381855afa15801561029d573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906102c091906114ee565b93506102cb84610e6f565b1561030b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030290611567565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b815260040161034893929190611587565b600060405180830381600087803b15801561036257600080fd5b505af1158015610376573d6000803e3d6000fd5b505050506040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018981526020018881526020016000151581526020016000151581526020016000801b81525060008086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff02191690831515021790555061010082015181600701559050508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16857fb02ad9e7e61bb795ea1b7083cc09e3fd4d3a4ea3d79c5bd55a0960643dbc20ff89898d8d6040516105bc94939291906115be565b60405180910390a450505095945050505050565b6000826105dc81610e6f565b61061b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061164f565b60405180910390fd5b83836000600282604051602001610632919061166f565b60405160208183030381529060405260405161064e91906114c2565b602060405180830381855afa15801561066b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061068e91906114ee565b90506002816040516020016106a3919061166f565b6040516020818303038152906040526040516106bf91906114c2565b602060405180830381855afa1580156106dc573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906106ff91906114ee565b6000808581526020019081526020016000206004015414610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074c906116d6565b60405180910390fd5b863373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090611742565b60405180910390fd5b6000151560008083815260200190815260200160002060060160009054906101000a900460ff16151514610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906117ae565b60405180910390fd5b6000151560008083815260200190815260200160002060060160019054906101000a900460ff161515146108cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c29061181a565b60405180910390fd5b60008060008a8152602001908152602001600020905087816007018190555060018160060160006101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd308360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600301546040518463ffffffff1660e01b815260040161099093929190611587565b600060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b50505050887fb7358acefea4917350b35745bfd31b7cb6f943bec8883d36d66ab946141c27f660405160405180910390a26001965050505050505092915050565b600081610a0b81610e6f565b610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a419061164f565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590611886565b60405180910390fd5b6000151560008083815260200190815260200160002060060160019054906101000a900460ff16151514610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906118f2565b60405180910390fd5b6000151560008083815260200190815260200160002060060160009054906101000a900460ff16151514610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061195e565b60405180910390fd5b42600080838152602001908152602001600020600501541115610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906119f0565b60405180910390fd5b6000806000868152602001908152602001600020905060018160060160016101000a81548160ff0219169083151502179055508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd308360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600301546040518463ffffffff1660e01b8152600401610cd493929190611587565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b50505050847fba3a5e0fba071659b91c5265298818069091d4c67108a685ee376f779a606fa760405160405180910390a260019350505050919050565b6000806000806000806000806000801515610d598b610e6f565b151503610d915760008060008060008060008060008460001b94508060001b9050985098509850985098509850985098509850610e62565b60008060008c815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030154846004015485600501548660060160009054906101000a900460ff168760060160019054906101000a900460ff168860070154995099509950995099509950995099509950505b9193959799909294969850565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f0d82610ee2565b9050919050565b610f1d81610f02565b8114610f2857600080fd5b50565b600081359050610f3a81610f14565b92915050565b6000819050919050565b610f5381610f40565b8114610f5e57600080fd5b50565b600081359050610f7081610f4a565b92915050565b6000819050919050565b610f8981610f76565b8114610f9457600080fd5b50565b600081359050610fa681610f80565b92915050565b600080600080600060a08688031215610fc857610fc7610edd565b5b6000610fd688828901610f2b565b9550506020610fe788828901610f61565b9450506040610ff888828901610f97565b935050606061100988828901610f2b565b925050608061101a88828901610f97565b9150509295509295909350565b61103081610f40565b82525050565b600060208201905061104b6000830184611027565b92915050565b6000806040838503121561106857611067610edd565b5b600061107685828601610f61565b925050602061108785828601610f61565b9150509250929050565b60008115159050919050565b6110a681611091565b82525050565b60006020820190506110c1600083018461109d565b92915050565b6000602082840312156110dd576110dc610edd565b5b60006110eb84828501610f61565b91505092915050565b6110fd81610f02565b82525050565b61110c81610f76565b82525050565b600061012082019050611128600083018c6110f4565b611135602083018b6110f4565b611142604083018a6110f4565b61114f6060830189611103565b61115c6080830188611027565b61116960a0830187611103565b61117660c083018661109d565b61118360e083018561109d565b611191610100830184611027565b9a9950505050505050505050565b60006020820190506111b46000830184611103565b92915050565b6000815190506111c981610f14565b92915050565b6000602082840312156111e5576111e4610edd565b5b60006111f3848285016111ba565b91505092915050565b600082825260208201905092915050565b7f5468652048544c43206d7573742068617665206265656e2064657369676e617460008201527f656420616e20617070726f766564207370656e64657220666f7220746865207460208201527f6f6b656e49640000000000000000000000000000000000000000000000000000604082015250565b600061128f6046836111fc565b915061129a8261120d565b606082019050919050565b600060208201905081810360008301526112be81611282565b9050919050565b7f74696d656c6f636b2074696d65206d75737420626520696e207468652066757460008201527f7572650000000000000000000000000000000000000000000000000000000000602082015250565b60006113216023836111fc565b915061132c826112c5565b604082019050919050565b6000602082019050818103600083015261135081611314565b9050919050565b60008160601b9050919050565b600061136f82611357565b9050919050565b600061138182611364565b9050919050565b61139961139482610f02565b611376565b82525050565b6000819050919050565b6113ba6113b582610f76565b61139f565b82525050565b6000819050919050565b6113db6113d682610f40565b6113c0565b82525050565b60006113ed8289611388565b6014820191506113fd8288611388565b60148201915061140d8287611388565b60148201915061141d82866113a9565b60208201915061142d82856113ca565b60208201915061143d82846113a9565b602082019150819050979650505050505050565b600081519050919050565b600081905092915050565b60005b8381101561148557808201518184015260208101905061146a565b60008484015250505050565b600061149c82611451565b6114a6818561145c565b93506114b6818560208601611467565b80840191505092915050565b60006114ce8284611491565b915081905092915050565b6000815190506114e881610f4a565b92915050565b60006020828403121561150457611503610edd565b5b6000611512848285016114d9565b91505092915050565b7f436f6e747261637420616c726561647920657869737473000000000000000000600082015250565b60006115516017836111fc565b915061155c8261151b565b602082019050919050565b6000602082019050818103600083015261158081611544565b9050919050565b600060608201905061159c60008301866110f4565b6115a960208301856110f4565b6115b66040830184611103565b949350505050565b60006080820190506115d360008301876110f4565b6115e06020830186611103565b6115ed6040830185611027565b6115fa6060830184611103565b95945050505050565b7f636f6e7472616374496420646f6573206e6f7420657869737400000000000000600082015250565b60006116396019836111fc565b915061164482611603565b602082019050919050565b600060208201905081810360008301526116688161162c565b9050919050565b600061167b82846113ca565b60208201915081905092915050565b7f686173686c6f636b206861736820646f6573206e6f74206d6174636800000000600082015250565b60006116c0601c836111fc565b91506116cb8261168a565b602082019050919050565b600060208201905081810360008301526116ef816116b3565b9050919050565b7f776974686472617761626c653a206e6f74207265636569766572000000000000600082015250565b600061172c601a836111fc565b9150611737826116f6565b602082019050919050565b6000602082019050818103600083015261175b8161171f565b9050919050565b7f776974686472617761626c653a20616c72656164792077697468647261776e00600082015250565b6000611798601f836111fc565b91506117a382611762565b602082019050919050565b600060208201905081810360008301526117c78161178b565b9050919050565b7f776974686472617761626c653a20616c726561647920726566756e6465640000600082015250565b6000611804601e836111fc565b915061180f826117ce565b602082019050919050565b60006020820190508181036000830152611833816117f7565b9050919050565b7f726566756e6461626c653a206e6f742073656e64657200000000000000000000600082015250565b60006118706016836111fc565b915061187b8261183a565b602082019050919050565b6000602082019050818103600083015261189f81611863565b9050919050565b7f726566756e6461626c653a20616c726561647920726566756e64656400000000600082015250565b60006118dc601c836111fc565b91506118e7826118a6565b602082019050919050565b6000602082019050818103600083015261190b816118cf565b9050919050565b7f726566756e6461626c653a20616c72656164792077697468647261776e000000600082015250565b6000611948601d836111fc565b915061195382611912565b602082019050919050565b600060208201905081810360008301526119778161193b565b9050919050565b7f726566756e6461626c653a2074696d656c6f636b206e6f74207965742070617360008201527f7365640000000000000000000000000000000000000000000000000000000000602082015250565b60006119da6023836111fc565b91506119e58261197e565b604082019050919050565b60006020820190508181036000830152611a09816119cd565b905091905056fea2646970667358221220595cf5fcafb099952e0c90ac791fca6ce70c5155407bcdc421e14532854ad6ef64736f6c63430008110033",
"immutableReferences": {},
"generatedSources": [],
"deployedGeneratedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:23159:17",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:17",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:17",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:17",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:17"
},
"nodeType": "YulFunctionCall",
"src": "67:9:17"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:17"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:17",
"type": ""
}
],
"src": "7:75:17"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:17",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:17",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:17",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:17"
},
"nodeType": "YulFunctionCall",
"src": "187:12:17"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:17"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:17"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:17",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:17",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:17",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:17"
},
"nodeType": "YulFunctionCall",
"src": "310:12:17"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:17"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117: