{
  "contractName": "SignatureVerifier",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/delegates/SignatureVerifier.sol\":\"SignatureVerifier\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/Store.sol\":{\"keccak256\":\"0x9e49d21b9e009a5b6e7a800ba71973a7e4ff96d5e806d67abaf9c2e8b6652532\",\"urls\":[\"bzz-raw://680a708e1a537b0ca413ac8342ea5e55c2c02ff5dd6d752d085739122955f1c6\",\"dweb:/ipfs/QmUcYhmJSrsNRsvo3W4ZB6DH6YFJHLvg6uLmropgGLTRhh\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/libs/IexecLibCore_v5.sol\":{\"keccak256\":\"0x2ab8fa750e4d0832afc0b04686e46f020bfe115e5be29b2301f41f97509e2a6f\",\"urls\":[\"bzz-raw://750c1e0aebc8cfd8197561d412d6ae77558362845c3195ac59651139e21bbc7f\",\"dweb:/ipfs/QmPimAbBDdB2Yuw5PuWVQ9qa3BUz4Psrav2Y75Vh3Hmmrr\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/libs/IexecLibOrders_v5.sol\":{\"keccak256\":\"0xf2fece8edb03040a06bc18ff9a7354a57c1762c7fd8e5c353e696dd38b7a2693\",\"urls\":[\"bzz-raw://b758832e3a0c3d168ce75cf9569d78104f90afda4d0d2aca80a6612860c49c66\",\"dweb:/ipfs/QmPdteQJsejwYs8Vq4zAKfLUjSECcrRmS1sT3uotFWXpdZ\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/DelegateBase.sol\":{\"keccak256\":\"0x465d3c959887af4a95487e7b0d8e7e579561ee1c5706957836e0b44698bad697\",\"urls\":[\"bzz-raw://61bc27189149a15383a3e4ff3ff4e10f395065949087eb77834e5f5effaea1d8\",\"dweb:/ipfs/QmesUKUoQ5dSRPKjnb2PYNgYPvBHoKvDvhehr9PPa3uawT\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/delegates/SignatureVerifier.sol\":{\"keccak256\":\"0x07290b9fa344722d1d6c488b60c01e9c5f797d197f90b5e46417ecc51d06e454\",\"urls\":[\"bzz-raw://e8243a0a4f80b271facddb70049160baf68478da417e4d2de46f6449dc6b13a3\",\"dweb:/ipfs/QmSgFHuYiDP7nBa6Vot1xP4Vtqzy36Ntkkv9ugHw2SbnW2\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/IRegistry.sol\":{\"keccak256\":\"0x22cd93dce3ec7f424ca689cdd4d5aa6a7d0d5ff81133c8530c5397f206100b84\",\"urls\":[\"bzz-raw://3a12bb04edc05201d7b0f00d7a401152daaa0ee2fd794a848fd760290edcfffa\",\"dweb:/ipfs/QmXYRdrHLLcutF1JLcKSKiCRMxo5X4713BfXFYM4gzrXWc\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/Registry.sol\":{\"keccak256\":\"0xdf594884fc674966628ebbb2b88bc470c89881fdad988812c815bf371ce8b387\",\"urls\":[\"bzz-raw://2386446324af596f08c0a09a2a9047a1d24187ae19c6d07ad727dfa72ff597c9\",\"dweb:/ipfs/QmYmN8jTjiLmcEKXxFPCouubca8AU92agFt4zMeNpkiLey\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/RegistryEntry.sol\":{\"keccak256\":\"0xc5b8b64b19a7f26bdeda8dce637b65c16388adfdc6a77e02455c74722908ed8b\",\"urls\":[\"bzz-raw://a25ccdaeff6f497a58b6b5fda0f82a53243e51be2f59a8ebd4f3f294a95c9f03\",\"dweb:/ipfs/QmWNqwVbTmdVjYYuEaG32HR8P2fDWbTD6YDGX2B623976a\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/apps/App.sol\":{\"keccak256\":\"0x2fda8eaa946a91bec7b6a6e8b6e39d59dfbf02da48a3390924ccddf6c878765e\",\"urls\":[\"bzz-raw://3f0be3037a792a5feaa5c82185e8c1098f3ceeca14c8f7c733b3a79262da9680\",\"dweb:/ipfs/QmdStYN91aJSXz52YeYRczjaxmEpYoFHZjRd2Rktzu1SEN\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/datasets/Dataset.sol\":{\"keccak256\":\"0x343c0cb970203c54630853190b6535f7170e9e3d32371fb30950c0b73140fb47\",\"urls\":[\"bzz-raw://7ffd18cda40275e7de235d1aa1166410a8e377ef9f1872fa50f58b1053391e03\",\"dweb:/ipfs/QmUkg99KkPyi5DKZNSbyCm9Lw2GMPQW2r7jJkywg4SSqnF\"]},\"/home/amxx/Work/iExec/code/PoCo-dev/contracts/registries/workerpools/Workerpool.sol\":{\"keccak256\":\"0xba54886c81794791a38e974d2b24f0789ad21b2a55a0b65abb63596b4e19d888\",\"urls\":[\"bzz-raw://cc6da6f555b9618d54b5a952ebed60fdd469f26dd938adb3d29fe3c1564465f5\",\"dweb:/ipfs/QmbAKdBrNrjF8YGgWL7LtLhRUH2nwpgD1KBiNE6Xd7Cn4q\"]},\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\",\"urls\":[\"bzz-raw://b3de1882a4a1a1b13c27ee6dc04cc58c34ac392c80cad507de2cdfa8c02712fe\",\"dweb:/ipfs/QmeKcaBF8QdJjXiqFrPJkAtK3et5kUL8XJrnHjwhAThRMT\"]},\"@iexec/interface/contracts/IexecClerk.sol\":{\"keccak256\":\"0x703252a638a5a7e2b600395fd920712a1ac259018bc9578fe581a77fa2f008a9\",\"urls\":[\"bzz-raw://072b9e948e5ac4a7f60466c23b322ea0f1aca711f1a94616e658600c2a4c36a2\",\"dweb:/ipfs/QmRP57bkhWDr5BeawfjiKsbdwFiHnw6nc6zgiEad3hQoSJ\"]},\"@iexec/interface/contracts/IexecHub.sol\":{\"keccak256\":\"0x8e293b7624550823838ed9113400544c5980afac1043ddacad7a862c91b0840d\",\"urls\":[\"bzz-raw://ae34ebc355838595ee69b24a31e60deb186455cc388c88de7ecd0294c7037075\",\"dweb:/ipfs/QmUYVQJBWG7ohAYksJRDJKcJVyPMXNFJSPWMAuQcGfWHo7\"]},\"@iexec/interface/contracts/IexecRegistries.sol\":{\"keccak256\":\"0xb39eef47d62d8751c5adfeaf169ce57b50c480788be8356289bc28b78bc24fde\",\"urls\":[\"bzz-raw://a86593f1ef9953ac0965aab4e764374580a899a7f7871ad66b432523171063a1\",\"dweb:/ipfs/QmcYZhHD45APoS1Ebi416DhXU3fiCzoFW2WSMux4AxhFqk\"]},\"@iexec/interface/contracts/libs/IexecODBLibCore.sol\":{\"keccak256\":\"0x3fc7ff4152e9a8f9747d42e262c15c3d460d409732711d9e1da8a88163880183\",\"urls\":[\"bzz-raw://8bacc98b866852e9f1e3563948381cba142ab61d6b1a7c62fbc53b7d57aa0589\",\"dweb:/ipfs/QmUNjhjBxdtHQFWQ61CgnPoaAzL767tQSKF6x34VFWeRyF\"]},\"@iexec/interface/contracts/libs/IexecODBLibOrders.sol\":{\"keccak256\":\"0xe2848a685785b09dc9ee5a6e6329a417eaf18e520388e8575d45a5376b1d62ca\",\"urls\":[\"bzz-raw://d1385ab26f382baa7aadb80faed54290296be09eeccbee1193a1b8a53b0b15d5\",\"dweb:/ipfs/QmUQTFcGX5VZiYwHKu9Yjc4PHNrMgdAyKwKi6tFEMsbaJk\"]},\"@iexec/solidity/contracts/ENStools/ENSReverseRegistration.sol\":{\"keccak256\":\"0xf3f46b28b19d9132ae78c2a43263c06a73cb042ce25175b732e0c1a41c5bbe5a\",\"urls\":[\"bzz-raw://7ca85a78f3f3eafbef6d72c5cd0c35e5b827c797af786cd170659499a0a2c3be\",\"dweb:/ipfs/QmbHZ8zFsiE1PRh7FKt1pt5jR8F6B8HiZ32Mgc8Py3qCUu\"]},\"@iexec/solidity/contracts/ERC1271/IERC1271.sol\":{\"keccak256\":\"0x5aacf5aa4d2f95e60146bc396f5ca94df0f224c1361bef93488e587bcefad1b3\",\"urls\":[\"bzz-raw://bcd2ab979ce9ebba488df57671a2e7cf8b169ba55a58503930bbf876ece99639\",\"dweb:/ipfs/QmYTS8gpAAWBPQ2Eazw9Ro74PmQGFwjaa3T6uAn5XCktQG\"]},\"@iexec/solidity/contracts/ERC1538/ERC1538Module.sol\":{\"keccak256\":\"0xb1e1ff5fcce00614303b0bb01c595a7d2f3496ae88bc2068e56ba9cd72ec8921\",\"urls\":[\"bzz-raw://a6b87d03a17727ce6fe6c5b0078a198898153ae8230345468479a9aa4560835d\",\"dweb:/ipfs/QmV4T7Wg8TS3uAVhnqMhqD6yZ7Qv8iouYnYrkTSCJirG2P\"]},\"@iexec/solidity/contracts/ERC1538/ERC1538Store.sol\":{\"keccak256\":\"0x4d1e8821dc216013f20044bbf82df3c2ab2c739d1b2ce4d90c15cb65f85707d8\",\"urls\":[\"bzz-raw://e36d4db70862f87b8657c19330f0d45e8e7018ebcf3df97525638c8caa919d2b\",\"dweb:/ipfs/QmZqsrXPsyRkRkjuupKG2SYsyUTBXqe7nkkCy7RKxDKz1L\"]},\"@iexec/solidity/contracts/ERC1654/IERC1654.sol\":{\"keccak256\":\"0x7898850b7046bdfa2abccfe5c1dfc431cbb95c2814e5074cabeb462a32486fa6\",\"urls\":[\"bzz-raw://24fd636386fcd52ce7d0037806c56dd1227dffb8cb28fd29cd7eb39153176dd4\",\"dweb:/ipfs/QmNvwBKUJa8AaMKYmxrny2wRSENgiztbvRHPrbYR5yjKZK\"]},\"@iexec/solidity/contracts/ERC734/IERC734.sol\":{\"keccak256\":\"0x8c90e6571af80f3ccb1e04469cef3a5ac6d7ee02f61c8643bdceb5b8a141da62\",\"urls\":[\"bzz-raw://2402fc97239c6fd515910d4a6c367cabd24abcdc1c54c3090e64cdbaa9deb948\",\"dweb:/ipfs/Qma7jLg9bqkT8QeftRHgftGMZvSjqmsSoQZmWLhnwc2shy\"]},\"@iexec/solidity/contracts/Libs/SafeMathExtended.sol\":{\"keccak256\":\"0xf2802ae591eb22954d9c8e02658ae7577940890aff8d8927a7255e254fed605b\",\"urls\":[\"bzz-raw://8dcc485d21a3aa3f643768d4ac4fc69697b9b37f8fb779f3998ab4cee143fa66\",\"dweb:/ipfs/QmWdwgKPMoWuidYQp6WFsJBhNbJUwFHNE9YPYQZhBsKj7e\"]},\"@iexec/solidity/contracts/Upgradeability/BaseUpgradeabilityProxy.sol\":{\"keccak256\":\"0x47ec56a1226ecf04d49aa82f768814923c1957b69f7fc9e7e470885c75b5a2c6\",\"urls\":[\"bzz-raw://4eae82be03a247a27a2948ed12d5a826dea977f4b5528830c19d9cf4c23dcd53\",\"dweb:/ipfs/Qmb9HtnohAMvjb7vYnXaT3AnQd9p9sLsThnyLnXVzz1umq\"]},\"@iexec/solidity/contracts/Upgradeability/InitializableUpgradeabilityProxy.sol\":{\"keccak256\":\"0xe1bf07e5d913bd04484305a3fb0cc576f6b5d8e4fc0406bf7c9a8b6b2ed766e5\",\"urls\":[\"bzz-raw://b42f6dff696ceadeb44a02aae3049e603984c18af8d94f33fb6544a8b279179c\",\"dweb:/ipfs/QmRWTaRHCGZhKZFKrVAJwXukXiCZcezrVhJJ28H2qBbai7\"]},\"@iexec/solidity/contracts/Upgradeability/Proxy.sol\":{\"keccak256\":\"0xd89f285d80cfeff0efc87f11dbc024a587da3bba142a06695cbac7e4050e9302\",\"urls\":[\"bzz-raw://9c8323ec7efc9fde6c1529f1070c3f3406adb5f8836b17221530d8f0110fe3f4\",\"dweb:/ipfs/QmURRsX9L2gZ83aMULtY1EuRMJExHhFYErCbkxE5CNkAzE\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x0de74dfa6b37943c1b834cbd8fb7a8d052e5ff80c7adb33692102dd6cd2985e9\",\"urls\":[\"bzz-raw://9d2d827fcf4a838f5821732c0acd6a40d21c2a5a2cfe2563feec91465f47bb60\",\"dweb:/ipfs/Qmex3wMKf5Sghbfvr288RUg1kP2uAyTMf11w83WbMbpQQc\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x9a8c691b81a4a48adbbd5b010faa56a168c189e711495c16347d93b60b805f82\",\"urls\":[\"bzz-raw://d951d626ed7bfe1a2d7a6bd4af315ff8691929bd567594d6ab53599fe9e17e4e\",\"dweb:/ipfs/QmYkGeowpa6Bjr9aaDirWdDo7hSfShzzZhanKC4nTfRhLj\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0x98aa1380fd49a255d6cbea58558ea76bff35c59b218671fde8842907b44e7390\",\"urls\":[\"bzz-raw://613eaff66d4c270ddd87448c06267b6e043ef8c8223cb39d8767bc9daa9cb1ec\",\"dweb:/ipfs/Qmcg56orudv25ghmnZCxN37HwNKCXmTTDxj5cyoYYnvHTg\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x9175561c374ec1fc33045e5dfdde2057e63e00debf432875f9e1e3395d99c149\",\"urls\":[\"bzz-raw://b0167043c1938b56904deaa481a73041aa4a9e054c60db0b0dfbebfe7869c06a\",\"dweb:/ipfs/QmUoYjhymBr6WUpExKgRvKxXD5fcdpQEe1o9ResKZu6CC5\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x04d34b3cd5677bea25f8dfceb6dec0eaa071d4d4b789a43f13fe0c415ba4c296\",\"urls\":[\"bzz-raw://e7e8b526a6839e5ba14f0d23a830387fec47f7043ce01d42c9f285b709a9d080\",\"dweb:/ipfs/QmXmhhFmX5gcAvVzNiDPAGA35iHMPNaYtQkACswRHBVTNw\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x67a43d3926e72576c96ebf0e6360c979a8cc04f25e4b0ca40c221547d8903ba4\",\"urls\":[\"bzz-raw://77c6f48115c491411f0e27f6b70e2e524b1b57c66e74bd7f1974a31a448e2540\",\"dweb:/ipfs/QmPZCizouS9PVJ1dVf8zqTjHyEo5cSa1ZmPCQpk52TgrmV\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x734b5bedb78074a59bca6aff9e5a1801c9c7e9c5314daf32e14857161fb36932\",\"urls\":[\"bzz-raw://4574e71185f6693eb5cdf7a5126fba97caf0ec0366b08290dd361af44b3414d3\",\"dweb:/ipfs/QmTPBh1R3EU973H7h6D1kQ1XBA1oX2QdSHZACyytWUYKsn\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0xf81dbd00ad4a1e4795df72759e33872c2599ea6c060be5898ed5d6fcd8ee9a11\",\"urls\":[\"bzz-raw://44dfcc25314c5ed29bc069c4746f87d98bb30a8dbc1a9bdeb797c2a530b9b9c5\",\"dweb:/ipfs/QmbRc5bKDobjE6zamLUy6Sh5HKd6XtNAsfBJzgZuQB3jpv\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xa17f4147965ceccd9f2017b14fcf8ef142346ec69c7e0424fd5c99f5ffeed8fa\",\"urls\":[\"bzz-raw://25315aea456015e8a2bc2b5badde793d1ae16d67d09df50ecb90a2af13674b92\",\"dweb:/ipfs/QmTujwcp5f1LioDNdRMfsXs2MsCWu2UeijhEg4VnDbzZmk\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x0c25ff00a747f1df6cb5e5c103adb98334df7e9561b0d46079454131c139bff9\",\"urls\":[\"bzz-raw://9417ce94829309329fa0f0dc50089696bc55f9f675c4b2ffcb31f960fe706250\",\"dweb:/ipfs/QmdckiAmnW2uhXK2V2enu7bEbqiMR6hzMD1ytGH43pKLhE\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x66d1ed2a353be8d2492833a185c53a8f1de8d8fa575a201e9825cf334d79659a\",\"urls\":[\"bzz-raw://a2e9b79e9cf5b398cd29b30df860a6521eefadd9882a346c423afbee5aee606e\",\"dweb:/ipfs/QmUq7gfqR5x1DaMpRKkWwmLMGLPzqUQhqhFEJ2vcgvFraH\"]},\"@openzeppelin/contracts/utils/EnumerableMap.sol\":{\"keccak256\":\"0xfd5cf8319cb84ca04ea407d6fba686d53ad7f5d2bf476f41678f5a751d12a7ea\",\"urls\":[\"bzz-raw://45b75b553c4a9053429609b1c3db481f1728ca00448f01acc4065249bbf87adc\",\"dweb:/ipfs/QmRZH6QM32mJn1GZCAPXUQtBz65H4kk6DsGQbGNo4ZNPy9\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0x7f6401708b61f575b497aa7c8118ca9d70348643c83c26e70d9b643edf1a95c1\",\"urls\":[\"bzz-raw://b020d65f592c1715bc3d5799ad835cd975ef7d314f340f27603fb99ad86a0427\",\"dweb:/ipfs/QmQoGZmzE5aDTMGJM4BW77eraerfTSV9Rs8wykpQ42i1in\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xd1d78b1c8534fbcf8fdc8fbfec9133df142ef8cae9ae820929dfe6d80d2c790a\",\"urls\":[\"bzz-raw://193a827fbe83fa83c4cabb172dc438dd45c50253858a1f2bf56e8f9a2d548386\",\"dweb:/ipfs/QmbWBHwHv7CyHSZY6jxnaDiHWGEEyVb8LeGdRpWXUjaiBr\"]},\"solstruct/contracts/libs/LibMap2.bytes4.address.bytes.sol\":{\"keccak256\":\"0x471645d4b20cc36606122fc6bb692cdf8489118547f90bde2740cb73b1e64d54\",\"urls\":[\"bzz-raw://7ca824c03cd077e6d9630eaa4755787c785a61f612cb8e3ba13d0ce92ee55738\",\"dweb:/ipfs/QmdavtXDokZ7vWZt8pMxPi7DaG3Hd1Q5MyeJjXGRFQuL9r\"]},\"solstruct/contracts/libs/LibSet.bytes4.sol\":{\"keccak256\":\"0xdec5833ab65ae8cab500b84424dde49c1f7817c6575e1631a729fc88c6d4bd7f\",\"urls\":[\"bzz-raw://2e5d23b8383819e6dd77ea61ed30740bcba45b0fff609922b11d1cae2b0223f1\",\"dweb:/ipfs/QmQ27sefXEYXBUSEGdPkuzCqemtUJzNXhhsyd7kB94w6CE\"]}},\"version\":1}",
  "bytecode": "0x608060405260006100176001600160e01b0361006516565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350916000805160206103f1833981519152908290a3506100606001600160e01b0361006916565b61011d565b3390565b61007a6001600160e01b0361006516565b6000546001600160a01b039081169116146100b05760405162461bcd60e51b81526004016100a7906100e8565b60405180910390fd5b600080546040516001600160a01b03909116906000805160206103f1833981519152908390a3600080546001600160a01b0319169055565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6102c58061012c6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b1461006e575b600080fd5b61004e610081565b005b610058610109565b6040516100659190610200565b60405180910390f35b61004e61007c3660046101d2565b610118565b6100896101ce565b6000546001600160a01b039081169116146100bf5760405162461bcd60e51b81526004016100b69061025a565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6101206101ce565b6000546001600160a01b0390811691161461014d5760405162461bcd60e51b81526004016100b69061025a565b6001600160a01b0381166101735760405162461bcd60e51b81526004016100b690610214565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6000602082840312156101e3578081fd5b81356001600160a01b03811681146101f9578182fd5b9392505050565b6001600160a01b0391909116815260200190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220bdfe8726f3652f15f0c458d0c5375ef1d4ec19576e79b558a014461d50e0492364736f6c634300060600338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b1461006e575b600080fd5b61004e610081565b005b610058610109565b6040516100659190610200565b60405180910390f35b61004e61007c3660046101d2565b610118565b6100896101ce565b6000546001600160a01b039081169116146100bf5760405162461bcd60e51b81526004016100b69061025a565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6101206101ce565b6000546001600160a01b0390811691161461014d5760405162461bcd60e51b81526004016100b69061025a565b6001600160a01b0381166101735760405162461bcd60e51b81526004016100b690610214565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6000602082840312156101e3578081fd5b81356001600160a01b03811681146101f9578182fd5b9392505050565b6001600160a01b0391909116815260200190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea2646970667358221220bdfe8726f3652f15f0c458d0c5375ef1d4ec19576e79b558a014461d50e0492364736f6c63430006060033",
  "immutableReferences": {},
  "sourceMap": "260:4281:21:-:0;;;832:17:66;852:12;-1:-1:-1;;;;;852:10:66;:12;:::i;:::-;874:6;:18;;-1:-1:-1;;;;;;874:18:66;-1:-1:-1;;;;;874:18:66;;;;;;;907:43;;874:18;;-1:-1:-1;874:18:66;-1:-1:-1;;;;;;;;;;;907:43:66;874:6;;907:43;-1:-1:-1;124:19:57;-1:-1:-1;;;;;124:17:57;:19;:::i;:::-;260:4281:21;;735:104:65;822:10;735:104;:::o;1656:145:66:-;1247:12;-1:-1:-1;;;;;1247:10:66;:12;:::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;;;;;1762:1:::1;1746:6:::0;;1725:40:::1;::::0;-1:-1:-1;;;;;1746:6:66;;::::1;::::0;-1:-1:-1;;;;;;;;;;;1725:40:66;1762:1;;1725:40:::1;1792:1;1775:19:::0;;-1:-1:-1;;;;;;1775:19:66::1;::::0;;1656:145::o;346:407:-1:-;537:2;551:47;;;522:18;;;864:19;266:34;904:14;;;246:55;320:12;;;508:245;;260:4281:21;;;;;;",
  "deployedSourceMap": "260:4281:21:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;260:4281:21;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1656:145:66;;;:::i;:::-;;1033:77;;;:::i;:::-;;;;;;;;;;;;;;;;1950:240;;;;;;;;;:::i;1656:145::-;1247:12;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;;;;;;;;;1762:1:::1;1746:6:::0;;1725:40:::1;::::0;-1:-1:-1;;;;;1746:6:66;;::::1;::::0;1725:40:::1;::::0;1762:1;;1725:40:::1;1792:1;1775:19:::0;;-1:-1:-1;;;;;;1775:19:66::1;::::0;;1656:145::o;1033:77::-;1071:7;1097:6;-1:-1:-1;;;;;1097:6:66;1033:77;:::o;1950:240::-;1247:12;:10;:12::i;:::-;1237:6;;-1:-1:-1;;;;;1237:6:66;;;:22;;;1229:67;;;;-1:-1:-1;;;1229:67:66;;;;;;;;;-1:-1:-1;;;;;2038:22:66;::::1;2030:73;;;;-1:-1:-1::0;;;2030:73:66::1;;;;;;;;;2139:6;::::0;;2118:38:::1;::::0;-1:-1:-1;;;;;2118:38:66;;::::1;::::0;2139:6;::::1;::::0;2118:38:::1;::::0;::::1;2166:6;:17:::0;;-1:-1:-1;;;;;;2166:17:66::1;-1:-1:-1::0;;;;;2166:17:66;;;::::1;::::0;;;::::1;::::0;;1950:240::o;735:104:65:-;822:10;735:104;:::o;142:241:-1:-;;246:2;234:9;225:7;221:23;217:32;214:2;;;-1:-1;;252:12;214:2;72:20;;-1:-1;;;;;2615:54;;2740:35;;2730:2;;-1:-1;;2779:12;2730:2;304:63;208:175;-1:-1;;;208:175;1235:213;-1:-1;;;;;2615:54;;;;461:37;;1353:2;1338:18;;1324:124;1455:407;1646:2;1660:47;;;735:2;1631:18;;;2387:19;771:34;2427:14;;;751:55;-1:-1;;;826:12;;;819:30;868:12;;;1617:245;1869:407;2060:2;2074:47;;;2045:18;;;2387:19;1155:34;2427:14;;;1135:55;1209:12;;;2031:245",
  "source": "pragma solidity ^0.6.0;\npragma experimental ABIEncoderV2;\n\nimport \"@iexec/solidity/contracts/ERC734/IERC734.sol\";\nimport \"@iexec/solidity/contracts/ERC1271/IERC1271.sol\";\nimport \"@iexec/solidity/contracts/ERC1654/IERC1654.sol\";\nimport \"../DelegateBase.sol\";\n\n\ncontract SignatureVerifier is DelegateBase\n{\n\t/**\n\t * Prepare message/structure predicat used for signing\n\t */\n\tfunction _toEthSignedMessage(bytes32 _msgHash)\n\tinternal pure returns (bytes memory)\n\t{\n\t\treturn abi.encodePacked('\\x19Ethereum Signed Message:\\n32', _msgHash);\n\t}\n\n\tfunction _toEthTypedStruct(bytes32 _structHash, bytes32 _domainHash)\n\tinternal pure returns (bytes memory)\n\t{\n\t\treturn abi.encodePacked('\\x19\\x01', _domainHash, _structHash);\n\t}\n\n\t/**\n\t * recover EOA signature (support both 65 bytes traditional and 64 bytes format EIP2098 format)\n\t */\n\tfunction _recover(bytes32 _hash, bytes memory _sign)\n\tinternal pure returns (address)\n\t{\n\t\tbytes32 r;\n\t\tbytes32 s;\n\t\tuint8   v;\n\n\t\tif (_sign.length == 65) // 65bytes: (r,s,v) form\n\t\t{\n\t\t\tassembly\n\t\t\t{\n\t\t\t\tr :=         mload(add(_sign, 0x20))\n\t\t\t\ts :=         mload(add(_sign, 0x40))\n\t\t\t\tv := byte(0, mload(add(_sign, 0x60)))\n\t\t\t}\n\t\t}\n\t\telse if (_sign.length == 64) // 64bytes: (r,vs) form → see EIP2098\n\t\t{\n\t\t\tassembly\n\t\t\t{\n\t\t\t\tr :=                mload(add(_sign, 0x20))\n\t\t\t\ts := and(           mload(add(_sign, 0x40)), 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n\t\t\t\tv := shr(7, byte(0, mload(add(_sign, 0x40))))\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\trevert('invalid-signature-format');\n\t\t}\n\n\t\tif (v < 27) v += 27;\n\t\trequire(v == 27 || v == 28, 'invalid-signature-v');\n\t\treturn ecrecover(_hash, v, r, s);\n\t}\n\n\t/**\n\t * Check if contract exist, otherwize assumed to be EOA\n\t */\n\tfunction _isContract(address account)\n\tinternal view returns (bool)\n\t{\n\t\t// According to EIP-1052, 0x0 is the value returned for not-yet created accounts\n\t\t// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\n\t\t// for accounts without code, i.e. `keccak256('')`\n\t\tbytes32 codehash;\n\t\tbytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n\t\t// solhint-disable-next-line no-inline-assembly\n\t\tassembly { codehash := extcodehash(account) }\n\t\treturn (codehash != accountHash && codehash != 0x0);\n\t}\n\n\t/**\n\t * Address to bytes32 casting to ERC734\n\t */\n\tfunction _addrToKey(address _addr)\n\tinternal pure returns (bytes32)\n\t{\n\t\treturn bytes32(uint256(_addr));\n\t}\n\n\t/**\n\t * Identity verification\n\t */\n\tfunction _checkIdentity(address _identity, address _candidate, uint256 _purpose)\n\tinternal view returns (bool valid)\n\t{\n\t\treturn _identity == _candidate || IERC734(_identity).keyHasPurpose(_addrToKey(_candidate), _purpose); // Simple address || ERC 734 identity contract\n\t}\n\n\tfunction _checkPresignature(address _identity, bytes32 _hash)\n\tinternal view returns (bool)\n\t{\n\t\treturn _identity != address(0) && _identity == m_presigned[_hash];\n\t}\n\n\tfunction _checkSignature(address _identity, bytes32 _hash, bytes memory _signature)\n\tinternal view returns (bool)\n\t{\n\t\tif (_isContract(_identity))\n\t\t{\n\t\t\ttry IERC1654(_identity).isValidSignature(_hash, _signature) returns (bytes4 value)\n\t\t\t{\n\t\t\t\treturn value == IERC1654(0).isValidSignature.selector;\n\t\t\t} catch (bytes memory /*lowLevelData*/) {}\n\n\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn _recover(_hash, _signature) == _identity;\n\t\t}\n\t}\n\n\tfunction _checkSignature(address _identity, bytes memory _predicat, bytes memory _signature)\n\tinternal view returns (bool)\n\t{\n\t\tif (_isContract(_identity))\n\t\t{\n\t\t\ttry IERC1271(_identity).isValidSignature(_predicat, _signature) returns (bytes4 value)\n\t\t\t{\n\t\t\t\treturn value == IERC1271(0).isValidSignature.selector;\n\t\t\t}\n\t\t\tcatch (bytes memory /*lowLevelData*/) {}\n\n\t\t\ttry IERC1654(_identity).isValidSignature(keccak256(_predicat), _signature) returns (bytes4 value)\n\t\t\t{\n\t\t\t\treturn value == IERC1654(0).isValidSignature.selector;\n\t\t\t}\n\t\t\tcatch (bytes memory /*lowLevelData*/) {}\n\n\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn _recover(keccak256(_predicat), _signature) == _identity;\n\t\t}\n\t}\n\n\tfunction _checkPresignatureOrSignature(address _identity, bytes32 _hash, bytes memory _signature)\n\tinternal view returns (bool)\n\t{\n\t\treturn _checkPresignature(_identity, _hash) || _checkSignature(_identity, _hash, _signature);\n\t}\n\n\tfunction _checkPresignatureOrSignature(address _identity, bytes memory _predicat, bytes memory _signature)\n\tinternal view returns (bool)\n\t{\n\t\treturn _checkPresignature(_identity, keccak256(_predicat)) || _checkSignature(_identity, _predicat, _signature);\n\t}\n}\n",
  "sourcePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/delegates/SignatureVerifier.sol",
  "ast": {
    "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/delegates/SignatureVerifier.sol",
    "exportedSymbols": {
      "SignatureVerifier": [
        6806
      ]
    },
    "id": 6807,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6424,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:21"
      },
      {
        "id": 6425,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:21"
      },
      {
        "absolutePath": "@iexec/solidity/contracts/ERC734/IERC734.sol",
        "file": "@iexec/solidity/contracts/ERC734/IERC734.sol",
        "id": 6426,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 10337,
        "src": "59:54:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@iexec/solidity/contracts/ERC1271/IERC1271.sol",
        "file": "@iexec/solidity/contracts/ERC1271/IERC1271.sol",
        "id": 6427,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 10158,
        "src": "114:56:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@iexec/solidity/contracts/ERC1654/IERC1654.sol",
        "file": "@iexec/solidity/contracts/ERC1654/IERC1654.sol",
        "id": 6428,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 10195,
        "src": "171:56:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/DelegateBase.sol",
        "file": "../DelegateBase.sol",
        "id": 6429,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 845,
        "src": "228:29:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6430,
              "name": "DelegateBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 844,
              "src": "290:12:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DelegateBase_$844",
                "typeString": "contract DelegateBase"
              }
            },
            "id": 6431,
            "nodeType": "InheritanceSpecifier",
            "src": "290:12:21"
          }
        ],
        "contractDependencies": [
          268,
          844,
          10170,
          10182,
          10752,
          10861
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 6806,
        "linearizedBaseContracts": [
          6806,
          844,
          10170,
          268,
          10182,
          10861,
          10752
        ],
        "name": "SignatureVerifier",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 6445,
              "nodeType": "Block",
              "src": "458:77:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332",
                        "id": 6441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "486:34:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                          "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\""
                        },
                        "value": "\u0019Ethereum Signed Message:\n32"
                      },
                      {
                        "argumentTypes": null,
                        "id": 6442,
                        "name": "_msgHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6434,
                        "src": "522:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                          "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\""
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6439,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "469:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 6440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "469:16:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 6443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "469:62:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 6438,
                  "id": 6444,
                  "nodeType": "Return",
                  "src": "462:69:21"
                }
              ]
            },
            "documentation": {
              "id": 6432,
              "nodeType": "StructuredDocumentation",
              "src": "306:64:21",
              "text": "Prepare message/structure predicat used for signing"
            },
            "id": 6446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_toEthSignedMessage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6434,
                  "mutability": "mutable",
                  "name": "_msgHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6446,
                  "src": "401:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6433,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "401:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "400:18:21"
            },
            "returnParameters": {
              "id": 6438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6437,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6446,
                  "src": "443:12:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6436,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "443:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "442:14:21"
            },
            "scope": 6806,
            "src": "372:163:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6462,
              "nodeType": "Block",
              "src": "646:69:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "1901",
                        "id": 6457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "674:10:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                          "typeString": "literal_string \"\u0019\u0001\""
                        },
                        "value": "\u0019\u0001"
                      },
                      {
                        "argumentTypes": null,
                        "id": 6458,
                        "name": "_domainHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6450,
                        "src": "686:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6459,
                        "name": "_structHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6448,
                        "src": "699:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                          "typeString": "literal_string \"\u0019\u0001\""
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6455,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "657:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 6456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "657:16:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 6460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "657:54:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 6454,
                  "id": 6461,
                  "nodeType": "Return",
                  "src": "650:61:21"
                }
              ]
            },
            "documentation": null,
            "id": 6463,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_toEthTypedStruct",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6448,
                  "mutability": "mutable",
                  "name": "_structHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6463,
                  "src": "565:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6447,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "565:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6450,
                  "mutability": "mutable",
                  "name": "_domainHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6463,
                  "src": "586:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6449,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "586:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "564:42:21"
            },
            "returnParameters": {
              "id": 6454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6453,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6463,
                  "src": "631:12:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6452,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "631:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "630:14:21"
            },
            "scope": 6806,
            "src": "538:177:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6527,
              "nodeType": "Block",
              "src": "912:733:21",
              "statements": [
                {
                  "assignments": [
                    6474
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6474,
                      "mutability": "mutable",
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6527,
                      "src": "916:9:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6473,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "916:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6475,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "916:9:21"
                },
                {
                  "assignments": [
                    6477
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6477,
                      "mutability": "mutable",
                      "name": "s",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6527,
                      "src": "929:9:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6476,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "929:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6478,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "929:9:21"
                },
                {
                  "assignments": [
                    6480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6480,
                      "mutability": "mutable",
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6527,
                      "src": "942:9:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 6479,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "942:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6481,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "942:9:21"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6482,
                        "name": "_sign",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6468,
                        "src": "960:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 6483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "960:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3635",
                      "id": 6484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "976:2:21",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65_by_1",
                        "typeString": "int_const 65"
                      },
                      "value": "65"
                    },
                    "src": "960:18:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6488,
                          "name": "_sign",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6468,
                          "src": "1170:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 6489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1170:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "3634",
                        "id": 6490,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1186:2:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_64_by_1",
                          "typeString": "int_const 64"
                        },
                        "value": "64"
                      },
                      "src": "1170:18:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 6498,
                      "nodeType": "Block",
                      "src": "1484:44:21",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "696e76616c69642d7369676e61747572652d666f726d6174",
                                "id": 6495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1496:26:21",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_bd8109ce21237eb5a33faea603eb071141798f132df6d3ef4d09e9865996cefc",
                                  "typeString": "literal_string \"invalid-signature-format\""
                                },
                                "value": "invalid-signature-format"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_bd8109ce21237eb5a33faea603eb071141798f132df6d3ef4d09e9865996cefc",
                                  "typeString": "literal_string \"invalid-signature-format\""
                                }
                              ],
                              "id": 6494,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "1489:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 6496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1489:34:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6497,
                          "nodeType": "ExpressionStatement",
                          "src": "1489:34:21"
                        }
                      ]
                    },
                    "id": 6499,
                    "nodeType": "IfStatement",
                    "src": "1166:362:21",
                    "trueBody": {
                      "id": 6493,
                      "nodeType": "Block",
                      "src": "1232:242:21",
                      "statements": [
                        {
                          "AST": {
                            "nodeType": "YulBlock",
                            "src": "1249:221:21",
                            "statements": [
                              {
                                "nodeType": "YulAssignment",
                                "src": "1255:43:21",
                                "value": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_sign",
                                          "nodeType": "YulIdentifier",
                                          "src": "1285:5:21"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1292:4:21",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1281:3:21"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1281:16:21"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "1275:5:21"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1275:23:21"
                                },
                                "variableNames": [
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "1255:1:21"
                                  }
                                ]
                              },
                              {
                                "nodeType": "YulAssignment",
                                "src": "1303:112:21",
                                "value": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "_sign",
                                              "nodeType": "YulIdentifier",
                                              "src": "1333:5:21"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1340:4:21",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1329:3:21"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1329:16:21"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1323:5:21"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1323:23:21"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1348:66:21",
                                      "type": "",
                                      "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "1308:3:21"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1308:107:21"
                                },
                                "variableNames": [
                                  {
                                    "name": "s",
                                    "nodeType": "YulIdentifier",
                                    "src": "1303:1:21"
                                  }
                                ]
                              },
                              {
                                "nodeType": "YulAssignment",
                                "src": "1420:45:21",
                                "value": {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1429:1:21",
                                      "type": "",
                                      "value": "7"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1437:1:21",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "_sign",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1450:5:21"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1457:4:21",
                                                  "type": "",
                                                  "value": "0x40"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1446:3:21"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1446:16:21"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1440:5:21"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1440:23:21"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "byte",
                                        "nodeType": "YulIdentifier",
                                        "src": "1432:4:21"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1432:32:21"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "shr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1425:3:21"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1425:40:21"
                                },
                                "variableNames": [
                                  {
                                    "name": "v",
                                    "nodeType": "YulIdentifier",
                                    "src": "1420:1:21"
                                  }
                                ]
                              }
                            ]
                          },
                          "evmVersion": "istanbul",
                          "externalReferences": [
                            {
                              "declaration": 6468,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1285:5:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6468,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1333:5:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6468,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1450:5:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6474,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1255:1:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6477,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1303:1:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6480,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1420:1:21",
                              "valueSize": 1
                            }
                          ],
                          "id": 6492,
                          "nodeType": "InlineAssembly",
                          "src": "1237:233:21"
                        }
                      ]
                    }
                  },
                  "id": 6500,
                  "nodeType": "IfStatement",
                  "src": "956:572:21",
                  "trueBody": {
                    "id": 6487,
                    "nodeType": "Block",
                    "src": "1007:151:21",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1024:130:21",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1030:36:21",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_sign",
                                        "nodeType": "YulIdentifier",
                                        "src": "1053:5:21"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1060:4:21",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1049:3:21"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1049:16:21"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1043:5:21"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1043:23:21"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "1030:1:21"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1071:36:21",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_sign",
                                        "nodeType": "YulIdentifier",
                                        "src": "1094:5:21"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1101:4:21",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1090:3:21"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1090:16:21"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1084:5:21"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1084:23:21"
                              },
                              "variableNames": [
                                {
                                  "name": "s",
                                  "nodeType": "YulIdentifier",
                                  "src": "1071:1:21"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1112:37:21",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1122:1:21",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_sign",
                                            "nodeType": "YulIdentifier",
                                            "src": "1135:5:21"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1142:4:21",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1131:3:21"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1131:16:21"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1125:5:21"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1125:23:21"
                                  }
                                ],
                                "functionName": {
                                  "name": "byte",
                                  "nodeType": "YulIdentifier",
                                  "src": "1117:4:21"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1117:32:21"
                              },
                              "variableNames": [
                                {
                                  "name": "v",
                                  "nodeType": "YulIdentifier",
                                  "src": "1112:1:21"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 6468,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1053:5:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6468,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1094:5:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6468,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1135:5:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6474,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1030:1:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6477,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1071:1:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6480,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1112:1:21",
                            "valueSize": 1
                          }
                        ],
                        "id": 6486,
                        "nodeType": "InlineAssembly",
                        "src": "1012:142:21"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 6503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6501,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6480,
                      "src": "1536:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3237",
                      "id": 6502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1540:2:21",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_27_by_1",
                        "typeString": "int_const 27"
                      },
                      "value": "27"
                    },
                    "src": "1536:6:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6508,
                  "nodeType": "IfStatement",
                  "src": "1532:19:21",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 6504,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6480,
                        "src": "1544:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3237",
                        "id": 6505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1549:2:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_27_by_1",
                          "typeString": "int_const 27"
                        },
                        "value": "27"
                      },
                      "src": "1544:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 6507,
                    "nodeType": "ExpressionStatement",
                    "src": "1544:7:21"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6510,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6480,
                            "src": "1563:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 6511,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1568:2:21",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          },
                          "src": "1563:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6513,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6480,
                            "src": "1574:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3238",
                            "id": 6514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1579:2:21",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_28_by_1",
                              "typeString": "int_const 28"
                            },
                            "value": "28"
                          },
                          "src": "1574:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1563:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c69642d7369676e61747572652d76",
                        "id": 6517,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1583:21:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_992260a682068e96f22b6bb63ce40bb5385954a5f23c3d5900826215918358ac",
                          "typeString": "literal_string \"invalid-signature-v\""
                        },
                        "value": "invalid-signature-v"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_992260a682068e96f22b6bb63ce40bb5385954a5f23c3d5900826215918358ac",
                          "typeString": "literal_string \"invalid-signature-v\""
                        }
                      ],
                      "id": 6509,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1555:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1555:50:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6519,
                  "nodeType": "ExpressionStatement",
                  "src": "1555:50:21"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6521,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6466,
                        "src": "1626:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6522,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6480,
                        "src": "1633:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6523,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6474,
                        "src": "1636:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6524,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6477,
                        "src": "1639:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6520,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -6,
                      "src": "1616:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 6525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1616:25:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6472,
                  "id": 6526,
                  "nodeType": "Return",
                  "src": "1609:32:21"
                }
              ]
            },
            "documentation": {
              "id": 6464,
              "nodeType": "StructuredDocumentation",
              "src": "718:105:21",
              "text": "recover EOA signature (support both 65 bytes traditional and 64 bytes format EIP2098 format)"
            },
            "id": 6528,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recover",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6466,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6528,
                  "src": "843:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6465,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "843:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6468,
                  "mutability": "mutable",
                  "name": "_sign",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6528,
                  "src": "858:18:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6467,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "858:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "842:35:21"
            },
            "returnParameters": {
              "id": 6472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6471,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6528,
                  "src": "902:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6470,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "902:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "901:9:21"
            },
            "scope": 6806,
            "src": "825:820:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6553,
              "nodeType": "Block",
              "src": "1784:493:21",
              "statements": [
                {
                  "assignments": [
                    6537
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6537,
                      "mutability": "mutable",
                      "name": "codehash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6553,
                      "src": "2012:16:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6536,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2012:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6538,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2012:16:21"
                },
                {
                  "assignments": [
                    6540
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6540,
                      "mutability": "mutable",
                      "name": "accountHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6553,
                      "src": "2032:19:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6539,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2032:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6542,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "307863356432343630313836663732333363393237653764623264636337303363306535303062363533636138323237336237626661643830343564383561343730",
                    "id": 6541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2054:66:21",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_89477152217924674838424037953991966239322087453347756267410168184682657981552_by_1",
                      "typeString": "int_const 8947...(69 digits omitted)...1552"
                    },
                    "value": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2032:88:21"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2183:36:21",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2185:32:21",
                        "value": {
                          "arguments": [
                            {
                              "name": "account",
                              "nodeType": "YulIdentifier",
                              "src": "2209:7:21"
                            }
                          ],
                          "functionName": {
                            "name": "extcodehash",
                            "nodeType": "YulIdentifier",
                            "src": "2197:11:21"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2197:20:21"
                        },
                        "variableNames": [
                          {
                            "name": "codehash",
                            "nodeType": "YulIdentifier",
                            "src": "2185:8:21"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 6531,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2209:7:21",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6537,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2185:8:21",
                      "valueSize": 1
                    }
                  ],
                  "id": 6543,
                  "nodeType": "InlineAssembly",
                  "src": "2174:45:21"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 6546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6544,
                            "name": "codehash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6537,
                            "src": "2230:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6545,
                            "name": "accountHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6540,
                            "src": "2242:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2230:23:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 6549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6547,
                            "name": "codehash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6537,
                            "src": "2257:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 6548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2269:3:21",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          },
                          "src": "2257:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2230:42:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 6551,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2229:44:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6535,
                  "id": 6552,
                  "nodeType": "Return",
                  "src": "2222:51:21"
                }
              ]
            },
            "documentation": {
              "id": 6529,
              "nodeType": "StructuredDocumentation",
              "src": "1648:65:21",
              "text": "Check if contract exist, otherwize assumed to be EOA"
            },
            "id": 6554,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isContract",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6531,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6554,
                  "src": "1736:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1736:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1735:17:21"
            },
            "returnParameters": {
              "id": 6535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6554,
                  "src": "1777:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6533,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1777:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1776:6:21"
            },
            "scope": 6806,
            "src": "1715:562:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6570,
              "nodeType": "Block",
              "src": "2400:38:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6566,
                            "name": "_addr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6557,
                            "src": "2427:5:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2419:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 6564,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2419:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2419:14:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2411:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 6562,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2411:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 6568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2411:23:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 6561,
                  "id": 6569,
                  "nodeType": "Return",
                  "src": "2404:30:21"
                }
              ]
            },
            "documentation": {
              "id": 6555,
              "nodeType": "StructuredDocumentation",
              "src": "2280:49:21",
              "text": "Address to bytes32 casting to ERC734"
            },
            "id": 6571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addrToKey",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6557,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6571,
                  "src": "2351:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2351:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2350:15:21"
            },
            "returnParameters": {
              "id": 6561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6560,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6571,
                  "src": "2390:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6559,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2390:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2389:9:21"
            },
            "scope": 6806,
            "src": "2331:107:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6597,
              "nodeType": "Block",
              "src": "2595:155:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6583,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6574,
                        "src": "2606:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6584,
                        "name": "_candidate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6576,
                        "src": "2619:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2606:23:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6591,
                              "name": "_candidate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6576,
                              "src": "2677:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6590,
                            "name": "_addrToKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6571,
                            "src": "2666:10:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) pure returns (bytes32)"
                            }
                          },
                          "id": 6592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2666:22:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6593,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6578,
                          "src": "2690:8:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6587,
                              "name": "_identity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6574,
                              "src": "2641:9:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6586,
                            "name": "IERC734",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10336,
                            "src": "2633:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC734_$10336_$",
                              "typeString": "type(contract IERC734)"
                            }
                          },
                          "id": 6588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2633:18:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC734_$10336",
                            "typeString": "contract IERC734"
                          }
                        },
                        "id": 6589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keyHasPurpose",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10287,
                        "src": "2633:32:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (bytes32,uint256) view external returns (bool)"
                        }
                      },
                      "id": 6594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2633:66:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2606:93:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6582,
                  "id": 6596,
                  "nodeType": "Return",
                  "src": "2599:100:21"
                }
              ]
            },
            "documentation": {
              "id": 6572,
              "nodeType": "StructuredDocumentation",
              "src": "2441:34:21",
              "text": "Identity verification"
            },
            "id": 6598,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkIdentity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6574,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2501:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2501:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6576,
                  "mutability": "mutable",
                  "name": "_candidate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2520:18:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6575,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2520:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6578,
                  "mutability": "mutable",
                  "name": "_purpose",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2540:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6577,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2540:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2500:57:21"
            },
            "returnParameters": {
              "id": 6582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6581,
                  "mutability": "mutable",
                  "name": "valid",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2582:10:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6580,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2582:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2581:12:21"
            },
            "scope": 6806,
            "src": "2477:273:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6620,
              "nodeType": "Block",
              "src": "2846:73:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6612,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6607,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6600,
                        "src": "2857:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6610,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2878:1:21",
                            "subdenomination": null,
                            "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": 6609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2870:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6608,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2870:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2870:10:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2857:23:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6613,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6600,
                        "src": "2884:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6614,
                          "name": "m_presigned",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 228,
                          "src": "2897:11:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                            "typeString": "mapping(bytes32 => address)"
                          }
                        },
                        "id": 6616,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 6615,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6602,
                          "src": "2909:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2897:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2884:31:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2857:58:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6606,
                  "id": 6619,
                  "nodeType": "Return",
                  "src": "2850:65:21"
                }
              ]
            },
            "documentation": null,
            "id": 6621,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPresignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6600,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6621,
                  "src": "2781:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6599,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2781:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6602,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6621,
                  "src": "2800:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6601,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2800:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2780:34:21"
            },
            "returnParameters": {
              "id": 6606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6605,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6621,
                  "src": "2839:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6604,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2839:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2838:6:21"
            },
            "scope": 6806,
            "src": "2753:166:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6673,
              "nodeType": "Block",
              "src": "3037:323:21",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6633,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6623,
                        "src": "3057:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6632,
                      "name": "_isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6554,
                      "src": "3045:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3045:22:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 6671,
                    "nodeType": "Block",
                    "src": "3300:57:21",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6665,
                                "name": "_hash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6625,
                                "src": "3321:5:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6666,
                                "name": "_signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6627,
                                "src": "3328:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 6664,
                              "name": "_recover",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6528,
                              "src": "3312:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                              }
                            },
                            "id": 6667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3312:27:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6668,
                            "name": "_identity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6623,
                            "src": "3343:9:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3312:40:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6631,
                        "id": 6670,
                        "nodeType": "Return",
                        "src": "3305:47:21"
                      }
                    ]
                  },
                  "id": 6672,
                  "nodeType": "IfStatement",
                  "src": "3041:316:21",
                  "trueBody": {
                    "id": 6663,
                    "nodeType": "Block",
                    "src": "3071:219:21",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6653,
                              "nodeType": "Block",
                              "src": "3162:65:21",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 6651,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6645,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6643,
                                      "src": "3175:5:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 6647,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3193:1:21",
                                              "subdenomination": null,
                                              "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": 6646,
                                            "name": "IERC1654",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10194,
                                            "src": "3184:8:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                              "typeString": "type(contract IERC1654)"
                                            }
                                          },
                                          "id": 6648,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3184:11:21",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC1654_$10194",
                                            "typeString": "contract IERC1654"
                                          }
                                        },
                                        "id": 6649,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "isValidSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 10193,
                                        "src": "3184:28:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                                        }
                                      },
                                      "id": 6650,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3184:37:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "3175:46:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 6631,
                                  "id": 6652,
                                  "nodeType": "Return",
                                  "src": "3168:53:21"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 6654,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6644,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6643,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6654,
                                  "src": "3145:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 6642,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3145:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3144:14:21"
                            },
                            "src": "3136:91:21"
                          },
                          {
                            "block": {
                              "id": 6658,
                              "nodeType": "Block",
                              "src": "3266:2:21",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6659,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6657,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6656,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6659,
                                  "src": "3235:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 6655,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3235:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3234:31:21"
                            },
                            "src": "3228:40:21"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6639,
                              "name": "_hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6625,
                              "src": "3117:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6640,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6627,
                              "src": "3124:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6636,
                                  "name": "_identity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6623,
                                  "src": "3089:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6635,
                                "name": "IERC1654",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10194,
                                "src": "3080:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                  "typeString": "type(contract IERC1654)"
                                }
                              },
                              "id": 6637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3080:19:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1654_$10194",
                                "typeString": "contract IERC1654"
                              }
                            },
                            "id": 6638,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isValidSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10193,
                            "src": "3080:36:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                            }
                          },
                          "id": 6641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3080:55:21",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 6660,
                        "nodeType": "TryStatement",
                        "src": "3076:192:21"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3280:5:21",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6631,
                        "id": 6662,
                        "nodeType": "Return",
                        "src": "3273:12:21"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 6674,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6623,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "2947:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2947:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6625,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "2966:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6624,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2966:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6627,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "2981:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6626,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2981:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2946:59:21"
            },
            "returnParameters": {
              "id": 6631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6630,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "3030:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6629,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3030:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3029:6:21"
            },
            "scope": 6806,
            "src": "2922:438:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6756,
              "nodeType": "Block",
              "src": "3487:560:21",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6686,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6676,
                        "src": "3507:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6685,
                      "name": "_isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6554,
                      "src": "3495:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3495:22:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 6754,
                    "nodeType": "Block",
                    "src": "3972:72:21",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6747,
                                    "name": "_predicat",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6678,
                                    "src": "4003:9:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 6746,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "3993:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 6748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3993:20:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6749,
                                "name": "_signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6680,
                                "src": "4015:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 6745,
                              "name": "_recover",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6528,
                              "src": "3984:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                              }
                            },
                            "id": 6750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3984:42:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6751,
                            "name": "_identity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6676,
                            "src": "4030:9:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3984:55:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6684,
                        "id": 6753,
                        "nodeType": "Return",
                        "src": "3977:62:21"
                      }
                    ]
                  },
                  "id": 6755,
                  "nodeType": "IfStatement",
                  "src": "3491:553:21",
                  "trueBody": {
                    "id": 6744,
                    "nodeType": "Block",
                    "src": "3521:441:21",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6706,
                              "nodeType": "Block",
                              "src": "3616:65:21",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 6704,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6698,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6696,
                                      "src": "3629:5:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 6700,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3647:1:21",
                                              "subdenomination": null,
                                              "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": 6699,
                                            "name": "IERC1271",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10157,
                                            "src": "3638:8:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC1271_$10157_$",
                                              "typeString": "type(contract IERC1271)"
                                            }
                                          },
                                          "id": 6701,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3638:11:21",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC1271_$10157",
                                            "typeString": "contract IERC1271"
                                          }
                                        },
                                        "id": 6702,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "isValidSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 10156,
                                        "src": "3638:28:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (bytes memory,bytes memory) view external returns (bytes4)"
                                        }
                                      },
                                      "id": 6703,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3638:37:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "3629:46:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 6684,
                                  "id": 6705,
                                  "nodeType": "Return",
                                  "src": "3622:53:21"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 6707,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6697,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6696,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6707,
                                  "src": "3599:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 6695,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3599:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3598:14:21"
                            },
                            "src": "3590:91:21"
                          },
                          {
                            "block": {
                              "id": 6711,
                              "nodeType": "Block",
                              "src": "3723:2:21",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6712,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6710,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6709,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6712,
                                  "src": "3692:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 6708,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3692:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3691:31:21"
                            },
                            "src": "3685:40:21"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6692,
                              "name": "_predicat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6678,
                              "src": "3567:9:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6693,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6680,
                              "src": "3578:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6689,
                                  "name": "_identity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6676,
                                  "src": "3539:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6688,
                                "name": "IERC1271",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10157,
                                "src": "3530:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1271_$10157_$",
                                  "typeString": "type(contract IERC1271)"
                                }
                              },
                              "id": 6690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3530:19:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1271_$10157",
                                "typeString": "contract IERC1271"
                              }
                            },
                            "id": 6691,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isValidSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10156,
                            "src": "3530:36:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory,bytes memory) view external returns (bytes4)"
                            }
                          },
                          "id": 6694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3530:59:21",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 6713,
                        "nodeType": "TryStatement",
                        "src": "3526:199:21"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6734,
                              "nodeType": "Block",
                              "src": "3831:65:21",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 6732,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6726,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6724,
                                      "src": "3844:5:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 6728,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3862:1:21",
                                              "subdenomination": null,
                                              "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": 6727,
                                            "name": "IERC1654",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10194,
                                            "src": "3853:8:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                              "typeString": "type(contract IERC1654)"
                                            }
                                          },
                                          "id": 6729,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3853:11:21",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC1654_$10194",
                                            "typeString": "contract IERC1654"
                                          }
                                        },
                                        "id": 6730,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "isValidSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 10193,
                                        "src": "3853:28:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                                        }
                                      },
                                      "id": 6731,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3853:37:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "3844:46:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 6684,
                                  "id": 6733,
                                  "nodeType": "Return",
                                  "src": "3837:53:21"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 6735,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6725,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6724,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6735,
                                  "src": "3814:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 6723,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3814:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3813:14:21"
                            },
                            "src": "3805:91:21"
                          },
                          {
                            "block": {
                              "id": 6739,
                              "nodeType": "Block",
                              "src": "3938:2:21",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6740,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6738,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6737,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6740,
                                  "src": "3907:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 6736,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3907:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3906:31:21"
                            },
                            "src": "3900:40:21"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6719,
                                  "name": "_predicat",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6678,
                                  "src": "3781:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 6718,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "3771:9:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 6720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3771:20:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6721,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6680,
                              "src": "3793:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6715,
                                  "name": "_identity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6676,
                                  "src": "3743:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6714,
                                "name": "IERC1654",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10194,
                                "src": "3734:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                  "typeString": "type(contract IERC1654)"
                                }
                              },
                              "id": 6716,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3734:19:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1654_$10194",
                                "typeString": "contract IERC1654"
                              }
                            },
                            "id": 6717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isValidSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10193,
                            "src": "3734:36:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                            }
                          },
                          "id": 6722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3734:70:21",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 6741,
                        "nodeType": "TryStatement",
                        "src": "3730:210:21"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3952:5:21",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6684,
                        "id": 6743,
                        "nodeType": "Return",
                        "src": "3945:12:21"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 6757,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6681,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6676,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3388:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3388:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6678,
                  "mutability": "mutable",
                  "name": "_predicat",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3407:22:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6677,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3407:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6680,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3431:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6679,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3431:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3387:68:21"
            },
            "returnParameters": {
              "id": 6684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6683,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3480:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6682,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3479:6:21"
            },
            "scope": 6806,
            "src": "3363:684:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6779,
              "nodeType": "Block",
              "src": "4179:100:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6769,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6759,
                          "src": "4209:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6770,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6761,
                          "src": "4220:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6768,
                        "name": "_checkPresignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6621,
                        "src": "4190:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32) view returns (bool)"
                        }
                      },
                      "id": 6771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4190:36:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6773,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6759,
                          "src": "4246:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6774,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6761,
                          "src": "4257:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6775,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6763,
                          "src": "4264:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6772,
                        "name": "_checkSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          6674,
                          6757
                        ],
                        "referencedDeclaration": 6674,
                        "src": "4230:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32,bytes memory) view returns (bool)"
                        }
                      },
                      "id": 6776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4230:45:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4190:85:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6767,
                  "id": 6778,
                  "nodeType": "Return",
                  "src": "4183:92:21"
                }
              ]
            },
            "documentation": null,
            "id": 6780,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPresignatureOrSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6759,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4089:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6758,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4089:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6761,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4108:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6760,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4108:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6763,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4123:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6762,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4123:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4088:59:21"
            },
            "returnParameters": {
              "id": 6767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6766,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4172:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6765,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4172:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4171:6:21"
            },
            "scope": 6806,
            "src": "4050:229:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6804,
              "nodeType": "Block",
              "src": "4420:119:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6792,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6782,
                          "src": "4450:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6794,
                              "name": "_predicat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6784,
                              "src": "4471:9:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 6793,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "4461:9:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 6795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4461:20:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6791,
                        "name": "_checkPresignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6621,
                        "src": "4431:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32) view returns (bool)"
                        }
                      },
                      "id": 6796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4431:51:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6798,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6782,
                          "src": "4502:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6799,
                          "name": "_predicat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6784,
                          "src": "4513:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6800,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6786,
                          "src": "4524:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6797,
                        "name": "_checkSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          6674,
                          6757
                        ],
                        "referencedDeclaration": 6757,
                        "src": "4486:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (address,bytes memory,bytes memory) view returns (bool)"
                        }
                      },
                      "id": 6801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4486:49:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4431:104:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6790,
                  "id": 6803,
                  "nodeType": "Return",
                  "src": "4424:111:21"
                }
              ]
            },
            "documentation": null,
            "id": 6805,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPresignatureOrSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6782,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4321:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4321:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6784,
                  "mutability": "mutable",
                  "name": "_predicat",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4340:22:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6783,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4340:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6786,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4364:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6785,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4364:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4320:68:21"
            },
            "returnParameters": {
              "id": 6790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6789,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4413:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6788,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4413:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4412:6:21"
            },
            "scope": 6806,
            "src": "4282:257:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 6807,
        "src": "260:4281:21"
      }
    ],
    "src": "0:4542:21"
  },
  "legacyAST": {
    "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/delegates/SignatureVerifier.sol",
    "exportedSymbols": {
      "SignatureVerifier": [
        6806
      ]
    },
    "id": 6807,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6424,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:21"
      },
      {
        "id": 6425,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:21"
      },
      {
        "absolutePath": "@iexec/solidity/contracts/ERC734/IERC734.sol",
        "file": "@iexec/solidity/contracts/ERC734/IERC734.sol",
        "id": 6426,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 10337,
        "src": "59:54:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@iexec/solidity/contracts/ERC1271/IERC1271.sol",
        "file": "@iexec/solidity/contracts/ERC1271/IERC1271.sol",
        "id": 6427,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 10158,
        "src": "114:56:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@iexec/solidity/contracts/ERC1654/IERC1654.sol",
        "file": "@iexec/solidity/contracts/ERC1654/IERC1654.sol",
        "id": 6428,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 10195,
        "src": "171:56:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/amxx/Work/iExec/code/PoCo-dev/contracts/modules/DelegateBase.sol",
        "file": "../DelegateBase.sol",
        "id": 6429,
        "nodeType": "ImportDirective",
        "scope": 6807,
        "sourceUnit": 845,
        "src": "228:29:21",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6430,
              "name": "DelegateBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 844,
              "src": "290:12:21",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DelegateBase_$844",
                "typeString": "contract DelegateBase"
              }
            },
            "id": 6431,
            "nodeType": "InheritanceSpecifier",
            "src": "290:12:21"
          }
        ],
        "contractDependencies": [
          268,
          844,
          10170,
          10182,
          10752,
          10861
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 6806,
        "linearizedBaseContracts": [
          6806,
          844,
          10170,
          268,
          10182,
          10861,
          10752
        ],
        "name": "SignatureVerifier",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 6445,
              "nodeType": "Block",
              "src": "458:77:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332",
                        "id": 6441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "486:34:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                          "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\""
                        },
                        "value": "\u0019Ethereum Signed Message:\n32"
                      },
                      {
                        "argumentTypes": null,
                        "id": 6442,
                        "name": "_msgHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6434,
                        "src": "522:8:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                          "typeString": "literal_string \"\u0019Ethereum Signed Message:\n32\""
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6439,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "469:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 6440,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "469:16:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 6443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "469:62:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 6438,
                  "id": 6444,
                  "nodeType": "Return",
                  "src": "462:69:21"
                }
              ]
            },
            "documentation": {
              "id": 6432,
              "nodeType": "StructuredDocumentation",
              "src": "306:64:21",
              "text": "Prepare message/structure predicat used for signing"
            },
            "id": 6446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_toEthSignedMessage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6434,
                  "mutability": "mutable",
                  "name": "_msgHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6446,
                  "src": "401:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6433,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "401:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "400:18:21"
            },
            "returnParameters": {
              "id": 6438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6437,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6446,
                  "src": "443:12:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6436,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "443:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "442:14:21"
            },
            "scope": 6806,
            "src": "372:163:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6462,
              "nodeType": "Block",
              "src": "646:69:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "1901",
                        "id": 6457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "674:10:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                          "typeString": "literal_string \"\u0019\u0001\""
                        },
                        "value": "\u0019\u0001"
                      },
                      {
                        "argumentTypes": null,
                        "id": 6458,
                        "name": "_domainHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6450,
                        "src": "686:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6459,
                        "name": "_structHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6448,
                        "src": "699:11:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                          "typeString": "literal_string \"\u0019\u0001\""
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6455,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "657:3:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 6456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "657:16:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 6460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "657:54:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 6454,
                  "id": 6461,
                  "nodeType": "Return",
                  "src": "650:61:21"
                }
              ]
            },
            "documentation": null,
            "id": 6463,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_toEthTypedStruct",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6451,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6448,
                  "mutability": "mutable",
                  "name": "_structHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6463,
                  "src": "565:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6447,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "565:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6450,
                  "mutability": "mutable",
                  "name": "_domainHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6463,
                  "src": "586:19:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6449,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "586:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "564:42:21"
            },
            "returnParameters": {
              "id": 6454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6453,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6463,
                  "src": "631:12:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6452,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "631:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "630:14:21"
            },
            "scope": 6806,
            "src": "538:177:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6527,
              "nodeType": "Block",
              "src": "912:733:21",
              "statements": [
                {
                  "assignments": [
                    6474
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6474,
                      "mutability": "mutable",
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6527,
                      "src": "916:9:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6473,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "916:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6475,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "916:9:21"
                },
                {
                  "assignments": [
                    6477
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6477,
                      "mutability": "mutable",
                      "name": "s",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6527,
                      "src": "929:9:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6476,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "929:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6478,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "929:9:21"
                },
                {
                  "assignments": [
                    6480
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6480,
                      "mutability": "mutable",
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6527,
                      "src": "942:9:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 6479,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "942:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6481,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "942:9:21"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6482,
                        "name": "_sign",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6468,
                        "src": "960:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 6483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "960:12:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3635",
                      "id": 6484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "976:2:21",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65_by_1",
                        "typeString": "int_const 65"
                      },
                      "value": "65"
                    },
                    "src": "960:18:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 6491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 6488,
                          "name": "_sign",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6468,
                          "src": "1170:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 6489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1170:12:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "3634",
                        "id": 6490,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1186:2:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_64_by_1",
                          "typeString": "int_const 64"
                        },
                        "value": "64"
                      },
                      "src": "1170:18:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 6498,
                      "nodeType": "Block",
                      "src": "1484:44:21",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "696e76616c69642d7369676e61747572652d666f726d6174",
                                "id": 6495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1496:26:21",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_bd8109ce21237eb5a33faea603eb071141798f132df6d3ef4d09e9865996cefc",
                                  "typeString": "literal_string \"invalid-signature-format\""
                                },
                                "value": "invalid-signature-format"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_bd8109ce21237eb5a33faea603eb071141798f132df6d3ef4d09e9865996cefc",
                                  "typeString": "literal_string \"invalid-signature-format\""
                                }
                              ],
                              "id": 6494,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -19,
                                -19
                              ],
                              "referencedDeclaration": -19,
                              "src": "1489:6:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 6496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1489:34:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6497,
                          "nodeType": "ExpressionStatement",
                          "src": "1489:34:21"
                        }
                      ]
                    },
                    "id": 6499,
                    "nodeType": "IfStatement",
                    "src": "1166:362:21",
                    "trueBody": {
                      "id": 6493,
                      "nodeType": "Block",
                      "src": "1232:242:21",
                      "statements": [
                        {
                          "AST": {
                            "nodeType": "YulBlock",
                            "src": "1249:221:21",
                            "statements": [
                              {
                                "nodeType": "YulAssignment",
                                "src": "1255:43:21",
                                "value": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "_sign",
                                          "nodeType": "YulIdentifier",
                                          "src": "1285:5:21"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1292:4:21",
                                          "type": "",
                                          "value": "0x20"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1281:3:21"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1281:16:21"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "mload",
                                    "nodeType": "YulIdentifier",
                                    "src": "1275:5:21"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1275:23:21"
                                },
                                "variableNames": [
                                  {
                                    "name": "r",
                                    "nodeType": "YulIdentifier",
                                    "src": "1255:1:21"
                                  }
                                ]
                              },
                              {
                                "nodeType": "YulAssignment",
                                "src": "1303:112:21",
                                "value": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "_sign",
                                              "nodeType": "YulIdentifier",
                                              "src": "1333:5:21"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1340:4:21",
                                              "type": "",
                                              "value": "0x40"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1329:3:21"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1329:16:21"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1323:5:21"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1323:23:21"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1348:66:21",
                                      "type": "",
                                      "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "1308:3:21"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1308:107:21"
                                },
                                "variableNames": [
                                  {
                                    "name": "s",
                                    "nodeType": "YulIdentifier",
                                    "src": "1303:1:21"
                                  }
                                ]
                              },
                              {
                                "nodeType": "YulAssignment",
                                "src": "1420:45:21",
                                "value": {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1429:1:21",
                                      "type": "",
                                      "value": "7"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1437:1:21",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "_sign",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1450:5:21"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1457:4:21",
                                                  "type": "",
                                                  "value": "0x40"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1446:3:21"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1446:16:21"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1440:5:21"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1440:23:21"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "byte",
                                        "nodeType": "YulIdentifier",
                                        "src": "1432:4:21"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1432:32:21"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "shr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1425:3:21"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1425:40:21"
                                },
                                "variableNames": [
                                  {
                                    "name": "v",
                                    "nodeType": "YulIdentifier",
                                    "src": "1420:1:21"
                                  }
                                ]
                              }
                            ]
                          },
                          "evmVersion": "istanbul",
                          "externalReferences": [
                            {
                              "declaration": 6468,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1285:5:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6468,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1333:5:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6468,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1450:5:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6474,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1255:1:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6477,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1303:1:21",
                              "valueSize": 1
                            },
                            {
                              "declaration": 6480,
                              "isOffset": false,
                              "isSlot": false,
                              "src": "1420:1:21",
                              "valueSize": 1
                            }
                          ],
                          "id": 6492,
                          "nodeType": "InlineAssembly",
                          "src": "1237:233:21"
                        }
                      ]
                    }
                  },
                  "id": 6500,
                  "nodeType": "IfStatement",
                  "src": "956:572:21",
                  "trueBody": {
                    "id": 6487,
                    "nodeType": "Block",
                    "src": "1007:151:21",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1024:130:21",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1030:36:21",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_sign",
                                        "nodeType": "YulIdentifier",
                                        "src": "1053:5:21"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1060:4:21",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1049:3:21"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1049:16:21"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1043:5:21"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1043:23:21"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "1030:1:21"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1071:36:21",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_sign",
                                        "nodeType": "YulIdentifier",
                                        "src": "1094:5:21"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1101:4:21",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1090:3:21"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1090:16:21"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1084:5:21"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1084:23:21"
                              },
                              "variableNames": [
                                {
                                  "name": "s",
                                  "nodeType": "YulIdentifier",
                                  "src": "1071:1:21"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1112:37:21",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1122:1:21",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_sign",
                                            "nodeType": "YulIdentifier",
                                            "src": "1135:5:21"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1142:4:21",
                                            "type": "",
                                            "value": "0x60"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1131:3:21"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1131:16:21"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1125:5:21"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1125:23:21"
                                  }
                                ],
                                "functionName": {
                                  "name": "byte",
                                  "nodeType": "YulIdentifier",
                                  "src": "1117:4:21"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1117:32:21"
                              },
                              "variableNames": [
                                {
                                  "name": "v",
                                  "nodeType": "YulIdentifier",
                                  "src": "1112:1:21"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 6468,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1053:5:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6468,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1094:5:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6468,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1135:5:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6474,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1030:1:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6477,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1071:1:21",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6480,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1112:1:21",
                            "valueSize": 1
                          }
                        ],
                        "id": 6486,
                        "nodeType": "InlineAssembly",
                        "src": "1012:142:21"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 6503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6501,
                      "name": "v",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6480,
                      "src": "1536:1:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3237",
                      "id": 6502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1540:2:21",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_27_by_1",
                        "typeString": "int_const 27"
                      },
                      "value": "27"
                    },
                    "src": "1536:6:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 6508,
                  "nodeType": "IfStatement",
                  "src": "1532:19:21",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 6506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 6504,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6480,
                        "src": "1544:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "3237",
                        "id": 6505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1549:2:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_27_by_1",
                          "typeString": "int_const 27"
                        },
                        "value": "27"
                      },
                      "src": "1544:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 6507,
                    "nodeType": "ExpressionStatement",
                    "src": "1544:7:21"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6510,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6480,
                            "src": "1563:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 6511,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1568:2:21",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          },
                          "src": "1563:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 6515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6513,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6480,
                            "src": "1574:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3238",
                            "id": 6514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1579:2:21",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_28_by_1",
                              "typeString": "int_const 28"
                            },
                            "value": "28"
                          },
                          "src": "1574:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1563:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c69642d7369676e61747572652d76",
                        "id": 6517,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1583:21:21",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_992260a682068e96f22b6bb63ce40bb5385954a5f23c3d5900826215918358ac",
                          "typeString": "literal_string \"invalid-signature-v\""
                        },
                        "value": "invalid-signature-v"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_992260a682068e96f22b6bb63ce40bb5385954a5f23c3d5900826215918358ac",
                          "typeString": "literal_string \"invalid-signature-v\""
                        }
                      ],
                      "id": 6509,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1555:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1555:50:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6519,
                  "nodeType": "ExpressionStatement",
                  "src": "1555:50:21"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6521,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6466,
                        "src": "1626:5:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6522,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6480,
                        "src": "1633:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6523,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6474,
                        "src": "1636:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 6524,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6477,
                        "src": "1639:1:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 6520,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -6,
                      "src": "1616:9:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 6525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1616:25:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 6472,
                  "id": 6526,
                  "nodeType": "Return",
                  "src": "1609:32:21"
                }
              ]
            },
            "documentation": {
              "id": 6464,
              "nodeType": "StructuredDocumentation",
              "src": "718:105:21",
              "text": "recover EOA signature (support both 65 bytes traditional and 64 bytes format EIP2098 format)"
            },
            "id": 6528,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recover",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6466,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6528,
                  "src": "843:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6465,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "843:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6468,
                  "mutability": "mutable",
                  "name": "_sign",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6528,
                  "src": "858:18:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6467,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "858:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "842:35:21"
            },
            "returnParameters": {
              "id": 6472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6471,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6528,
                  "src": "902:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6470,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "902:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "901:9:21"
            },
            "scope": 6806,
            "src": "825:820:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6553,
              "nodeType": "Block",
              "src": "1784:493:21",
              "statements": [
                {
                  "assignments": [
                    6537
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6537,
                      "mutability": "mutable",
                      "name": "codehash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6553,
                      "src": "2012:16:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6536,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2012:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6538,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2012:16:21"
                },
                {
                  "assignments": [
                    6540
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6540,
                      "mutability": "mutable",
                      "name": "accountHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 6553,
                      "src": "2032:19:21",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 6539,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2032:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 6542,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "307863356432343630313836663732333363393237653764623264636337303363306535303062363533636138323237336237626661643830343564383561343730",
                    "id": 6541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2054:66:21",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_89477152217924674838424037953991966239322087453347756267410168184682657981552_by_1",
                      "typeString": "int_const 8947...(69 digits omitted)...1552"
                    },
                    "value": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2032:88:21"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2183:36:21",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2185:32:21",
                        "value": {
                          "arguments": [
                            {
                              "name": "account",
                              "nodeType": "YulIdentifier",
                              "src": "2209:7:21"
                            }
                          ],
                          "functionName": {
                            "name": "extcodehash",
                            "nodeType": "YulIdentifier",
                            "src": "2197:11:21"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2197:20:21"
                        },
                        "variableNames": [
                          {
                            "name": "codehash",
                            "nodeType": "YulIdentifier",
                            "src": "2185:8:21"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 6531,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2209:7:21",
                      "valueSize": 1
                    },
                    {
                      "declaration": 6537,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2185:8:21",
                      "valueSize": 1
                    }
                  ],
                  "id": 6543,
                  "nodeType": "InlineAssembly",
                  "src": "2174:45:21"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 6550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 6546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6544,
                            "name": "codehash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6537,
                            "src": "2230:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6545,
                            "name": "accountHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6540,
                            "src": "2242:11:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2230:23:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 6549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6547,
                            "name": "codehash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6537,
                            "src": "2257:8:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 6548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2269:3:21",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          },
                          "src": "2257:15:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2230:42:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 6551,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "2229:44:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6535,
                  "id": 6552,
                  "nodeType": "Return",
                  "src": "2222:51:21"
                }
              ]
            },
            "documentation": {
              "id": 6529,
              "nodeType": "StructuredDocumentation",
              "src": "1648:65:21",
              "text": "Check if contract exist, otherwize assumed to be EOA"
            },
            "id": 6554,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isContract",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6531,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6554,
                  "src": "1736:15:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1736:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1735:17:21"
            },
            "returnParameters": {
              "id": 6535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6554,
                  "src": "1777:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6533,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1777:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1776:6:21"
            },
            "scope": 6806,
            "src": "1715:562:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6570,
              "nodeType": "Block",
              "src": "2400:38:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 6566,
                            "name": "_addr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6557,
                            "src": "2427:5:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 6565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2419:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 6564,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2419:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2419:14:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2411:7:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 6562,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2411:7:21",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 6568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2411:23:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 6561,
                  "id": 6569,
                  "nodeType": "Return",
                  "src": "2404:30:21"
                }
              ]
            },
            "documentation": {
              "id": 6555,
              "nodeType": "StructuredDocumentation",
              "src": "2280:49:21",
              "text": "Address to bytes32 casting to ERC734"
            },
            "id": 6571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addrToKey",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6557,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6571,
                  "src": "2351:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2351:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2350:15:21"
            },
            "returnParameters": {
              "id": 6561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6560,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6571,
                  "src": "2390:7:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6559,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2390:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2389:9:21"
            },
            "scope": 6806,
            "src": "2331:107:21",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6597,
              "nodeType": "Block",
              "src": "2595:155:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6585,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6583,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6574,
                        "src": "2606:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 6584,
                        "name": "_candidate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6576,
                        "src": "2619:10:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2606:23:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6591,
                              "name": "_candidate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6576,
                              "src": "2677:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6590,
                            "name": "_addrToKey",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6571,
                            "src": "2666:10:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) pure returns (bytes32)"
                            }
                          },
                          "id": 6592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2666:22:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6593,
                          "name": "_purpose",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6578,
                          "src": "2690:8:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6587,
                              "name": "_identity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6574,
                              "src": "2641:9:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 6586,
                            "name": "IERC734",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10336,
                            "src": "2633:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC734_$10336_$",
                              "typeString": "type(contract IERC734)"
                            }
                          },
                          "id": 6588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2633:18:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC734_$10336",
                            "typeString": "contract IERC734"
                          }
                        },
                        "id": 6589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keyHasPurpose",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 10287,
                        "src": "2633:32:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (bytes32,uint256) view external returns (bool)"
                        }
                      },
                      "id": 6594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2633:66:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2606:93:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6582,
                  "id": 6596,
                  "nodeType": "Return",
                  "src": "2599:100:21"
                }
              ]
            },
            "documentation": {
              "id": 6572,
              "nodeType": "StructuredDocumentation",
              "src": "2441:34:21",
              "text": "Identity verification"
            },
            "id": 6598,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkIdentity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6574,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2501:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2501:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6576,
                  "mutability": "mutable",
                  "name": "_candidate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2520:18:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6575,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2520:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6578,
                  "mutability": "mutable",
                  "name": "_purpose",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2540:16:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6577,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2540:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2500:57:21"
            },
            "returnParameters": {
              "id": 6582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6581,
                  "mutability": "mutable",
                  "name": "valid",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6598,
                  "src": "2582:10:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6580,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2582:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2581:12:21"
            },
            "scope": 6806,
            "src": "2477:273:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6620,
              "nodeType": "Block",
              "src": "2846:73:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6612,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6607,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6600,
                        "src": "2857:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6610,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2878:1:21",
                            "subdenomination": null,
                            "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": 6609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2870:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6608,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2870:7:21",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 6611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2870:10:21",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2857:23:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 6617,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 6613,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6600,
                        "src": "2884:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 6614,
                          "name": "m_presigned",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 228,
                          "src": "2897:11:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                            "typeString": "mapping(bytes32 => address)"
                          }
                        },
                        "id": 6616,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 6615,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6602,
                          "src": "2909:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2897:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2884:31:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2857:58:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6606,
                  "id": 6619,
                  "nodeType": "Return",
                  "src": "2850:65:21"
                }
              ]
            },
            "documentation": null,
            "id": 6621,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPresignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6600,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6621,
                  "src": "2781:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6599,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2781:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6602,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6621,
                  "src": "2800:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6601,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2800:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2780:34:21"
            },
            "returnParameters": {
              "id": 6606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6605,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6621,
                  "src": "2839:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6604,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2839:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2838:6:21"
            },
            "scope": 6806,
            "src": "2753:166:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6673,
              "nodeType": "Block",
              "src": "3037:323:21",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6633,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6623,
                        "src": "3057:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6632,
                      "name": "_isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6554,
                      "src": "3045:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3045:22:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 6671,
                    "nodeType": "Block",
                    "src": "3300:57:21",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6665,
                                "name": "_hash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6625,
                                "src": "3321:5:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6666,
                                "name": "_signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6627,
                                "src": "3328:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 6664,
                              "name": "_recover",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6528,
                              "src": "3312:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                              }
                            },
                            "id": 6667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3312:27:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6668,
                            "name": "_identity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6623,
                            "src": "3343:9:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3312:40:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6631,
                        "id": 6670,
                        "nodeType": "Return",
                        "src": "3305:47:21"
                      }
                    ]
                  },
                  "id": 6672,
                  "nodeType": "IfStatement",
                  "src": "3041:316:21",
                  "trueBody": {
                    "id": 6663,
                    "nodeType": "Block",
                    "src": "3071:219:21",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6653,
                              "nodeType": "Block",
                              "src": "3162:65:21",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 6651,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6645,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6643,
                                      "src": "3175:5:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 6647,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3193:1:21",
                                              "subdenomination": null,
                                              "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": 6646,
                                            "name": "IERC1654",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10194,
                                            "src": "3184:8:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                              "typeString": "type(contract IERC1654)"
                                            }
                                          },
                                          "id": 6648,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3184:11:21",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC1654_$10194",
                                            "typeString": "contract IERC1654"
                                          }
                                        },
                                        "id": 6649,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "isValidSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 10193,
                                        "src": "3184:28:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                                        }
                                      },
                                      "id": 6650,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3184:37:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "3175:46:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 6631,
                                  "id": 6652,
                                  "nodeType": "Return",
                                  "src": "3168:53:21"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 6654,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6644,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6643,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6654,
                                  "src": "3145:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 6642,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3145:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3144:14:21"
                            },
                            "src": "3136:91:21"
                          },
                          {
                            "block": {
                              "id": 6658,
                              "nodeType": "Block",
                              "src": "3266:2:21",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6659,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6657,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6656,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6659,
                                  "src": "3235:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 6655,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3235:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3234:31:21"
                            },
                            "src": "3228:40:21"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6639,
                              "name": "_hash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6625,
                              "src": "3117:5:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6640,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6627,
                              "src": "3124:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6636,
                                  "name": "_identity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6623,
                                  "src": "3089:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6635,
                                "name": "IERC1654",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10194,
                                "src": "3080:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                  "typeString": "type(contract IERC1654)"
                                }
                              },
                              "id": 6637,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3080:19:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1654_$10194",
                                "typeString": "contract IERC1654"
                              }
                            },
                            "id": 6638,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isValidSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10193,
                            "src": "3080:36:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                            }
                          },
                          "id": 6641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3080:55:21",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 6660,
                        "nodeType": "TryStatement",
                        "src": "3076:192:21"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3280:5:21",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6631,
                        "id": 6662,
                        "nodeType": "Return",
                        "src": "3273:12:21"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 6674,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6623,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "2947:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2947:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6625,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "2966:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6624,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2966:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6627,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "2981:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6626,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2981:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2946:59:21"
            },
            "returnParameters": {
              "id": 6631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6630,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6674,
                  "src": "3030:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6629,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3030:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3029:6:21"
            },
            "scope": 6806,
            "src": "2922:438:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6756,
              "nodeType": "Block",
              "src": "3487:560:21",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6686,
                        "name": "_identity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6676,
                        "src": "3507:9:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 6685,
                      "name": "_isContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6554,
                      "src": "3495:11:21",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 6687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3495:22:21",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 6754,
                    "nodeType": "Block",
                    "src": "3972:72:21",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 6752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6747,
                                    "name": "_predicat",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6678,
                                    "src": "4003:9:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 6746,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "3993:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 6748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3993:20:21",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 6749,
                                "name": "_signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6680,
                                "src": "4015:10:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 6745,
                              "name": "_recover",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6528,
                              "src": "3984:8:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                                "typeString": "function (bytes32,bytes memory) pure returns (address)"
                              }
                            },
                            "id": 6750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3984:42:21",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6751,
                            "name": "_identity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6676,
                            "src": "4030:9:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3984:55:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 6684,
                        "id": 6753,
                        "nodeType": "Return",
                        "src": "3977:62:21"
                      }
                    ]
                  },
                  "id": 6755,
                  "nodeType": "IfStatement",
                  "src": "3491:553:21",
                  "trueBody": {
                    "id": 6744,
                    "nodeType": "Block",
                    "src": "3521:441:21",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6706,
                              "nodeType": "Block",
                              "src": "3616:65:21",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 6704,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6698,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6696,
                                      "src": "3629:5:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 6700,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3647:1:21",
                                              "subdenomination": null,
                                              "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": 6699,
                                            "name": "IERC1271",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10157,
                                            "src": "3638:8:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC1271_$10157_$",
                                              "typeString": "type(contract IERC1271)"
                                            }
                                          },
                                          "id": 6701,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3638:11:21",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC1271_$10157",
                                            "typeString": "contract IERC1271"
                                          }
                                        },
                                        "id": 6702,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "isValidSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 10156,
                                        "src": "3638:28:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (bytes memory,bytes memory) view external returns (bytes4)"
                                        }
                                      },
                                      "id": 6703,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3638:37:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "3629:46:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 6684,
                                  "id": 6705,
                                  "nodeType": "Return",
                                  "src": "3622:53:21"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 6707,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6697,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6696,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6707,
                                  "src": "3599:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 6695,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3599:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3598:14:21"
                            },
                            "src": "3590:91:21"
                          },
                          {
                            "block": {
                              "id": 6711,
                              "nodeType": "Block",
                              "src": "3723:2:21",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6712,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6710,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6709,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6712,
                                  "src": "3692:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 6708,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3692:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3691:31:21"
                            },
                            "src": "3685:40:21"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6692,
                              "name": "_predicat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6678,
                              "src": "3567:9:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6693,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6680,
                              "src": "3578:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6689,
                                  "name": "_identity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6676,
                                  "src": "3539:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6688,
                                "name": "IERC1271",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10157,
                                "src": "3530:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1271_$10157_$",
                                  "typeString": "type(contract IERC1271)"
                                }
                              },
                              "id": 6690,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3530:19:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1271_$10157",
                                "typeString": "contract IERC1271"
                              }
                            },
                            "id": 6691,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isValidSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10156,
                            "src": "3530:36:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory,bytes memory) view external returns (bytes4)"
                            }
                          },
                          "id": 6694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3530:59:21",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 6713,
                        "nodeType": "TryStatement",
                        "src": "3526:199:21"
                      },
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 6734,
                              "nodeType": "Block",
                              "src": "3831:65:21",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 6732,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 6726,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6724,
                                      "src": "3844:5:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "hexValue": "30",
                                              "id": 6728,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "3862:1:21",
                                              "subdenomination": null,
                                              "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": 6727,
                                            "name": "IERC1654",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10194,
                                            "src": "3853:8:21",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                              "typeString": "type(contract IERC1654)"
                                            }
                                          },
                                          "id": 6729,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3853:11:21",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC1654_$10194",
                                            "typeString": "contract IERC1654"
                                          }
                                        },
                                        "id": 6730,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "isValidSignature",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 10193,
                                        "src": "3853:28:21",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                                        }
                                      },
                                      "id": 6731,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3853:37:21",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "3844:46:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 6684,
                                  "id": 6733,
                                  "nodeType": "Return",
                                  "src": "3837:53:21"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 6735,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6725,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6724,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6735,
                                  "src": "3814:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 6723,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3814:6:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3813:14:21"
                            },
                            "src": "3805:91:21"
                          },
                          {
                            "block": {
                              "id": 6739,
                              "nodeType": "Block",
                              "src": "3938:2:21",
                              "statements": []
                            },
                            "errorName": "",
                            "id": 6740,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 6738,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 6737,
                                  "mutability": "mutable",
                                  "name": "",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 6740,
                                  "src": "3907:12:21",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 6736,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3907:5:21",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3906:31:21"
                            },
                            "src": "3900:40:21"
                          }
                        ],
                        "externalCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6719,
                                  "name": "_predicat",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6678,
                                  "src": "3781:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 6718,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "3771:9:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 6720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3771:20:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6721,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6680,
                              "src": "3793:10:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6715,
                                  "name": "_identity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6676,
                                  "src": "3743:9:21",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6714,
                                "name": "IERC1654",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10194,
                                "src": "3734:8:21",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1654_$10194_$",
                                  "typeString": "type(contract IERC1654)"
                                }
                              },
                              "id": 6716,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3734:19:21",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1654_$10194",
                                "typeString": "contract IERC1654"
                              }
                            },
                            "id": 6717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isValidSignature",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10193,
                            "src": "3734:36:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
                            }
                          },
                          "id": 6722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3734:70:21",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 6741,
                        "nodeType": "TryStatement",
                        "src": "3730:210:21"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 6742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3952:5:21",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 6684,
                        "id": 6743,
                        "nodeType": "Return",
                        "src": "3945:12:21"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 6757,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6681,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6676,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3388:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3388:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6678,
                  "mutability": "mutable",
                  "name": "_predicat",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3407:22:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6677,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3407:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6680,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3431:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6679,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3431:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3387:68:21"
            },
            "returnParameters": {
              "id": 6684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6683,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6757,
                  "src": "3480:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6682,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3479:6:21"
            },
            "scope": 6806,
            "src": "3363:684:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6779,
              "nodeType": "Block",
              "src": "4179:100:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6769,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6759,
                          "src": "4209:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6770,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6761,
                          "src": "4220:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6768,
                        "name": "_checkPresignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6621,
                        "src": "4190:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32) view returns (bool)"
                        }
                      },
                      "id": 6771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4190:36:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6773,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6759,
                          "src": "4246:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6774,
                          "name": "_hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6761,
                          "src": "4257:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6775,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6763,
                          "src": "4264:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6772,
                        "name": "_checkSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          6674,
                          6757
                        ],
                        "referencedDeclaration": 6674,
                        "src": "4230:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32,bytes memory) view returns (bool)"
                        }
                      },
                      "id": 6776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4230:45:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4190:85:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6767,
                  "id": 6778,
                  "nodeType": "Return",
                  "src": "4183:92:21"
                }
              ]
            },
            "documentation": null,
            "id": 6780,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPresignatureOrSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6759,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4089:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6758,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4089:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6761,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4108:13:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 6760,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4108:7:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6763,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4123:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6762,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4123:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4088:59:21"
            },
            "returnParameters": {
              "id": 6767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6766,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6780,
                  "src": "4172:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6765,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4172:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4171:6:21"
            },
            "scope": 6806,
            "src": "4050:229:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6804,
              "nodeType": "Block",
              "src": "4420:119:21",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 6802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6792,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6782,
                          "src": "4450:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6794,
                              "name": "_predicat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6784,
                              "src": "4471:9:21",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 6793,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -8,
                            "src": "4461:9:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 6795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4461:20:21",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 6791,
                        "name": "_checkPresignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6621,
                        "src": "4431:18:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32) view returns (bool)"
                        }
                      },
                      "id": 6796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4431:51:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 6798,
                          "name": "_identity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6782,
                          "src": "4502:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6799,
                          "name": "_predicat",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6784,
                          "src": "4513:9:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 6800,
                          "name": "_signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6786,
                          "src": "4524:10:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 6797,
                        "name": "_checkSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          6674,
                          6757
                        ],
                        "referencedDeclaration": 6757,
                        "src": "4486:15:21",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (address,bytes memory,bytes memory) view returns (bool)"
                        }
                      },
                      "id": 6801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4486:49:21",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4431:104:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6790,
                  "id": 6803,
                  "nodeType": "Return",
                  "src": "4424:111:21"
                }
              ]
            },
            "documentation": null,
            "id": 6805,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPresignatureOrSignature",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6782,
                  "mutability": "mutable",
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4321:17:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4321:7:21",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6784,
                  "mutability": "mutable",
                  "name": "_predicat",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4340:22:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6783,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4340:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6786,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4364:23:21",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6785,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4364:5:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4320:68:21"
            },
            "returnParameters": {
              "id": 6790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6789,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6805,
                  "src": "4413:4:21",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6788,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4413:4:21",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4412:6:21"
            },
            "scope": 6806,
            "src": "4282:257:21",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 6807,
        "src": "260:4281:21"
      }
    ],
    "src": "0:4542:21"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.6+commit.6c089d02.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.1.0",
  "updatedAt": "2020-04-21T18:10:34.926Z",
  "devdoc": {
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}