UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

649 lines (648 loc) 337 kB
{ "contractName": "TestBech32", "abi": [ { "inputs": [ { "internalType": "bytes20", "name": "witBytes20", "type": "bytes20" } ], "name": "toBech32Mainnet", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes20", "name": "witBytes20", "type": "bytes20" } ], "name": "toBech32Testnet", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "witPkh", "type": "string" } ], "name": "fromBech32Mainnet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "witPkh", "type": "string" } ], "name": "fromBech32Testnet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "hexAddr", "type": "string" } ], "name": "parseHexAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"witPkh\",\"type\":\"string\"}],\"name\":\"fromBech32Mainnet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"witPkh\",\"type\":\"string\"}],\"name\":\"fromBech32Testnet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"hexAddr\",\"type\":\"string\"}],\"name\":\"parseHexAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes20\",\"name\":\"witBytes20\",\"type\":\"bytes20\"}],\"name\":\"toBech32Mainnet\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes20\",\"name\":\"witBytes20\",\"type\":\"bytes20\"}],\"name\":\"toBech32Testnet\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/mockups/tests/TestBech32.sol\":\"TestBech32\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/libs/Bech32.sol\":{\"keccak256\":\"0x14618323a0efe7586c20906a2e9cee7ad63baa976ff231c57f7f2d7d3707fb8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a19f05fe84047a7a6d3d6fc39972b432e6e536aa70472386a9d7a6d9aab64a64\",\"dweb:/ipfs/QmcHwUY66yjiotRH4Q3kbRvSzcHyLQ1yHL3KbtQKiMhtZE\"]},\"project:/contracts/libs/Secp256k1.sol\":{\"keccak256\":\"0xbe686002da5004ff39dd70709f3820eba2afe9323ae9cb894009c161e4b1a666\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18fab91775216de0707cea9ad285b10be09127461a13432fea358bf9cb2a0c2e\",\"dweb:/ipfs/QmeRUGsgstnM4hxM9hpkBf3L6cE5btirEaowcMxmuw3utj\"]},\"project:/contracts/libs/Witnet.sol\":{\"keccak256\":\"0x1d446c3e534e40e676d1763bfb2897fadfac8afed904ab757843d7d6770b0a6c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://338fb1073f17d64e8d31bfe492d9475ce906788ee08e6489ce30413f91dc1328\",\"dweb:/ipfs/QmPe5QX2AGTnQFjse1Xttq4ZYWwYAiXoySb5VUui3PqPhk\"]},\"project:/contracts/libs/WitnetBuffer.sol\":{\"keccak256\":\"0x8e07aebe2954ab3e6f2d8eceedb12db7cf915c1f3e8630f4fa9999cecb1c78ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed6c54cc901183d61546e8fd15bd5ea8ef238ebc915642946071d435dd7481ea\",\"dweb:/ipfs/Qmcaqta7YjUSBbBUGqoh44bsCS6UqqoyHjBuz4qnKBShXM\"]},\"project:/contracts/libs/WitnetCBOR.sol\":{\"keccak256\":\"0xd99308373575cc10fb7f2ceb0f6a8625f3911275c1fa27811fae498d98d03d97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4909a999d7b660a2dc54ca957b6eccfa523e2765fc4d6a2574dee7d5cd67b43\",\"dweb:/ipfs/QmWGQT4KDcfSFe1hcHVoWx6E4PhYMaod5iLpJCWBEeShzh\"]},\"project:/contracts/mockups/tests/TestBech32.sol\":{\"keccak256\":\"0x083a0c20a5bffe75e62add06150073368557d0e6944060b3bae3b5b0a96a7842\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2b243cf257bb4c0f69ac3c86ca3851cc4023755a5a0486892e5a4dc16f1b651b\",\"dweb:/ipfs/QmVqNCHfAFo1xJU1ibXgMJuAKSDtvye6GiuRGsvHPjqJv8\"]}},\"version\":1}", "bytecode": "0x6080604052348015600e575f5ffd5b5061169a8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80630b983db0146100595780632edbcd7a146100895780634c94b89e1461009c578063c5c42167146100bc578063ded7d15d146100cf575b5f5ffd5b61006c610067366004611331565b6100e2565b6040516001600160a01b0390911681526020015b60405180910390f35b61006c610097366004611331565b61010e565b6100af6100aa3660046113e4565b610120565b6040516100809190611410565b61006c6100ca366004611331565b61014a565b6100af6100dd3660046113e4565b610171565b5f61010882604051806040016040528060038152602001621dda5d60ea1b81525061019c565b92915050565b5f61010861011b8361021a565b610305565b60606101088260601c604051806040016040528060038152602001621dda5d60ea1b815250610318565b5f61010882604051806040016040528060048152602001631d1dda5d60e21b81525061019c565b60606101088260601c604051806040016040528060048152602001631d1dda5d60e21b815250610318565b5f5f5f6101c9856040516020016101b3919061145c565b6040516020818303038152906040526001610358565b915091506101f6846040516020016101e1919061145c565b604051602081830303815290604052836106e9565b5f61020582600560085f610741565b905061021081610758565b9695505050505050565b6060600282518161022d5761022d611467565b0467ffffffffffffffff8111156102465761024661131d565b6040519080825280601f01601f191660200182016040528015610270576020820181803683370190505b5090505f5b81518110156102ff575f6102a48483600202815181106102975761029761147b565b016020015160f81c6107b2565b90505f6102c28584600202600101815181106102975761029761147b565b905080826010020160f81b8484815181106102df576102df61147b565b60200101906001600160f81b03191690815f1a9053505050600101610275565b50919050565b5f61030f82610876565b60601c92915050565b604051606083811b6bffffffffffffffffffffffff19166020830152906103519060340160405160208183030381529060405283610882565b9392505050565b6060805f605a855111156103b35760405162461bcd60e51b815260206004820152601d60248201527f4265636833323a20696e76616c696420737472696e67206c656e67746800000060448201526064015b60405180910390fd5b5f5b85518110156104ae575f8682815181106103d1576103d161147b565b016020015160f81c9050602181108015906103f05750607e8160ff1611155b6104315760405162461bcd60e51b81526020600482015260126024820152712132b1b419991d103bb937b7339031b430b960711b60448201526064016103aa565b60301960ff8216016104a5578215801561044c575060018210155b801561045c575086518260070111155b6104a15760405162461bcd60e51b81526020600482015260166024820152754265636833323a2077726f6e6720706f73206f66203160501b60448201526064016103aa565b8192505b506001016103b5565b508067ffffffffffffffff8111156104c8576104c861131d565b6040519080825280601f01601f1916602001820160405280156104f2576020820181803683370190505b5092505f5b8181101561054c578581815181106105115761051161147b565b602001015160f81c60f81b84828151811061052e5761052e61147b565b60200101906001600160f81b03191690815f1a9053506001016104f7565b506001818651030367ffffffffffffffff81111561056c5761056c61131d565b604051908082528060200260200182016040528015610595578160200160208202803683370190505b5091505f5b8251811015610686575f6040518061012001604052806101008152602001611545610100913987848401600101815181106105d7576105d761147b565b0160200151815160f89190911c9081106105f3576105f361147b565b01602001516001600160f81b031990811691508190036106555760405162461bcd60e51b815260206004820152601c60248201527f4265636833323a2062797465206e6f7420696e20616c7068616265740000000060448201526064016103aa565b8060f81c84838151811061066b5761066b61147b565b60ff909216602092830291909101909101525060010161059a565b506106928383866108c5565b6106d75760405162461bcd60e51b81526020600482015260166024820152754265636833323a2077726f6e6720636865636b73756d60501b60448201526064016103aa565b50805160051901815290939092509050565b808051906020012082805190602001201461073d5760405162461bcd60e51b8152602060048201526014602482015273084cac6d066647440d0e4e040dad2e6dac2e8c6d60631b60448201526064016103aa565b5050565b606061074f858585856109f0565b95945050505050565b5f81516014146107aa5760405162461bcd60e51b815260206004820152601b60248201527f4265636833323a20696e76616c69642064617461206c656e677468000000000060448201526064016103aa565b506014015190565b5f60308260ff16101580156107cb575060398260ff1611155b156107db576101086030836114a3565b60418260ff16101580156107f3575060468260ff1611155b1561080e576108036041836114a3565b61010890600a6114bc565b60618260ff1610158015610826575060668260ff1611155b15610836576108036061836114a3565b60405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103432bc1031b430b930b1ba32b960591b60448201526064016103aa565b5f610108826014610bbd565b60605f82604051602001610896919061145c565b60405160208183030381529060405290505f6108b785600860056001610c32565b905061074f82826001610cf9565b5f5f6108d085610f88565b90505f845182510167ffffffffffffffff8111156108f0576108f061131d565b604051908082528060200260200182016040528015610919578160200160208202803683370190505b5090505f5b8251811015610973578281815181106109395761093961147b565b602002602001015160ff168282815181106109565761095661147b565b63ffffffff9092166020928302919091019091015260010161091e565b505f5b85518110156109ce578581815181106109915761099161147b565b602002602001015160ff168284518301815181106109b1576109b161147b565b63ffffffff90921660209283029190910190910152600101610976565b508363ffffffff166109df82611083565b63ffffffff16149695505050505050565b60605f8080610a02600180881b6114d5565b90505f5b8851811015610af6575f898281518110610a2257610a2261147b565b6020908102919091010151905060ff8082168a1c1615610aa35760405162461bcd60e51b815260206004820152603660248201527f4265636833323a2076616c7565206d757374206265206e6f6e2d6e6567617469604482015275766520616e642066697420696e2066726f6d6269747360501b60648201526084016103aa565b93881b60ff85161793928801925b878410610aed576040519388900393610ad790879087871c861660f81b906020016114e8565b6040516020818303038152906040529550610ab1565b50600101610a06565b508415610b3e578115610b39578381610b0f84896114d5565b85901b1660f81b604051602001610b279291906114e8565b60405160208183030381529060405293505b610bb2565b86821080610b58575080610b5283886114d5565b84901b16155b610bb25760405162461bcd60e51b815260206004820152602560248201527f4265636833323a20696e76616c69642070616464696e67206f722076616c75656044820152642073697a6560d81b60648201526084016103aa565b505050949350505050565b5f60208260ff161115610bd257610bd261150c565b5f8260ff16845111610be5578351610bea565b8260ff165b90505f5b81811015610c2a5780600802858281518110610c0c57610c0c61147b565b01602001516001600160f81b031916901c9290921791600101610bee565b505092915050565b60605f855167ffffffffffffffff811115610c4f57610c4f61131d565b604051908082528060200260200182016040528015610c78578160200160208202803683370190505b5090505f5b81518163ffffffff161015610cec57868163ffffffff1681518110610ca457610ca461147b565b602001015160f81c60f81b60f81c828263ffffffff1681518110610cca57610cca61147b565b60ff90921660209283029190910190910152610ce581611520565b9050610c7d565b50610210818686866109f0565b60605f610d0785858561117d565b90505f815185518751010160010167ffffffffffffffff811115610d2d57610d2d61131d565b6040519080825280601f01601f191660200182016040528015610d57576020820181803683370190505b5090505f5b8651811015610db257868181518110610d7757610d7761147b565b602001015160f81c60f81b828281518110610d9457610d9461147b565b60200101906001600160f81b03191690815f1a905350600101610d5c565b50603160f81b81875181518110610dcb57610dcb61147b565b60200101906001600160f81b03191690815f1a90535085516001015f5b8651811015610eac575f878281518110610e0457610e0461147b565b01602090810151604080518082019091528281525f5160206116455f395f51905f529083015260f81c9150811015610ea3576040518060400160405280602081526020015f5160206116455f395f51905f528152508160ff1681518110610e6d57610e6d61147b565b602001015160f81c60f81b8484840181518110610e8c57610e8c61147b565b60200101906001600160f81b03191690815f1a9053505b50600101610de8565b508551015f5b8351811015610f7c575f848281518110610ece57610ece61147b565b602002602001015190506040518060400160405280602081526020015f5160206116455f395f51905f52815250518160ff161015610f73576040518060400160405280602081526020015f5160206116455f395f51905f528152508160ff1681518110610f3d57610f3d61147b565b602001015160f81c60f81b8484840181518110610f5c57610f5c61147b565b60200101906001600160f81b03191690815f1a9053505b50600101610eb2565b50909695505050505050565b6060815182510160010167ffffffffffffffff811115610faa57610faa61131d565b604051908082528060200260200182016040528015610fd3578160200160208202803683370190505b5090505f5b82518110156102ff576005838281518110610ff557610ff561147b565b602001015160f81c60f81b60f81c60ff16901c82828151811061101a5761101a61147b565b602002602001019060ff16908160ff16815250508281815181106110405761104061147b565b602001015160f81c60f81b60f81c601f168284518301600101815181106110695761106961147b565b60ff90921660209283029190910190910152600101610fd8565b6040805160a081018252633b6a57b281526326508e6d6020820152631ea119fa91810191909152633d4233dd6060820152632a1462b360808201525f90600190825b84518163ffffffff161015611174575f60198463ffffffff16901c9050858263ffffffff16815181106110fa576110fa61147b565b60200260200101516005856301ffffff1663ffffffff16901b1893505f5f90505b60058163ffffffff16101561116a57600163ffffffff8381169083161c8116900361116257838163ffffffff16600581106111585761115861147b565b6020020151851894505b60010161111b565b50506001016110c5565b50909392505050565b60605f61118985610f88565b90505f845182510160060167ffffffffffffffff8111156111ac576111ac61131d565b6040519080825280602002602001820160405280156111d5578160200160208202803683370190505b5090505f5b855183510181101561129857825181101561123d578281815181106112015761120161147b565b602002602001015160ff1682828151811061121e5761121e61147b565b602002602001019063ffffffff16908163ffffffff1681525050611290565b8583518203815181106112525761125261147b565b602001015160f81c60f81b60f81c60ff168282815181106112755761127561147b565b602002602001019063ffffffff16908163ffffffff16815250505b6001016111da565b5060408051600680825260e08201909252906020820160c0803683370190505092505f846112c583611083565b1890505f5b600681101561131257806005036005028263ffffffff16901c601f168582815181106112f8576112f861147b565b60ff909216602092830291909101909101526001016112ca565b505050509392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611341575f5ffd5b813567ffffffffffffffff811115611357575f5ffd5b8201601f81018413611367575f5ffd5b803567ffffffffffffffff8111156113815761138161131d565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156113b0576113b061131d565b6040528181528282016020018610156113c7575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f602082840312156113f4575f5ffd5b81356bffffffffffffffffffffffff1981168114610351575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f81518060208401855e5f93019283525090919050565b5f6103518284611445565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156101085761010861148f565b60ff81811683821601908111156101085761010861148f565b818103818111156101085761010861148f565b5f6114f38285611445565b6001600160f81b03199390931683525050600101919050565b634e487b7160e01b5f52600160045260245ffd5b5f63ffffffff821663ffffffff810361153b5761153b61148f565b6001019291505056feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fff0a1115141a1e0705ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1dff180d19090817ff12161f1b13ff010003100b1c0c0e060402ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff71707a7279397838676632747664773073336a6e35346b686365366d7561376ca2646970667358221220e3c35e595d0f1fd3a41a6fa349ae5988a609566257f07ad8cf093f740454a44664736f6c634300081e0033", "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80630b983db0146100595780632edbcd7a146100895780634c94b89e1461009c578063c5c42167146100bc578063ded7d15d146100cf575b5f5ffd5b61006c610067366004611331565b6100e2565b6040516001600160a01b0390911681526020015b60405180910390f35b61006c610097366004611331565b61010e565b6100af6100aa3660046113e4565b610120565b6040516100809190611410565b61006c6100ca366004611331565b61014a565b6100af6100dd3660046113e4565b610171565b5f61010882604051806040016040528060038152602001621dda5d60ea1b81525061019c565b92915050565b5f61010861011b8361021a565b610305565b60606101088260601c604051806040016040528060038152602001621dda5d60ea1b815250610318565b5f61010882604051806040016040528060048152602001631d1dda5d60e21b81525061019c565b60606101088260601c604051806040016040528060048152602001631d1dda5d60e21b815250610318565b5f5f5f6101c9856040516020016101b3919061145c565b6040516020818303038152906040526001610358565b915091506101f6846040516020016101e1919061145c565b604051602081830303815290604052836106e9565b5f61020582600560085f610741565b905061021081610758565b9695505050505050565b6060600282518161022d5761022d611467565b0467ffffffffffffffff8111156102465761024661131d565b6040519080825280601f01601f191660200182016040528015610270576020820181803683370190505b5090505f5b81518110156102ff575f6102a48483600202815181106102975761029761147b565b016020015160f81c6107b2565b90505f6102c28584600202600101815181106102975761029761147b565b905080826010020160f81b8484815181106102df576102df61147b565b60200101906001600160f81b03191690815f1a9053505050600101610275565b50919050565b5f61030f82610876565b60601c92915050565b604051606083811b6bffffffffffffffffffffffff19166020830152906103519060340160405160208183030381529060405283610882565b9392505050565b6060805f605a855111156103b35760405162461bcd60e51b815260206004820152601d60248201527f4265636833323a20696e76616c696420737472696e67206c656e67746800000060448201526064015b60405180910390fd5b5f5b85518110156104ae575f8682815181106103d1576103d161147b565b016020015160f81c9050602181108015906103f05750607e8160ff1611155b6104315760405162461bcd60e51b81526020600482015260126024820152712132b1b419991d103bb937b7339031b430b960711b60448201526064016103aa565b60301960ff8216016104a5578215801561044c575060018210155b801561045c575086518260070111155b6104a15760405162461bcd60e51b81526020600482015260166024820152754265636833323a2077726f6e6720706f73206f66203160501b60448201526064016103aa565b8192505b506001016103b5565b508067ffffffffffffffff8111156104c8576104c861131d565b6040519080825280601f01601f1916602001820160405280156104f2576020820181803683370190505b5092505f5b8181101561054c578581815181106105115761051161147b565b602001015160f81c60f81b84828151811061052e5761052e61147b565b60200101906001600160f81b03191690815f1a9053506001016104f7565b506001818651030367ffffffffffffffff81111561056c5761056c61131d565b604051908082528060200260200182016040528015610595578160200160208202803683370190505b5091505f5b8251811015610686575f6040518061012001604052806101008152602001611545610100913987848401600101815181106105d7576105d761147b565b0160200151815160f89190911c9081106105f3576105f361147b565b01602001516001600160f81b031990811691508190036106555760405162461bcd60e51b815260206004820152601c60248201527f4265636833323a2062797465206e6f7420696e20616c7068616265740000000060448201526064016103aa565b8060f81c84838151811061066b5761066b61147b565b60ff909216602092830291909101909101525060010161059a565b506106928383866108c5565b6106d75760405162461bcd60e51b81526020600482015260166024820152754265636833323a2077726f6e6720636865636b73756d60501b60448201526064016103aa565b50805160051901815290939092509050565b808051906020012082805190602001201461073d5760405162461bcd60e51b8152602060048201526014602482015273084cac6d066647440d0e4e040dad2e6dac2e8c6d60631b60448201526064016103aa565b5050565b606061074f858585856109f0565b95945050505050565b5f81516014146107aa5760405162461bcd60e51b815260206004820152601b60248201527f4265636833323a20696e76616c69642064617461206c656e677468000000000060448201526064016103aa565b506014015190565b5f60308260ff16101580156107cb575060398260ff1611155b156107db576101086030836114a3565b60418260ff16101580156107f3575060468260ff1611155b1561080e576108036041836114a3565b61010890600a6114bc565b60618260ff1610158015610826575060668260ff1611155b15610836576108036061836114a3565b60405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103432bc1031b430b930b1ba32b960591b60448201526064016103aa565b5f610108826014610bbd565b60605f82604051602001610896919061145c565b60405160208183030381529060405290505f6108b785600860056001610c32565b905061074f82826001610cf9565b5f5f6108d085610f88565b90505f845182510167ffffffffffffffff8111156108f0576108f061131d565b604051908082528060200260200182016040528015610919578160200160208202803683370190505b5090505f5b8251811015610973578281815181106109395761093961147b565b602002602001015160ff168282815181106109565761095661147b565b63ffffffff9092166020928302919091019091015260010161091e565b505f5b85518110156109ce578581815181106109915761099161147b565b602002602001015160ff168284518301815181106109b1576109b161147b565b63ffffffff90921660209283029190910190910152600101610976565b508363ffffffff166109df82611083565b63ffffffff16149695505050505050565b60605f8080610a02600180881b6114d5565b90505f5b8851811015610af6575f898281518110610a2257610a2261147b565b6020908102919091010151905060ff8082168a1c1615610aa35760405162461bcd60e51b815260206004820152603660248201527f4265636833323a2076616c7565206d757374206265206e6f6e2d6e6567617469604482015275766520616e642066697420696e2066726f6d6269747360501b60648201526084016103aa565b93881b60ff85161793928801925b878410610aed576040519388900393610ad790879087871c861660f81b906020016114e8565b6040516020818303038152906040529550610ab1565b50600101610a06565b508415610b3e578115610b39578381610b0f84896114d5565b85901b1660f81b604051602001610b279291906114e8565b60405160208183030381529060405293505b610bb2565b86821080610b58575080610b5283886114d5565b84901b16155b610bb25760405162461bcd60e51b815260206004820152602560248201527f4265636833323a20696e76616c69642070616464696e67206f722076616c75656044820152642073697a6560d81b60648201526084016103aa565b505050949350505050565b5f60208260ff161115610bd257610bd261150c565b5f8260ff16845111610be5578351610bea565b8260ff165b90505f5b81811015610c2a5780600802858281518110610c0c57610c0c61147b565b01602001516001600160f81b031916901c9290921791600101610bee565b505092915050565b60605f855167ffffffffffffffff811115610c4f57610c4f61131d565b604051908082528060200260200182016040528015610c78578160200160208202803683370190505b5090505f5b81518163ffffffff161015610cec57868163ffffffff1681518110610ca457610ca461147b565b602001015160f81c60f81b60f81c828263ffffffff1681518110610cca57610cca61147b565b60ff90921660209283029190910190910152610ce581611520565b9050610c7d565b50610210818686866109f0565b60605f610d0785858561117d565b90505f815185518751010160010167ffffffffffffffff811115610d2d57610d2d61131d565b6040519080825280601f01601f191660200182016040528015610d57576020820181803683370190505b5090505f5b8651811015610db257868181518110610d7757610d7761147b565b602001015160f81c60f81b828281518110610d9457610d9461147b565b60200101906001600160f81b03191690815f1a905350600101610d5c565b50603160f81b81875181518110610dcb57610dcb61147b565b60200101906001600160f81b03191690815f1a90535085516001015f5b8651811015610eac575f878281518110610e0457610e0461147b565b01602090810151604080518082019091528281525f5160206116455f395f51905f529083015260f81c9150811015610ea3576040518060400160405280602081526020015f5160206116455f395f51905f528152508160ff1681518110610e6d57610e6d61147b565b602001015160f81c60f81b8484840181518110610e8c57610e8c61147b565b60200101906001600160f81b03191690815f1a9053505b50600101610de8565b508551015f5b8351811015610f7c575f848281518110610ece57610ece61147b565b602002602001015190506040518060400160405280602081526020015f5160206116455f395f51905f52815250518160ff161015610f73576040518060400160405280602081526020015f5160206116455f395f51905f528152508160ff1681518110610f3d57610f3d61147b565b602001015160f81c60f81b8484840181518110610f5c57610f5c61147b565b60200101906001600160f81b03191690815f1a9053505b50600101610eb2565b50909695505050505050565b6060815182510160010167ffffffffffffffff811115610faa57610faa61131d565b604051908082528060200260200182016040528015610fd3578160200160208202803683370190505b5090505f5b82518110156102ff576005838281518110610ff557610ff561147b565b602001015160f81c60f81b60f81c60ff16901c82828151811061101a5761101a61147b565b602002602001019060ff16908160ff16815250508281815181106110405761104061147b565b602001015160f81c60f81b60f81c601f168284518301600101815181106110695761106961147b565b60ff90921660209283029190910190910152600101610fd8565b6040805160a081018252633b6a57b281526326508e6d6020820152631ea119fa91810191909152633d4233dd6060820152632a1462b360808201525f90600190825b84518163ffffffff161015611174575f60198463ffffffff16901c9050858263ffffffff16815181106110fa576110fa61147b565b60200260200101516005856301ffffff1663ffffffff16901b1893505f5f90505b60058163ffffffff16101561116a57600163ffffffff8381169083161c8116900361116257838163ffffffff16600581106111585761115861147b565b6020020151851894505b60010161111b565b50506001016110c5565b50909392505050565b60605f61118985610f88565b90505f845182510160060167ffffffffffffffff8111156111ac576111ac61131d565b6040519080825280602002602001820160405280156111d5578160200160208202803683370190505b5090505f5b855183510181101561129857825181101561123d578281815181106112015761120161147b565b602002602001015160ff1682828151811061121e5761121e61147b565b602002602001019063ffffffff16908163ffffffff1681525050611290565b8583518203815181106112525761125261147b565b602001015160f81c60f81b60f81c60ff168282815181106112755761127561147b565b602002602001019063ffffffff16908163ffffffff16815250505b6001016111da565b5060408051600680825260e08201909252906020820160c0803683370190505092505f846112c583611083565b1890505f5b600681101561131257806005036005028263ffffffff16901c601f168582815181106112f8576112f861147b565b60ff909216602092830291909101909101526001016112ca565b505050509392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611341575f5ffd5b813567ffffffffffffffff811115611357575f5ffd5b8201601f81018413611367575f5ffd5b803567ffffffffffffffff8111156113815761138161131d565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156113b0576113b061131d565b6040528181528282016020018610156113c7575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f602082840312156113f4575f5ffd5b81356bffffffffffffffffffffffff1981168114610351575f5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f81518060208401855e5f93019283525090919050565b5f6103518284611445565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156101085761010861148f565b60ff81811683821601908111156101085761010861148f565b818103818111156101085761010861148f565b5f6114f38285611445565b6001600160f81b03199390931683525050600101919050565b634e487b7160e01b5f52600160045260245ffd5b5f63ffffffff821663ffffffff810361153b5761153b61148f565b6001019291505056feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fff0a1115141a1e0705ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1dff180d19090817ff12161f1b13ff010003100b1c0c0e060402ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff71707a7279397838676632747664773073336a6e35346b686365366d7561376ca2646970667358221220e3c35e595d0f1fd3a41a6fa349ae5988a609566257f07ad8cf093f740454a44664736f6c634300081e0033", "immutableReferences": {}, "generatedSources": [], "deployedGeneratedSources": [ { "ast": { "nativeSrc": "0:7792:136", "nodeType": "YulBlock", "src": "0:7792:136", "statements": [ { "nativeSrc": "6:3:136", "nodeType": "YulBlock", "src": "6:3:136", "statements": [] }, { "body": { "nativeSrc": "46:95:136", "nodeType": "YulBlock", "src": "46:95:136", "statements": [ { "expression": { "arguments": [ { "kind": "number", "nativeSrc": "63:1:136", "nodeType": "YulLiteral", "src": "63:1:136", "type": "", "value": "0" }, { "arguments": [ { "kind": "number", "nativeSrc": "70:3:136", "nodeType": "YulLiteral", "src": "70:3:136", "type": "", "value": "224" }, { "kind": "number", "nativeSrc": "75:10:136", "nodeType": "YulLiteral", "src": "75:10:136", "type": "", "value": "0x4e487b71" } ], "functionName": { "name": "shl", "nativeSrc": "66:3:136", "nodeType": "YulIdentifier", "src": "66:3:136" }, "nativeSrc": "66:20:136", "nodeType": "YulFunctionCall", "src": "66:20:136" } ], "functionName": { "name": "mstore", "nativeSrc": "56:6:136", "nodeType": "YulIdentifier", "src": "56:6:136" }, "nativeSrc": "56:31:136", "nodeType": "YulFunctionCall", "src": "56:31:136" }, "nativeSrc": "56:31:136", "nodeType": "YulExpressionStatement", "src": "56:31:136" }, { "expression": { "arguments": [ { "kind": "number", "nativeSrc": "103:1:136", "nodeType": "YulLiteral", "src": "103:1:136", "type": "", "value": "4" }, { "kind": "number", "nativeSrc": "106:4:136", "nodeType": "YulLiteral", "src": "106:4:136", "type": "", "value": "0x41" } ], "functionName": { "name": "mstore", "nativeSrc": "96:6:136", "nodeType": "YulIdentifier", "src": "96:6:136" }, "nativeSrc": "96:15:136", "nodeType": "YulFunctionCall", "src": "96:15:136" }, "nativeSrc": "96:15:136", "nodeType": "YulExpressionStatement", "src": "96:15:136" }, { "expression": { "arguments": [ { "kind": "number", "nativeSrc": "127:1:136", "nodeType": "YulLiteral", "src": "127:1:136", "type": "", "value": "0" }, { "kind": "number", "nativeSrc": "130:4:136", "nodeType": "YulLiteral", "src": "130:4:136", "type": "", "value": "0x24" } ], "functionName": { "name": "revert", "nativeSrc": "120:6:136", "nodeType": "YulIdentifier", "src": "120:6:136" }, "nativeSrc": "120:15:136", "nodeType": "YulFunctionCall", "src": "120:15:136" }, "nativeSrc": "120:15:136", "nodeType": "YulExpressionStatement", "src": "120:15:136" } ] }, "name": "panic_error_0x41", "nativeSrc": "14:127:136", "nodeType": "YulFunctionDefinition", "src": "14:127:136" }, { "body": { "nativeSrc": "226:865:136", "nodeType": "YulBlock", "src": "226:865:136", "statements": [ { "body": { "nativeSrc": "272:16:136", "nodeType": "YulBlock", "src": "272:16:136", "statements": [ { "expression": { "arguments": [ { "kind": "number", "nativeSrc": "281:1:136", "nodeType": "YulLiteral", "src": "281:1:136", "type": "", "value": "0" }, { "kind": "number", "nativeSrc": "284:1:136", "nodeType": "YulLiteral", "src": "284:1:136", "type": "", "value": "0" } ], "functionName": { "name": "revert", "nativeSrc": "274:6:136", "nodeType": "YulIdentifier", "src": "274:6:136" }, "nativeSrc": "274:12:136", "nodeType": "YulFunctionCall", "src": "274:12:136" }, "nativeSrc": "274:12:136", "nodeType": "YulExpressionStatement", "src": "274:12:136" } ] }, "condition": { "arguments": [ { "arguments": [ { "name": "dataEnd", "nativeSrc": "247:7:136", "nodeType": "YulIdentifier", "src": "247:7:136" }, { "name": "headStart", "nativeSrc": "256:9:136", "nodeType": "YulIdentifier", "src": "256:9:136" } ], "functionName": { "name": "sub", "nativeSrc": "243:3:136", "nodeType": "YulIdentifier", "src": "243:3:136" }, "nativeSrc": "243:23:136", "nodeType": "YulFunctionCall", "src": "243:23:136" }, { "kind": "number", "nativeSrc": "268:2:136", "nodeType": "YulLiteral", "src": "268:2:136", "type": "", "value": "32" } ], "functionName": { "name": "slt", "nativeSrc": "239:3:136", "nodeType": "YulIdentifier", "src": "239:3:136" }, "nativeSrc": "239:32:136", "nodeType": "YulFunctionCall", "src": "239:32:136" }, "nativeSrc": "236:52:136", "nodeType": "YulIf", "src": "236:52:136" }, { "nativeSrc": "297:37:136", "nodeType": "YulVariableDeclaration", "src": "297:37:136", "value": { "arguments": [ { "name": "headStart", "nativeSrc": "324:9:136", "nodeType": "YulIdentifier", "src": "324:9:136" } ], "functionName": { "name": "calldataload", "nativeSrc": "311:12:136", "nodeType": "YulIdentifier", "src": "311:12:136" }, "nativeSrc": "311:23:136", "nodeType": "YulFunctionCall", "src": "311:23:136" }, "variables": [ { "name": "offset", "nativeSrc": "301:6:136", "nodeType": "YulTypedName", "src": "301:6:136", "type": "" } ] }, { "body": { "nativeSrc": "377:16:136", "nodeType": "YulBlock", "src": "377:16:136", "statements": [ { "expression": { "arguments": [ { "kind": "number", "nativeSrc": "386:1:136", "nodeType": "YulLiteral", "src": "386:1:136", "type": "", "value": "0" }, { "kind": "number", "nativeSrc": "389:1:136", "nodeType": "YulLiteral", "src": "389:1:136", "type": "", "value": "0" } ], "functionName": { "name": "revert", "nativeSrc": "379:6:136", "nodeType": "YulIdentifier", "src": "379:6:136" }, "nativeSrc": "379:12:136", "nodeType": "YulFunctionCall", "src": "379:12:136" }, "nativeSrc": "379:12:136", "nodeType": "YulExpressionStatement", "src": "379:12:136" } ] }, "condition": { "arguments": [ { "name": "offset", "nativeSrc": "349:6:136", "nodeType": "YulIdentifier", "src": "349:6:136" }, { "kind": "number", "nativeSrc": "357:18:136", "nodeType": "YulLiteral", "src": "357:18:136", "type": "", "value": "0xffffffffffffffff" } ], "functionName": { "name": "gt", "nativeSrc": "346:2:136", "nodeType": "YulIdentifier", "src": "346:2:136" }, "nativeSrc": "346:30:136", "nodeType": "YulFunctionCall", "src": "346:30:136" }, "nativeSrc": "343:50:136", "nodeType": "YulIf", "src": "343:50:136" }, { "nativeSrc": "402:32:136", "nodeType": "YulVariableDeclaration", "src": "402:32:136", "value": { "arguments": [ { "name": "headStart", "nativeSrc": "416:9:136", "nodeType": "YulIdentifier", "src": "416:9:136" }, { "name": "offset", "nativeSrc": "427:6:136", "nodeType": "YulIdentifier", "src": "427:6:136" } ], "functionName": { "name": "add", "nativeSrc": "412:3:136", "nodeType": "YulIdentifier", "src": "412:3:136" }, "nativeSrc": "412:22:136", "nodeType": "YulFunctionCall", "src": "412:22:136" }, "variables": [ { "name": "_1", "nativeSrc": "406:2:136", "nodeType": "YulTypedName", "src": "406:2:136", "type": "" } ] }, { "body": { "nativeSrc": "482:16:136", "nodeType": "YulBlock", "src": "482:16:136", "statements": [ { "expression": { "arguments": [ { "kind": "number", "nativeSrc": "491:1:136", "nodeType": "YulLiteral", "src": "491:1:136", "type": "", "value": "0" }, { "kind": "number", "nativeSrc": "494:1:136", "nodeType": "YulLiteral", "src": "494:1:136", "type": "", "value": "0" } ], "functionName": { "name": "revert", "nativeSrc": "484:6:136", "nodeType": "YulIdentifier", "src": "484:6:136" }, "nativeSrc": "484:12:136", "nodeType": "YulFunctionCall", "src": "484:12:136" }, "nativeSrc": "484:12:136", "nodeType": "YulExpressionStatement", "src": "484:12:136" } ] }, "condition": { "arguments": [ { "arguments": [ { "arguments": [ { "name": "_1", "nativeSrc": "461:2:136", "nodeType": "YulIdentifier", "src": "461:2:136" }, { "kind": "number", "nativeSrc": "465:4:136", "nodeType": "YulLiteral", "src": "465:4:136", "type": "", "value": "0x1f" } ], "functionName": { "name": "add", "nativeSrc": "457:3:136", "nodeType": "YulIdentifier", "src": "457:3:136" }, "nativeSrc": "457:13:136", "nodeType": "YulFunctionCall", "src": "457:13:136" }, { "name": "dataEnd", "nativeSrc": "472:7:136", "nodeType": "YulIdentifier", "src": "472:7:136" } ], "functionName": { "name": "slt", "nativeSrc": "453:3:136", "nodeType": "YulIdentifier", "src": "453:3:136" }, "nativeSrc": "453:27:136", "nodeType": "YulFunctionCall", "src": "453:27:136" } ], "functionName": { "name": "iszero", "nativeSrc": "446:6:136", "nodeType": "YulIdentifier", "src": "446:6:136" }, "nativeSrc": "446:35:136", "nodeType": "YulFunctionCall", "src": "446:35:136" }, "nativeSrc": "443:55:136", "nodeType": "YulIf", "src": "443:55:136" }, { "nativeSrc": "507:30:136", "nodeType": "YulVariableDeclaration", "src": "507:30:136", "value": { "arguments": [ { "name": "_1", "nativeSrc": "534:2:136", "nodeType": "YulIdentifier", "src": "534:2:136" } ], "functionName": { "name": "calldataload", "nativeSrc": "521:12:136", "nodeType": "YulIdentifier", "src": "521:12:136" }, "nativeSrc": "521:16:136", "nodeType": "YulFunctionCall", "src": "521:16:136" }, "variables": [ { "name": "length", "nativeSrc": "511:6:136", "nodeType": "YulTypedName", "src": "511:6:136", "type": "" } ] }, { "body": { "nativeSrc": "580:22:136", "nodeType": "YulBlock", "src": "580:22:136", "statements": [ { "expression": { "arguments": [], "functionName": { "name": "panic_error_0x41", "nativeSrc": "582:16:136", "nodeType": "YulIdentifier", "src": "582:16:136"