{
  "contractName": "AuthKeyMetaTxAccount",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        }
      ],
      "name": "addAuthKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_msgHash",
          "type": "bytes32"
        },
        {
          "name": "_signatures",
          "type": "bytes"
        }
      ],
      "name": "isValidSignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKeys",
          "type": "address[]"
        }
      ],
      "name": "removeMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_msgHash",
          "type": "bytes32"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "_isValidAuthKeySignature",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_txDataMessageHash",
          "type": "bytes32"
        },
        {
          "name": "_transactionDataSignature",
          "type": "bytes"
        },
        {
          "name": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "validateLoginKeyMetaTxSigs",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authKeys",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldAuthKeys",
          "type": "address[]"
        },
        {
          "name": "_newAuthKeys",
          "type": "address[]"
        }
      ],
      "name": "swapMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHAIN_ID",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKey",
          "type": "address"
        }
      ],
      "name": "removeAuthKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldAuthKey",
          "type": "address"
        },
        {
          "name": "_newAuthKey",
          "type": "address"
        }
      ],
      "name": "swapAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "authKeysArray",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAuthKeysArrayLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_destination",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "executeTransaction",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authKeysArrayIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_authKeys",
          "type": "address[]"
        }
      ],
      "name": "addMultipleAuthKeys",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "FundsReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        }
      ],
      "name": "AddedAuthKey",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "authKey",
          "type": "address"
        }
      ],
      "name": "RemovedAuthKey",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "oldAuthKey",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newAuthKey",
          "type": "address"
        }
      ],
      "name": "SwappedAuthKeys",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "encodedData",
          "type": "bytes32"
        }
      ],
      "name": "CallFailed",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_destination",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "name": "_gasLimit",
          "type": "uint256"
        },
        {
          "name": "_transactionDataSignature",
          "type": "bytes"
        }
      ],
      "name": "executeAuthKeyMetaTx",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"addAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKeys\",\"type\":\"address[]\"}],\"name\":\"removeMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"_isValidAuthKeySignature\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_txDataMessageHash\",\"type\":\"bytes32\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"validateLoginKeyMetaTxSigs\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeys\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldAuthKeys\",\"type\":\"address[]\"},{\"name\":\"_newAuthKeys\",\"type\":\"address[]\"}],\"name\":\"swapMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CHAIN_ID\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"removeAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldAuthKey\",\"type\":\"address\"},{\"name\":\"_newAuthKey\",\"type\":\"address\"}],\"name\":\"swapAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"authKeysArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAuthKeysArrayLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"}],\"name\":\"executeAuthKeyMetaTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authKeysArrayIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKeys\",\"type\":\"address[]\"}],\"name\":\"addMultipleAuthKeys\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FundsReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"AddedAuthKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"}],\"name\":\"RemovedAuthKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAuthKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAuthKey\",\"type\":\"address\"}],\"name\":\"SwappedAuthKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"encodedData\",\"type\":\"bytes32\"}],\"name\":\"CallFailed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addAuthKey(address)\":{\"details\":\"Add an auth key to the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to add\"}},\"addMultipleAuthKeys(address[])\":{\"details\":\"Add multiple auth keys to the list of auth keys\",\"params\":{\"_authKeys\":\"Array of addresses to add to the auth keys list\"}},\"executeAuthKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes)\":{\"details\":\"Execute an authKey meta transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_gasLimit\":\"Gas limit of the transaction\",\"_nonce\":\"Nonce of the transaction\",\"_transactionDataSignature\":\"Signed tx data\",\"_value\":\"Value of the transaction\"}},\"executeTransaction(uint256,address,uint256,bytes)\":{\"details\":\"Execute a transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_nonce\":\"Nonce of the transaction\",\"_value\":\"Value of the transaction\"}},\"getAuthKeysArrayLength()\":{\"details\":\"Return the length of the authKeysArray\"},\"removeAuthKey(address)\":{\"details\":\"Remove an auth key from the list of auth keys\",\"params\":{\"_authKey\":\"Address of the auth key to remove\"}},\"removeMultipleAuthKeys(address[])\":{\"details\":\"Remove multiple auth keys to the list of auth keys\",\"params\":{\"_authKeys\":\"Array of addresses to remove to the auth keys list\"}},\"swapAuthKeys(address,address)\":{\"details\":\"Swap one authKey for a non-authKey\",\"params\":{\"_newAuthKey\":\"A non-existing authKey\",\"_oldAuthKey\":\"An existing authKey\"}},\"swapMultipleAuthKeys(address[],address[])\":{\"details\":\"Swap multiple auth keys to the list of auth keys\",\"params\":{\"_newAuthKeys\":\"Array of addresses to add to the auth keys list\",\"_oldAuthKeys\":\"Array of addresses to remove to the auth keys list\"}},\"validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)\":{\"details\":\"Validate signatures from an AuthKeyMetaTx\",\"params\":{\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"_transactionDataSignature\":\"Signed tx data\",\"_txDataMessageHash\":\"Ethereum signed message of the transaction\"}}}},\"userdoc\":{\"methods\":{\"executeTransaction(uint256,address,uint256,bytes)\":{\"notice\":\"This is to be called directly by an AuthKey\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol\":\"AuthKeyMetaTxAccount\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol\":{\"keccak256\":\"0x5e2492fe50205a6fb3abe4e5f38ec4707b10694cc3a5a6fa89e3582b0634df09\",\"urls\":[\"bzzr://a8fce51e92840cce08b52ca7c6c9facf875d71ddcb3389c4de8d74d70e8590ce\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol\":{\"keccak256\":\"0xae8d146676663b395f5baaf2251b3c273a02424a97aa4f9d2f29042ef21f773e\",\"urls\":[\"bzzr://498abe79ae3f2af93c959c74fc6894af7f66ccb68e65d762e5cb54fed7e4e702\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xc19027309407a962d4d5f68ad3e5c31eab6ffb6b134dd4811fd0f3d93ffd618a\",\"urls\":[\"bzzr://0fd21475ca178757005990869d51729368cbebd5f0222656141b4fbe5e12a363\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xde793835499803e9a2b59683de8bca5b77e2c4dc63748cf8b72973193e65e656\",\"urls\":[\"bzzr://d3ab468bc9bcc85b245abea04a7dbe404db1f70d2f63e3b9b70ed1fde8138ee9\"]},\"zos-lib/contracts/Initializable.sol\":{\"keccak256\":\"0xf79d9851c085aa8412e87d7a26d3485488fe12538ecb4e317ce41fc1f2c3a16a\",\"urls\":[\"bzzr://e45c5a995f57637b2300a376647ee345cc9cb30ee1984735091fcd4b10ff3500\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50612696806100206000396000f3fe6080604052600436106101095760003560e01c80639565389e11610095578063cd11331e11610064578063cd11331e146109c2578063e0eae14d146109ed578063e3e077fb14610b62578063ed8fc6b814610d78578063f399f1dd14610ddd57610109565b80639565389e1461085a578063affed0e0146108ab578063b4c27164146108d6578063bd1a84ab1461094757610109565b80634c477daf116100dc5780634c477daf146104ad5780635175ca5e146106565780635b79818f146106bf5780638129fc1c1461081857806385e1f4d01461082f57610109565b806313f8c5781461014f5780631626ba7e146101a05780631704db30146102c457806320433e2614610389575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b34801561015b57600080fd5b5061019e6004803603602081101561017257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ea2565b005b3480156101ac57600080fd5b50610270600480360360408110156101c357600080fd5b8101908080359060200190929190803590602001906401000000008111156101ea57600080fd5b8201836020820111156101fc57600080fd5b8035906020019184600183028401116401000000008311171561021e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110bb565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156102d057600080fd5b50610387600480360360208110156102e757600080fd5b810190808035906020019064010000000081111561030457600080fd5b82018360208201111561031657600080fd5b8035906020019184602083028401116401000000008311171561033857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611167565b005b34801561039557600080fd5b50610459600480360360408110156103ac57600080fd5b8101908080359060200190929190803590602001906401000000008111156103d357600080fd5b8201836020820111156103e557600080fd5b8035906020019184600183028401116401000000008311171561040757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ac565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156104b957600080fd5b50610614600480360360608110156104d057600080fd5b8101908080359060200190929190803590602001906401000000008111156104f757600080fd5b82018360208201111561050957600080fd5b8035906020019184600183028401116401000000008311171561052b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058e57600080fd5b8201836020820111156105a057600080fd5b803590602001918460018302840111640100000000831117156105c257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611238565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066257600080fd5b506106a56004803603602081101561067957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112df565b604051808215151515815260200191505060405180910390f35b3480156106cb57600080fd5b50610816600480360360408110156106e257600080fd5b81019080803590602001906401000000008111156106ff57600080fd5b82018360208201111561071157600080fd5b8035906020019184602083028401116401000000008311171561073357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111640100000000831117156107c757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506112ff565b005b34801561082457600080fd5b5061082d6113d0565b005b34801561083b57600080fd5b506108446114d7565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b506108a96004803603602081101561087d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114dd565b005b3480156108b757600080fd5b506108c061170e565b6040518082815260200191505060405180910390f35b3480156108e257600080fd5b50610945600480360360408110156108f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b005b34801561095357600080fd5b506109806004803603602081101561096a57600080fd5b8101908080359060200190929190505050611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ce57600080fd5b506109d761193f565b6040518082815260200191505060405180910390f35b3480156109f957600080fd5b50610ae760048036036080811015610a1057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a6157600080fd5b820183602082011115610a7357600080fd5b80359060200191846001830284011164010000000083111715610a9557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061194c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b27578082015181840152602081019050610b0c565b50505050905090810190601f168015610b545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b6e57600080fd5b50610cfd600480360360c0811015610b8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610bc257600080fd5b820183602082011115610bd457600080fd5b80359060200191846001830284011164010000000083111715610bf657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610c7757600080fd5b820183602082011115610c8957600080fd5b80359060200191846001830284011164010000000083111715610cab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061196d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d3d578082015181840152602081019050610d22565b50505050905090810190601f168015610d6a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d8457600080fd5b50610dc760048036036020811015610d9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b26565b6040518082815260200191505060405180910390f35b348015610de957600080fd5b50610ea060048036036020811015610e0057600080fd5b8101908080359060200190640100000000811115610e1d57600080fd5b820183602082011115610e2f57600080fd5b80359060200191846020830284011164010000000083111715610e5157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611b3e565b005b610eab33611b83565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b60006041825114156110d8576110d183836111ac565b9050611161565b6082825114156110f3576110ec8383611c82565b9050611161565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b61117033611b83565b60008090505b81518110156111a85761119b82828151811061118e57fe5b60200260200101516114dd565b8080600101915050611176565b5050565b6000806111c28385611dc590919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611226576320c13b0b60e01b915050611232565b63ffffffff60e01b9150505b92915050565b60008061124e8486611dc590919063ffffffff16565b905060006112b082604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611ec9565b905060006112c78583611dc590919063ffffffff16565b90506112d281611b83565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b61130833611b83565b805182511461137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b82518110156113cb576113be83828151811061139d57fe5b60200260200101518383815181106113b157fe5b6020026020010151611714565b8080600101915050611385565b505050565b600060019054906101000a900460ff16806113ef57506113ee611f21565b5b8061140657506000809054906101000a900460ff16155b61145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061263d602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156114ab576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600160378190555080156114d45760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b6114e633611b83565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b60016115af61193f565b11611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061168381611f32565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b61189c81610ea2565b6118a5826114dd565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b6033818154811061191057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b606061195733611b83565b61196385858585612086565b9050949350505050565b606060005a90506000611af2306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548c8c8c8c3a8d604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b60208310611a925780518252602082019150602081019050602083039250611a6f565b6001836020036101000a038019825116818451168082178552505050505050905001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120611ec9565b90506000611b008286612228565b90506060611b13888c8b8d3a8c8a612253565b9050809450505050509695505050505050565b60346020528060005260406000206000915090505481565b611b4733611b83565b60008090505b8151811015611b7f57611b72828281518110611b6557fe5b6020026020010151610ea2565b8080600101915050611b4d565b5050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480611c0d57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b60006060611c9d60006041856122969092919063ffffffff16565b90506060611cb7604180866122969092919063ffffffff16565b90506000611cce8387611dc590919063ffffffff16565b90506000611d3082604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611ec9565b90506000611d478483611dc590919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611daf576320c13b0b60e01b95505050505050611dbf565b63ffffffff60e01b955050505050505b92915050565b60006041825114611dd95760009050611ec3565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611e2d5760009350505050611ec3565b601b8160ff1614158015611e455750601c8160ff1614155b15611e565760009350505050611ec3565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611eb3573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080303b90506000811491505090565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b6001603380549050038110156120295760336001820181548110611f9c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660338281548110611fd457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611f7c565b5060336001603380549050038154811061203f57fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055603380548091906001900361208191906125ca565b505050565b606060365485146120ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b60208310612161578051825260208201915060208101905060208303925061213e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146121c3576040519150601f19603f3d011682016040523d82523d6000602084013e6121c8565b606091505b50915091508161221b5760006121e088888888612322565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b60008061223e8385611dc590919063ffffffff16565b905061224981611b83565b8091505092915050565b60608061226289898989612086565b905060006122795a856123e790919063ffffffff16565b9050612286818787612470565b8192505050979650505050505050565b6060818301845110156122a857600080fd5b60608215600081146122c557604051915060208201604052612316565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561230357805183526020830192506020810190506122e6565b50868552601f19601f8301166040525050505b50809150509392505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b6020831061239f578051825260208201915060208101905060208303925061237c565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b60008282111561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b808311156124e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742067617320666f7220726566756e64000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc612513848661254490919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561253e573d6000803e3d6000fd5b50505050565b60008083141561255757600090506125c4565b600082840290508284828161256857fe5b04146125bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061261c6021913960400191505060405180910390fd5b809150505b92915050565b8154818355818111156125f1578183600052602060002091820191016125f091906125f6565b5b505050565b61261891905b808211156126145760008160009055506001016125fc565b5090565b9056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a723058205f22568b1bb47d9fc216af821a7d7f9408e5b9614e341c21ea9cc39abd9851f60029",
  "deployedBytecode": "0x6080604052600436106101095760003560e01c80639565389e11610095578063cd11331e11610064578063cd11331e146109c2578063e0eae14d146109ed578063e3e077fb14610b62578063ed8fc6b814610d78578063f399f1dd14610ddd57610109565b80639565389e1461085a578063affed0e0146108ab578063b4c27164146108d6578063bd1a84ab1461094757610109565b80634c477daf116100dc5780634c477daf146104ad5780635175ca5e146106565780635b79818f146106bf5780638129fc1c1461081857806385e1f4d01461082f57610109565b806313f8c5781461014f5780631626ba7e146101a05780631704db30146102c457806320433e2614610389575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b34801561015b57600080fd5b5061019e6004803603602081101561017257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ea2565b005b3480156101ac57600080fd5b50610270600480360360408110156101c357600080fd5b8101908080359060200190929190803590602001906401000000008111156101ea57600080fd5b8201836020820111156101fc57600080fd5b8035906020019184600183028401116401000000008311171561021e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110bb565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156102d057600080fd5b50610387600480360360208110156102e757600080fd5b810190808035906020019064010000000081111561030457600080fd5b82018360208201111561031657600080fd5b8035906020019184602083028401116401000000008311171561033857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611167565b005b34801561039557600080fd5b50610459600480360360408110156103ac57600080fd5b8101908080359060200190929190803590602001906401000000008111156103d357600080fd5b8201836020820111156103e557600080fd5b8035906020019184600183028401116401000000008311171561040757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ac565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156104b957600080fd5b50610614600480360360608110156104d057600080fd5b8101908080359060200190929190803590602001906401000000008111156104f757600080fd5b82018360208201111561050957600080fd5b8035906020019184600183028401116401000000008311171561052b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058e57600080fd5b8201836020820111156105a057600080fd5b803590602001918460018302840111640100000000831117156105c257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611238565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066257600080fd5b506106a56004803603602081101561067957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112df565b604051808215151515815260200191505060405180910390f35b3480156106cb57600080fd5b50610816600480360360408110156106e257600080fd5b81019080803590602001906401000000008111156106ff57600080fd5b82018360208201111561071157600080fd5b8035906020019184602083028401116401000000008311171561073357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561079357600080fd5b8201836020820111156107a557600080fd5b803590602001918460208302840111640100000000831117156107c757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506112ff565b005b34801561082457600080fd5b5061082d6113d0565b005b34801561083b57600080fd5b506108446114d7565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b506108a96004803603602081101561087d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114dd565b005b3480156108b757600080fd5b506108c061170e565b6040518082815260200191505060405180910390f35b3480156108e257600080fd5b50610945600480360360408110156108f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b005b34801561095357600080fd5b506109806004803603602081101561096a57600080fd5b8101908080359060200190929190505050611903565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ce57600080fd5b506109d761193f565b6040518082815260200191505060405180910390f35b3480156109f957600080fd5b50610ae760048036036080811015610a1057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a6157600080fd5b820183602082011115610a7357600080fd5b80359060200191846001830284011164010000000083111715610a9557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061194c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b27578082015181840152602081019050610b0c565b50505050905090810190601f168015610b545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b6e57600080fd5b50610cfd600480360360c0811015610b8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610bc257600080fd5b820183602082011115610bd457600080fd5b80359060200191846001830284011164010000000083111715610bf657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610c7757600080fd5b820183602082011115610c8957600080fd5b80359060200191846001830284011164010000000083111715610cab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061196d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d3d578082015181840152602081019050610d22565b50505050905090810190601f168015610d6a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d8457600080fd5b50610dc760048036036020811015610d9b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b26565b6040518082815260200191505060405180910390f35b348015610de957600080fd5b50610ea060048036036020811015610e0057600080fd5b8101908080359060200190640100000000811115610e1d57600080fd5b820183602082011115610e2f57600080fd5b80359060200191846020830284011164010000000083111715610e5157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611b3e565b005b610eab33611b83565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b60006041825114156110d8576110d183836111ac565b9050611161565b6082825114156110f3576110ec8383611c82565b9050611161565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b61117033611b83565b60008090505b81518110156111a85761119b82828151811061118e57fe5b60200260200101516114dd565b8080600101915050611176565b5050565b6000806111c28385611dc590919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611226576320c13b0b60e01b915050611232565b63ffffffff60e01b9150505b92915050565b60008061124e8486611dc590919063ffffffff16565b905060006112b082604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611ec9565b905060006112c78583611dc590919063ffffffff16565b90506112d281611b83565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b61130833611b83565b805182511461137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b82518110156113cb576113be83828151811061139d57fe5b60200260200101518383815181106113b157fe5b6020026020010151611714565b8080600101915050611385565b505050565b600060019054906101000a900460ff16806113ef57506113ee611f21565b5b8061140657506000809054906101000a900460ff16155b61145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061263d602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156114ab576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600160378190555080156114d45760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b6114e633611b83565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b60016115af61193f565b11611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061168381611f32565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b61189c81610ea2565b6118a5826114dd565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b6033818154811061191057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b606061195733611b83565b61196385858585612086565b9050949350505050565b606060005a90506000611af2306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548c8c8c8c3a8d604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b60208310611a925780518252602082019150602081019050602083039250611a6f565b6001836020036101000a038019825116818451168082178552505050505050905001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120611ec9565b90506000611b008286612228565b90506060611b13888c8b8d3a8c8a612253565b9050809450505050509695505050505050565b60346020528060005260406000206000915090505481565b611b4733611b83565b60008090505b8151811015611b7f57611b72828281518110611b6557fe5b6020026020010151610ea2565b8080600101915050611b4d565b5050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480611c0d57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b60006060611c9d60006041856122969092919063ffffffff16565b90506060611cb7604180866122969092919063ffffffff16565b90506000611cce8387611dc590919063ffffffff16565b90506000611d3082604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120611ec9565b90506000611d478483611dc590919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611daf576320c13b0b60e01b95505050505050611dbf565b63ffffffff60e01b955050505050505b92915050565b60006041825114611dd95760009050611ec3565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611e2d5760009350505050611ec3565b601b8160ff1614158015611e455750601c8160ff1614155b15611e565760009350505050611ec3565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611eb3573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080303b90506000811491505090565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b6001603380549050038110156120295760336001820181548110611f9c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660338281548110611fd457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611f7c565b5060336001603380549050038154811061203f57fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055603380548091906001900361208191906125ca565b505050565b606060365485146120ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b60208310612161578051825260208201915060208101905060208303925061213e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146121c3576040519150601f19603f3d011682016040523d82523d6000602084013e6121c8565b606091505b50915091508161221b5760006121e088888888612322565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b60008061223e8385611dc590919063ffffffff16565b905061224981611b83565b8091505092915050565b60608061226289898989612086565b905060006122795a856123e790919063ffffffff16565b9050612286818787612470565b8192505050979650505050505050565b6060818301845110156122a857600080fd5b60608215600081146122c557604051915060208201604052612316565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561230357805183526020830192506020810190506122e6565b50868552601f19601f8301166040525050505b50809150509392505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b6020831061239f578051825260208201915060208101905060208303925061237c565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b60008282111561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b808311156124e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742067617320666f7220726566756e64000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc612513848661254490919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561253e573d6000803e3d6000fd5b50505050565b60008083141561255757600090506125c4565b600082840290508284828161256857fe5b04146125bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061261c6021913960400191505060405180910390fd5b809150505b92915050565b8154818355818111156125f1578183600052602060002091820191016125f091906125f6565b5b505050565b61261891905b808211156126145760008160009055506001016125fc565b5090565b9056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a723058205f22568b1bb47d9fc216af821a7d7f9408e5b9614e341c21ea9cc39abd9851f60029",
  "sourceMap": "50:1345:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50:1345:2;;;;;;;",
  "deployedSourceMap": "50:1345:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1286:9:1;1274:10;1260:36;;;;;;;;;;;;50:1345:2;2225:314:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2225:314:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2225:314:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;4886:458;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4886:458:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4886:458:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4886:458:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4886:458:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4886:458:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4886:458:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3526:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3526:205:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3526:205:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3526:205:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3526:205:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;3526:205:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3526:205:1;;;;;;;;;;;;;;;:::i;:::-;;5350:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5350:377:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5350:377:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5350:377:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5350:377:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5350:377:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5350:377:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;8128:735;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8128:735:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8128:735:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8128:735:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8128:735:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8128:735:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8128:735:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8128:735:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8128:735:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8128:735:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8128:735:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;478:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;478:40:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;478:40:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4485:395;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4485:395:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4485:395:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4485:395:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4485:395:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4485:395:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4485:395:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4485:395:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4485:395:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4485:395:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4485:395:1;;;;;;;;;;;;;;;:::i;:::-;;1140:70;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1140:70:1;;;:::i;:::-;;550:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;550:23:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3001:379;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3001:379:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3001:379:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;524:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;524:20:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3882:380;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3882:380:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3882:380:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;383:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;383:30:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;383:30:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1403:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1403:108:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1810:301;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1810:301:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1810:301:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1810:301:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1810:301:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1810:301:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;455:938:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;455:938:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;455:938:2;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;455:938:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;455:938:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;455:938:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;455:938:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;455:938:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;455:938:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;455:938:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;455:938:2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;455:938:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;419:53:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;419:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;419:53:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2679:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2679:199:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2679:199:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2679:199:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2679:199:1;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2679:199:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2679:199:1;;;;;;;;;;;;;;;:::i;:::-;;2225:314;1088:28;1105:10;1088:16;:28::i;:::-;2312:8;:18;2321:8;2312:18;;;;;;;;;;;;;;;;;;;;;;;;;2311:19;2303:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2388:4;2367:8;:18;2376:8;2367:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2402:13;2421:8;2402:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2402:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2494:1;2471:13;:20;;;;:24;2440:18;:28;2459:8;2440:28;;;;;;;;;;;;;;;:55;;;;2523:8;2510:22;;;;;;;;;;;;2225:314;:::o;4886:458::-;5023:6;5071:2;5049:11;:18;:24;5045:293;;;5096:47;5121:8;5131:11;5096:24;:47::i;:::-;5089:54;;;;5045:293;5186:3;5164:11;:18;:25;5160:178;;;5212:48;5238:8;5248:11;5212:25;:48::i;:::-;5205:55;;;;5160:178;5291:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4886:458;;;;;:::o;3526:205::-;1088:28;1105:10;1088:16;:28::i;:::-;3631:9;3643:1;3631:13;;3626:99;3650:9;:16;3646:1;:20;3626:99;;;3687:27;3701:9;3711:1;3701:12;;;;;;;;;;;;;;3687:13;:27::i;:::-;3668:3;;;;;;;3626:99;;;;3526:205;:::o;5350:377::-;5494:6;5516:22;5541:50;5571:10;5541:8;:16;;:50;;;;:::i;:::-;5516:75;;5605:8;:24;5614:14;5605:24;;;;;;;;;;;;;;;;;;;;;;;;;5602:119;;;674:10;5652:9;;5645:16;;;;;5602:119;729:10;5699:11;;5692:18;;;5350:377;;;;;:::o;8128:735::-;8353:7;8376:29;8408:75;8448:25;8408:18;:26;;:75;;;;:::i;:::-;8376:107;;8494:40;8537:97;8577:21;8547:61;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8547:61:1;;;8537:72;;;;;;:95;:97::i;:::-;8494:140;;8645:27;8675:95;8729:31;8675:32;:40;;:95;;;;:::i;:::-;8645:125;;8780:37;8797:19;8780:16;:37::i;:::-;8835:21;8828:28;;;;;8128:735;;;;;:::o;478:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;4485:395::-;1088:28;1105:10;1088:16;:28::i;:::-;4690:12;:19;4667:12;:19;:42;4659:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:9;4770:1;4758:13;;4753:121;4777:12;:19;4773:1;:23;4753:121;;;4817:46;4830:12;4843:1;4830:15;;;;;;;;;;;;;;4847:12;4860:1;4847:15;;;;;;;;;;;;;;4817:12;:46::i;:::-;4798:3;;;;;;;4753:121;;;;4485:395;;:::o;1140:70::-;1024:12:17;;;;;;;;;;;:31;;;;1040:15;:13;:15::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;1202:1:1;1191:8;:12;;;;1268:14:17;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;1140:70:1;:::o;550:23::-;;;;:::o;3001:379::-;1088:28;1105:10;1088:16;:28::i;:::-;3090:8;:18;3099:8;3090:18;;;;;;;;;;;;;;;;;;;;;;;;;3082:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3180:1;3153:24;:22;:24::i;:::-;:28;3145:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3244:5;3223:8;:18;3232:8;3223:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3259:33;3283:8;3259:23;:33::i;:::-;3333:1;3302:18;:28;3321:8;3302:28;;;;;;;;;;;;;;;:32;;;;3364:8;3349:24;;;;;;;;;;;;3001:379;:::o;524:20::-;;;;:::o;3882:380::-;4005:8;:21;4014:11;4005:21;;;;;;;;;;;;;;;;;;;;;;;;;3997:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:8;:21;4086:11;4077:21;;;;;;;;;;;;;;;;;;;;;;;;;4076:22;4068:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4140:23;4151:11;4140:10;:23::i;:::-;4173:26;4187:11;4173:13;:26::i;:::-;4243:11;4214:41;;4230:11;4214:41;;;;;;;;;;;;3882:380;;:::o;383:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1403:108::-;1458:7;1484:13;:20;;;;1477:27;;1403:108;:::o;1810:301::-;2013:12;1088:28;1105:10;1088:16;:28::i;:::-;2048:56;2068:6;2076:12;2090:6;2098:5;2048:19;:56::i;:::-;2041:63;;1810:301;;;;;;:::o;455:938:2:-;704:12;732:16;751:9;732:28;;771:26;800:265;848:4;867:7;;;;888:8;;910:12;936:5;955:6;975;995:11;1020:9;810:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;810:229:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;810:229:2;;;800:240;;;;;;:263;:265::i;:::-;771:294;;1076:29;1108:95;1148:18;1168:25;1108:26;:95::i;:::-;1076:127;;1214:21;1238:122;1281:6;1289:12;1303:6;1311:5;1318:11;1331:9;1342:8;1238:29;:122::i;:::-;1214:146;;1378:8;1371:15;;;;;;455:938;;;;;;;;:::o;419:53:1:-;;;;;;;;;;;;;;;;;:::o;2679:199::-;1088:28;1105:10;1088:16;:28::i;:::-;2781:9;2793:1;2781:13;;2776:96;2800:9;:16;2796:1;:20;2776:96;;;2837:24;2848:9;2858:1;2848:12;;;;;;;;;;;;;;2837:10;:24::i;:::-;2818:3;;;;;;;2776:96;;;;2679:199;:::o;7138:164::-;7236:4;7214:26;;:8;:18;7223:8;7214:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;:57;;;;7266:4;7244:27;;:10;:27;;;7214:57;7206:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7138:164;:::o;5733:821::-;5881:6;5903:29;5935:24;5953:1;5956:2;5935:11;:17;;:24;;;;;:::i;:::-;5903:56;;5969:43;6015:25;6033:2;6037;6015:11;:17;;:25;;;;;:::i;:::-;5969:71;;6051:23;6077:56;6107:16;6077:8;:16;;:56;;;;:::i;:::-;6051:82;;6144:40;6187:91;6227:15;6197:55;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6197:55:1;;;6187:66;;;;;;:89;:91::i;:::-;6144:134;;6289:27;6319:94;6373:30;6319:32;:40;;:94;;;;:::i;:::-;6289:124;;6427:8;:29;6436:19;6427:29;;;;;;;;;;;;;;;;;;;;;;;;;6424:124;;;674:10;6479:9;;6472:16;;;;;;;;;6424:124;729:10;6526:11;;6519:18;;;;;;;5733:821;;;;;:::o;1229:1891:13:-;1307:7;1388:2;1368:9;:16;:22;1364:72;;1422:1;1406:19;;;;1364:72;1502:9;1521;1540:7;1786:4;1775:9;1771:20;1765:27;1760:32;;1831:4;1820:9;1816:20;1810:27;1805:32;;1884:4;1873:9;1869:20;1863:27;1860:1;1855:36;1850:41;;2802:66;2797:1;2789:10;;:79;2785:127;;;2899:1;2884:17;;;;;;;2785:127;2931:2;2926:1;:7;;;;:18;;;;;2942:2;2937:1;:7;;;;2926:18;2922:66;;;2975:1;2960:17;;;;;;;2922:66;3089:24;3099:4;3105:1;3108;3111;3089:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3089:24:13;;;;;;;;3082:31;;;;;1229:1891;;;;;:::o;3386:265::-;3455:7;3638:4;3585:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3585:58:13;;;3575:69;;;;;;3568:76;;3386:265;;;:::o;1409:467:17:-;1456:4;1797:10;1842:7;1830:20;1824:26;;1870:1;1864:2;:7;1857:14;;;1409:467;:::o;6696:343:1:-;6766:13;6782:18;:28;6801:8;6782:28;;;;;;;;;;;;;;;;6766:44;;6826:9;6838:5;6826:17;;6821:123;6872:1;6849:13;:20;;;;:24;6845:1;:28;6821:123;;;6913:13;6931:1;6927;:5;6913:20;;;;;;;;;;;;;;;;;;;;;;;;;6894:13;6908:1;6894:16;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6875:3;;;;;;;6821:123;;;;6961:13;6998:1;6975:13;:20;;;;:24;6961:39;;;;;;;;;;;;;;;;6954:46;;;;;;;;;;;7010:13;:22;;;;;;;;;;;;:::i;:::-;;6696:343;;:::o;9177:544::-;9352:12;9398:5;;9388:6;:15;9380:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9433:5;;:7;;;;;;;;;;;;;9451:12;9465:21;9490:12;:17;;9514:6;9522:5;9490:38;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9490:38:1;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9450:78:1;;;;9544:7;9539:151;;9567:19;9589:48;9601:6;9609:12;9623:6;9631:5;9589:11;:48::i;:::-;9567:70;;9656:23;9667:11;9656:23;;;;;;;;;;;;;;;;;;9539:151;;9706:8;9699:15;;;;9177:544;;;;;;:::o;7496:375::-;7669:7;7692:29;7724:53;7751:25;7724:18;:26;;:53;;;;:::i;:::-;7692:85;;7787:39;7804:21;7787:16;:39::i;:::-;7843:21;7836:28;;;7496:375;;;;:::o;10271:511::-;10537:12;10565:21;10589:56;10609:6;10617:12;10631:6;10639:5;10589:19;:56::i;:::-;10565:80;;10655:15;10673:24;10687:9;10673;:13;;:24;;;;:::i;:::-;10655:42;;10707:43;10720:7;10729:9;10740;10707:12;:43::i;:::-;10767:8;10760:15;;;;10271:511;;;;;;;;;:::o;9430:2536:16:-;9570:12;9633:7;9624:6;:16;9606:6;:13;:35;;9598:44;;;;;;9653:22;9723:7;9716:15;9749:1;9744:1967;;;;11852:4;11846:11;11833:24;;11903:4;11892:9;11888:20;11882:4;11875:34;9709:2214;;9744:1967;9926:4;9920:11;9907:24;;10585:2;10576:7;10572:16;10967:9;10960:17;10954:4;10950:28;10938:9;10927;10923:25;10919:60;11015:7;11011:2;11007:16;11267:6;11253:9;11246:17;11240:4;11236:28;11224:9;11216:6;11212:22;11208:57;11204:70;11041:425;11300:3;11296:2;11293:11;11041:425;;;11444:2;11438:9;11434:2;11427:21;11341:4;11337:2;11333:13;11327:19;;11381:4;11377:2;11373:13;11367:19;;11041:425;;;11045:247;11502:7;11491:9;11484:26;11692:2;11688:7;11683:2;11679;11675:11;11671:25;11665:4;11658:39;9751:1960;;;9709:2214;;11950:9;11943:16;;;9430:2536;;;;;:::o;11533:339:1:-;11713:7;11783:6;11803:12;11829:6;11849:5;11753:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11753:111:1;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11753:111:1;;;11743:122;;;;;;11736:129;;11533:339;;;;;;:::o;1274:179:14:-;1332:7;1364:1;1359;:6;;1351:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:9;1426:1;1422;:5;1410:17;;1445:1;1438:8;;;1274:179;;;;:::o;11019:260:1:-;11177:9;11165:8;:21;;11157:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11228:10;:19;;:44;11248:23;11261:9;11248:8;:12;;:23;;;;:::i;:::-;11228:44;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11228:44:1;11019:260;;;:::o;1693:458:14:-;1751:7;1996:1;1991;:6;1987:45;;;2020:1;2013:8;;;;1987:45;2042:9;2058:1;2054;:5;2042:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:1;2136:8;;;1693:458;;;;;:::o;50:1345:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./Account.sol\";\n\ncontract AuthKeyMetaTxAccount is Account {\n\n    /// @dev Execute an authKey meta transaction\n    /// @param _destination Destination of the transaction\n    /// @param _data Data of the transaction\n    /// @param _value Value of the transaction\n    /// @param _nonce Nonce of the transaction\n    /// @param _gasLimit Gas limit of the transaction\n    /// @param _transactionDataSignature Signed tx data\n    function executeAuthKeyMetaTx(\n        address _destination,\n        bytes memory _data,\n        uint256 _value,\n        uint256 _nonce,\n        uint256 _gasLimit,\n        bytes memory _transactionDataSignature\n    )\n        public\n        returns (bytes memory)\n    {\n        uint256 startGas = gasleft();\n\n        bytes32 _txDataMessageHash = keccak256(abi.encodePacked(\n            address(this),\n            msg.sig,\n            CHAIN_ID,\n            _destination,\n            _data,\n            _value,\n            _nonce,\n            tx.gasprice,\n            _gasLimit\n        )).toEthSignedMessageHash();\n\n        address transactionDataSigner = _validateAuthKeyMetaTxSigs(\n            _txDataMessageHash, _transactionDataSignature\n        );\n\n        bytes memory response = _executeTransactionWithRefund(\n            _nonce, _destination, _value, _data, tx.gasprice, _gasLimit, startGas\n        );\n\n        return response;\n    }\n}",
  "sourcePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol",
  "ast": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol",
    "exportedSymbols": {
      "AuthKeyMetaTxAccount": [
        889
      ]
    },
    "id": 890,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 817,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "./Account.sol",
        "id": 818,
        "nodeType": "ImportDirective",
        "scope": 890,
        "sourceUnit": 816,
        "src": "25:23:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 819,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "83:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 820,
            "nodeType": "InheritanceSpecifier",
            "src": "83:7:2"
          }
        ],
        "contractDependencies": [
          815,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 889,
        "linearizedBaseContracts": [
          889,
          815,
          4673
        ],
        "name": "AuthKeyMetaTxAccount",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 887,
              "nodeType": "Block",
              "src": "722:671:2",
              "statements": [
                {
                  "assignments": [
                    838
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 838,
                      "name": "startGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "732:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 837,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "732:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 841,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 839,
                      "name": "gasleft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4681,
                      "src": "751:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "751:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "732:28:2"
                },
                {
                  "assignments": [
                    843
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 843,
                      "name": "_txDataMessageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "771:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 842,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "771:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 864,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 848,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4714,
                                    "src": "848:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_AuthKeyMetaTxAccount_$889",
                                      "typeString": "contract AuthKeyMetaTxAccount"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_AuthKeyMetaTxAccount_$889",
                                      "typeString": "contract AuthKeyMetaTxAccount"
                                    }
                                  ],
                                  "id": 847,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "840:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "840:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 850,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4688,
                                  "src": "867:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 851,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sig",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "867:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 852,
                                "name": "CHAIN_ID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 88,
                                "src": "888:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 853,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 822,
                                "src": "910:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 854,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 824,
                                "src": "936:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 855,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 826,
                                "src": "955:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 856,
                                "name": "_nonce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 828,
                                "src": "975:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 857,
                                  "name": "tx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4700,
                                  "src": "995:2:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_transaction",
                                    "typeString": "tx"
                                  }
                                },
                                "id": 858,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "gasprice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "995:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 859,
                                "name": "_gasLimit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 830,
                                "src": "1020:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 845,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4675,
                                "src": "810:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "810:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 860,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "810:229:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 844,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4682,
                          "src": "800:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "800:240:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4041,
                      "src": "800:263:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "800:265:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "771:294:2"
                },
                {
                  "assignments": [
                    866
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 866,
                      "name": "transactionDataSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "1076:29:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 865,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1076:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 871,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 868,
                        "name": "_txDataMessageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 843,
                        "src": "1148:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 869,
                        "name": "_transactionDataSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 832,
                        "src": "1168:25:2",
                        "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": 867,
                      "name": "_validateAuthKeyMetaTxSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 619,
                      "src": "1108:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) view returns (address)"
                      }
                    },
                    "id": 870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1108:95:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1076:127:2"
                },
                {
                  "assignments": [
                    873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 873,
                      "name": "response",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "1214:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 872,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1214:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 884,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 875,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 828,
                        "src": "1281:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "1289:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 877,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 826,
                        "src": "1303:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 878,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "1311:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 879,
                          "name": "tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4700,
                          "src": "1318:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_transaction",
                            "typeString": "tx"
                          }
                        },
                        "id": 880,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gasprice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1318:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 881,
                        "name": "_gasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 830,
                        "src": "1331:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 882,
                        "name": "startGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 838,
                        "src": "1342:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 874,
                      "name": "_executeTransactionWithRefund",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 762,
                      "src": "1238:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256,address,uint256,bytes memory,uint256,uint256,uint256) returns (bytes memory)"
                      }
                    },
                    "id": 883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1238:122:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1214:146:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 885,
                    "name": "response",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 873,
                    "src": "1378:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 836,
                  "id": 886,
                  "nodeType": "Return",
                  "src": "1371:15:2"
                }
              ]
            },
            "documentation": "@dev Execute an authKey meta transaction\n @param _destination Destination of the transaction\n @param _data Data of the transaction\n @param _value Value of the transaction\n @param _nonce Nonce of the transaction\n @param _gasLimit Gas limit of the transaction\n @param _transactionDataSignature Signed tx data",
            "id": 888,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeAuthKeyMetaTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 833,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 822,
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "494:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "494:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 824,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "524:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 823,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "524:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 826,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "552:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "552:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 828,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "576:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "576:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 830,
                  "name": "_gasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "600:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 829,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 832,
                  "name": "_transactionDataSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "627:38:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 831,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "627:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "484:187:2"
            },
            "returnParameters": {
              "id": 836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 835,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "704:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 834,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "704:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "703:14:2"
            },
            "scope": 889,
            "src": "455:938:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 890,
        "src": "50:1345:2"
      }
    ],
    "src": "0:1395:2"
  },
  "legacyAST": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/AuthKeyMetaTxAccount.sol",
    "exportedSymbols": {
      "AuthKeyMetaTxAccount": [
        889
      ]
    },
    "id": 890,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 817,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "./Account.sol",
        "id": 818,
        "nodeType": "ImportDirective",
        "scope": 890,
        "sourceUnit": 816,
        "src": "25:23:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 819,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "83:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 820,
            "nodeType": "InheritanceSpecifier",
            "src": "83:7:2"
          }
        ],
        "contractDependencies": [
          815,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 889,
        "linearizedBaseContracts": [
          889,
          815,
          4673
        ],
        "name": "AuthKeyMetaTxAccount",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 887,
              "nodeType": "Block",
              "src": "722:671:2",
              "statements": [
                {
                  "assignments": [
                    838
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 838,
                      "name": "startGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "732:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 837,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "732:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 841,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 839,
                      "name": "gasleft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4681,
                      "src": "751:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "751:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "732:28:2"
                },
                {
                  "assignments": [
                    843
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 843,
                      "name": "_txDataMessageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "771:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 842,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "771:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 864,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 848,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4714,
                                    "src": "848:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_AuthKeyMetaTxAccount_$889",
                                      "typeString": "contract AuthKeyMetaTxAccount"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_AuthKeyMetaTxAccount_$889",
                                      "typeString": "contract AuthKeyMetaTxAccount"
                                    }
                                  ],
                                  "id": 847,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "840:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "840:13:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 850,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4688,
                                  "src": "867:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 851,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sig",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "867:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 852,
                                "name": "CHAIN_ID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 88,
                                "src": "888:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 853,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 822,
                                "src": "910:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 854,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 824,
                                "src": "936:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 855,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 826,
                                "src": "955:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 856,
                                "name": "_nonce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 828,
                                "src": "975:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 857,
                                  "name": "tx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4700,
                                  "src": "995:2:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_transaction",
                                    "typeString": "tx"
                                  }
                                },
                                "id": 858,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "gasprice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "995:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 859,
                                "name": "_gasLimit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 830,
                                "src": "1020:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 845,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4675,
                                "src": "810:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "810:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 860,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "810:229:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 844,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4682,
                          "src": "800:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 861,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "800:240:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4041,
                      "src": "800:263:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "800:265:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "771:294:2"
                },
                {
                  "assignments": [
                    866
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 866,
                      "name": "transactionDataSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "1076:29:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 865,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1076:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 871,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 868,
                        "name": "_txDataMessageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 843,
                        "src": "1148:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 869,
                        "name": "_transactionDataSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 832,
                        "src": "1168:25:2",
                        "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": 867,
                      "name": "_validateAuthKeyMetaTxSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 619,
                      "src": "1108:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) view returns (address)"
                      }
                    },
                    "id": 870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1108:95:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1076:127:2"
                },
                {
                  "assignments": [
                    873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 873,
                      "name": "response",
                      "nodeType": "VariableDeclaration",
                      "scope": 887,
                      "src": "1214:21:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 872,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1214:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 884,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 875,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 828,
                        "src": "1281:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "1289:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 877,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 826,
                        "src": "1303:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 878,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "1311:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 879,
                          "name": "tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4700,
                          "src": "1318:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_transaction",
                            "typeString": "tx"
                          }
                        },
                        "id": 880,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gasprice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1318:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 881,
                        "name": "_gasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 830,
                        "src": "1331:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 882,
                        "name": "startGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 838,
                        "src": "1342:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 874,
                      "name": "_executeTransactionWithRefund",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 762,
                      "src": "1238:29:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint256,address,uint256,bytes memory,uint256,uint256,uint256) returns (bytes memory)"
                      }
                    },
                    "id": 883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1238:122:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1214:146:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 885,
                    "name": "response",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 873,
                    "src": "1378:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 836,
                  "id": 886,
                  "nodeType": "Return",
                  "src": "1371:15:2"
                }
              ]
            },
            "documentation": "@dev Execute an authKey meta transaction\n @param _destination Destination of the transaction\n @param _data Data of the transaction\n @param _value Value of the transaction\n @param _nonce Nonce of the transaction\n @param _gasLimit Gas limit of the transaction\n @param _transactionDataSignature Signed tx data",
            "id": 888,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeAuthKeyMetaTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 833,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 822,
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "494:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "494:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 824,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "524:18:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 823,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "524:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 826,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "552:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "552:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 828,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "576:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "576:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 830,
                  "name": "_gasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "600:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 829,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 832,
                  "name": "_transactionDataSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "627:38:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 831,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "627:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "484:187:2"
            },
            "returnParameters": {
              "id": 836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 835,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 888,
                  "src": "704:12:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 834,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "704:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "703:14:2"
            },
            "scope": 889,
            "src": "455:938:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 890,
        "src": "50:1345:2"
      }
    ],
    "src": "0:1395:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-07-12T19:22:56.360Z",
  "devdoc": {
    "methods": {
      "addAuthKey(address)": {
        "details": "Add an auth key to the list of auth keys",
        "params": {
          "_authKey": "Address of the auth key to add"
        }
      },
      "addMultipleAuthKeys(address[])": {
        "details": "Add multiple auth keys to the list of auth keys",
        "params": {
          "_authKeys": "Array of addresses to add to the auth keys list"
        }
      },
      "executeAuthKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes)": {
        "details": "Execute an authKey meta transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_gasLimit": "Gas limit of the transaction",
          "_nonce": "Nonce of the transaction",
          "_transactionDataSignature": "Signed tx data",
          "_value": "Value of the transaction"
        }
      },
      "executeTransaction(uint256,address,uint256,bytes)": {
        "details": "Execute a transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_nonce": "Nonce of the transaction",
          "_value": "Value of the transaction"
        }
      },
      "getAuthKeysArrayLength()": {
        "details": "Return the length of the authKeysArray"
      },
      "removeAuthKey(address)": {
        "details": "Remove an auth key from the list of auth keys",
        "params": {
          "_authKey": "Address of the auth key to remove"
        }
      },
      "removeMultipleAuthKeys(address[])": {
        "details": "Remove multiple auth keys to the list of auth keys",
        "params": {
          "_authKeys": "Array of addresses to remove to the auth keys list"
        }
      },
      "swapAuthKeys(address,address)": {
        "details": "Swap one authKey for a non-authKey",
        "params": {
          "_newAuthKey": "A non-existing authKey",
          "_oldAuthKey": "An existing authKey"
        }
      },
      "swapMultipleAuthKeys(address[],address[])": {
        "details": "Swap multiple auth keys to the list of auth keys",
        "params": {
          "_newAuthKeys": "Array of addresses to add to the auth keys list",
          "_oldAuthKeys": "Array of addresses to remove to the auth keys list"
        }
      },
      "validateLoginKeyMetaTxSigs(bytes32,bytes,bytes)": {
        "details": "Validate signatures from an AuthKeyMetaTx",
        "params": {
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "_transactionDataSignature": "Signed tx data",
          "_txDataMessageHash": "Ethereum signed message of the transaction"
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "executeTransaction(uint256,address,uint256,bytes)": {
        "notice": "This is to be called directly by an AuthKey"
      }
    }
  }
}