{
  "contractName": "LoginKeyMetaTxAccount",
  "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": "getCurrentDay",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "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": true,
      "inputs": [],
      "name": "dailyLimit",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "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": "",
          "type": "uint256"
        }
      ],
      "name": "dailyLimitTracker",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "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": "_newDailyLimit",
          "type": "uint256"
        }
      ],
      "name": "changeDailyLimit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "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": "authKey",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newDailyLimit",
          "type": "uint256"
        }
      ],
      "name": "DailyLimitChanged",
      "type": "event"
    },
    {
      "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": true,
      "inputs": [
        {
          "name": "transactionDataSigner",
          "type": "address"
        },
        {
          "name": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "isValidLoginKey",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "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": "_loginKeyAuthorizationSignature",
          "type": "bytes"
        }
      ],
      "name": "executeLoginKeyMetaTx",
      "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\":\"getCurrentDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"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\":true,\"inputs\":[],\"name\":\"dailyLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"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\":\"_destination\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_nonce\",\"type\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"name\":\"_transactionDataSignature\",\"type\":\"bytes\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"executeLoginKeyMetaTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_authKey\",\"type\":\"address\"}],\"name\":\"removeAuthKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"dailyLimitTracker\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"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\":\"_newDailyLimit\",\"type\":\"uint256\"}],\"name\":\"changeDailyLimit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"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\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionDataSigner\",\"type\":\"address\"},{\"name\":\"_loginKeyAuthorizationSignature\",\"type\":\"bytes\"}],\"name\":\"isValidLoginKey\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authKey\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newDailyLimit\",\"type\":\"uint256\"}],\"name\":\"DailyLimitChanged\",\"type\":\"event\"},{\"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\"}},\"changeDailyLimit(uint256)\":{\"details\":\"Change the daily limit for a user_newDailyLimit New daily limit to set\"},\"executeLoginKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes,bytes)\":{\"details\":\"Execute an loginKey meta transaction\",\"params\":{\"_data\":\"Data of the transaction\",\"_destination\":\"Destination of the transaction\",\"_gasLimit\":\"Gas limit of the transaction\",\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"_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\"},\"getCurrentDay()\":{\"details\":\"Sets the current day for the contract\"},\"isValidLoginKey(address,bytes)\":{\"details\":\"Check if a loginKey is valid\",\"params\":{\"_loginKeyAuthorizationSignature\":\"Signed loginKey\",\"transactionDataSigner\":\"loginKey that signed the tx data\"}},\"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\"},\"initialize()\":{\"notice\":\"Public functions\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/LoginKeyMetaTxAccount.sol\":\"LoginKeyMetaTxAccount\"},\"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/LoginKeyMetaTxAccount.sol\":{\"keccak256\":\"0x9615bc834b3b3b1091a2aeebd0593049c1188a30728198b9906bd2d883ee3b28\",\"urls\":[\"bzzr://0a32526eadd541f615b16f5e8d2774e948ce84cd6e31db185998e2f289629b83\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol\":{\"keccak256\":\"0xc249c743cb81b2fdcb528b736215ed6b34d64a5b675628b07738698265c41f1d\",\"urls\":[\"bzzr://ee1ec6c9c4848aabb0bd1dd387948b2c5b07f0845c8ef86e1a3eae59797ebd10\"]},\"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": "0x608060405234801561001057600080fd5b50612b4b806100206000396000f3fe6080604052600436106101405760003560e01c80638dd17572116100b6578063cd11331e1161006f578063cd11331e14610d4b578063cea0862114610d76578063e0eae14d14610db1578063ed8fc6b814610f26578063f399f1dd14610f8b578063fd54c1221461105057610140565b80638dd17572146108e75780639565389e14610b945780639657b80914610be5578063affed0e014610c34578063b4c2716414610c5f578063bd1a84ab14610cd057610140565b80634c477daf116101085780634c477daf1461050f5780635175ca5e146106b85780635b79818f1461072157806367eeba0c1461087a5780638129fc1c146108a557806385e1f4d0146108bc57610140565b806313f8c578146101865780631626ba7e146101d75780631704db30146102fb57806320433e26146103c05780633e6968b6146104e4575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b34801561019257600080fd5b506101d5600480360360208110156101a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611150565b005b3480156101e357600080fd5b506102a7600480360360408110156101fa57600080fd5b81019080803590602001909291908035906020019064010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611369565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b34801561030757600080fd5b506103be6004803603602081101561031e57600080fd5b810190808035906020019064010000000081111561033b57600080fd5b82018360208201111561034d57600080fd5b8035906020019184602083028401116401000000008311171561036f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611415565b005b3480156103cc57600080fd5b50610490600480360360408110156103e357600080fd5b81019080803590602001909291908035906020019064010000000081111561040a57600080fd5b82018360208201111561041c57600080fd5b8035906020019184600183028401116401000000008311171561043e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061145a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156104f057600080fd5b506104f96114e6565b6040518082815260200191505060405180910390f35b34801561051b57600080fd5b506106766004803603606081101561053257600080fd5b81019080803590602001909291908035906020019064010000000081111561055957600080fd5b82018360208201111561056b57600080fd5b8035906020019184600183028401116401000000008311171561058d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105f057600080fd5b82018360208201111561060257600080fd5b8035906020019184600183028401116401000000008311171561062457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506114fa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106c457600080fd5b50610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a1565b604051808215151515815260200191505060405180910390f35b34801561072d57600080fd5b506108786004803603604081101561074457600080fd5b810190808035906020019064010000000081111561076157600080fd5b82018360208201111561077357600080fd5b8035906020019184602083028401116401000000008311171561079557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107f557600080fd5b82018360208201111561080757600080fd5b8035906020019184602083028401116401000000008311171561082957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506115c1565b005b34801561088657600080fd5b5061088f611692565b6040518082815260200191505060405180910390f35b3480156108b157600080fd5b506108ba611698565b005b3480156108c857600080fd5b506108d16117a6565b6040518082815260200191505060405180910390f35b3480156108f357600080fd5b50610b19600480360360e081101561090a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561094757600080fd5b82018360208201111561095957600080fd5b8035906020019184600183028401116401000000008311171561097b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109fc57600080fd5b820183602082011115610a0e57600080fd5b80359060200191846001830284011164010000000083111715610a3057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a9357600080fd5b820183602082011115610aa557600080fd5b80359060200191846001830284011164010000000083111715610ac757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117ac565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b59578082015181840152602081019050610b3e565b50505050905090810190601f168015610b865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ba057600080fd5b50610be360048036036020811015610bb757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611970565b005b348015610bf157600080fd5b50610c1e60048036036020811015610c0857600080fd5b8101908080359060200190929190505050611ba1565b6040518082815260200191505060405180910390f35b348015610c4057600080fd5b50610c49611bb9565b6040518082815260200191505060405180910390f35b348015610c6b57600080fd5b50610cce60048036036040811015610c8257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bbf565b005b348015610cdc57600080fd5b50610d0960048036036020811015610cf357600080fd5b8101908080359060200190929190505050611dae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d5757600080fd5b50610d60611dea565b6040518082815260200191505060405180910390f35b348015610d8257600080fd5b50610daf60048036036020811015610d9957600080fd5b8101908080359060200190929190505050611df7565b005b348015610dbd57600080fd5b50610eab60048036036080811015610dd457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610e2557600080fd5b820183602082011115610e3757600080fd5b80359060200191846001830284011164010000000083111715610e5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e50565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610eeb578082015181840152602081019050610ed0565b50505050905090810190601f168015610f185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f3257600080fd5b50610f7560048036036020811015610f4957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e71565b6040518082815260200191505060405180910390f35b348015610f9757600080fd5b5061104e60048036036020811015610fae57600080fd5b8101908080359060200190640100000000811115610fcb57600080fd5b820183602082011115610fdd57600080fd5b80359060200191846020830284011164010000000083111715610fff57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611e89565b005b34801561105c57600080fd5b506111366004803603604081101561107357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156110b057600080fd5b8201836020820111156110c257600080fd5b803590602001918460018302840111640100000000831117156110e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ece565b604051808215151515815260200191505060405180910390f35b61115933611f9f565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b60006041825114156113865761137f838361145a565b905061140f565b6082825114156113a15761139a838361209e565b905061140f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b61141e33611f9f565b60008090505b81518110156114565761144982828151811061143c57fe5b6020026020010151611970565b8080600101915050611424565b5050565b60008061147083856121e190919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114d4576320c13b0b60e01b9150506114e0565b63ffffffff60e01b9150505b92915050565b60006201518042816114f457fe5b06905090565b60008061151084866121e190919063ffffffff16565b9050600061157282604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206122e5565b9050600061158985836121e190919063ffffffff16565b905061159481611f9f565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b6115ca33611f9f565b8051825114611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b825181101561168d5761168083828151811061165f57fe5b602002602001015183838151811061167357fe5b6020026020010151611bbf565b8080600101915050611647565b505050565b60385481565b600060019054906101000a900460ff16806116b757506116b661233d565b5b806116ce57506000809054906101000a900460ff16155b611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612af2602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611773576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b678ac7230489e8000060388190555080156117a35760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b606060005a90506117bc8761234e565b600061193a306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548d8d8d8d3a8e604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b602083106118da57805182526020820191506020810190506020830392506118b7565b6001836020036101000a0380198251168184511680821785525050505050509050018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001206122e5565b905060006119498287876114fa565b9050606061195c898d8c8e3a8d8a612412565b905080945050505050979650505050505050565b61197933611f9f565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b6001611a42611dea565b11611ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b1681612455565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60396020528060005260406000206000915090505481565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b611d4781611150565b611d5082611970565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b60338181548110611dbb57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b611e0033611f9f565b806038819055506038543373ffffffffffffffffffffffffffffffffffffffff167fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd259415960405160405180910390a350565b6060611e5b33611f9f565b611e67858585856125a9565b9050949350505050565b60346020528060005260406000206000915090505481565b611e9233611f9f565b60008090505b8151811015611eca57611ebd828281518110611eb057fe5b6020026020010151611150565b8080600101915050611e98565b5050565b600080611f2f84604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206122e5565b90506000611f4684836121e190919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250505092915050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061202957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b600060606120b9600060418561274b9092919063ffffffff16565b905060606120d36041808661274b9092919063ffffffff16565b905060006120ea83876121e190919063ffffffff16565b9050600061214c82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206122e5565b9050600061216384836121e190919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121cb576320c13b0b60e01b955050505050506121db565b63ffffffff60e01b955050505050505b92915050565b600060418251146121f557600090506122df565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561224957600093505050506122df565b601b8160ff16141580156122615750601c8160ff1614155b1561227257600093505050506122df565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122cf573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080303b90506000811491505090565b60006123586114e6565b905060008260396000848152602001908152602001600020540190506038548111156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4461696c79206c696d697420726561636865640000000000000000000000000081525060200191505060405180910390fd5b826039600084815260200190815260200160002060008282540192505081905550505050565b606080612421898989896125a9565b905060006124385a856127d790919063ffffffff16565b9050612445818787612860565b8192505050979650505050505050565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b60016033805490500381101561254c57603360018201815481106124bf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603382815481106124f757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061249f565b5060336001603380549050038154811061256257fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560338054809190600190036125a49190612a7f565b505050565b60606036548514612622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b602083106126845780518252602082019150602081019050602083039250612661565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508161273e57600061270388888888612934565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b60608183018451101561275d57600080fd5b606082156000811461277a576040519150602082016040526127cb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156127b8578051835260208301925060208101905061279b565b50868552601f19601f8301166040525050505b50809150509392505050565b60008282111561284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b808311156128d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742067617320666f7220726566756e64000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61290384866129f990919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561292e573d6000803e3d6000fd5b50505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106129b1578051825260208201915060208101905060208303925061298e565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b600080831415612a0c5760009050612a79565b6000828402905082848281612a1d57fe5b0414612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612ad16021913960400191505060405180910390fd5b809150505b92915050565b815481835581811115612aa657818360005260206000209182019101612aa59190612aab565b5b505050565b612acd91905b80821115612ac9576000816000905550600101612ab1565b5090565b9056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820e3ccc1c2c4a193fdfc76c94730721ffb4da2d789f52948063c0d477383950fcc0029",
  "deployedBytecode": "0x6080604052600436106101405760003560e01c80638dd17572116100b6578063cd11331e1161006f578063cd11331e14610d4b578063cea0862114610d76578063e0eae14d14610db1578063ed8fc6b814610f26578063f399f1dd14610f8b578063fd54c1221461105057610140565b80638dd17572146108e75780639565389e14610b945780639657b80914610be5578063affed0e014610c34578063b4c2716414610c5f578063bd1a84ab14610cd057610140565b80634c477daf116101085780634c477daf1461050f5780635175ca5e146106b85780635b79818f1461072157806367eeba0c1461087a5780638129fc1c146108a557806385e1f4d0146108bc57610140565b806313f8c578146101865780631626ba7e146101d75780631704db30146102fb57806320433e26146103c05780633e6968b6146104e4575b343373ffffffffffffffffffffffffffffffffffffffff167f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60405160405180910390a3005b34801561019257600080fd5b506101d5600480360360208110156101a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611150565b005b3480156101e357600080fd5b506102a7600480360360408110156101fa57600080fd5b81019080803590602001909291908035906020019064010000000081111561022157600080fd5b82018360208201111561023357600080fd5b8035906020019184600183028401116401000000008311171561025557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611369565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b34801561030757600080fd5b506103be6004803603602081101561031e57600080fd5b810190808035906020019064010000000081111561033b57600080fd5b82018360208201111561034d57600080fd5b8035906020019184602083028401116401000000008311171561036f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611415565b005b3480156103cc57600080fd5b50610490600480360360408110156103e357600080fd5b81019080803590602001909291908035906020019064010000000081111561040a57600080fd5b82018360208201111561041c57600080fd5b8035906020019184600183028401116401000000008311171561043e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061145a565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156104f057600080fd5b506104f96114e6565b6040518082815260200191505060405180910390f35b34801561051b57600080fd5b506106766004803603606081101561053257600080fd5b81019080803590602001909291908035906020019064010000000081111561055957600080fd5b82018360208201111561056b57600080fd5b8035906020019184600183028401116401000000008311171561058d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105f057600080fd5b82018360208201111561060257600080fd5b8035906020019184600183028401116401000000008311171561062457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506114fa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106c457600080fd5b50610707600480360360208110156106db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a1565b604051808215151515815260200191505060405180910390f35b34801561072d57600080fd5b506108786004803603604081101561074457600080fd5b810190808035906020019064010000000081111561076157600080fd5b82018360208201111561077357600080fd5b8035906020019184602083028401116401000000008311171561079557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107f557600080fd5b82018360208201111561080757600080fd5b8035906020019184602083028401116401000000008311171561082957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506115c1565b005b34801561088657600080fd5b5061088f611692565b6040518082815260200191505060405180910390f35b3480156108b157600080fd5b506108ba611698565b005b3480156108c857600080fd5b506108d16117a6565b6040518082815260200191505060405180910390f35b3480156108f357600080fd5b50610b19600480360360e081101561090a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561094757600080fd5b82018360208201111561095957600080fd5b8035906020019184600183028401116401000000008311171561097b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109fc57600080fd5b820183602082011115610a0e57600080fd5b80359060200191846001830284011164010000000083111715610a3057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610a9357600080fd5b820183602082011115610aa557600080fd5b80359060200191846001830284011164010000000083111715610ac757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506117ac565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b59578082015181840152602081019050610b3e565b50505050905090810190601f168015610b865780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ba057600080fd5b50610be360048036036020811015610bb757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611970565b005b348015610bf157600080fd5b50610c1e60048036036020811015610c0857600080fd5b8101908080359060200190929190505050611ba1565b6040518082815260200191505060405180910390f35b348015610c4057600080fd5b50610c49611bb9565b6040518082815260200191505060405180910390f35b348015610c6b57600080fd5b50610cce60048036036040811015610c8257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bbf565b005b348015610cdc57600080fd5b50610d0960048036036020811015610cf357600080fd5b8101908080359060200190929190505050611dae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d5757600080fd5b50610d60611dea565b6040518082815260200191505060405180910390f35b348015610d8257600080fd5b50610daf60048036036020811015610d9957600080fd5b8101908080359060200190929190505050611df7565b005b348015610dbd57600080fd5b50610eab60048036036080811015610dd457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610e2557600080fd5b820183602082011115610e3757600080fd5b80359060200191846001830284011164010000000083111715610e5957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e50565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610eeb578082015181840152602081019050610ed0565b50505050905090810190601f168015610f185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f3257600080fd5b50610f7560048036036020811015610f4957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e71565b6040518082815260200191505060405180910390f35b348015610f9757600080fd5b5061104e60048036036020811015610fae57600080fd5b8101908080359060200190640100000000811115610fcb57600080fd5b820183602082011115610fdd57600080fd5b80359060200191846020830284011164010000000083111715610fff57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611e89565b005b34801561105c57600080fd5b506111366004803603604081101561107357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156110b057600080fd5b8201836020820111156110c257600080fd5b803590602001918460018302840111640100000000831117156110e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ece565b604051808215151515815260200191505060405180910390f35b61115933611f9f565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b657920616c72656164792061646465640000000000000000000081525060200191505060405180910390fd5b6001603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060338190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160338054905003603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f9e46251f3febb4bf40cf64591f0efc1d6ac8a9f0b8900b2adaeb83227757058860405160405180910390a250565b60006041825114156113865761137f838361145a565b905061140f565b6082825114156113a15761139a838361209e565b905061140f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c6964205f7369676e617475726573206c656e67746800000000000081525060200191505060405180910390fd5b92915050565b61141e33611f9f565b60008090505b81518110156114565761144982828151811061143c57fe5b6020026020010151611970565b8080600101915050611424565b5050565b60008061147083856121e190919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114d4576320c13b0b60e01b9150506114e0565b63ffffffff60e01b9150505b92915050565b60006201518042816114f457fe5b06905090565b60008061151084866121e190919063ffffffff16565b9050600061157282604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206122e5565b9050600061158985836121e190919063ffffffff16565b905061159481611f9f565b8293505050509392505050565b60356020528060005260406000206000915054906101000a900460ff1681565b6115ca33611f9f565b8051825114611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e70757420617272617973206e6f7420657175616c206c656e67746800000081525060200191505060405180910390fd5b60008090505b825181101561168d5761168083828151811061165f57fe5b602002602001015183838151811061167357fe5b6020026020010151611bbf565b8080600101915050611647565b505050565b60385481565b600060019054906101000a900460ff16806116b757506116b661233d565b5b806116ce57506000809054906101000a900460ff16155b611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612af2602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611773576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b678ac7230489e8000060388190555080156117a35760008060016101000a81548160ff0219169083151502179055505b50565b60375481565b606060005a90506117bc8761234e565b600061193a306000357fffffffff00000000000000000000000000000000000000000000000000000000166037548d8d8d8d3a8e604051602001808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140186805190602001908083835b602083106118da57805182526020820191506020810190506020830392506118b7565b6001836020036101000a0380198251168184511680821785525050505050509050018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001206122e5565b905060006119498287876114fa565b9050606061195c898d8c8e3a8d8a612412565b905080945050505050979650505050505050565b61197933611f9f565b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f41757468206b6579206e6f74207965742061646465640000000000000000000081525060200191505060405180910390fd5b6001611a42611dea565b11611ab5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616e6e6f742072656d6f7665206c6173742061757468206b6579000000000081525060200191505060405180910390fd5b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611b1681612455565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f24a1d50afe4670e7a657fa10322b233e347dc26799afb2d72147a679e693f31f60405160405180910390a250565b60396020528060005260406000206000915090505481565b60365481565b603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4f6c642061757468206b657920646f6573206e6f74206578697374000000000081525060200191505060405180910390fd5b603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e65772061757468206b657920616c726561647920657869737473000000000081525060200191505060405180910390fd5b611d4781611150565b611d5082611970565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f084d1bb6d163e102e9e0ca9dcb761e37f325346ac27c1d8bbfb23c105ffba70660405160405180910390a35050565b60338181548110611dbb57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603380549050905090565b611e0033611f9f565b806038819055506038543373ffffffffffffffffffffffffffffffffffffffff167fca0b3dabefdbd8c72c0a9cf4a6e9d107da897abf036ef3f3f3b010cdd259415960405160405180910390a350565b6060611e5b33611f9f565b611e67858585856125a9565b9050949350505050565b60346020528060005260406000206000915090505481565b611e9233611f9f565b60008090505b8151811015611eca57611ebd828281518110611eb057fe5b6020026020010151611150565b8080600101915050611e98565b5050565b600080611f2f84604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206122e5565b90506000611f4684836121e190919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250505092915050565b60011515603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148061202957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f41757468206b657920697320696e76616c69640000000000000000000000000081525060200191505060405180910390fd5b50565b600060606120b9600060418561274b9092919063ffffffff16565b905060606120d36041808661274b9092919063ffffffff16565b905060006120ea83876121e190919063ffffffff16565b9050600061214c82604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001206122e5565b9050600061216384836121e190919063ffffffff16565b9050603560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121cb576320c13b0b60e01b955050505050506121db565b63ffffffff60e01b955050505050505b92915050565b600060418251146121f557600090506122df565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c111561224957600093505050506122df565b601b8160ff16141580156122615750601c8160ff1614155b1561227257600093505050506122df565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122cf573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080303b90506000811491505090565b60006123586114e6565b905060008260396000848152602001908152602001600020540190506038548111156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4461696c79206c696d697420726561636865640000000000000000000000000081525060200191505060405180910390fd5b826039600084815260200190815260200160002060008282540192505081905550505050565b606080612421898989896125a9565b905060006124385a856127d790919063ffffffff16565b9050612445818787612860565b8192505050979650505050505050565b6000603460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008190505b60016033805490500381101561254c57603360018201815481106124bf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16603382815481106124f757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061249f565b5060336001603380549050038154811061256257fe5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560338054809190600190036125a49190612a7f565b505050565b60606036548514612622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e636f7272656374206e6f6e6365000000000000000000000000000000000081525060200191505060405180910390fd5b603660008154809291906001019190505550600060608573ffffffffffffffffffffffffffffffffffffffff1685856040518082805190602001908083835b602083106126845780518252602082019150602081019050602083039250612661565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508161273e57600061270388888888612934565b90507fe22e3683fe845a34c5adea424d0beb84895f513ea06745002d9d65f90100591a816040518082815260200191505060405180910390a1505b8092505050949350505050565b60608183018451101561275d57600080fd5b606082156000811461277a576040519150602082016040526127cb565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156127b8578051835260208301925060208101905061279b565b50868552601f19601f8301166040525050505b50809150509392505050565b60008282111561284f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b808311156128d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742067617320666f7220726566756e64000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61290384866129f990919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561292e573d6000803e3d6000fd5b50505050565b600084848484604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106129b1578051825260208201915060208101905060208303925061298e565b6001836020036101000a038019825116818451168082178552505050505050905001945050505050604051602081830303815290604052805190602001209050949350505050565b600080831415612a0c5760009050612a79565b6000828402905082848281612a1d57fe5b0414612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612ad16021913960400191505060405180910390fd5b809150505b92915050565b815481835581811115612aa657818360005260206000209182019101612aa59190612aab565b5b505050565b612acd91905b80821115612ac9576000816000905550600101612ab1565b5090565b9056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820e3ccc1c2c4a193fdfc76c94730721ffb4da2d789f52948063c0d477383950fcc0029",
  "sourceMap": "93:2260:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;93:2260:4;;;;;;;",
  "deployedSourceMap": "93:2260:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1286:9:1;1274:10;1260:36;;;;;;;;;;;;93:2260:4;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;:::-;;;;;;;;;;;;;;;;;;;;;;;;;745:102:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;745:102:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8128:735:1;;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;:::-;;103:25:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;103:25:9;;;:::i;:::-;;;;;;;;;;;;;;;;;;;321:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;321:79:9;;;:::i;:::-;;550:23:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;550:23:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1281:1070:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1281:1070:4;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1281:1070:4;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1281:1070:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1281:1070:4;;;;;;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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1281:1070:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1281:1070:4;;;;;;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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1281:1070:4;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1281:1070:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1281:1070:4;;;;;;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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1281:1070:4;;;;;;;;;;;;;;;:::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;1281:1070:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3001:379:1;;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;:::-;;134:52:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;134:52:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;134:52:9;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;524:20:1;;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;:::-;;;;;;;;;;;;;;;;;;;504:184:9;;8:9:-1;5:2;;;30:1;27;20:12;5:2;504:184:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;504:184:9;;;;;;;;;;;;;;;;;:::i;:::-;;1810:301:1;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;419:53;;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;:::-;;335:519:4;;8:9:-1;5:2;;;30:1;27;20:12;5:2;335:519:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;335:519:4;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;335:519:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;335:519:4;;;;;;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;335:519:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;335:519:4;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2225:314:1;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;745:102:9:-;791:7;835:5;817:15;:23;;;;;;810:30;;745:102;:::o;8128:735:1:-;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;103:25:9:-;;;;:::o;321:79::-;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;385:8:9;372:10;:21;;;;1268:14:17;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;321:79:9;:::o;550:23:1:-;;;;:::o;1281:1070:4:-;1585:12;1613:16;1632:9;1613:28;;1651:34;1678:6;1651:26;:34::i;:::-;1696:26;1725:265;1773:4;1792:7;;;;1813:8;;1835:12;1861:5;1880:6;1900;1920:11;1945:9;1735: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;;;1735:229:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1735:229:4;;;1725:240;;;;;;:263;:265::i;:::-;1696:294;;2001:29;2033:128;2073:18;2093:25;2120:31;2033:26;:128::i;:::-;2001:160;;2172:21;2196:122;2239:6;2247:12;2261:6;2269:5;2276:11;2289:9;2300:8;2196:29;:122::i;:::-;2172:146;;2336:8;2329:15;;;;;;1281:1070;;;;;;;;;:::o;3001:379:1:-;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;134:52:9:-;;;;;;;;;;;;;;;;;:::o;524:20:1:-;;;;:::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;504:184:9:-;1088:28:1;1105:10;1088:16;:28::i;:::-;611:14:9;598:10;:27;;;;670:10;;658;640:41;;;;;;;;;;;;504:184;:::o;1810:301:1:-;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;419:53::-;;;;;;;;;;;;;;;;;:::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;335:519:4:-;504:4;524:40;567:97;607:21;577:61;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;577:61:4;;;567:72;;;;;;:95;:97::i;:::-;524:140;;675:27;705:95;759:31;705:32;:40;;:95;;;;:::i;:::-;675:125;;818:8;:29;827:19;818:29;;;;;;;;;;;;;;;;;;;;;;;;;811:36;;;;335:519;;;;:::o;7138:164:1:-;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;1011:298:9:-;1082:18;1103:15;:13;:15::i;:::-;1082:36;;1128:18;1181:6;1149:17;:29;1167:10;1149:29;;;;;;;;;;;;:38;1128:59;;1219:10;;1205;:24;;1197:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1296:6;1263:17;:29;1281:10;1263:29;;;;;;;;;;;;:39;;;;;;;;;;;1011:298;;;:::o;10271:511:1:-;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;6696:343::-;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;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;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;11533:339::-;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;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;93:2260:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"./Account.sol\";\nimport \"../firewall/TransactionLimit.sol\";\n\ncontract LoginKeyMetaTxAccount is Account, TransactionLimit {\n\n    /// @dev Check if a loginKey is valid\n    /// @param transactionDataSigner loginKey that signed the tx data\n    /// @param _loginKeyAuthorizationSignature Signed loginKey\n    function isValidLoginKey(\n        address transactionDataSigner,\n        bytes memory _loginKeyAuthorizationSignature\n    )\n        public\n        view\n        returns (bool)\n    {\n        bytes32 loginKeyAuthorizationMessageHash = keccak256(abi.encodePacked(\n            transactionDataSigner\n        )).toEthSignedMessageHash();\n\n        address authorizationSigner = loginKeyAuthorizationMessageHash.recover(\n            _loginKeyAuthorizationSignature\n        );\n\n        return authKeys[authorizationSigner];\n    }\n\n    /// @dev Execute an loginKey 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    /// @param _loginKeyAuthorizationSignature Signed loginKey\n    function executeLoginKeyMetaTx(\n        address _destination,\n        bytes memory _data,\n        uint256 _value,\n        uint256 _nonce,\n        uint256 _gasLimit,\n        bytes memory _transactionDataSignature,\n        bytes memory _loginKeyAuthorizationSignature\n    )\n        public\n        returns (bytes memory)\n    {\n        uint256 startGas = gasleft();\n        checkDailyTransactionLimit(_value);\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 = validateLoginKeyMetaTxSigs(\n            _txDataMessageHash, _transactionDataSignature, _loginKeyAuthorizationSignature\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/LoginKeyMetaTxAccount.sol",
  "ast": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/LoginKeyMetaTxAccount.sol",
    "exportedSymbols": {
      "LoginKeyMetaTxAccount": [
        1085
      ]
    },
    "id": 1086,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 971,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "./Account.sol",
        "id": 972,
        "nodeType": "ImportDirective",
        "scope": 1086,
        "sourceUnit": 816,
        "src": "25:23:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol",
        "file": "../firewall/TransactionLimit.sol",
        "id": 973,
        "nodeType": "ImportDirective",
        "scope": 1086,
        "sourceUnit": 2025,
        "src": "49:42:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 974,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "127:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 975,
            "nodeType": "InheritanceSpecifier",
            "src": "127:7:4"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 976,
              "name": "TransactionLimit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2024,
              "src": "136:16:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TransactionLimit_$2024",
                "typeString": "contract TransactionLimit"
              }
            },
            "id": 977,
            "nodeType": "InheritanceSpecifier",
            "src": "136:16:4"
          }
        ],
        "contractDependencies": [
          815,
          2024,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1085,
        "linearizedBaseContracts": [
          1085,
          2024,
          815,
          4673
        ],
        "name": "LoginKeyMetaTxAccount",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1008,
              "nodeType": "Block",
              "src": "514:340:4",
              "statements": [
                {
                  "assignments": [
                    987
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 987,
                      "name": "loginKeyAuthorizationMessageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1008,
                      "src": "524:40:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 986,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "524:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 996,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 991,
                                "name": "transactionDataSigner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 979,
                                "src": "607:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 989,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4675,
                                "src": "577:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "577:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 992,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "577:61:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 988,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4682,
                          "src": "567:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "567:72:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4041,
                      "src": "567:95:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "567:97:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "524:140:4"
                },
                {
                  "assignments": [
                    998
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 998,
                      "name": "authorizationSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1008,
                      "src": "675:27:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 997,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "675:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1001,
                        "name": "_loginKeyAuthorizationSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 981,
                        "src": "759:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 999,
                        "name": "loginKeyAuthorizationMessageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 987,
                        "src": "705:32:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4025,
                      "src": "705:40:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 1002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "705:95:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "675:125:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1004,
                      "name": "authKeys",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "818:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 1006,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1005,
                      "name": "authorizationSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 998,
                      "src": "827:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "818:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 985,
                  "id": 1007,
                  "nodeType": "Return",
                  "src": "811:36:4"
                }
              ]
            },
            "documentation": "@dev Check if a loginKey is valid\n @param transactionDataSigner loginKey that signed the tx data\n @param _loginKeyAuthorizationSignature Signed loginKey",
            "id": 1009,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValidLoginKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 979,
                  "name": "transactionDataSigner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "369:29:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 978,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "369:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 981,
                  "name": "_loginKeyAuthorizationSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "408:44:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 980,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "408:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "359:99:4"
            },
            "returnParameters": {
              "id": 985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 984,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "504:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 983,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "504:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "503:6:4"
            },
            "scope": 1085,
            "src": "335:519:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1083,
              "nodeType": "Block",
              "src": "1603:748:4",
              "statements": [
                {
                  "assignments": [
                    1029
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1029,
                      "name": "startGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "1613:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1028,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1613:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1032,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1030,
                      "name": "gasleft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4681,
                      "src": "1632:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1632:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1613:28:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1034,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "1678:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1033,
                      "name": "checkDailyTransactionLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2023,
                      "src": "1651:26:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1651:34:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1036,
                  "nodeType": "ExpressionStatement",
                  "src": "1651:34:4"
                },
                {
                  "assignments": [
                    1038
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1038,
                      "name": "_txDataMessageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "1696:26:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1037,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1696:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1059,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1043,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4718,
                                    "src": "1773:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_LoginKeyMetaTxAccount_$1085",
                                      "typeString": "contract LoginKeyMetaTxAccount"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_LoginKeyMetaTxAccount_$1085",
                                      "typeString": "contract LoginKeyMetaTxAccount"
                                    }
                                  ],
                                  "id": 1042,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1765:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 1044,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1765:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1045,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4688,
                                  "src": "1792:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1046,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sig",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1792:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1047,
                                "name": "CHAIN_ID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 88,
                                "src": "1813:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1048,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1011,
                                "src": "1835:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1049,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1013,
                                "src": "1861:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1050,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1015,
                                "src": "1880:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1051,
                                "name": "_nonce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1017,
                                "src": "1900:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1052,
                                  "name": "tx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4700,
                                  "src": "1920:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_transaction",
                                    "typeString": "tx"
                                  }
                                },
                                "id": 1053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "gasprice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1920:11:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1054,
                                "name": "_gasLimit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1019,
                                "src": "1945:9:4",
                                "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": 1040,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4675,
                                "src": "1735:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 1041,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1735:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 1055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1735:229:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1039,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4682,
                          "src": "1725:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1725:240:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1057,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4041,
                      "src": "1725:263:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 1058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1725:265:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1696:294:4"
                },
                {
                  "assignments": [
                    1061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1061,
                      "name": "transactionDataSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "2001:29:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1060,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2001:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1067,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1063,
                        "name": "_txDataMessageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1038,
                        "src": "2073:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1064,
                        "name": "_transactionDataSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1021,
                        "src": "2093:25:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1065,
                        "name": "_loginKeyAuthorizationSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1023,
                        "src": "2120:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1062,
                      "name": "validateLoginKeyMetaTxSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 662,
                      "src": "2033:26:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory,bytes memory) view returns (address)"
                      }
                    },
                    "id": 1066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2033:128:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2001:160:4"
                },
                {
                  "assignments": [
                    1069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1069,
                      "name": "response",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "2172:21:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1068,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2172:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1080,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1071,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1017,
                        "src": "2239:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1072,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1011,
                        "src": "2247:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1073,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "2261:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1074,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1013,
                        "src": "2269:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1075,
                          "name": "tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4700,
                          "src": "2276:2:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_transaction",
                            "typeString": "tx"
                          }
                        },
                        "id": 1076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gasprice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2276:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1077,
                        "name": "_gasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1019,
                        "src": "2289:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1078,
                        "name": "startGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1029,
                        "src": "2300:8:4",
                        "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": 1070,
                      "name": "_executeTransactionWithRefund",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 762,
                      "src": "2196:29:4",
                      "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": 1079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2196:122:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2172:146:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1081,
                    "name": "response",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1069,
                    "src": "2336:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1027,
                  "id": 1082,
                  "nodeType": "Return",
                  "src": "2329:15:4"
                }
              ]
            },
            "documentation": "@dev Execute an loginKey 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 @param _loginKeyAuthorizationSignature Signed loginKey",
            "id": 1084,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeLoginKeyMetaTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1011,
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1321:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1321:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1013,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1351:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1012,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1351:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1015,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1379:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1014,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1379:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1017,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1403:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1016,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1403:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1019,
                  "name": "_gasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1427:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1427:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1021,
                  "name": "_transactionDataSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1454:38:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1020,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1454:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1023,
                  "name": "_loginKeyAuthorizationSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1502:44:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1022,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1502:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1311:241:4"
            },
            "returnParameters": {
              "id": 1027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1026,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1585:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1025,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1585:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1584:14:4"
            },
            "scope": 1085,
            "src": "1281:1070:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1086,
        "src": "93:2260:4"
      }
    ],
    "src": "0:2353:4"
  },
  "legacyAST": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/LoginKeyMetaTxAccount.sol",
    "exportedSymbols": {
      "LoginKeyMetaTxAccount": [
        1085
      ]
    },
    "id": 1086,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 971,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/account/Account.sol",
        "file": "./Account.sol",
        "id": 972,
        "nodeType": "ImportDirective",
        "scope": 1086,
        "sourceUnit": 816,
        "src": "25:23:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/firewall/TransactionLimit.sol",
        "file": "../firewall/TransactionLimit.sol",
        "id": 973,
        "nodeType": "ImportDirective",
        "scope": 1086,
        "sourceUnit": 2025,
        "src": "49:42:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 974,
              "name": "Account",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 815,
              "src": "127:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Account_$815",
                "typeString": "contract Account"
              }
            },
            "id": 975,
            "nodeType": "InheritanceSpecifier",
            "src": "127:7:4"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 976,
              "name": "TransactionLimit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2024,
              "src": "136:16:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TransactionLimit_$2024",
                "typeString": "contract TransactionLimit"
              }
            },
            "id": 977,
            "nodeType": "InheritanceSpecifier",
            "src": "136:16:4"
          }
        ],
        "contractDependencies": [
          815,
          2024,
          4673
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1085,
        "linearizedBaseContracts": [
          1085,
          2024,
          815,
          4673
        ],
        "name": "LoginKeyMetaTxAccount",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1008,
              "nodeType": "Block",
              "src": "514:340:4",
              "statements": [
                {
                  "assignments": [
                    987
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 987,
                      "name": "loginKeyAuthorizationMessageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1008,
                      "src": "524:40:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 986,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "524:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 996,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 991,
                                "name": "transactionDataSigner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 979,
                                "src": "607:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 989,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4675,
                                "src": "577:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "577:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 992,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "577:61:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 988,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4682,
                          "src": "567:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "567:72:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4041,
                      "src": "567:95:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "567:97:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "524:140:4"
                },
                {
                  "assignments": [
                    998
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 998,
                      "name": "authorizationSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1008,
                      "src": "675:27:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 997,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "675:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1001,
                        "name": "_loginKeyAuthorizationSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 981,
                        "src": "759:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 999,
                        "name": "loginKeyAuthorizationMessageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 987,
                        "src": "705:32:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4025,
                      "src": "705:40:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 1002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "705:95:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "675:125:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1004,
                      "name": "authKeys",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 84,
                      "src": "818:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 1006,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1005,
                      "name": "authorizationSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 998,
                      "src": "827:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "818:29:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 985,
                  "id": 1007,
                  "nodeType": "Return",
                  "src": "811:36:4"
                }
              ]
            },
            "documentation": "@dev Check if a loginKey is valid\n @param transactionDataSigner loginKey that signed the tx data\n @param _loginKeyAuthorizationSignature Signed loginKey",
            "id": 1009,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValidLoginKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 979,
                  "name": "transactionDataSigner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "369:29:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 978,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "369:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 981,
                  "name": "_loginKeyAuthorizationSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "408:44:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 980,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "408:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "359:99:4"
            },
            "returnParameters": {
              "id": 985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 984,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "504:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 983,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "504:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "503:6:4"
            },
            "scope": 1085,
            "src": "335:519:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1083,
              "nodeType": "Block",
              "src": "1603:748:4",
              "statements": [
                {
                  "assignments": [
                    1029
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1029,
                      "name": "startGas",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "1613:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1028,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1613:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1032,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1030,
                      "name": "gasleft",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4681,
                      "src": "1632:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_gasleft_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 1031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1632:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1613:28:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1034,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "1678:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1033,
                      "name": "checkDailyTransactionLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2023,
                      "src": "1651:26:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 1035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1651:34:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1036,
                  "nodeType": "ExpressionStatement",
                  "src": "1651:34:4"
                },
                {
                  "assignments": [
                    1038
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1038,
                      "name": "_txDataMessageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "1696:26:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1037,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1696:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1059,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1043,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4718,
                                    "src": "1773:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_LoginKeyMetaTxAccount_$1085",
                                      "typeString": "contract LoginKeyMetaTxAccount"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_LoginKeyMetaTxAccount_$1085",
                                      "typeString": "contract LoginKeyMetaTxAccount"
                                    }
                                  ],
                                  "id": 1042,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1765:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 1044,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1765:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1045,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4688,
                                  "src": "1792:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1046,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sig",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1792:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1047,
                                "name": "CHAIN_ID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 88,
                                "src": "1813:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1048,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1011,
                                "src": "1835:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1049,
                                "name": "_data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1013,
                                "src": "1861:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1050,
                                "name": "_value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1015,
                                "src": "1880:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1051,
                                "name": "_nonce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1017,
                                "src": "1900:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1052,
                                  "name": "tx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4700,
                                  "src": "1920:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_transaction",
                                    "typeString": "tx"
                                  }
                                },
                                "id": 1053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "gasprice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1920:11:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 1054,
                                "name": "_gasLimit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1019,
                                "src": "1945:9:4",
                                "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": 1040,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4675,
                                "src": "1735:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 1041,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1735:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 1055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1735:229:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 1039,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4682,
                          "src": "1725:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 1056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1725:240:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1057,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4041,
                      "src": "1725:263:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 1058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1725:265:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1696:294:4"
                },
                {
                  "assignments": [
                    1061
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1061,
                      "name": "transactionDataSigner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "2001:29:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1060,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2001:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1067,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1063,
                        "name": "_txDataMessageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1038,
                        "src": "2073:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1064,
                        "name": "_transactionDataSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1021,
                        "src": "2093:25:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1065,
                        "name": "_loginKeyAuthorizationSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1023,
                        "src": "2120:31:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1062,
                      "name": "validateLoginKeyMetaTxSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 662,
                      "src": "2033:26:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory,bytes memory) view returns (address)"
                      }
                    },
                    "id": 1066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2033:128:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2001:160:4"
                },
                {
                  "assignments": [
                    1069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1069,
                      "name": "response",
                      "nodeType": "VariableDeclaration",
                      "scope": 1083,
                      "src": "2172:21:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1068,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2172:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1080,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1071,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1017,
                        "src": "2239:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1072,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1011,
                        "src": "2247:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1073,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "2261:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1074,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1013,
                        "src": "2269:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1075,
                          "name": "tx",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4700,
                          "src": "2276:2:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_transaction",
                            "typeString": "tx"
                          }
                        },
                        "id": 1076,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gasprice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2276:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1077,
                        "name": "_gasLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1019,
                        "src": "2289:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1078,
                        "name": "startGas",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1029,
                        "src": "2300:8:4",
                        "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": 1070,
                      "name": "_executeTransactionWithRefund",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 762,
                      "src": "2196:29:4",
                      "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": 1079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2196:122:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2172:146:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1081,
                    "name": "response",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1069,
                    "src": "2336:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 1027,
                  "id": 1082,
                  "nodeType": "Return",
                  "src": "2329:15:4"
                }
              ]
            },
            "documentation": "@dev Execute an loginKey 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 @param _loginKeyAuthorizationSignature Signed loginKey",
            "id": 1084,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "executeLoginKeyMetaTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1011,
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1321:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1321:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1013,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1351:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1012,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1351:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1015,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1379:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1014,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1379:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1017,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1403:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1016,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1403:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1019,
                  "name": "_gasLimit",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1427:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1427:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1021,
                  "name": "_transactionDataSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1454:38:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1020,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1454:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1023,
                  "name": "_loginKeyAuthorizationSignature",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1502:44:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1022,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1502:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1311:241:4"
            },
            "returnParameters": {
              "id": 1027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1026,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1084,
                  "src": "1585:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1025,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1585:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1584:14:4"
            },
            "scope": 1085,
            "src": "1281:1070:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1086,
        "src": "93:2260:4"
      }
    ],
    "src": "0:2353:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-07-12T19:22:56.370Z",
  "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"
        }
      },
      "changeDailyLimit(uint256)": {
        "details": "Change the daily limit for a user_newDailyLimit New daily limit to set"
      },
      "executeLoginKeyMetaTx(address,bytes,uint256,uint256,uint256,bytes,bytes)": {
        "details": "Execute an loginKey meta transaction",
        "params": {
          "_data": "Data of the transaction",
          "_destination": "Destination of the transaction",
          "_gasLimit": "Gas limit of the transaction",
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "_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"
      },
      "getCurrentDay()": {
        "details": "Sets the current day for the contract"
      },
      "isValidLoginKey(address,bytes)": {
        "details": "Check if a loginKey is valid",
        "params": {
          "_loginKeyAuthorizationSignature": "Signed loginKey",
          "transactionDataSigner": "loginKey that signed the tx data"
        }
      },
      "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"
      },
      "initialize()": {
        "notice": "Public functions"
      }
    }
  }
}