{
  "contractName": "WitnetDeployerCfxCore",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initCode",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "internalType": "address",
          "name": "_deployed",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initCode",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "determineAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "determineProxyAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proxySalt",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_firstImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "proxify",
      "outputs": [
        {
          "internalType": "contract WitnetProxy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_deployed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineProxyAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proxySalt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_firstImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"proxify\",\"outputs\":[{\"internalType\":\"contract WitnetProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz <guillermo@otherplane.com>\",\"kind\":\"dev\",\"methods\":{\"deploy(bytes,bytes32)\":{\"details\":\"The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). \",\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_deployed\":\"Just deployed contract address.\"}},\"determineAddr(bytes,bytes32)\":{\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_0\":\"Deterministic contract address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deploy(bytes,bytes32)\":{\"notice\":\"Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \"},\"determineAddr(bytes,bytes32)\":{\"notice\":\"Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\"}},\"notice\":\"WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/customs/WitnetDeployerCfxCore.sol\":\"WitnetDeployerCfxCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/core/customs/WitnetDeployerCfxCore.sol\":{\"keccak256\":\"0x09b841b59d1f5f1b04dd593766a7edc44cee5d1d7553e8bc243249bcc7049b1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0969356f8eb07272715fdd8eb01b0638722475209ef76c753dfc638e4fb656db\",\"dweb:/ipfs/QmaYq4JXjkErxAdakcAcwjbACdAwFL2DkmckWP7GsaLHFR\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50610f578061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f366004610336565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103f2565b6100ed565b6100646100a1366004610437565b61017e565b6100646100b43660046103f2565b6102be565b60006100e7604051806020016100ce90610329565b601f1982820381018352601f90910116604052836102be565b92915050565b60006100f983836102be565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b60008061018a856100b9565b9050806001600160a01b03163b600003610265576101ca604051806020016101b190610329565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101ee92919061049c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021a92919061049c565b6020604051808303816000875af1158015610239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025d91906104fb565b5090506102b7565b60405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a20616c72656164792070726f78696669656044820152601960fa1b6064820152608401610175565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012060016001609c1b03166001609f1b1790565b610a048061051e83390190565b60006020828403121561034857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261037657600080fd5b813567ffffffffffffffff808211156103915761039161034f565b604051601f8301601f19908116603f011681019082821181831017156103b9576103b961034f565b816040528381528660208588010111156103d257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561040557600080fd5b823567ffffffffffffffff81111561041c57600080fd5b61042885828601610365565b95602094909401359450505050565b60008060006060848603121561044c57600080fd5b8335925060208401356001600160a01b038116811461046a57600080fd5b9150604084013567ffffffffffffffff81111561048657600080fd5b61049286828701610365565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104d9578581018301518582016060015282016104bd565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561050d57600080fd5b815180151581146102b757600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a264697066735822122094e8ea9287b63332d74cbe79a8fd11a1b1a02329f5d17ff01c0b23b91a7e456964736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f366004610336565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103f2565b6100ed565b6100646100a1366004610437565b61017e565b6100646100b43660046103f2565b6102be565b60006100e7604051806020016100ce90610329565b601f1982820381018352601f90910116604052836102be565b92915050565b60006100f983836102be565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b60008061018a856100b9565b9050806001600160a01b03163b600003610265576101ca604051806020016101b190610329565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101ee92919061049c565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021a92919061049c565b6020604051808303816000875af1158015610239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025d91906104fb565b5090506102b7565b60405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a20616c72656164792070726f78696669656044820152601960fa1b6064820152608401610175565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012060016001609c1b03166001609f1b1790565b610a048061051e83390190565b60006020828403121561034857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261037657600080fd5b813567ffffffffffffffff808211156103915761039161034f565b604051601f8301601f19908116603f011681019082821181831017156103b9576103b961034f565b816040528381528660208588010111156103d257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561040557600080fd5b823567ffffffffffffffff81111561041c57600080fd5b61042885828601610365565b95602094909401359450505050565b60008060006060848603121561044c57600080fd5b8335925060208401356001600160a01b038116811461046a57600080fd5b9150604084013567ffffffffffffffff81111561048657600080fd5b61049286828701610365565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104d9578581018301518582016060015282016104bd565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561050d57600080fd5b815180151581146102b757600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a264697066735822122094e8ea9287b63332d74cbe79a8fd11a1b1a02329f5d17ff01c0b23b91a7e456964736f6c63430008190033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nativeSrc": "0:4635:84",
        "nodeType": "YulBlock",
        "src": "0:4635:84",
        "statements": [
          {
            "nativeSrc": "6:3:84",
            "nodeType": "YulBlock",
            "src": "6:3:84",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "84:110:84",
              "nodeType": "YulBlock",
              "src": "84:110:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "130:16:84",
                    "nodeType": "YulBlock",
                    "src": "130:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "139:1:84",
                              "nodeType": "YulLiteral",
                              "src": "139:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "142:1:84",
                              "nodeType": "YulLiteral",
                              "src": "142:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "132:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:84"
                          },
                          "nativeSrc": "132:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:84"
                        },
                        "nativeSrc": "132:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "105:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "114:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "101:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:84"
                        },
                        "nativeSrc": "101:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "126:2:84",
                        "nodeType": "YulLiteral",
                        "src": "126:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "97:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:84"
                    },
                    "nativeSrc": "97:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:84"
                  },
                  "nativeSrc": "94:52:84",
                  "nodeType": "YulIf",
                  "src": "94:52:84"
                },
                {
                  "nativeSrc": "155:33:84",
                  "nodeType": "YulAssignment",
                  "src": "155:33:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "178:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "178:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "165:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "165:12:84"
                    },
                    "nativeSrc": "165:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "165:23:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "155:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "155:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nativeSrc": "14:180:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "50:9:84",
                "nodeType": "YulTypedName",
                "src": "50:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "61:7:84",
                "nodeType": "YulTypedName",
                "src": "61:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "73:6:84",
                "nodeType": "YulTypedName",
                "src": "73:6:84",
                "type": ""
              }
            ],
            "src": "14:180:84"
          },
          {
            "body": {
              "nativeSrc": "300:102:84",
              "nodeType": "YulBlock",
              "src": "300:102:84",
              "statements": [
                {
                  "nativeSrc": "310:26:84",
                  "nodeType": "YulAssignment",
                  "src": "310:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "322:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "322:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "333:2:84",
                        "nodeType": "YulLiteral",
                        "src": "333:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "318:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "318:3:84"
                    },
                    "nativeSrc": "318:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "318:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "310:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "310:4:84"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "352:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "352:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "367:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "367:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "383:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "383:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "388:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "388:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "379:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "379:3:84"
                                },
                                "nativeSrc": "379:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "379:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "392:1:84",
                                "nodeType": "YulLiteral",
                                "src": "392:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "375:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "375:3:84"
                            },
                            "nativeSrc": "375:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "375:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "363:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "363:3:84"
                        },
                        "nativeSrc": "363:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "363:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "345:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "345:6:84"
                    },
                    "nativeSrc": "345:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "345:51:84"
                  },
                  "nativeSrc": "345:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "345:51:84"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nativeSrc": "199:203:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "269:9:84",
                "nodeType": "YulTypedName",
                "src": "269:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "280:6:84",
                "nodeType": "YulTypedName",
                "src": "280:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "291:4:84",
                "nodeType": "YulTypedName",
                "src": "291:4:84",
                "type": ""
              }
            ],
            "src": "199:203:84"
          },
          {
            "body": {
              "nativeSrc": "439:95:84",
              "nodeType": "YulBlock",
              "src": "439:95:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "456:1:84",
                        "nodeType": "YulLiteral",
                        "src": "456:1:84",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "463:3:84",
                            "nodeType": "YulLiteral",
                            "src": "463:3:84",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "468:10:84",
                            "nodeType": "YulLiteral",
                            "src": "468:10:84",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "459:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "459:3:84"
                        },
                        "nativeSrc": "459:20:84",
                        "nodeType": "YulFunctionCall",
                        "src": "459:20:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "449:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "449:6:84"
                    },
                    "nativeSrc": "449:31:84",
                    "nodeType": "YulFunctionCall",
                    "src": "449:31:84"
                  },
                  "nativeSrc": "449:31:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "449:31:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "496:1:84",
                        "nodeType": "YulLiteral",
                        "src": "496:1:84",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "499:4:84",
                        "nodeType": "YulLiteral",
                        "src": "499:4:84",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "489:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "489:6:84"
                    },
                    "nativeSrc": "489:15:84",
                    "nodeType": "YulFunctionCall",
                    "src": "489:15:84"
                  },
                  "nativeSrc": "489:15:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "489:15:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "520:1:84",
                        "nodeType": "YulLiteral",
                        "src": "520:1:84",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "523:4:84",
                        "nodeType": "YulLiteral",
                        "src": "523:4:84",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "513:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "513:6:84"
                    },
                    "nativeSrc": "513:15:84",
                    "nodeType": "YulFunctionCall",
                    "src": "513:15:84"
                  },
                  "nativeSrc": "513:15:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "513:15:84"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nativeSrc": "407:127:84",
            "nodeType": "YulFunctionDefinition",
            "src": "407:127:84"
          },
          {
            "body": {
              "nativeSrc": "591:666:84",
              "nodeType": "YulBlock",
              "src": "591:666:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "640:16:84",
                    "nodeType": "YulBlock",
                    "src": "640:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "649:1:84",
                              "nodeType": "YulLiteral",
                              "src": "649:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "652:1:84",
                              "nodeType": "YulLiteral",
                              "src": "652:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "642:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "642:6:84"
                          },
                          "nativeSrc": "642:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "642:12:84"
                        },
                        "nativeSrc": "642:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "642:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nativeSrc": "619:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "619:6:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "627:4:84",
                                "nodeType": "YulLiteral",
                                "src": "627:4:84",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "615:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "615:3:84"
                            },
                            "nativeSrc": "615:17:84",
                            "nodeType": "YulFunctionCall",
                            "src": "615:17:84"
                          },
                          {
                            "name": "end",
                            "nativeSrc": "634:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "634:3:84"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "611:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "611:3:84"
                        },
                        "nativeSrc": "611:27:84",
                        "nodeType": "YulFunctionCall",
                        "src": "611:27:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "604:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "604:6:84"
                    },
                    "nativeSrc": "604:35:84",
                    "nodeType": "YulFunctionCall",
                    "src": "604:35:84"
                  },
                  "nativeSrc": "601:55:84",
                  "nodeType": "YulIf",
                  "src": "601:55:84"
                },
                {
                  "nativeSrc": "665:30:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "665:30:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "688:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "688:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "675:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "675:12:84"
                    },
                    "nativeSrc": "675:20:84",
                    "nodeType": "YulFunctionCall",
                    "src": "675:20:84"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "669:2:84",
                      "nodeType": "YulTypedName",
                      "src": "669:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "704:28:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "704:28:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "714:18:84",
                    "nodeType": "YulLiteral",
                    "src": "714:18:84",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nativeSrc": "708:2:84",
                      "nodeType": "YulTypedName",
                      "src": "708:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "755:22:84",
                    "nodeType": "YulBlock",
                    "src": "755:22:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "757:16:84",
                            "nodeType": "YulIdentifier",
                            "src": "757:16:84"
                          },
                          "nativeSrc": "757:18:84",
                          "nodeType": "YulFunctionCall",
                          "src": "757:18:84"
                        },
                        "nativeSrc": "757:18:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "757:18:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "747:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "747:2:84"
                      },
                      {
                        "name": "_2",
                        "nativeSrc": "751:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "751:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "744:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "744:2:84"
                    },
                    "nativeSrc": "744:10:84",
                    "nodeType": "YulFunctionCall",
                    "src": "744:10:84"
                  },
                  "nativeSrc": "741:36:84",
                  "nodeType": "YulIf",
                  "src": "741:36:84"
                },
                {
                  "nativeSrc": "786:17:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "786:17:84",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "800:2:84",
                        "nodeType": "YulLiteral",
                        "src": "800:2:84",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nativeSrc": "796:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "796:3:84"
                    },
                    "nativeSrc": "796:7:84",
                    "nodeType": "YulFunctionCall",
                    "src": "796:7:84"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nativeSrc": "790:2:84",
                      "nodeType": "YulTypedName",
                      "src": "790:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "812:23:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "812:23:84",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "832:2:84",
                        "nodeType": "YulLiteral",
                        "src": "832:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "826:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "826:5:84"
                    },
                    "nativeSrc": "826:9:84",
                    "nodeType": "YulFunctionCall",
                    "src": "826:9:84"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nativeSrc": "816:6:84",
                      "nodeType": "YulTypedName",
                      "src": "816:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "844:71:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "844:71:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "866:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "866:6:84"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nativeSrc": "890:2:84",
                                        "nodeType": "YulIdentifier",
                                        "src": "890:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "894:4:84",
                                        "nodeType": "YulLiteral",
                                        "src": "894:4:84",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "886:3:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "886:3:84"
                                    },
                                    "nativeSrc": "886:13:84",
                                    "nodeType": "YulFunctionCall",
                                    "src": "886:13:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nativeSrc": "901:2:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "901:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nativeSrc": "882:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "882:3:84"
                                },
                                "nativeSrc": "882:22:84",
                                "nodeType": "YulFunctionCall",
                                "src": "882:22:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "906:2:84",
                                "nodeType": "YulLiteral",
                                "src": "906:2:84",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "878:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "878:3:84"
                            },
                            "nativeSrc": "878:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "878:31:84"
                          },
                          {
                            "name": "_3",
                            "nativeSrc": "911:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "911:2:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "874:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "874:3:84"
                        },
                        "nativeSrc": "874:40:84",
                        "nodeType": "YulFunctionCall",
                        "src": "874:40:84"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "862:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "862:3:84"
                    },
                    "nativeSrc": "862:53:84",
                    "nodeType": "YulFunctionCall",
                    "src": "862:53:84"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nativeSrc": "848:10:84",
                      "nodeType": "YulTypedName",
                      "src": "848:10:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "974:22:84",
                    "nodeType": "YulBlock",
                    "src": "974:22:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "976:16:84",
                            "nodeType": "YulIdentifier",
                            "src": "976:16:84"
                          },
                          "nativeSrc": "976:18:84",
                          "nodeType": "YulFunctionCall",
                          "src": "976:18:84"
                        },
                        "nativeSrc": "976:18:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "976:18:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "933:10:84",
                            "nodeType": "YulIdentifier",
                            "src": "933:10:84"
                          },
                          {
                            "name": "_2",
                            "nativeSrc": "945:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "945:2:84"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nativeSrc": "930:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "930:2:84"
                        },
                        "nativeSrc": "930:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "930:18:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "953:10:84",
                            "nodeType": "YulIdentifier",
                            "src": "953:10:84"
                          },
                          {
                            "name": "memPtr",
                            "nativeSrc": "965:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "965:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "950:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "950:2:84"
                        },
                        "nativeSrc": "950:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "950:22:84"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nativeSrc": "927:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "927:2:84"
                    },
                    "nativeSrc": "927:46:84",
                    "nodeType": "YulFunctionCall",
                    "src": "927:46:84"
                  },
                  "nativeSrc": "924:72:84",
                  "nodeType": "YulIf",
                  "src": "924:72:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "1012:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1012:2:84",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nativeSrc": "1016:10:84",
                        "nodeType": "YulIdentifier",
                        "src": "1016:10:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1005:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1005:6:84"
                    },
                    "nativeSrc": "1005:22:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1005:22:84"
                  },
                  "nativeSrc": "1005:22:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1005:22:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "1043:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "1043:6:84"
                      },
                      {
                        "name": "_1",
                        "nativeSrc": "1051:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1051:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1036:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1036:6:84"
                    },
                    "nativeSrc": "1036:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1036:18:84"
                  },
                  "nativeSrc": "1036:18:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1036:18:84"
                },
                {
                  "body": {
                    "nativeSrc": "1102:16:84",
                    "nodeType": "YulBlock",
                    "src": "1102:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1111:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1111:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1114:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1114:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1104:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1104:6:84"
                          },
                          "nativeSrc": "1104:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1104:12:84"
                        },
                        "nativeSrc": "1104:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1104:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nativeSrc": "1077:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "1077:6:84"
                              },
                              {
                                "name": "_1",
                                "nativeSrc": "1085:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1085:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1073:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1073:3:84"
                            },
                            "nativeSrc": "1073:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1073:15:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1090:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1090:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1069:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1069:3:84"
                        },
                        "nativeSrc": "1069:26:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1069:26:84"
                      },
                      {
                        "name": "end",
                        "nativeSrc": "1097:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "1097:3:84"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1066:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "1066:2:84"
                    },
                    "nativeSrc": "1066:35:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1066:35:84"
                  },
                  "nativeSrc": "1063:55:84",
                  "nodeType": "YulIf",
                  "src": "1063:55:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nativeSrc": "1144:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1144:6:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1152:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1152:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1140:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1140:3:84"
                        },
                        "nativeSrc": "1140:17:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1140:17:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nativeSrc": "1163:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1163:6:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1171:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1171:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1159:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1159:3:84"
                        },
                        "nativeSrc": "1159:17:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1159:17:84"
                      },
                      {
                        "name": "_1",
                        "nativeSrc": "1178:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1178:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nativeSrc": "1127:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1127:12:84"
                    },
                    "nativeSrc": "1127:54:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1127:54:84"
                  },
                  "nativeSrc": "1127:54:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1127:54:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nativeSrc": "1205:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "1205:6:84"
                              },
                              {
                                "name": "_1",
                                "nativeSrc": "1213:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1213:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1201:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1201:3:84"
                            },
                            "nativeSrc": "1201:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1201:15:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1218:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1218:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1197:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1197:3:84"
                        },
                        "nativeSrc": "1197:26:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1197:26:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1225:1:84",
                        "nodeType": "YulLiteral",
                        "src": "1225:1:84",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1190:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1190:6:84"
                    },
                    "nativeSrc": "1190:37:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1190:37:84"
                  },
                  "nativeSrc": "1190:37:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1190:37:84"
                },
                {
                  "nativeSrc": "1236:15:84",
                  "nodeType": "YulAssignment",
                  "src": "1236:15:84",
                  "value": {
                    "name": "memPtr",
                    "nativeSrc": "1245:6:84",
                    "nodeType": "YulIdentifier",
                    "src": "1245:6:84"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nativeSrc": "1236:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "1236:5:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes",
            "nativeSrc": "539:718:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nativeSrc": "565:6:84",
                "nodeType": "YulTypedName",
                "src": "565:6:84",
                "type": ""
              },
              {
                "name": "end",
                "nativeSrc": "573:3:84",
                "nodeType": "YulTypedName",
                "src": "573:3:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nativeSrc": "581:5:84",
                "nodeType": "YulTypedName",
                "src": "581:5:84",
                "type": ""
              }
            ],
            "src": "539:718:84"
          },
          {
            "body": {
              "nativeSrc": "1358:292:84",
              "nodeType": "YulBlock",
              "src": "1358:292:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1404:16:84",
                    "nodeType": "YulBlock",
                    "src": "1404:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1413:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1413:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1416:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1416:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1406:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1406:6:84"
                          },
                          "nativeSrc": "1406:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1406:12:84"
                        },
                        "nativeSrc": "1406:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1406:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1379:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "1379:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1388:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1388:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1375:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1375:3:84"
                        },
                        "nativeSrc": "1375:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1375:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1400:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1400:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1371:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "1371:3:84"
                    },
                    "nativeSrc": "1371:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1371:32:84"
                  },
                  "nativeSrc": "1368:52:84",
                  "nodeType": "YulIf",
                  "src": "1368:52:84"
                },
                {
                  "nativeSrc": "1429:37:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1429:37:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1456:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1456:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1443:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1443:12:84"
                    },
                    "nativeSrc": "1443:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1443:23:84"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "1433:6:84",
                      "nodeType": "YulTypedName",
                      "src": "1433:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1509:16:84",
                    "nodeType": "YulBlock",
                    "src": "1509:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1518:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1518:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1521:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1521:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1511:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1511:6:84"
                          },
                          "nativeSrc": "1511:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1511:12:84"
                        },
                        "nativeSrc": "1511:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1511:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "1481:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "1481:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1489:18:84",
                        "nodeType": "YulLiteral",
                        "src": "1489:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1478:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "1478:2:84"
                    },
                    "nativeSrc": "1478:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1478:30:84"
                  },
                  "nativeSrc": "1475:50:84",
                  "nodeType": "YulIf",
                  "src": "1475:50:84"
                },
                {
                  "nativeSrc": "1534:59:84",
                  "nodeType": "YulAssignment",
                  "src": "1534:59:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1565:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1565:9:84"
                          },
                          {
                            "name": "offset",
                            "nativeSrc": "1576:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1576:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1561:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1561:3:84"
                        },
                        "nativeSrc": "1561:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1561:22:84"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "1585:7:84",
                        "nodeType": "YulIdentifier",
                        "src": "1585:7:84"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nativeSrc": "1544:16:84",
                      "nodeType": "YulIdentifier",
                      "src": "1544:16:84"
                    },
                    "nativeSrc": "1544:49:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1544:49:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1534:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1534:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "1602:42:84",
                  "nodeType": "YulAssignment",
                  "src": "1602:42:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1629:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1629:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1640:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1640:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1625:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1625:3:84"
                        },
                        "nativeSrc": "1625:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1625:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1612:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1612:12:84"
                    },
                    "nativeSrc": "1612:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1612:32:84"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1602:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1602:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes32",
            "nativeSrc": "1262:388:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1316:9:84",
                "nodeType": "YulTypedName",
                "src": "1316:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1327:7:84",
                "nodeType": "YulTypedName",
                "src": "1327:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1339:6:84",
                "nodeType": "YulTypedName",
                "src": "1339:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1347:6:84",
                "nodeType": "YulTypedName",
                "src": "1347:6:84",
                "type": ""
              }
            ],
            "src": "1262:388:84"
          },
          {
            "body": {
              "nativeSrc": "1768:449:84",
              "nodeType": "YulBlock",
              "src": "1768:449:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1814:16:84",
                    "nodeType": "YulBlock",
                    "src": "1814:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1823:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1823:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1826:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1826:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1816:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1816:6:84"
                          },
                          "nativeSrc": "1816:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1816:12:84"
                        },
                        "nativeSrc": "1816:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1816:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1789:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "1789:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1798:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1798:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1785:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1785:3:84"
                        },
                        "nativeSrc": "1785:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1785:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1810:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1810:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1781:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "1781:3:84"
                    },
                    "nativeSrc": "1781:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1781:32:84"
                  },
                  "nativeSrc": "1778:52:84",
                  "nodeType": "YulIf",
                  "src": "1778:52:84"
                },
                {
                  "nativeSrc": "1839:33:84",
                  "nodeType": "YulAssignment",
                  "src": "1839:33:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1862:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1862:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1849:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1849:12:84"
                    },
                    "nativeSrc": "1849:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1849:23:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1839:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1839:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "1881:45:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1881:45:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1911:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1911:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1922:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1922:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1907:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1907:3:84"
                        },
                        "nativeSrc": "1907:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1907:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1894:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1894:12:84"
                    },
                    "nativeSrc": "1894:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1894:32:84"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "1885:5:84",
                      "nodeType": "YulTypedName",
                      "src": "1885:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1989:16:84",
                    "nodeType": "YulBlock",
                    "src": "1989:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1998:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1998:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2001:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2001:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1991:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1991:6:84"
                          },
                          "nativeSrc": "1991:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1991:12:84"
                        },
                        "nativeSrc": "1991:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1991:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "1948:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "1948:5:84"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nativeSrc": "1959:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "1959:5:84"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1974:3:84",
                                        "nodeType": "YulLiteral",
                                        "src": "1974:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1979:1:84",
                                        "nodeType": "YulLiteral",
                                        "src": "1979:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "1970:3:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "1970:3:84"
                                    },
                                    "nativeSrc": "1970:11:84",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1970:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1983:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "1983:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "1966:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "1966:3:84"
                                },
                                "nativeSrc": "1966:19:84",
                                "nodeType": "YulFunctionCall",
                                "src": "1966:19:84"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "1955:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1955:3:84"
                            },
                            "nativeSrc": "1955:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1955:31:84"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "1945:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "1945:2:84"
                        },
                        "nativeSrc": "1945:42:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1945:42:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "1938:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1938:6:84"
                    },
                    "nativeSrc": "1938:50:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1938:50:84"
                  },
                  "nativeSrc": "1935:70:84",
                  "nodeType": "YulIf",
                  "src": "1935:70:84"
                },
                {
                  "nativeSrc": "2014:15:84",
                  "nodeType": "YulAssignment",
                  "src": "2014:15:84",
                  "value": {
                    "name": "value",
                    "nativeSrc": "2024:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "2024:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "2014:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2014:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "2038:46:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2038:46:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2069:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2069:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2080:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2080:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2065:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2065:3:84"
                        },
                        "nativeSrc": "2065:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2065:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2052:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "2052:12:84"
                    },
                    "nativeSrc": "2052:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2052:32:84"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "2042:6:84",
                      "nodeType": "YulTypedName",
                      "src": "2042:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2127:16:84",
                    "nodeType": "YulBlock",
                    "src": "2127:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2136:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2136:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2139:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2139:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2129:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2129:6:84"
                          },
                          "nativeSrc": "2129:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "2129:12:84"
                        },
                        "nativeSrc": "2129:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "2129:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "2099:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "2099:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2107:18:84",
                        "nodeType": "YulLiteral",
                        "src": "2107:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "2096:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "2096:2:84"
                    },
                    "nativeSrc": "2096:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2096:30:84"
                  },
                  "nativeSrc": "2093:50:84",
                  "nodeType": "YulIf",
                  "src": "2093:50:84"
                },
                {
                  "nativeSrc": "2152:59:84",
                  "nodeType": "YulAssignment",
                  "src": "2152:59:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2183:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2183:9:84"
                          },
                          {
                            "name": "offset",
                            "nativeSrc": "2194:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2194:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2179:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2179:3:84"
                        },
                        "nativeSrc": "2179:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2179:22:84"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "2203:7:84",
                        "nodeType": "YulIdentifier",
                        "src": "2203:7:84"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nativeSrc": "2162:16:84",
                      "nodeType": "YulIdentifier",
                      "src": "2162:16:84"
                    },
                    "nativeSrc": "2162:49:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2162:49:84"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nativeSrc": "2152:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2152:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr",
            "nativeSrc": "1655:562:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1718:9:84",
                "nodeType": "YulTypedName",
                "src": "1718:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1729:7:84",
                "nodeType": "YulTypedName",
                "src": "1729:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1741:6:84",
                "nodeType": "YulTypedName",
                "src": "1741:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1749:6:84",
                "nodeType": "YulTypedName",
                "src": "1749:6:84",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "1757:6:84",
                "nodeType": "YulTypedName",
                "src": "1757:6:84",
                "type": ""
              }
            ],
            "src": "1655:562:84"
          },
          {
            "body": {
              "nativeSrc": "2351:102:84",
              "nodeType": "YulBlock",
              "src": "2351:102:84",
              "statements": [
                {
                  "nativeSrc": "2361:26:84",
                  "nodeType": "YulAssignment",
                  "src": "2361:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2373:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2373:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2384:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2384:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2369:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2369:3:84"
                    },
                    "nativeSrc": "2369:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2369:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2361:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "2361:4:84"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2403:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2403:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "2418:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2418:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2434:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "2434:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2439:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "2439:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "2430:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "2430:3:84"
                                },
                                "nativeSrc": "2430:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "2430:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "2443:1:84",
                                "nodeType": "YulLiteral",
                                "src": "2443:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "2426:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "2426:3:84"
                            },
                            "nativeSrc": "2426:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "2426:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "2414:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2414:3:84"
                        },
                        "nativeSrc": "2414:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2414:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2396:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2396:6:84"
                    },
                    "nativeSrc": "2396:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2396:51:84"
                  },
                  "nativeSrc": "2396:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2396:51:84"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_WitnetProxy_$3700__to_t_address_payable__fromStack_reversed",
            "nativeSrc": "2222:231:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2320:9:84",
                "nodeType": "YulTypedName",
                "src": "2320:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2331:6:84",
                "nodeType": "YulTypedName",
                "src": "2331:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2342:4:84",
                "nodeType": "YulTypedName",
                "src": "2342:4:84",
                "type": ""
              }
            ],
            "src": "2222:231:84"
          },
          {
            "body": {
              "nativeSrc": "2632:223:84",
              "nodeType": "YulBlock",
              "src": "2632:223:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2649:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2649:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2660:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2660:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2642:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2642:6:84"
                    },
                    "nativeSrc": "2642:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2642:21:84"
                  },
                  "nativeSrc": "2642:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2642:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2683:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2683:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2694:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2694:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2679:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2679:3:84"
                        },
                        "nativeSrc": "2679:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2679:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2699:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2699:2:84",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2672:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2672:6:84"
                    },
                    "nativeSrc": "2672:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2672:30:84"
                  },
                  "nativeSrc": "2672:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2672:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2722:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2722:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2733:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2733:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2718:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2718:3:84"
                        },
                        "nativeSrc": "2718:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2718:18:84"
                      },
                      {
                        "hexValue": "5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c65",
                        "kind": "string",
                        "nativeSrc": "2738:34:84",
                        "nodeType": "YulLiteral",
                        "src": "2738:34:84",
                        "type": "",
                        "value": "WitnetDeployer: deployment faile"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2711:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2711:6:84"
                    },
                    "nativeSrc": "2711:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2711:62:84"
                  },
                  "nativeSrc": "2711:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2711:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2793:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2793:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2804:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2804:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2789:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2789:3:84"
                        },
                        "nativeSrc": "2789:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2789:18:84"
                      },
                      {
                        "hexValue": "64",
                        "kind": "string",
                        "nativeSrc": "2809:3:84",
                        "nodeType": "YulLiteral",
                        "src": "2809:3:84",
                        "type": "",
                        "value": "d"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2782:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2782:6:84"
                    },
                    "nativeSrc": "2782:31:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2782:31:84"
                  },
                  "nativeSrc": "2782:31:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2782:31:84"
                },
                {
                  "nativeSrc": "2822:27:84",
                  "nodeType": "YulAssignment",
                  "src": "2822:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2834:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2834:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2845:3:84",
                        "nodeType": "YulLiteral",
                        "src": "2845:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2830:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2830:3:84"
                    },
                    "nativeSrc": "2830:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2830:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2822:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "2822:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "2458:397:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2609:9:84",
                "nodeType": "YulTypedName",
                "src": "2609:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2623:4:84",
                "nodeType": "YulTypedName",
                "src": "2623:4:84",
                "type": ""
              }
            ],
            "src": "2458:397:84"
          },
          {
            "body": {
              "nativeSrc": "3007:496:84",
              "nodeType": "YulBlock",
              "src": "3007:496:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3024:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3024:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "3039:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3039:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3055:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3055:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3060:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3060:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "3051:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3051:3:84"
                                },
                                "nativeSrc": "3051:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3051:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "3064:1:84",
                                "nodeType": "YulLiteral",
                                "src": "3064:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "3047:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "3047:3:84"
                            },
                            "nativeSrc": "3047:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3047:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "3035:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3035:3:84"
                        },
                        "nativeSrc": "3035:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3035:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3017:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3017:6:84"
                    },
                    "nativeSrc": "3017:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3017:51:84"
                  },
                  "nativeSrc": "3017:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3017:51:84"
                },
                {
                  "nativeSrc": "3077:12:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3077:12:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3087:2:84",
                    "nodeType": "YulLiteral",
                    "src": "3087:2:84",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "3081:2:84",
                      "nodeType": "YulTypedName",
                      "src": "3081:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3109:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3109:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3120:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3120:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3105:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3105:3:84"
                        },
                        "nativeSrc": "3105:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3105:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3125:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3125:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3098:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3098:6:84"
                    },
                    "nativeSrc": "3098:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3098:30:84"
                  },
                  "nativeSrc": "3098:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3098:30:84"
                },
                {
                  "nativeSrc": "3137:27:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3137:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nativeSrc": "3157:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3157:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "3151:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "3151:5:84"
                    },
                    "nativeSrc": "3151:13:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3151:13:84"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "3141:6:84",
                      "nodeType": "YulTypedName",
                      "src": "3141:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3184:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3184:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3195:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3195:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3180:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3180:3:84"
                        },
                        "nativeSrc": "3180:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3180:18:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3200:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3200:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3173:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3173:6:84"
                    },
                    "nativeSrc": "3173:34:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3173:34:84"
                  },
                  "nativeSrc": "3173:34:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3173:34:84"
                },
                {
                  "nativeSrc": "3216:10:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3216:10:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3225:1:84",
                    "nodeType": "YulLiteral",
                    "src": "3225:1:84",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nativeSrc": "3220:1:84",
                      "nodeType": "YulTypedName",
                      "src": "3220:1:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3285:90:84",
                    "nodeType": "YulBlock",
                    "src": "3285:90:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nativeSrc": "3314:9:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3314:9:84"
                                    },
                                    {
                                      "name": "i",
                                      "nativeSrc": "3325:1:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3325:1:84"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "3310:3:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3310:3:84"
                                  },
                                  "nativeSrc": "3310:17:84",
                                  "nodeType": "YulFunctionCall",
                                  "src": "3310:17:84"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "3329:2:84",
                                  "nodeType": "YulLiteral",
                                  "src": "3329:2:84",
                                  "type": "",
                                  "value": "96"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "3306:3:84",
                                "nodeType": "YulIdentifier",
                                "src": "3306:3:84"
                              },
                              "nativeSrc": "3306:26:84",
                              "nodeType": "YulFunctionCall",
                              "src": "3306:26:84"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nativeSrc": "3348:6:84",
                                          "nodeType": "YulIdentifier",
                                          "src": "3348:6:84"
                                        },
                                        {
                                          "name": "i",
                                          "nativeSrc": "3356:1:84",
                                          "nodeType": "YulIdentifier",
                                          "src": "3356:1:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nativeSrc": "3344:3:84",
                                        "nodeType": "YulIdentifier",
                                        "src": "3344:3:84"
                                      },
                                      "nativeSrc": "3344:14:84",
                                      "nodeType": "YulFunctionCall",
                                      "src": "3344:14:84"
                                    },
                                    {
                                      "name": "_1",
                                      "nativeSrc": "3360:2:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3360:2:84"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "3340:3:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3340:3:84"
                                  },
                                  "nativeSrc": "3340:23:84",
                                  "nodeType": "YulFunctionCall",
                                  "src": "3340:23:84"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "3334:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "3334:5:84"
                              },
                              "nativeSrc": "3334:30:84",
                              "nodeType": "YulFunctionCall",
                              "src": "3334:30:84"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "3299:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3299:6:84"
                          },
                          "nativeSrc": "3299:66:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3299:66:84"
                        },
                        "nativeSrc": "3299:66:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3299:66:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nativeSrc": "3246:1:84",
                        "nodeType": "YulIdentifier",
                        "src": "3246:1:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3249:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3249:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nativeSrc": "3243:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "3243:2:84"
                    },
                    "nativeSrc": "3243:13:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3243:13:84"
                  },
                  "nativeSrc": "3235:140:84",
                  "nodeType": "YulForLoop",
                  "post": {
                    "nativeSrc": "3257:19:84",
                    "nodeType": "YulBlock",
                    "src": "3257:19:84",
                    "statements": [
                      {
                        "nativeSrc": "3259:15:84",
                        "nodeType": "YulAssignment",
                        "src": "3259:15:84",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nativeSrc": "3268:1:84",
                              "nodeType": "YulIdentifier",
                              "src": "3268:1:84"
                            },
                            {
                              "name": "_1",
                              "nativeSrc": "3271:2:84",
                              "nodeType": "YulIdentifier",
                              "src": "3271:2:84"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "3264:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "3264:3:84"
                          },
                          "nativeSrc": "3264:10:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3264:10:84"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nativeSrc": "3259:1:84",
                            "nodeType": "YulIdentifier",
                            "src": "3259:1:84"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nativeSrc": "3239:3:84",
                    "nodeType": "YulBlock",
                    "src": "3239:3:84",
                    "statements": []
                  },
                  "src": "3235:140:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nativeSrc": "3399:9:84",
                                "nodeType": "YulIdentifier",
                                "src": "3399:9:84"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "3410:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "3410:6:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "3395:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "3395:3:84"
                            },
                            "nativeSrc": "3395:22:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3395:22:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3419:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3419:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3391:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3391:3:84"
                        },
                        "nativeSrc": "3391:31:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3391:31:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3424:1:84",
                        "nodeType": "YulLiteral",
                        "src": "3424:1:84",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3384:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3384:6:84"
                    },
                    "nativeSrc": "3384:42:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3384:42:84"
                  },
                  "nativeSrc": "3384:42:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3384:42:84"
                },
                {
                  "nativeSrc": "3435:62:84",
                  "nodeType": "YulAssignment",
                  "src": "3435:62:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3451:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3451:9:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nativeSrc": "3470:6:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3470:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3478:2:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3478:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "3466:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3466:3:84"
                                },
                                "nativeSrc": "3466:15:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3466:15:84"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3487:2:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3487:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nativeSrc": "3483:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3483:3:84"
                                },
                                "nativeSrc": "3483:7:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3483:7:84"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "3462:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "3462:3:84"
                            },
                            "nativeSrc": "3462:29:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3462:29:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3447:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3447:3:84"
                        },
                        "nativeSrc": "3447:45:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3447:45:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3494:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3494:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3443:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "3443:3:84"
                    },
                    "nativeSrc": "3443:54:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3443:54:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3435:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "3435:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed",
            "nativeSrc": "2860:643:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2968:9:84",
                "nodeType": "YulTypedName",
                "src": "2968:9:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "2979:6:84",
                "nodeType": "YulTypedName",
                "src": "2979:6:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2987:6:84",
                "nodeType": "YulTypedName",
                "src": "2987:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2998:4:84",
                "nodeType": "YulTypedName",
                "src": "2998:4:84",
                "type": ""
              }
            ],
            "src": "2860:643:84"
          },
          {
            "body": {
              "nativeSrc": "3586:199:84",
              "nodeType": "YulBlock",
              "src": "3586:199:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "3632:16:84",
                    "nodeType": "YulBlock",
                    "src": "3632:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3641:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3641:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3644:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3644:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3634:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3634:6:84"
                          },
                          "nativeSrc": "3634:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3634:12:84"
                        },
                        "nativeSrc": "3634:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3634:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "3607:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "3607:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "3616:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3616:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "3603:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3603:3:84"
                        },
                        "nativeSrc": "3603:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3603:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3628:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3628:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "3599:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "3599:3:84"
                    },
                    "nativeSrc": "3599:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3599:32:84"
                  },
                  "nativeSrc": "3596:52:84",
                  "nodeType": "YulIf",
                  "src": "3596:52:84"
                },
                {
                  "nativeSrc": "3657:29:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3657:29:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3676:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3676:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "3670:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "3670:5:84"
                    },
                    "nativeSrc": "3670:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3670:16:84"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "3661:5:84",
                      "nodeType": "YulTypedName",
                      "src": "3661:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3739:16:84",
                    "nodeType": "YulBlock",
                    "src": "3739:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3748:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3748:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3751:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3751:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3741:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3741:6:84"
                          },
                          "nativeSrc": "3741:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3741:12:84"
                        },
                        "nativeSrc": "3741:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3741:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "3708:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "3708:5:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nativeSrc": "3729:5:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3729:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "3722:6:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3722:6:84"
                                },
                                "nativeSrc": "3722:13:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3722:13:84"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "3715:6:84",
                              "nodeType": "YulIdentifier",
                              "src": "3715:6:84"
                            },
                            "nativeSrc": "3715:21:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3715:21:84"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "3705:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "3705:2:84"
                        },
                        "nativeSrc": "3705:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3705:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "3698:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3698:6:84"
                    },
                    "nativeSrc": "3698:40:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3698:40:84"
                  },
                  "nativeSrc": "3695:60:84",
                  "nodeType": "YulIf",
                  "src": "3695:60:84"
                },
                {
                  "nativeSrc": "3764:15:84",
                  "nodeType": "YulAssignment",
                  "src": "3764:15:84",
                  "value": {
                    "name": "value",
                    "nativeSrc": "3774:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "3774:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "3764:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3764:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nativeSrc": "3508:277:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3552:9:84",
                "nodeType": "YulTypedName",
                "src": "3552:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "3563:7:84",
                "nodeType": "YulTypedName",
                "src": "3563:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "3575:6:84",
                "nodeType": "YulTypedName",
                "src": "3575:6:84",
                "type": ""
              }
            ],
            "src": "3508:277:84"
          },
          {
            "body": {
              "nativeSrc": "3964:223:84",
              "nodeType": "YulBlock",
              "src": "3964:223:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3981:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3981:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3992:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3992:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3974:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3974:6:84"
                    },
                    "nativeSrc": "3974:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3974:21:84"
                  },
                  "nativeSrc": "3974:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3974:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4015:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4015:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4026:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4026:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4011:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4011:3:84"
                        },
                        "nativeSrc": "4011:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4011:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4031:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4031:2:84",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4004:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4004:6:84"
                    },
                    "nativeSrc": "4004:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4004:30:84"
                  },
                  "nativeSrc": "4004:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4004:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4054:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4054:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4065:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4065:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4050:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4050:3:84"
                        },
                        "nativeSrc": "4050:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4050:18:84"
                      },
                      {
                        "hexValue": "5769746e65744465706c6f7965723a20616c72656164792070726f7869666965",
                        "kind": "string",
                        "nativeSrc": "4070:34:84",
                        "nodeType": "YulLiteral",
                        "src": "4070:34:84",
                        "type": "",
                        "value": "WitnetDeployer: already proxifie"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4043:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4043:6:84"
                    },
                    "nativeSrc": "4043:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4043:62:84"
                  },
                  "nativeSrc": "4043:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4043:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4125:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4125:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4136:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4136:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4121:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4121:3:84"
                        },
                        "nativeSrc": "4121:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4121:18:84"
                      },
                      {
                        "hexValue": "64",
                        "kind": "string",
                        "nativeSrc": "4141:3:84",
                        "nodeType": "YulLiteral",
                        "src": "4141:3:84",
                        "type": "",
                        "value": "d"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4114:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4114:6:84"
                    },
                    "nativeSrc": "4114:31:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4114:31:84"
                  },
                  "nativeSrc": "4114:31:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4114:31:84"
                },
                {
                  "nativeSrc": "4154:27:84",
                  "nodeType": "YulAssignment",
                  "src": "4154:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4166:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "4166:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4177:3:84",
                        "nodeType": "YulLiteral",
                        "src": "4177:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4162:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4162:3:84"
                    },
                    "nativeSrc": "4162:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4162:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4154:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "4154:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "3790:397:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3941:9:84",
                "nodeType": "YulTypedName",
                "src": "3941:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3955:4:84",
                "nodeType": "YulTypedName",
                "src": "3955:4:84",
                "type": ""
              }
            ],
            "src": "3790:397:84"
          },
          {
            "body": {
              "nativeSrc": "4393:240:84",
              "nodeType": "YulBlock",
              "src": "4393:240:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4410:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "4410:3:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "4419:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "4419:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4431:3:84",
                                "nodeType": "YulLiteral",
                                "src": "4431:3:84",
                                "type": "",
                                "value": "248"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "4436:3:84",
                                "nodeType": "YulLiteral",
                                "src": "4436:3:84",
                                "type": "",
                                "value": "255"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4427:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "4427:3:84"
                            },
                            "nativeSrc": "4427:13:84",
                            "nodeType": "YulFunctionCall",
                            "src": "4427:13:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4415:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4415:3:84"
                        },
                        "nativeSrc": "4415:26:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4415:26:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4403:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4403:6:84"
                    },
                    "nativeSrc": "4403:39:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4403:39:84"
                  },
                  "nativeSrc": "4403:39:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4403:39:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4462:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "4462:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4467:1:84",
                            "nodeType": "YulLiteral",
                            "src": "4467:1:84",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4458:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4458:3:84"
                        },
                        "nativeSrc": "4458:11:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4458:11:84"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4479:2:84",
                                "nodeType": "YulLiteral",
                                "src": "4479:2:84",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value1",
                                "nativeSrc": "4483:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "4483:6:84"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4475:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "4475:3:84"
                            },
                            "nativeSrc": "4475:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "4475:15:84"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4496:26:84",
                                "nodeType": "YulLiteral",
                                "src": "4496:26:84",
                                "type": "",
                                "value": "0xffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "4492:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "4492:3:84"
                            },
                            "nativeSrc": "4492:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "4492:31:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4471:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4471:3:84"
                        },
                        "nativeSrc": "4471:53:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4471:53:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4451:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4451:6:84"
                    },
                    "nativeSrc": "4451:74:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4451:74:84"
                  },
                  "nativeSrc": "4451:74:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4451:74:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4545:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "4545:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4550:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4550:2:84",
                            "type": "",
                            "value": "21"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4541:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4541:3:84"
                        },
                        "nativeSrc": "4541:12:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4541:12:84"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "4555:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4555:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4534:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4534:6:84"
                    },
                    "nativeSrc": "4534:28:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4534:28:84"
                  },
                  "nativeSrc": "4534:28:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4534:28:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4582:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "4582:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4587:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4587:2:84",
                            "type": "",
                            "value": "53"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4578:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4578:3:84"
                        },
                        "nativeSrc": "4578:12:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4578:12:84"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "4592:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4592:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4571:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4571:6:84"
                    },
                    "nativeSrc": "4571:28:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4571:28:84"
                  },
                  "nativeSrc": "4571:28:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4571:28:84"
                },
                {
                  "nativeSrc": "4608:19:84",
                  "nodeType": "YulAssignment",
                  "src": "4608:19:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4619:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "4619:3:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4624:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4624:2:84",
                        "type": "",
                        "value": "85"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4615:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4615:3:84"
                    },
                    "nativeSrc": "4615:12:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4615:12:84"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "4608:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4608:3:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "4192:441:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "4345:3:84",
                "nodeType": "YulTypedName",
                "src": "4345:3:84",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "4350:6:84",
                "nodeType": "YulTypedName",
                "src": "4350:6:84",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "4358:6:84",
                "nodeType": "YulTypedName",
                "src": "4358:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "4366:6:84",
                "nodeType": "YulTypedName",
                "src": "4366:6:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "4374:6:84",
                "nodeType": "YulTypedName",
                "src": "4374:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "4385:3:84",
                "nodeType": "YulTypedName",
                "src": "4385:3:84",
                "type": ""
              }
            ],
            "src": "4192:441:84"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value1 := value\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_contract$_WitnetProxy_$3700__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"WitnetDeployer: deployment faile\")\n        mstore(add(headStart, 96), \"d\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, 32), 64)\n        let length := mload(value1)\n        mstore(add(headStart, 64), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n        }\n        mstore(add(add(headStart, length), 96), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"WitnetDeployer: already proxifie\")\n        mstore(add(headStart, 96), \"d\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, and(value0, shl(248, 255)))\n        mstore(add(pos, 1), and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n        mstore(add(pos, 21), value2)\n        mstore(add(pos, 53), value3)\n        end := add(pos, 85)\n    }\n}",
      "id": 84,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "355:3032:29:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "355:3032:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2233:175;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:84;;;345:51;;333:2;318:18;2233:175:29;;;;;;;906:440;;;;;;:::i;:::-;;:::i;2416:966::-;;;;;;:::i;:::-;;:::i;1692:533::-;;;;;;:::i;:::-;;:::i;2233:175::-;2316:7;2348:52;2362:30;;;;;;;;:::i;:::-;-1:-1:-1;;2362:30:29;;;;;;;;;;;;;;2394:5;2348:13;:52::i;:::-;2341:59;2233:175;-1:-1:-1;;2233:175:29:o;906:440::-;995:17;1042:31;1056:9;1067:5;1042:13;:31::i;:::-;1030:43;;1088:9;-1:-1:-1;;;;;1088:21:29;;1113:1;1088:26;1084:255;;1223:5;1211:9;1205:16;1198:4;1187:9;1183:20;1180:1;1172:57;1159:70;-1:-1:-1;;;;;;1266:23:29;;1258:69;;;;-1:-1:-1;;;1258:69:29;;2660:2:84;1258:69:29;;;2642:21:84;2699:2;2679:18;;;2672:30;2738:34;2718:18;;;2711:62;-1:-1:-1;;;2789:18:84;;;2782:31;2830:19;;1258:69:29;;;;;;;;2416:966;2544:11;2573:18;2594:30;2613:10;2594:18;:30::i;:::-;2573:51;;2639:10;-1:-1:-1;;;;;2639:22:29;;2665:1;2639:27;2635:740;;2722:50;2729:30;;;;;;;;:::i;:::-;-1:-1:-1;;2729:30:29;;;;;;;;;;;;;;2761:10;2722:6;:50::i;:::-;;2860:10;-1:-1:-1;;;;;2840:42:29;;2901:20;3092:10;3190:9;2990:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2840:393;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3275:10:29;-1:-1:-1;3248:39:29;;2635:740;3320:43;;-1:-1:-1;;;3320:43:29;;3992:2:84;3320:43:29;;;3974:21:84;4031:2;4011:18;;;4004:30;4070:34;4050:18;;;4043:62;-1:-1:-1;;;4121:18:84;;;4114:31;4162:19;;3320:43:29;3790:397:84;2416:966:29;;;;;;:::o;1692:533::-;2027:20;;;;;;;1889:177;;;-1:-1:-1;;;;;;1889:177:29;;;4403:39:84;1971:4:29;4479:2:84;4475:15;-1:-1:-1;;4471:53:84;4458:11;;;4451:74;4541:12;;;4534:28;;;;4578:12;;;;4571:28;;;;1889:177:29;;;;;;;;;;4615:12:84;;;;1889:177:29;;;1861:220;;;;;-1:-1:-1;;;;;1848:289:29;-1:-1:-1;;;1847:359:29;;1692:533::o;-1:-1:-1:-;;;;;;;;:::o;14:180:84:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:84;;14:180;-1:-1:-1;14:180:84:o;407:127::-;468:10;463:3;459:20;456:1;449:31;499:4;496:1;489:15;523:4;520:1;513:15;539:718;581:5;634:3;627:4;619:6;615:17;611:27;601:55;;652:1;649;642:12;601:55;688:6;675:20;714:18;751:2;747;744:10;741:36;;;757:18;;:::i;:::-;832:2;826:9;800:2;886:13;;-1:-1:-1;;882:22:84;;;906:2;878:31;874:40;862:53;;;930:18;;;950:22;;;927:46;924:72;;;976:18;;:::i;:::-;1016:10;1012:2;1005:22;1051:2;1043:6;1036:18;1097:3;1090:4;1085:2;1077:6;1073:15;1069:26;1066:35;1063:55;;;1114:1;1111;1104:12;1063:55;1178:2;1171:4;1163:6;1159:17;1152:4;1144:6;1140:17;1127:54;1225:1;1218:4;1213:2;1205:6;1201:15;1197:26;1190:37;1245:6;1236:15;;;;;;539:718;;;;:::o;1262:388::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1456:9;1443:23;1489:18;1481:6;1478:30;1475:50;;;1521:1;1518;1511:12;1475:50;1544:49;1585:7;1576:6;1565:9;1561:22;1544:49;:::i;:::-;1534:59;1640:2;1625:18;;;;1612:32;;-1:-1:-1;;;;1262:388:84:o;1655:562::-;1741:6;1749;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:23;;;-1:-1:-1;1922:2:84;1907:18;;1894:32;-1:-1:-1;;;;;1955:31:84;;1945:42;;1935:70;;2001:1;1998;1991:12;1935:70;2024:5;-1:-1:-1;2080:2:84;2065:18;;2052:32;2107:18;2096:30;;2093:50;;;2139:1;2136;2129:12;2093:50;2162:49;2203:7;2194:6;2183:9;2179:22;2162:49;:::i;:::-;2152:59;;;1655:562;;;;;:::o;2860:643::-;3064:1;3060;3055:3;3051:11;3047:19;3039:6;3035:32;3024:9;3017:51;2998:4;3087:2;3125;3120;3109:9;3105:18;3098:30;3157:6;3151:13;3200:6;3195:2;3184:9;3180:18;3173:34;3225:1;3235:140;3249:6;3246:1;3243:13;3235:140;;;3344:14;;;3340:23;;3334:30;3310:17;;;3329:2;3306:26;3299:66;3264:10;;3235:140;;;3239:3;3424:1;3419:2;3410:6;3399:9;3395:22;3391:31;3384:42;3494:2;3487;3483:7;3478:2;3470:6;3466:15;3462:29;3451:9;3447:45;3443:54;3435:62;;;;2860:643;;;;;:::o;3508:277::-;3575:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3676:9;3670:16;3729:5;3722:13;3715:21;3708:5;3705:32;3695:60;;3751:1;3748;3741:12",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"../WitnetProxy.sol\";\r\n\r\n/// @notice WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \r\n/// @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.\r\n/// @author Guillermo Díaz <guillermo@otherplane.com>\r\n\r\ncontract WitnetDeployerCfxCore {\r\n\r\n    /// @notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \r\n    /// @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\r\n    /// @dev nor the nonce of the caller (i.e. see EIP-1014). \r\n    /// @param _initCode Creation code, including construction logic and input parameters.\r\n    /// @param _salt Arbitrary value to modify resulting address.\r\n    /// @return _deployed Just deployed contract address.\r\n    function deploy(bytes memory _initCode, bytes32 _salt)\r\n        public\r\n        returns (address _deployed)\r\n    {\r\n        _deployed = determineAddr(_initCode, _salt);\r\n        if (_deployed.code.length == 0) {\r\n            assembly {\r\n                _deployed := create2(0, add(_initCode, 0x20), mload(_initCode), _salt)\r\n            }\r\n            require(_deployed != address(0), \"WitnetDeployer: deployment failed\");\r\n        }\r\n    }\r\n\r\n    /// @notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\r\n    /// @param _initCode Creation code, including construction logic and input parameters.\r\n    /// @param _salt Arbitrary value to modify resulting address.\r\n    /// @return Deterministic contract address.\r\n    function determineAddr(bytes memory _initCode, bytes32 _salt)\r\n        public view\r\n        returns (address)\r\n    {\r\n        return address(\r\n            (uint160(uint(keccak256(\r\n                abi.encodePacked(\r\n                    bytes1(0xff),\r\n                    address(this),\r\n                    _salt,\r\n                    keccak256(_initCode)\r\n                )\r\n            ))) & uint160(0x0fffFFFFFfFfffFfFfFFffFffFffFFfffFfFFFFf)\r\n            ) | uint160(0x8000000000000000000000000000000000000000)\r\n        );\r\n    }\r\n\r\n    function determineProxyAddr(bytes32 _salt) \r\n        public view\r\n        returns (address)\r\n    {\r\n        return determineAddr(type(WitnetProxy).creationCode, _salt);\r\n    }\r\n\r\n    function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData)\r\n        external \r\n        returns (WitnetProxy)\r\n    {\r\n        address _proxyAddr = determineProxyAddr(_proxySalt);\r\n        if (_proxyAddr.code.length == 0) {\r\n            // deploy the WitnetProxy\r\n            deploy(type(WitnetProxy).creationCode, _proxySalt);\r\n            // settle first implementation address,\r\n            WitnetProxy(payable(_proxyAddr)).upgradeTo(\r\n                _firstImplementation, \r\n                // and initialize it, providing\r\n                abi.encode(\r\n                    // the owner (i.e. the caller of this function)\r\n                    msg.sender,\r\n                    // and some (optional) initialization data\r\n                     _initData\r\n                )\r\n            );\r\n            return WitnetProxy(payable(_proxyAddr));\r\n        } else {\r\n            revert(\"WitnetDeployer: already proxified\");\r\n        }\r\n    }\r\n\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\witnet\\witnet-solidity-bridge\\contracts\\core\\customs\\WitnetDeployerCfxCore.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/customs/WitnetDeployerCfxCore.sol",
    "exportedSymbols": {
      "ERC165": [
        602
      ],
      "IERC165": [
        614
      ],
      "Initializable": [
        253
      ],
      "Proxiable": [
        24189
      ],
      "Upgradeable": [
        24304
      ],
      "WitnetDeployerCfxCore": [
        4055
      ],
      "WitnetProxy": [
        3700
      ]
    },
    "id": 4056,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3889,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:31:29"
      },
      {
        "absolutePath": "project:/contracts/core/WitnetProxy.sol",
        "file": "../WitnetProxy.sol",
        "id": 3890,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4056,
        "sourceUnit": 3701,
        "src": "70:28:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "WitnetDeployerCfxCore",
        "contractDependencies": [
          3700
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 3891,
          "nodeType": "StructuredDocumentation",
          "src": "102:251:29",
          "text": "@notice WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \n @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.\n @author Guillermo Díaz <guillermo@otherplane.com>"
        },
        "fullyImplemented": true,
        "id": 4055,
        "linearizedBaseContracts": [
          4055
        ],
        "name": "WitnetDeployerCfxCore",
        "nameLocation": "364:21:29",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 3926,
              "nodeType": "Block",
              "src": "1019:327:29",
              "statements": [
                {
                  "expression": {
                    "id": 3906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3901,
                      "name": "_deployed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3899,
                      "src": "1030:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 3903,
                          "name": "_initCode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3894,
                          "src": "1056:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 3904,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3896,
                          "src": "1067:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3902,
                        "name": "determineAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3976,
                        "src": "1042:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes memory,bytes32) view returns (address)"
                        }
                      },
                      "id": 3905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1042:31:29",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1030:43:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3907,
                  "nodeType": "ExpressionStatement",
                  "src": "1030:43:29"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 3908,
                          "name": "_deployed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3899,
                          "src": "1088:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1098:4:29",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "1088:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 3910,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1103:6:29",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1088:21:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 3911,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1113:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1088:26:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3925,
                  "nodeType": "IfStatement",
                  "src": "1084:255:29",
                  "trueBody": {
                    "id": 3924,
                    "nodeType": "Block",
                    "src": "1116:223:29",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1140:104:29",
                          "nodeType": "YulBlock",
                          "src": "1140:104:29",
                          "statements": [
                            {
                              "nativeSrc": "1159:70:29",
                              "nodeType": "YulAssignment",
                              "src": "1159:70:29",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1180:1:29",
                                    "nodeType": "YulLiteral",
                                    "src": "1180:1:29",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_initCode",
                                        "nativeSrc": "1187:9:29",
                                        "nodeType": "YulIdentifier",
                                        "src": "1187:9:29"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1198:4:29",
                                        "nodeType": "YulLiteral",
                                        "src": "1198:4:29",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "1183:3:29",
                                      "nodeType": "YulIdentifier",
                                      "src": "1183:3:29"
                                    },
                                    "nativeSrc": "1183:20:29",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1183:20:29"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_initCode",
                                        "nativeSrc": "1211:9:29",
                                        "nodeType": "YulIdentifier",
                                        "src": "1211:9:29"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "1205:5:29",
                                      "nodeType": "YulIdentifier",
                                      "src": "1205:5:29"
                                    },
                                    "nativeSrc": "1205:16:29",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1205:16:29"
                                  },
                                  {
                                    "name": "_salt",
                                    "nativeSrc": "1223:5:29",
                                    "nodeType": "YulIdentifier",
                                    "src": "1223:5:29"
                                  }
                                ],
                                "functionName": {
                                  "name": "create2",
                                  "nativeSrc": "1172:7:29",
                                  "nodeType": "YulIdentifier",
                                  "src": "1172:7:29"
                                },
                                "nativeSrc": "1172:57:29",
                                "nodeType": "YulFunctionCall",
                                "src": "1172:57:29"
                              },
                              "variableNames": [
                                {
                                  "name": "_deployed",
                                  "nativeSrc": "1159:9:29",
                                  "nodeType": "YulIdentifier",
                                  "src": "1159:9:29"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3899,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1159:9:29",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3894,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1187:9:29",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3894,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1211:9:29",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3896,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1223:5:29",
                            "valueSize": 1
                          }
                        ],
                        "id": 3913,
                        "nodeType": "InlineAssembly",
                        "src": "1131:113:29"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 3920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3915,
                                "name": "_deployed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3899,
                                "src": "1266:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 3918,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1287:1:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 3917,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1279:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3916,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1279:7:29",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3919,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1279:10:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1266:23:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c6564",
                              "id": 3921,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1291:35:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f",
                                "typeString": "literal_string \"WitnetDeployer: deployment failed\""
                              },
                              "value": "WitnetDeployer: deployment failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f",
                                "typeString": "literal_string \"WitnetDeployer: deployment failed\""
                              }
                            ],
                            "id": 3914,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "1258:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 3922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1258:69:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3923,
                        "nodeType": "ExpressionStatement",
                        "src": "1258:69:29"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 3892,
              "nodeType": "StructuredDocumentation",
              "src": "395:505:29",
              "text": "@notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \n @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\n @dev nor the nonce of the caller (i.e. see EIP-1014). \n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return _deployed Just deployed contract address."
            },
            "functionSelector": "4af63f02",
            "id": 3927,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nameLocation": "915:6:29",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3894,
                  "mutability": "mutable",
                  "name": "_initCode",
                  "nameLocation": "935:9:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 3927,
                  "src": "922:22:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3893,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:5:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3896,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "954:5:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 3927,
                  "src": "946:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3895,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "946:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "921:39:29"
            },
            "returnParameters": {
              "id": 3900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3899,
                  "mutability": "mutable",
                  "name": "_deployed",
                  "nameLocation": "1003:9:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 3927,
                  "src": "995:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3898,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "995:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "994:19:29"
            },
            "scope": 4055,
            "src": "906:440:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3975,
              "nodeType": "Block",
              "src": "1807:418:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 3972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "id": 3966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "hexValue": "30786666",
                                                    "id": 3948,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "1935:4:29",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_255_by_1",
                                                      "typeString": "int_const 255"
                                                    },
                                                    "value": "0xff"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_rational_255_by_1",
                                                      "typeString": "int_const 255"
                                                    }
                                                  ],
                                                  "id": 3947,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "1928:6:29",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_bytes1_$",
                                                    "typeString": "type(bytes1)"
                                                  },
                                                  "typeName": {
                                                    "id": 3946,
                                                    "name": "bytes1",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1928:6:29",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                "id": 3949,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1928:12:29",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "id": 3952,
                                                    "name": "this",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 4294967268,
                                                    "src": "1971:4:29",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_contract$_WitnetDeployerCfxCore_$4055",
                                                      "typeString": "contract WitnetDeployerCfxCore"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_contract$_WitnetDeployerCfxCore_$4055",
                                                      "typeString": "contract WitnetDeployerCfxCore"
                                                    }
                                                  ],
                                                  "id": 3951,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "1963:7:29",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                  },
                                                  "typeName": {
                                                    "id": 3950,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1963:7:29",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                "id": 3953,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1963:13:29",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 3954,
                                                "name": "_salt",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3932,
                                                "src": "1999:5:29",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "id": 3956,
                                                    "name": "_initCode",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3930,
                                                    "src": "2037:9:29",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  ],
                                                  "id": 3955,
                                                  "name": "keccak256",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 4294967288,
                                                  "src": "2027:9:29",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                                  }
                                                },
                                                "id": 3957,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "2027:20:29",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              ],
                                              "expression": {
                                                "id": 3944,
                                                "name": "abi",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4294967295,
                                                "src": "1889:3:29",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_abi",
                                                  "typeString": "abi"
                                                }
                                              },
                                              "id": 3945,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberLocation": "1893:12:29",
                                              "memberName": "encodePacked",
                                              "nodeType": "MemberAccess",
                                              "src": "1889:16:29",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                "typeString": "function () pure returns (bytes memory)"
                                              }
                                            },
                                            "id": 3958,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "1889:177:29",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "id": 3943,
                                          "name": "keccak256",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967288,
                                          "src": "1861:9:29",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 3959,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1861:220:29",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 3942,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "1856:4:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 3941,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1856:4:29",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 3960,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1856:226:29",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3940,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1848:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 3939,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1848:7:29",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3961,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1848:235:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "307830666666464646464666466666664666466646466666466666466666464666666646664646464666",
                                    "id": 3964,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2094:42:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    "value": "0x0fffFFFFFfFfffFfFfFFffFffFffFFfffFfFFFFf"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3963,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2086:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 3962,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2086:7:29",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2086:51:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "src": "1848:289:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "id": 3967,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "1847:305:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "|",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "307838303030303030303030303030303030303030303030303030303030303030303030303030303030",
                              "id": 3970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2163:42:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "value": "0x8000000000000000000000000000000000000000"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2155:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 3968,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "2155:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 3971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2155:51:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "src": "1847:359:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 3938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1825:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 3937,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1825:7:29",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 3973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1825:392:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3936,
                  "id": 3974,
                  "nodeType": "Return",
                  "src": "1818:399:29"
                }
              ]
            },
            "documentation": {
              "id": 3928,
              "nodeType": "StructuredDocumentation",
              "src": "1354:332:29",
              "text": "@notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return Deterministic contract address."
            },
            "functionSelector": "d3933c29",
            "id": 3976,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineAddr",
            "nameLocation": "1701:13:29",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3930,
                  "mutability": "mutable",
                  "name": "_initCode",
                  "nameLocation": "1728:9:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 3976,
                  "src": "1715:22:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3929,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1715:5:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3932,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "1747:5:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 3976,
                  "src": "1739:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3931,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1739:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1714:39:29"
            },
            "returnParameters": {
              "id": 3936,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3935,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3976,
                  "src": "1793:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3934,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1793:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1792:9:29"
            },
            "scope": 4055,
            "src": "1692:533:29",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3991,
              "nodeType": "Block",
              "src": "2330:78:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3985,
                              "name": "WitnetProxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3700,
                              "src": "2367:11:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                "typeString": "type(contract WitnetProxy)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                "typeString": "type(contract WitnetProxy)"
                              }
                            ],
                            "id": 3984,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "2362:4:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2362:17:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$3700",
                            "typeString": "type(contract WitnetProxy)"
                          }
                        },
                        "id": 3987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2380:12:29",
                        "memberName": "creationCode",
                        "nodeType": "MemberAccess",
                        "src": "2362:30:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 3988,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3978,
                        "src": "2394:5:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3983,
                      "name": "determineAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3976,
                      "src": "2348:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes memory,bytes32) view returns (address)"
                      }
                    },
                    "id": 3989,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2348:52:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3982,
                  "id": 3990,
                  "nodeType": "Return",
                  "src": "2341:59:29"
                }
              ]
            },
            "functionSelector": "4998f038",
            "id": 3992,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineProxyAddr",
            "nameLocation": "2242:18:29",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3978,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "2269:5:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 3992,
                  "src": "2261:13:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3977,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2261:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2260:15:29"
            },
            "returnParameters": {
              "id": 3982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3981,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3992,
                  "src": "2316:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2316:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2315:9:29"
            },
            "scope": 4055,
            "src": "2233:175:29",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4053,
              "nodeType": "Block",
              "src": "2562:820:29",
              "statements": [
                {
                  "assignments": [
                    4005
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4005,
                      "mutability": "mutable",
                      "name": "_proxyAddr",
                      "nameLocation": "2581:10:29",
                      "nodeType": "VariableDeclaration",
                      "scope": 4053,
                      "src": "2573:18:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4004,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2573:7:29",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4009,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4007,
                        "name": "_proxySalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3994,
                        "src": "2613:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4006,
                      "name": "determineProxyAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3992,
                      "src": "2594:18:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 4008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2594:30:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2573:51:29"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 4010,
                          "name": "_proxyAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4005,
                          "src": "2639:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2650:4:29",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "2639:15:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 4012,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2655:6:29",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2639:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2665:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2639:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4051,
                    "nodeType": "Block",
                    "src": "3305:70:29",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "5769746e65744465706c6f7965723a20616c72656164792070726f786966696564",
                              "id": 4048,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3327:35:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734",
                                "typeString": "literal_string \"WitnetDeployer: already proxified\""
                              },
                              "value": "WitnetDeployer: already proxified"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734",
                                "typeString": "literal_string \"WitnetDeployer: already proxified\""
                              }
                            ],
                            "id": 4047,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967277,
                              4294967277
                            ],
                            "referencedDeclaration": 4294967277,
                            "src": "3320:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 4049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3320:43:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4050,
                        "nodeType": "ExpressionStatement",
                        "src": "3320:43:29"
                      }
                    ]
                  },
                  "id": 4052,
                  "nodeType": "IfStatement",
                  "src": "2635:740:29",
                  "trueBody": {
                    "id": 4046,
                    "nodeType": "Block",
                    "src": "2668:631:29",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 4017,
                                    "name": "WitnetProxy",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3700,
                                    "src": "2734:11:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                      "typeString": "type(contract WitnetProxy)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                      "typeString": "type(contract WitnetProxy)"
                                    }
                                  ],
                                  "id": 4016,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967269,
                                  "src": "2729:4:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 4018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2729:17:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$3700",
                                  "typeString": "type(contract WitnetProxy)"
                                }
                              },
                              "id": 4019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "2747:12:29",
                              "memberName": "creationCode",
                              "nodeType": "MemberAccess",
                              "src": "2729:30:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 4020,
                              "name": "_proxySalt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3994,
                              "src": "2761:10:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4015,
                            "name": "deploy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3927,
                            "src": "2722:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes memory,bytes32) returns (address)"
                            }
                          },
                          "id": 4021,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2722:50:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4022,
                        "nodeType": "ExpressionStatement",
                        "src": "2722:50:29"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4030,
                              "name": "_firstImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3996,
                              "src": "2901:20:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 4033,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "3092:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4034,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3096:6:29",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3092:10:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4035,
                                  "name": "_initData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3998,
                                  "src": "3190:9:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 4031,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "2990:3:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4032,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "2994:6:29",
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "2990:10:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2990:228:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 4026,
                                      "name": "_proxyAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4005,
                                      "src": "2860:10:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4025,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2852:8:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_payable_$",
                                      "typeString": "type(address payable)"
                                    },
                                    "typeName": {
                                      "id": 4024,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2852:8:29",
                                      "stateMutability": "payable",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 4027,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2852:19:29",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 4023,
                                "name": "WitnetProxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3700,
                                "src": "2840:11:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                  "typeString": "type(contract WitnetProxy)"
                                }
                              },
                              "id": 4028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2840:32:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                                "typeString": "contract WitnetProxy"
                              }
                            },
                            "id": 4029,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2873:9:29",
                            "memberName": "upgradeTo",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3690,
                            "src": "2840:42:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,bytes memory) external returns (bool)"
                            }
                          },
                          "id": 4037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2840:393:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4038,
                        "nodeType": "ExpressionStatement",
                        "src": "2840:393:29"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4042,
                                  "name": "_proxyAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3275:10:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3267:8:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 4040,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3267:8:29",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3267:19:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4039,
                            "name": "WitnetProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3700,
                            "src": "3255:11:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                              "typeString": "type(contract WitnetProxy)"
                            }
                          },
                          "id": 4044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3255:32:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                            "typeString": "contract WitnetProxy"
                          }
                        },
                        "functionReturnParameters": 4003,
                        "id": 4045,
                        "nodeType": "Return",
                        "src": "3248:39:29"
                      }
                    ]
                  }
                }
              ]
            },
            "functionSelector": "5ba489e7",
            "id": 4054,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proxify",
            "nameLocation": "2425:7:29",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3999,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3994,
                  "mutability": "mutable",
                  "name": "_proxySalt",
                  "nameLocation": "2441:10:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 4054,
                  "src": "2433:18:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3993,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2433:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3996,
                  "mutability": "mutable",
                  "name": "_firstImplementation",
                  "nameLocation": "2461:20:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 4054,
                  "src": "2453:28:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3995,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2453:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3998,
                  "mutability": "mutable",
                  "name": "_initData",
                  "nameLocation": "2496:9:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 4054,
                  "src": "2483:22:29",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3997,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2483:5:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2432:74:29"
            },
            "returnParameters": {
              "id": 4003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4002,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4054,
                  "src": "2544:11:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                    "typeString": "contract WitnetProxy"
                  },
                  "typeName": {
                    "id": 4001,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4000,
                      "name": "WitnetProxy",
                      "nameLocations": [
                        "2544:11:29"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3700,
                      "src": "2544:11:29"
                    },
                    "referencedDeclaration": 3700,
                    "src": "2544:11:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                      "typeString": "contract WitnetProxy"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2543:13:29"
            },
            "scope": 4055,
            "src": "2416:966:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 4056,
        "src": "355:3032:29",
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "src": "35:3352:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.221Z",
  "devdoc": {
    "author": "Guillermo Díaz <guillermo@otherplane.com>",
    "kind": "dev",
    "methods": {
      "deploy(bytes,bytes32)": {
        "details": "The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). ",
        "params": {
          "_initCode": "Creation code, including construction logic and input parameters.",
          "_salt": "Arbitrary value to modify resulting address."
        },
        "returns": {
          "_deployed": "Just deployed contract address."
        }
      },
      "determineAddr(bytes,bytes32)": {
        "params": {
          "_initCode": "Creation code, including construction logic and input parameters.",
          "_salt": "Arbitrary value to modify resulting address."
        },
        "returns": {
          "_0": "Deterministic contract address."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "deploy(bytes,bytes32)": {
        "notice": "Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. "
      },
      "determineAddr(bytes,bytes32)": {
        "notice": "Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`."
      }
    },
    "notice": "WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.",
    "version": 1
  }
}